sensor de infrarrojos cny70 como entrada digital y robot

10
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 más común es para construir pequeños robots siguelíneas. Contiene un emisor de radiación infrarroja -fotodiodo- y un receptor -fototransistor-. El fotodiodo emite un haz de radiación 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 envía una señal de retorno a Arduino. El sensor CNY70 Puede utilizarse como entrada digital o analógica. 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 sitúa 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. Además, 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.

Upload: eduardo-pedro

Post on 19-Sep-2015

41 views

Category:

Documents


4 download

DESCRIPTION

de uso en robotica

TRANSCRIPT

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 CNY70 puede utilizarse como entrada digital, como vimos en el artculo anterior o como entrada analgica. En el caso de 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 un carrito de juguete; pero tambin se pueden encontrar en tiendas de electrnica o robtica unas muy bonitas y no tan pesadas. A continuacin muestro una foto de la rueda.

Y por ltimo pero no menos importante la parte de traccin del robot; constituida por los dos moto-reductores 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 izquierdoint Sen2 = 1; //Izquierdoint Sen3 = 2; //Centroint Sen4 = 3; //Derechoint Sen5 = 4; //Extremo Derecho

int Val1 = 0; // Valor de los sensoresint Val2 = 0;int Val3 = 0;int Val4 = 0;int Val5 = 0;//Control de los motoresint 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 deint 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 sensoresVal1 = analogRead(Sen1); Val2 = analogRead(Sen2); Val3 = analogRead(Sen3); Val4 = analogRead(Sen4);Val5 = analogRead(Sen5);//Direccionamiento del robotif ((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.