Está en la página 1de 8

Sensor de infrarrojos CNY70 como entrada digital.

El dispositivo CNY70 es un sensor ptico infrarrojo, de un rango de corto


alcance (menos de 5 cm) que se utiliza para detectar colores de objetos y
superficies. Su uso ms comn es para construir pequeos robots siguelneas.
Contiene un emisor de radiacin infrarroja -fotodiodo- y un receptor
-fototransistor-. El fotodiodo emite un haz de radiacin infrarroja, el
fototransistor recibe ese haz de luz cuando se refleja sobre alguna superficie u
objeto.
Dependiendo de la cantidad de luz recibida por el fototransistor el dispositivo
enva una seal de retorno a Arduino.
El sensor CNY70 Puede utilizarse como entrada digital o analgica. En este
ejemplo se ha utilizado como entrada digital para distinguir dos colores: blanco
o negro. Cando el sensor est orientado hacia una superficie u objeto de color
negro ste absorbe gran parte de la luz emitida por el diodo. Entonces el
sensor enviar un valor alto (HIGH 1) a Arduino. A su vez cuando el sensor se
sita sobre una superficie u objeto de color blanco gran parte de la luz emitida
por el diodo ser reflejada al fototransistor. Entonces, el sensor enviar un
valor alto (LOW- 0) a Arduino. El CNY70 tiene cuatro terminales.
Para distinguir los terminales a fin de poder hacer el conexionado
correctamente, tienes que colocar el sensor con la parte del fotodiodo y del
fototransistor hacia arriba y los terminales hacia abajo. Adems, la cara del
sensor que est serigrafiada con el nombre del dispositivo ha de estar situada
en tu derecha, tal y como se muestra en la siguiente imagen.
Una vez identificados los terminales hay que
realizar el conexionado a la protoboard y a
Arduino. Este esquema te servir para hacer
correctamente las conexiones. El pin de Arduino
que se ha usado en este programa ejemplo es el
4. Puedes conectarlo a cualquier otro pin digital.

El sensor
vimos en el
caso de

CNY70 puede utilizarse como entrada digital, como


artculo anterior o como entrada analgica. En el
entrada digital el sensor puede
distinguir entre dos colores. En el caso de
entrada analgica, el sensor devuelve valores
entre 0 y 1023, como cualquier otro sensor
conectado a una entrada analgica de

Arduino.
El
siguiente programa est preparado para
que se
pueda comprobar, a travs del puerto
serie de Arduino, los
valores que devuelve ste en funcin del color
de la superficie u objeto al que est orientado el sensor.
Una vez conocidos qu valores devuelve el CNY70, se podrn disear otros
programas que puedan distinguir diferentes colores.
Se podr observar que los valores devueltos por el sensor varan
sensiblemente en funcin de la distancia que haya entre el sensor y la
superficie u objeto sobre el que est orientado. Por eso, para tener una medida
ms precisa de los valores, se aconseja colocar el CNY70 de forma que la
distancia entre l y la superficie sobre la que se desea determinar el color
permanezca constante.
COXNTRUCCION DE LA BASE DEL ROBOT.
Esta parte del proyecto es muy importante ya que de ella depende la movilidad del robot as como
de su rigidez para soportar los elementos electrnicos que posteriormente se integrarn a el.
Se eligi como soporte un pequeo trozo de acrlico de 3mm
de espesor y aproximadamente 20cm de largo y 10cm de
ancho; el acrlico es muy fcil de manejar de hecho se puede
cortar con un cutter y una regla repasando varias veces sobre
el.
La rueda loca (llamada
graciosamente as) es
una rueda igual a la que
usan los carritos de
supermercado y las sillas de
oficina (igual en concepto, no
fsicamente) esta tiene un
movimiento libre de 360 que
facilita los giros del robot; la
rueda loca implementada en este
proyecto fue construida con
piezas de mecano y una llanta de
tambin se pueden encontrar en
robtica unas muy bonitas y no
continuacin muestro una foto de la rueda.

un carrito de juguete; pero


tiendas de electrnica o
tan pesadas. A

Y por ltimo pero no menos importante la parte de traccin del robot; constituida por los dos motoreductores y sus respectivas ruedas, cada uno de estos puede ser controlado independientemente

y son los que le dan direccin al robot, cabe destacar que si uno gira en sentido opuesto al otro
respectivamente se puede obtener un giro de 360 sobre el eje del robot, lo que permite un amplio
rango de movimiento.
Este es el aspecto final de la construccin del chasis del robot seguidor de lnea que hemos
bautizado BICHIBOT.

DISEO DEL DRIVER PARA LOS MOTORES.


En esta etapa de la construccin del robot BICHIBOT trata sobre el diseo de un controlador
bidireccional para motores de corriente directa, que est constituido de un Circuito Integrado
L293B.
El L293B (datasheet) es un driver de 4 canales capaz de proporcionar una corriente de salida de
hasta 1A por canal. Cada canal es controlado por seales de entrada compatibles TTL y cada
pareja de canales dispone de una seal de habilitacin que desconecta las salidas de los mismos.
Dispone de un pin para la alimentacin de las cargas que se estn controlando, de forma que dicha
alimentacin es independiente de la lgica de control.
La siguiente imagen describe la conexin bsica de un motor al driver y en la tabla se muestra las
seales de control, +Vs es el pin de alimentacin de los motores.

La conexin del circuito aparece en el siguiente diagrama esquemtico, los motores se conectan a
los pines OUT1 y OUT2 para el primer motor y OUT3 y OUT4 para el segundo. Los diodos
(1N4148) que van conectados a los motores son de proteccin contra sobrecorrientes de retorno
debido a la conmutacin de las bobinas de los motores; evitando as un sobrecalentamiento o
posibles daos al driver.

Nota: El diagrama incluye un regulador de voltaje 7805, podemos descartarlo en el diseo ya que
la placa de arduino cuenta con un regulador y pines que entregan 3.3V y 5V pero si se desea
incluir algunos componentes extras es recomendable alimentarlos mediante la salida de este
regulador para no sobrecargar al Arduino.

PROGRAMA PARA EL ROBOT.


El programa hecho para este robot es muy bsico y puede ser modificado para mejorar el control
del robot, se puede agregar auto ajuste de sensibilidad a la luz de los sensores, medidor de nivel
de batera, algn sonido o cualquier otra cosa til en el desempeo del robot.
int Sen1 = 0; //Extremo izquierdo
int Sen2 = 1; //Izquierdo
int Sen3 = 2; //Centro
int Sen4 = 3; //Derecho
int Sen5 = 4; //Extremo Derecho
int Val1 = 0; // Valor de los sensores
int Val2 = 0;
int Val3 = 0;
int Val4 = 0;
int Val5 = 0;
//Control de los motores
int Azul = 6;
int Gris = 9;
int Cafe = 10;
int Negr = 11;
int x = 650; //Diferencia entre negro y blanco (Valor > x = Negro).
int Vel0 = 100;
int Vel1 = 155; // Especificar velocidad de
int Vel2 = 190; // motores en el giro.
int Vel3 = 230;

int Vel = 255;


void setup()
{
pinMode(Azul, OUTPUT);
pinMode(Gris, OUTPUT);
pinMode(Cafe, OUTPUT);
pinMode(Negr, OUTPUT);
Serial.begin(9600);
}
void loop()
{
//Lectura y registro de los valores de los sensores
Val1 = analogRead(Sen1);
Val2 = analogRead(Sen2);
Val3 = analogRead(Sen3);
Val4 = analogRead(Sen4);
Val5 = analogRead(Sen5);
//Direccionamiento del robot
if ((Val1 < x)&&(Val2 < x)&&(Val3 > x)&&(Val4 < x)&&(Val5 < x))
{
analogWrite(Azul, 0);
analogWrite(Gris, 0);
analogWrite(Cafe, Vel);
analogWrite(Negr, Vel);
}
else if ((Val1 < x)&&(Val2 > x)&&(Val3 > x)&&(Val4 < x)&&(Val5 < x))
{
analogWrite(Azul, 0);
analogWrite(Gris, 0);
analogWrite(Cafe, Vel1);
analogWrite(Negr, 0);
}
else if ((Val1 < x)&&(Val2 < x)&&(Val3 > x)&&(Val4 > x)&&(Val5 < x))
{
analogWrite(Azul, 0);
analogWrite(Gris, 0);
analogWrite(Cafe, 0);
analogWrite(Negr, Vel1);
}
else if ((Val1 < x)&&(Val2 < x)&&(Val3 < x)&&(Val4 > x)&&(Val5 < x))
{
analogWrite(Azul, 0);
analogWrite(Gris, 0);
analogWrite(Cafe, 0);
analogWrite(Negr, Vel2);
}
else if ((Val1 < x)&&(Val2 < x)&&(Val3 < x)&&(Val4 > x)&&(Val5 > x))
{
analogWrite(Azul, 0);
analogWrite(Gris, 0);
analogWrite(Cafe, 0);
analogWrite(Negr, Vel3);
}
//*********!!!!!!!!!
else if ((Val1 < x)&&(Val2 < x)&&(Val3 < x)&&(Val4 < x)&&(Val5 > x))

{
analogWrite(Azul, 0);
analogWrite(Gris, 0);
analogWrite(Cafe, 0);
analogWrite(Negr, Vel);
}
else if ((Val1 < x)&&(Val2 > x)&&(Val3 < x)&&(Val4 < x)&&(Val5 < x))
{
analogWrite(Azul, 0);
analogWrite(Gris, 0);
analogWrite(Cafe, Vel2);
analogWrite(Negr, 0);
}
else if ((Val1 > x)&&(Val2 > x)&&(Val3 < x)&&(Val4 < x)&&(Val5 < x))
{
analogWrite(Azul, 0);
analogWrite(Gris, 0);
analogWrite(Cafe, Vel3);
analogWrite(Negr, 0);
}
else if ((Val1 > x)&&(Val2 < x)&&(Val3 < x)&&(Val4 < x)&&(Val5 < x))
{
analogWrite(Azul, 0);
analogWrite(Gris, 0);
analogWrite(Cafe, Vel);
analogWrite(Negr, 0);
}
else if ((Val1 < x)&&(Val2 < x)&&(Val3 > x)&&(Val4 > x)&&(Val5 > x))
{
analogWrite(Azul, 0);
analogWrite(Gris, Vel);
analogWrite(Cafe, 0);
analogWrite(Negr, Vel2);
delay(250);
}
else if ((Val1 > x)&&(Val2 > x)&&(Val3 > x)&&(Val4 < x)&&(Val5 < x))
{
analogWrite(Azul, Vel);
analogWrite(Gris, 0);
analogWrite(Cafe, Vel2);
analogWrite(Negr, 0);
delay(250);
}
else if ((Val1 > x)&&(Val2 < x)&&(Val3 > x)&&(Val4 < x)&&(Val5 < x))
{
analogWrite(Azul, Vel);
analogWrite(Gris, 0);
analogWrite(Cafe, Vel2);
analogWrite(Negr, 0);
delay(250);
}
else if ((Val1 < x)&&(Val2 < x)&&(Val3 > x)&&(Val4 < x)&&(Val5 > x))
{
analogWrite(Azul, 0);
analogWrite(Gris, Vel);
analogWrite(Cafe, 0);

analogWrite(Negr, Vel2);
delay(250);
}
else if ((Val1 > x)&&(Val2 > x)&&(Val3 > x)&&(Val4 > x)&&(Val5 > x))
{
analogWrite(Azul, Vel);
analogWrite(Gris, 0);
analogWrite(Cafe, Vel2);
analogWrite(Negr, 0);
delay(250);
}
else if ((Val1 < x)&&(Val2 < x)&&(Val3 < x)&&(Val4 < x)&&(Val5 < x))
{
analogWrite(Azul, Vel);
analogWrite(Gris, Vel);
analogWrite(Cafe, 0);
analogWrite(Negr, 0);
delay(200);
analogWrite(Azul, 0);
analogWrite(Gris, 0);
analogWrite(Cafe, Vel);
analogWrite(Negr, Vel);
}
}

SENSORES PARA LA DETECCION DE LA LINEA.


Aqu se describe la construccin del sensor que est constituido de 5 QRD1114 (pueden utilizar
CNY70 o algn otro sensor ptico-reflectivo)
Para la polarizacin de estos es necesario un resistor de 220 ohm y uno de 4.7Kohm y los
conectaremos como se muestra en el circuito. Vase datasheet QRD1114.

El diagrama anterior representa la conexin de un solo sensor; es necesario repetir 5 de estos


circuitos. La linea que indica SALIDA es el voltaje que entregara el sensor, que es proporcional a la
cantidad de luz reflejada por alguna superficie y recibida por el fototransistor.
En este caso se han acomodado los QRD1114 de la siguiente manera; pero si asi se cree
conveniente se pueden agregar u omitir sensores.

Una vez montado el circuito y polarizado se puede comprobar


que todos los LEDs infrarrojos de los QRD1114 encienden mediante una cmara digital (podemos
usar la de nuestro celular) y se vern con una luz en un tono violeta.

Para asegurarnos que los fototransistores de los QRD1114 estn trabajando correctamente
deberemos comprobar el voltaje de las salidas. Con una superficie reflectante (un trozo de papel
blanco) deberemos obtener un voltaje superior a 3 volts aproximadamente; en ausencia de algn
objeto que refleje la luz infrarroja emitida por los LEDs mediremos aproximadamente 1 volt, este
valor puede variar dependiendo de la luz del ambiente en el que estemos trabajando, aspecto que
debe ser considerado en la programacin del robot.
Con esto hemos terminado la parte electrnica y mecnica de nuestro robot, resta conectar todo a
nuestro Arduino y comenzar con la programacin.

También podría gustarte