CNY70 y BUMPERS
Introducción y funcionamiento:
Gracias al conjunto de led-fototransistor CNY70 (Ver su datasheet: cny70.pdf) podremos detectar niveles de luz midiendo el reflejo sobre una superficie ( a unos pocos milímetros de ella).
Los finales de carrera (bumpers) le permitirán al robot detectar objetos cuando choquen contra ellos y el conmutador se active.
Estos datos analógicos debemos convertirlos a señales digitales (0V / 5V) antes de enviarlos a Arduino. Para ello vamos a construir una placa PCB que albergue los materiales necesarios.
En nuestro caso usaremos un CI trigger schimtt, que nos depurará la señal para evitar ruido no deseado. (Ojea el datasheet: datasheet trigger schimtt.pdf)
Así que usaremos 3 CNY (2 para seguir una linea y el 3º para usar un encoder que vaya vigilando las vueltas que dan las ruedas y por tanto nos indique la distancia que ha recorrido), y 2 bumpers situados en los laterales del robot para detectar choques.
Materiales:
- 3 CNY70
- 2 Finales de carrera
- Resistencia 100 Ohms.
- 3 resistencias 22 KOhms.
- 2 resistencias de 10 KOhms.
- 2 resistencias 220 Ohms.
- CI : HEF40106B
- 3 CNY70.
- Conectores hembra redondeados.
Esquema del circuito:
Construcción:
Creamos una placa usando el software RealPCB:
Pincha para descargar el fichero RealPCB: CNYv3.0.pcb
Una vez creada la placa, y soldados los componentes quedará algo parecido a esto:
Las entradas (2 finales de carrera y 3 CNYs) están en la parte superior de la PCB y las salidas en la inferior. La alimentacióin de la placa se hace desde la Arduino con 5v
Una vez finalizada la conectamos a Arduino:

Video Demo:
Ejemplo de programa:
Un código de ejemplo para comprobar la placa y los sensores puede ser el siguiente:
Se basa en 2 CNY de entrada y 2 bumpers. Las salidas de estos, una vez convertidas a señales digitales se conctan a Arduino y unos LEDs conectados a pines como salida digital nos muestran la actividad de los sensores.
/*
* Como tester tenemos un LED en la salida 13.
* Las entradas de Arduino provienen de las salidas digitales provistas por la PCB
*/
int ledPin = 13; // LEDs conectado a las salidas 13, 12, 11 y 10
int ledPin2 = 12;
int ledPin3 = 11;
int ledPin4 = 10;
int inCNY1 = 7; //Pines del 3 al 7 conectados a las salidas de los
int inCNY2 = 6; //CNY y bumpers de la placa PCB
int inFDC1 = 4;
int inFDC2 = 3;
int valCNY1 = 0; // Valores utilizados para depurar las salidas digitales usando el monitor serie
int valCNY2 = 0;
int valFDC1 = 0;
int valFDC2 = 0;
void setup() // Ejecución incial, declaramos las varables
{
pinMode(ledPin, OUTPUT); // Establece los pin como salida
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT);
pinMode(ledPin4, OUTPUT);
pinMode(inCNY1, INPUT); // Establece los pin como entrada
pinMode(inCNY1, INPUT);
pinMode(inCNY2, INPUT);
pinMode(inCNY3, INPUT);
pinMode(inFDC1, INPUT);
pinMode(inFDC2, INPUT);
Serial.begin(9600); // Inicialización del puerto serie a 9600 bauds
}
void loop() // Ejecución en bucle infinito
{
valCNY1= digitalRead(inCNY1); // Lectura de la entrada digital del CNY1
digitalWrite(ledPin, valCNY1); // Escribe el valor en el pin de salida del LED
Serial.print(valCNY1); // Imprimimos el valor digital para verlo por el monitor serie
valCNY2= digitalRead(inCNY2); //Lectura de la entrada digital del CNY2
digitalWrite(ledPin2, valCNY2); // Escribe el valor en el pin de salida del LED
Serial.print(valCNY2); //
valFDC1= digitalRead(inFDC1); //Lectura de la entrada digital del FDC1
digitalWrite(ledPin3, valFDC1); // Escribe el valor en el pin de salida del LED
Serial.print(valFDC1); //
valFDC2= digitalRead(inFDC2); //Lectura de la entrada digital del FDC2
digitalWrite(ledPin4, valFDC2); // Escribe el valor en el pin de salida del LED
Serial.print(valFDC2); //
}
Comments (0)
You don't have permission to comment on this page.