Robot Siguelineas Con Arduino

30
Proyecto Profundiza. IES Cecilio Jiménez PROYECTO PROFUNDIZA ROBÓTICA CON ARDUINO CONSTRUCCIÓN Y PROGRAMACIÓN DE UN ROBOT SIGUE LINEAS IES Cecilio Jiménez Profesor Adolfo J. Pedraza García [email protected] Robótica con arduino: Construcción y programación de un robot sigue líneas Pág. 1

description

Proyecto recopilado de Guadalinex. IES Cecilio Jiménez. Realizado por el Profesor Adolfo Pedraza García.

Transcript of Robot Siguelineas Con Arduino

  • Proyecto Profundiza. IES Cecilio Jimnez

    PROYECTO PROFUNDIZA

    ROBTICA CON ARDUINOCONSTRUCCIN Y PROGRAMACIN DE UN ROBOT SIGUE LINEAS

    IES Cecilio JimnezProfesor Adolfo J. Pedraza Garca

    [email protected]

    Robtica con arduino: Construccin y programacin de un robot sigue lneas Pg. 1

  • Proyecto Profundiza. IES Cecilio Jimnez

    ndice

    1. INTERS DEL PROYECTO........................................................................................3

    2. INTRODUCCIN A LA ROBTICA..........................................................................4

    3. DESCRIPCIN BSICA DE LA TARJETA ARDUINO............................................4

    4. MATERIALES PARA EL ROBOT...............................................................................5

    5. EJEMPLOS BSICOS DE PROGRAMACIN EN ARDUINO................................8

    6. MONTAJE DEL PUENTE EN H PARA EL CONTROL DE LOS MOTORES........12

    7. CONTROL DE LOS MOTORES DC.........................................................................15

    8. IMPLEMENTANDO LOS SENSORES AL ROBOT.................................................20

    9. CONTROLANDO LOS SENSORES INFRARROJOS.............................................23

    10. CONTROLANDO EN PIEZOBUZER Y LOS LEDS..............................................26

    11. PROGRAMA FINAL................................................................................................27

    12. IMGENES Y RESULTADOS FINALES...............................................................30

    Robtica con arduino: Construccin y programacin de un robot sigue lneas Pg. 2

  • Proyecto Profundiza. IES Cecilio Jimnez

    1. INTERS DEL PROYECTO

    Una de los contenidos de tecnologa de 4 ESO es la robtica y el control por ordenador. Estos contenidos encierran en s un campo de estudio muy amplio y cuyas aplicaciones quedan abiertas a la imaginacin.

    El entorno de desarrollo de Arduino forma parte de los programas educativos incluidos en la distribucin Edu de Guadalinex que disponemos en el centro.

    El trabajo en profundidad de estos contenidos en clase requiere disponer de ms tiempo para su estudio y comprensin y pueden resultar difciles para algunos alumnos. No obstante, existen otras razones de peso para no descuidarla:

    Sus aplicaciones son muy motivadoras, resultando unos proyectos innovadores, atractivos y creativos.

    Su puesta en prctica pone en valor los conocimientos tericos de la materia.

    La programacin del robot sienta las bases para continuar esos contenidos en estudios posteriores, carreras tcnicas o formacin profesional.

    Su desarrollo exige buenas dosis del mtodo de cientfico de planteamiento/ensayo/error pero sobre la base de unos conocimientos asentados.

    Anima a los alumnos a crear por ellos mismos a modificar sobre lo hecho y conseguido, adaptndolo a otras necesidades.

    Plantea un plan de trabajo muy motivador y creativo para el alumnado.

    Exige poner en prctica destrezas y conocimientos multidisciplinares.

    Muestra las posibilidades de la tecnologa y sus aplicaciones reales.

    Robtica con arduino: Construccin y programacin de un robot sigue lneas Pg. 3

  • Proyecto Profundiza. IES Cecilio Jimnez

    2. INTRODUCCIN A LA ROBTICAUn robot es una mquina o ingenio electrnico programable, capaz de manipular objetos y

    realizar trabajos, por lo general, en instalaciones industriales.

    La arquitectura de un robot se fundamenta en 3 elementos:

    Sensores: permiten al robot recoger informacin del exterior para que pueda realizar acciones.

    Actuadores: Son dispositivos que proporcionan la fuerza motriz real para las articulaciones del robot. Los actuadores suelen obtener su energa a partir de una de estas tres fuentes: aire comprimido, fluido por presin o electricidad.

    Sistema de control: El sistema de control es el cerebro del robot. Procesa todos los datos de los diferentes sensores y realiza operaciones a travs los actuadores conforme al programa almacenado y bajo la supervisin de un microcontrolador.

    3. DESCRIPCIN BSICA DE LA TARJETA ARDUINO

    Arduino es una plataforma de hardware abierto basada en hardware y software flexibles y fciles de usar. Se trata de una sencilla placa con entradas y salidas (E/S) analgicas y digitales.

    Originalmente estaba pensada para el desarrollo de proyectos artsticos y entornos interactivos, pero debido a su versatilidad y facilidad de uso, se est usando en muchos otros proyectos, incluyendo cada vez ms robots.

    Arduino puede sentir el entorno mediante la recepcin de entradas desde una variedad de sensores y puede actuar en su

    alrededor mediante el control de luces, motores y otros artefactos. El microcontrolador de la placa se programa usando el Arduino Programming Language muy similiar al cdigo C++.

    En la robtica, podemos usar Arduino de 2 formas:

    Arduino usarse como "cerebro" de nuestro robot, ejerciendo de controlador y coordinador del resto de partes del robot.

    Si queremos usar un ordenador ms potente (o un porttil) como cerebro, Arduino puede servir como interfaz de control entre el ordenador y el resto de partes del robot.

    Arduino recoge todos los desordenados detalles de la programacin de microcontrolador y lo encierra en un paquete fcil de usar. Arduino simplifica el proceso de trabajo y es muy apropiado para los estudiantes principiantes de robtica por las siguientes ventajas:

    Robtica con arduino: Construccin y programacin de un robot sigue lneas Pg. 4

  • Proyecto Profundiza. IES Cecilio Jimnez

    Barato: Las placas de Arduino son relativamente baratas y se pueden incluso ensamblar a mano.

    Multiplataforma: El software de Arduino se ejecuta en sistemas operativos Windows, Macintosh OSX y GNU/Linux.

    Entorno de programacin simple y claro.

    Cdigo abierto y software extensible: El software de Arduino est publicado como herramientas de cdigo abierto.

    Hardware abierto y extensible: Los planos de los mdulos estn publicados bajo licencia Creative Commons, por que diseadores experimentados de circuitos pueden hacer su propia versin del mdulo, extendindolo o mejorndolo.

    El significado de los pines de Arduino lo tienes a continuacin:

    4. MATERIALES PARA EL ROBOTLos materiales para la construccin de nuestro robot sigue lneas los hemos adquirido a travs de tiendas online:

    Bricogeek: http://www.bricogeek.com/shop/

    Cooking-hacks: http://www.cooking-hacks.com/

    Onda radio: http://www.ondaradio.es/

    Robtica con arduino: Construccin y programacin de un robot sigue lneas Pg. 5

  • Proyecto Profundiza. IES Cecilio Jimnez

    Componente Imagen Direccin Web

    Motor con reductora 50:1

    http://www.bricogeek.com/shop/motores/115-motor-micro-metal-dc-con-reductora-50-1.html

    Rueda de gomahttp://www.bricogeek.com/shop/robotica/110-rueda-de-goma-32x7mm.html

    Arduino Unohttp://www.bricogeek.com/shop/arduino/305-arduino-uno.html

    Sensores pticos QRD1114http://www.bricogeek.com/shop/sensores/217-sensor-optico-qrd1114.html

    Fundas/soporte motores

    http://www.bricogeek.com/shop/robotica/116-funda-protectora-para-motor-micro-metal.html

    Robtica con arduino: Construccin y programacin de un robot sigue lneas Pg. 6

  • Proyecto Profundiza. IES Cecilio Jimnez

    Rueda loca

    http://www.bricogeek.com/shop/robotica/108-rueda-loca-metalica-3-8.html

    Chip L293D (Puente en H)

    http://www.ondaradio.es/esp/catalogoConsulta.aspx?TextBuscar=L293D

    Zumbador piezo

    http://www.bricogeek.com/shop/componentes/299-zumbador-piezo-12mm.html

    Diodos led 5mm de alta lumninosidad

    (Se puede encontrar en tiendas de electrnica)

    Resistencias de 220 , 330 y 10 k

    (Se puede encontrar en tiendas de electrnica)

    Robtica con arduino: Construccin y programacin de un robot sigue lneas Pg. 7

  • Proyecto Profundiza. IES Cecilio Jimnez

    Cable de alimentacin jack

    http://www.bricogeek.com/shop/cables/331-cable-adaptador-9v-jack.html

    Cables de conexin

    http://www.cooking-hacks.com/index.php/arduino-jumper-cables.html

    (Se puede encontrar en tiendas de electrnica)

    Cable USB (A/B)

    http://www.bricogeek.com/shop/cables/343-cable-usb-a-b.html

    (Se puede encontrar en tiendas de electrnica)

    Tubo Termoretrctil

    http://www.bricogeek.com/shop/cables/386-tubo-termoretractil.html

    (Se puede encontrar en tiendas de electrnica)

    5. EJEMPLOS BSICOS DE PROGRAMACIN EN ARDUINO.

    1. Led intermitente. Se trata de hacer un programa que active un led conectado al pin 13 de forma intermitente durante un tiempo de 1 segundo encendido y 1 segundo apagado. Es el

    Robtica con arduino: Construccin y programacin de un robot sigue lneas Pg. 8

  • Proyecto Profundiza. IES Cecilio Jimnez

    programa que tiene cargado la placa arduino nada ms sacarla de la caja. Los comentarios al programa apararen detrs de la doble barra //. La ejecucin del programa los ignora as que podemos poner todos los que queramos. Leyendo los comentarios de los programas aprenders mucho!

    void setup() //comienza la configuracin de los pines.{ pinMode(13, OUTPUT); //asignamos el pin 13 como salida . }

    void loop() //comienza el bucle.{ digitalWrite(13, HIGH); //activamos el pin 13. delay(1000); //esperamos 1000 milisegundos (=1s) digitalWrite(13, LOW); //apagamos el led. delay(1000); //esperamos 1000 milisegundos.}

    2. Creando una variable. Vamos a crear una variable llamada LED para almacenar en ella el nmero del pin que vamos a utilizar en el programa. Aunque en este caso, dada la sencillez del ejemplo no sera necesario, es una buena prctica cuando tengamos ms dispositivos conectados a la placa arduino, ya que facilita la comprensin de los programas.

    int LED = 13; //creamos una variable llamada LED y le asignamos//el valor 13. Como 13 es un nmero entero por ello se escribe int delante

    void setup() { pinMode(LED, OUTPUT); //Aqu hemos utilizado ya la variable//creada anteriormente, cuando escribimos LED, el programa //interpreta el valor //asignado, 13. }

    void loop() { digitalWrite(LED, HIGH); delay(1000); digitalWrite(LED, LOW); delay(1000);}

    3. Creamos ms variables. Ahora vamos a aadir al programa una variable llamada t_on para guardar en ella el tiempo de encendido del LED, y otra variable t_off para el tiempo de apagado, que sern de 0,5s y 0,1s respectivamente.

    int t_on = 500; //creamos la variable t_on y le asignamos un

    Robtica con arduino: Construccin y programacin de un robot sigue lneas Pg. 9

  • Proyecto Profundiza. IES Cecilio Jimnez

    //valor de 500int t_off = 100; //creamos la variable t_off y le asignamos un//valor de 100 milisegundosint LED = 13;

    void setup() { pinMode(LED, OUTPUT);}

    void loop() { digitalWrite(LED, HIGH); delay(t_on); digitalWrite(LED,LOW); delay(t_off);}

    4. Programando un semforo. Vamos a programar el encendido de tres leds conectados en los pines 4, 5 y 6 correspondientes a las luces rojo, amarilla y verde respectivamente. El tiempo de encendido ser de 3s, 1s y 4s respectivamente.

    void setup() {pinMode(4,OUTPUT); //configuramos los pines 4,5 y 6 como salidaspinMode(5,OUTPUT);pinMode(6,OUTPUT);}

    Robtica con arduino: Construccin y programacin de un robot sigue lneas Pg. 10

  • Proyecto Profundiza. IES Cecilio Jimnez

    void loop(){digitalWrite(4, HIGH); //activamos el pin 4 (led rojo)delay(3000); //esperamos 3 segundosdigitalWrite(4, LOW); //apagamos el led rojodigitalWrite(5, HIGH); //activamos el pin 5 (led amarillo)delay(1000); //esperamos 1 segundodigitalWrite(5,LOW); //apagamos el led amarillodigitalWrite(6,HIGH); //activamos el pin 6 (led verde)delay(4000); //esperamos 4 segundosdigitalWrite(6,LOW); //apagamos el led verde}

    5. Utilizamos un bucle for? En ocasiones puede resultar muy til escribir este tipo de bucle, ejecutando, en pocas lneas de programa, muchas rdenes. Por ejemplo, nos puede servir para acelerar poco a poco un motor hasta llegar a su mxima velocidad. En este caso lo vamos a aplicar para definir los pines 4,5 y 6 como salidas del ejercicio anterior. Su estructura es la siguiente:

    void setup() {for (int i=4;i

  • Proyecto Profundiza. IES Cecilio Jimnez

    6. MONTAJE DEL PUENTE EN H PARA EL CONTROL DE LOS MOTORES

    La tarjeta Arduino proporciona una corriente mxima por canal de 40mA, suficiente para activar pequeos actuadores como leds pero insuficiente para manejar el consumo de un motor de corriente continua. Por ello, es necesario utilizar un chip de potencia para amplificar esas seales de la tarjeta, que adems incorpora unos diodos de proteccin contra los picos inversos de tensin producidos por la desconexin de cargas inductivas.

    Para invertir la direccin del motor sin un nuevo conexionado requiere de un circuito conocido como un PUENTE-H (observa cmo el circuito alrededor del motor est en forma de H).

    Es necesario observar que es fcil hacer un corto de batera al cerrar por descuido los interruptores A y B o cerrando los interruptores C y D. Esto pondra en peligro la batera. Una buena medida para evitarlo es automatizar al mximo el control de los interruptores.

    Para permitir controlar el Puente H al microcontrolador, los interruptores mecnicos deben ser sustituidos por transistores. Observa el empleo de diodos en el circuito. El bobinado en el motor es esencialmente un inductor. Cuando el flujo de corriente en un inductor de repente es cortado, la corriente de pronto no puede ir a 0. Por consiguiente, inducen un voltaje oponindose a esta corriente. Este voltaje puede ser tan alto que

    esto destruya los transistores. Los diodos de retorno proporcionan un camino de vuelta seguro para esta corriente que evita y protege los transistores.

    El puente-H, puede ser realizado con transistores discretos o puede ser comprado como un circuito integrado. Utilizar un circuito integrado ayudar a mantener el proyecto compacto y la lgica interna previene que la batera pueda ser cortocircuitada cono se describi como ms arriba.

    6.1. DESCRIPCIN

    Para conseguir amplificar las seales de control de la tarjeta Arduino, invertir el sentido de giro de los motores mediante puente en H y proteger de las cargas inductivas, utilizamos para ello un chip L293D. Aqu tienes el significado de cada uno de sus 16 pines:

    Robtica con arduino: Construccin y programacin de un robot sigue lneas Pg. 12

    Puente en H El cierre de los interruptores A y D hace que el motor gire adelante.Cerrando los interruptores B y C hace que el motor gire hacia atrs.

  • Proyecto Profundiza. IES Cecilio Jimnez

    El chip L293 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 una patilla para la alimentacin de las cargas que se estn controlando, de forma que dicha alimentacin es independiente de la lgica de control. Con este circuito integrado se puede controlar el sentido de giro de hasta dos motores simultneamente.

    6.2. CARACTERSTICAS DEL CHIP L293D

    Intensidad por canal =600mA Intensidad de pico por canal=1,2 A Proteccin contra sobretemperaturas Proteccin interna contra sobretensiones producidas por cargas inductivas Alimentacin independiente de las cargas y control Alta inmunidad al ruido Tensin de alimentacin de las cargas 36 V Tensin de alimentacin del chip = de 4.5 a 36 V

    Robtica con arduino: Construccin y programacin de un robot sigue lneas Pg. 13

  • Proyecto Profundiza. IES Cecilio Jimnez

    6.3. ESQUEMA PARA CONTROLAR DOS MOTORES

    6.4. ESQUEMA DEL MONTAJE EN PLACA PROTOTIPOS

    Robtica con arduino: Construccin y programacin de un robot sigue lneas Pg. 14

  • Proyecto Profundiza. IES Cecilio Jimnez

    7. CONTROL DE LOS MOTORES DC

    En los siguientes ejemplos y ensayos vamos a introducirnos en la programacin de los motores para conseguir diferentes movimientos bsicos del robot:

    Marcha adelante. Marcha atrs. Giro izquierda. Giro derecha. Rotacin a izquierda sobre su propio eje. Rotacin a derecha sobre su propio eje.

    Una vez que hemos realizado la conexin del chip L293D o puente en H, procedemos a la programacin en el IDE de Arduino:

    1. Calentando motores: Vamos a comprobar el funcionamiento del motor izquierdo, que hemos conectado a los pines 4 y 5 de Arduino Uno. Para su programacin, vamos a utilizar por primera vez las funciones, que son como unas rutinas que por su frecuencia de uso, si las etiquetamos con un nombre, facilitan y estructuran la programacin a la vez que lo simplifican. Su uso es fcil, observa el siguiente ejemplo:

    void setup () { pinMode(4,OUTPUT); //configuramos los pines 4 y 5 como salidas pinMode(5,OUTPUT);}

    void adelante () { digitalWrite(4,LOW); /*Esta sera la configuracin ideal, ya digitalWrite(5,HIGH); que el pin 5 es del tipo PWM } lo que nos permitir variar la velocidad del motor en su avance. Si con esta conexin el motor no gira hacia adelante, entonces habr que invertir la conexin del motor al chip L293D*/

    void paro () { digitalWrite(4,LOW); digitalWrite(5,LOW); }

    void loop () { adelante(); //llamamos a la funcin creadadelay(2000); // esperamos 2 segundos con el motor en marchaparo(); //paramos el motor utilizando la funcin parodelay(1000);}

    Robtica con arduino: Construccin y programacin de un robot sigue lneas Pg. 15

  • Proyecto Profundiza. IES Cecilio Jimnez

    2. Y el motor derecho? Vamos a comprobar el funcionamiento del motor derecho, que hemos conectado a los pines 6 y 7 de Arduino Uno. Volvemos a utilizar las funciones. Observa el siguiente ejemplo:

    void setup () { pinMode(6,OUTPUT); //configuramos los pines 6 y 7 como salidas pinMode(7,OUTPUT);}

    void adelante () { digitalWrite(6,HIGH); /*esta sera la configuracin ideal, ya digitalWrite(7,LOW); que el pin 6 es del tipo PWM } lo que nos permitir variar la velocidad del motor en su avance. Si con esta conexin el motor no gira hacia adelante, entonces habr que invertir la conexin del motor al chip L293D */

    void paro () { digitalWrite(6,LOW); digitalWrite(7,LOW); }

    void loop () { adelante(); //llamamos a la funcin creadadelay(2000); // esperamos 2 segundos con el motor en marchaparo(); //paramos el motor utilizando la funcin parodelay(1000);}

    3. Y ahora los dos! Una vez que hemos comprobados que todo funciona bien y como nosotros queremos, vamos a utilizar los dos motores a la vez y vamos a introducir la funcin atrs:

    void setup () { pinMode(4,OUTPUT); pinMode(5,OUTPUT); pinMode(6,OUTPUT); pinMode(7,OUTPUT);}

    void adelante () { digitalWrite(4,LOW); digitalWrite(5,HIGH); digitalWrite(6,HIGH); digitalWrite(7,LOW); }

    void paro () { digitalWrite(4,LOW);

    Robtica con arduino: Construccin y programacin de un robot sigue lneas Pg. 16

  • Proyecto Profundiza. IES Cecilio Jimnez

    digitalWrite(5,LOW); digitalWrite(6,LOW); digitalWrite(7,LOW); }

    void atras () { digitalWrite(4,HIGH); digitalWrite(5,LOW); digitalWrite(6,LOW); digitalWrite(7,HIGH); }

    void loop () { adelante();delay(2000);paro();delay(1000);atras();delay(2000);paro();delay(1000);}

    4. Y ahora los giros: Como ya puedes entender, para conseguir que el robot gire a la izquierda debes parar el motor de ese lado y mantener en marcha el derecho. Al contrario, para girar a la derecha, debes parar el motor derecho y mantener en marcha el motor izquierdo. Como ejemplo vamos a programar los siguientes movimientos:

    Adelante 2 s Paro 0,5 s Gira a izquierdas 0,25 s Paro 0,5 s Atrs 2 s Paro 0,5 s Gira a derechas 0,25 s Paro 0,5 s

    void setup () { pinMode(4,OUTPUT); pinMode(5,OUTPUT); pinMode(6,OUTPUT); pinMode(7,OUTPUT);}

    void adelante () { digitalWrite(4,LOW); digitalWrite(5,HIGH); digitalWrite(6,HIGH); digitalWrite(7,LOW);

    Robtica con arduino: Construccin y programacin de un robot sigue lneas Pg. 17

  • Proyecto Profundiza. IES Cecilio Jimnez

    }

    void paro () { digitalWrite(4,LOW); digitalWrite(5,LOW); digitalWrite(6,LOW); digitalWrite(7,LOW); }

    void atras () { digitalWrite(4,HIGH); digitalWrite(5,LOW); digitalWrite(6,LOW); digitalWrite(7,HIGH); }

    void giraizquierda () { digitalWrite(4,LOW); //paramos el motor izquierdo digitalWrite(5,LOW); digitalWrite(6,HIGH); //mantenemos el motor derecho en marcha digitalWrite(7,LOW);}

    void giraderecha () { digitalWrite(4,LOW); digitalWrite(5,HIGH); //mantenemos el motor izquierdo en marcha digitalWrite(6,LOW); //paramos el motor derecho digitalWrite(7,LOW);}void loop () { adelante(); delay(2000); paro(); delay(500); giraizquierda(); delay(250); paro(); delay(500); atras(); delay(2000); paro(); delay(500); giraderecha();delay(250); paro(); delay(500);}

    5. Regulando la velocidad: Aplicar toda la energa al motor DC, har que ste, gire a la

    Robtica con arduino: Construccin y programacin de un robot sigue lneas Pg. 18

  • Proyecto Profundiza. IES Cecilio Jimnez

    mxima velocidad y quitando la energa al motor, haremos que el motor deje de girar. El puente-h que hemos comentado antes es capaz de controlar estos dos estados. Para conseguir hacer que el motor pueda girar a velocidades inferiores, puede usarse una tcnica conocida como, Modulacin de Anchura de Pulso (PWM). Para el control adecuado del robot y hacerlo seguir bien la lnea sin perderla, es conveniente utilizar velocidades de giro menores. La tarjeta Arduino Uno integra 6 pines del tipo PWM. Estos pines pueden tomar 256 valores diferentes comprendidos entre 0 y 5V. El controlador consigue proporcionando en realidad una seal digital.

    El PWM es un modo eficiente, para simular una gama de valores analgicos en circuitos digitales. Conmutando rpidamente entre encendido y apagado, se puede simular un valor medio. Se muestran tres seales en la figura.

    Las tres seales comparten la misma frecuencia, pero la anchura de los pulsos es diferente. Por medio de la variacin del tiempo en "alto", podemos hacer que el motor "vea" un valor entre 0V y +5V.

    Para programar una salida analgica, debemos escribir:

    analogWrite(pin,valor);//valor debe estar comprendido entre 0 y 255

    Ejemplo:

    analogWrite(5,100); //activa el pin 5 con un valor de 100, que correspondera al 100/256 = 39% de su voltaje mximo.

    6. Acelerando los motores: si queremos conseguir una aceleracin gradual de la velocidad los motores debemos introducir un concepto nuevo de programacin, el bucle for. Observa el siguiente ejemplo:

    Robtica con arduino: Construccin y programacin de un robot sigue lneas Pg. 19

  • Proyecto Profundiza. IES Cecilio Jimnez

    void acelera () { digitalWrite(4,HIGH); digitalWrite(7,HIGH); for (int i=0;i

  • Proyecto Profundiza. IES Cecilio Jimnez

    Sensores de temperatura Sensores de humedad Sensores emisor/receptor de

    infrarrojos

    Sensores de giro Sensores de aceleracin Sensores de presin, etc. Sensores de presencia

    Por medio de los sensores conseguiremos que nuestro robot sea capaz de seguir una lnea negra. Para ello utilizaremos dos sensores emisor/receptor de infrarrojos del tipo QRD 1114 (tambin es vlido un sensor CNY70). Los colocaremos a una distancia tal que la lnea negra pase justo entre los dos sensores.

    8.2. DESCRPCIN DEL SENSOR DE INFRARROJOS.

    Como ya hemos indicado, utilizaremos unos sensores del tipo QRD 1114. Este sensor consta de un diodo emisor de infrarrojos y de un fototransistor receptor. En total tiene 4 patillas, 2 para el diodo emisor y otras 2 para el receptor.

    El blanco refleja la luz El negro absorbe la luz(receptor en saturacin) (receptor en corte)

    Pin 1 ColectorPin 2 EmisorPin 3 nodoPin 4 Ctodo

    (*) La marca que puedes ver en la imagen, indica la patilla 1 (colector)

    Robtica con arduino: Construccin y programacin de un robot sigue lneas Pg. 21

  • Proyecto Profundiza. IES Cecilio Jimnez

    8.3. CONEXIN DE LOS SENSORES DE INFRARROJOS

    8.4. INTERPRETACIN DE LA LECTURA DEL SENSOR

    Color blanco refleja la luz satura el fototransistor Entrada a 0V LOWColor negro absorbe la luz fototransistor en corte Entrada a 5V HIGH

    Sensor izquierdo

    Sensor derecho Situacin Accin

    LOW LOW Coche en lnea Los dos motores giran adelante

    LOW HIGH Coche se desva a izquierda Girar a derecha

    HIGH LOW Coche se desva a derecha Girar a izquierdaHIGH HIGH Coche llega a meta Parar motores

    Nota: Las pistas del circuito que puedes ver en las galeras web del ltimo apartado, se han realizado con cartulina para las curvas y con cinta aislante en los tramos rectos. Los sensores infrarrojos devuelven lecturas completamente diferentes sobre la cartulina y sobre la cinta aislante, a pesar de que las dos son negras. Por ejemplo, en el monitor serie leemos valores de 36 sobre lo blanco, 890 sobre la cinta aislante y 39! sobre la cartulina negra. Para remediar este inconveniente, repasa con rotulador negro indeleble los tramos de cartulina y voil!, asunto arreglado.

    Robtica con arduino: Construccin y programacin de un robot sigue lneas Pg. 22

  • Proyecto Profundiza. IES Cecilio Jimnez

    9. CONTROLANDO LOS SENSORES INFRARROJOS

    Los sensores de infrarrojos nos van a proporcionar una informacin vital para nuestro robot siguelneas, van a ser sus ojos. Los sensores los conectaremos a las entradas analgicas 0 y 1 de Arduino, aadiendo las resistencias de proteccin correspondientes vistas en el apartado anterior. Una vez que tenemos todo conectado es hora de tomar las lecturas de los sensores.

    Para ello utilizaremos el monitor serie del IDE arduino. Esta ventana permite mostrar, enviar y recibir informacin entre el ordenador y nuestra tarjeta arduino. La utilidad del monitor serie es muy grande para el control de proyectos robticos.

    1. Tomando las lecturas de los sensores: Bien, ya tenemos listos y en su sitio los sensores de infrarrojos QRD 1114. Ahora debemos comprobar si funcionan bien y, lo que es ms importante, las lecturas que arrojan cuando los colocamos sobre una superficie blanca y sobre una superficie negra.

    void setup () { Serial.begin(9600); //iniciamos en monitor serie a una} velocidad de 9600 baudios (bit/s)

    void loop () { int lectura_izq = analogRead(0); //leemos la entrada analgica 0

    y la guardamos en la variable entera lectura_izq

    int lectura_der = analogRead(1); Serial.print("sensor izquierdo: "); //escribimos el texto entre

    en el monitor serie Serial.println(lectura_izq); /*escribimos el valor

    aadiendo un retorno de carro al final de la lnea */

    Serial.print("sensor derecho: "); Serial.println(lectura_der); delay(1000); /*esperamos 1 segundo antes de } realizar un nueva lectura para no

    saturar el puerto serie */

    Robtica con arduino: Construccin y programacin de un robot sigue lneas Pg. 23

  • Proyecto Profundiza. IES Cecilio Jimnez

    Despus de tomar las lecturas de los sensores infrarrojos, observamos que cuando el sensor est sobre blanco da valores bajos, entorno a 35, y cuando el sensor est sobre negro da valores altos, entorno a 890. Como referencia debemos tomar un valor por encima del cual sabremos con seguridad que el sensor est sobre negro, y por lo tanto, que el robot est perdiendo la trayectoria. Nos parece adecuado tomar como referencia un valor de 500. Valores superiores a este, darn la orden de rectificar la trayectoria mediante un giro a derecha o a izquierda segn el caso.

    2. En lnea: Vamos a programar ya lo que ser el ncleo central del control del robot. Debemos tomar las lecturas de los sensores y decidir en funcin de stas, si el robot est en lnea o si est desviado. En cualquiera de los casos, las lecturas debern ir seguidas de una orden correspondiente:

    Sensor izquierdo

    Sensor derecho Situacin Accin

    500 Coche llega a meta Parar motores

    En el programa de control del robot siguelneas cobra una especial relevancia la orden if (si). If es un estamento que se utiliza para probar si una determinada condicin se ha alcanzado, como en nuestro caso, averiguar si un valor analgico est por encima de un cierto nmero. Si la condicin probada es verdadera (se cumple), se ejecutan una serie de operaciones que se escriben dentro de llaves y si la condicin es falta (no se cumple) el programa salta y no ejecuta las operaciones que estn dentro de las llaves. El formato para if es el siguiente:

    if ( condicin ){instrucciones;} Si la condicin es cierta, se ejecutan las rdenes contenidas entre las llaves. Si no es as, el programa salta sobre ellas y contina.

    El programa de control quedara as:

    void setup () { pinMode(4,OUTPUT); pinMode(5,OUTPUT); pinMode(6,OUTPUT); pinMode(7,OUTPUT); } int valorsensor_i; int valorsensor_d;

    Robtica con arduino: Construccin y programacin de un robot sigue lneas Pg. 24

  • Proyecto Profundiza. IES Cecilio Jimnez

    void adelante () { digitalWrite(4,LOW); analogWrite(5,100); analogWrite(6,100); digitalWrite(7,LOW); }

    void paro () { digitalWrite(4,LOW); digitalWrite(5,LOW); digitalWrite(6,LOW); digitalWrite(7,LOW); }

    void gira_der () { digitalWrite(4,LOW); analogWrite(5,80); digitalWrite(6,LOW); digitalWrite(7,LOW); }

    void gira_izq () { digitalWrite(4,LOW); digitalWrite(5,LOW); analogWrite(6,80); digitalWrite(7,LOW); }

    void loop () { int valorsensor_i = analogRead(0); int valorsensor_d = analogRead(1); if (valorsensor_i500) { paro(); } }

    Robtica con arduino: Construccin y programacin de un robot sigue lneas Pg. 25

  • Proyecto Profundiza. IES Cecilio Jimnez

    10. CONTROLANDO EN PIEZOBUZER Y LOS LEDS.

    En nuestro robot, hemos conectado un par de leds de alta intensidad en los pines 12 para el led izquierdo, y en el pin 8 para el derecho. La conexin de estos componentes a la placa arduino no encierra ya ningn misterio. Solo anotar la necesidad de conectar unas resistencias de proteccin para limitar la corriente.

    El piezobuzer lo conectamos al pin 9. Tiene una polaridad claramente serigrafiada en el componente que habr que respetar. Para hacerlo sonar hacemos uso de la funcin tone(). Esta funcin toma los siguiente argumentos:tone(pin,frecuencia,duracion);pin nmero del pin al que est conectado el buzzerfrecuencia genera una seal cuadrada de frecuencia (en Hz) igual a la especificada.Duracin opcional. Puedes poner un valor en milisegundos para la duracin del tono o no poner nada. En este caso, la seal seguir hasta que la orden noTone()

    Ejemplos:int buz=9;

    void aviso() { tone(buz,880,200); //generamos un tono de 880 Hz de 200

    milisegundos de duracin}

    void tonosalida() { for (int i=1;i

  • Proyecto Profundiza. IES Cecilio Jimnez

    digitalWrite(led_d,LOW); digitalWrite(led_i,HIGH); delay(100); digitalWrite(led_i,LOW);} }

    11. PROGRAMA FINALSe ha programado un contador de vueltas, de forma que el robot debe completar 3 giros al

    circuito. Cada vez que pasa por meta el robot emite un pitido y aumenta su contador interno. Una vez que se completa los tres giros, el robot ilumina los leds inferiores de forma intermitente alternativa.int buz=9;int led_i=12;int led_d=8;int valorsensor_i; int valorsensor_d; int vueltas=3;int contador=0;long tiempo;

    void setup () { pinMode(4,OUTPUT); pinMode(5,OUTPUT); pinMode(6,OUTPUT); pinMode(7,OUTPUT); pinMode(buz,OUTPUT); pinMode(led_i,OUTPUT); pinMode(led_d,OUTPUT);} void adelante () { digitalWrite(4,LOW); analogWrite(5,250); analogWrite(6,250); digitalWrite(7,LOW);}

    void led () { for (int i=1;i

  • Proyecto Profundiza. IES Cecilio Jimnez

    }

    void paro () { digitalWrite(4,LOW); digitalWrite(5,LOW); digitalWrite(6,LOW); digitalWrite(7,LOW); }

    void gira_der () { digitalWrite(4,LOW); analogWrite(5,250); digitalWrite(6,LOW); digitalWrite(7,LOW); }

    void gira_izq () { digitalWrite(4,LOW); digitalWrite(5,LOW); analogWrite(6,250); digitalWrite(7,LOW); }

    void aviso() { tone(buz,880,200);delay(200);noTone(buz);}

    void tonosalida() { for (int i=1;i

  • Proyecto Profundiza. IES Cecilio Jimnez

    int valorsensor_i = analogRead(0); int valorsensor_d = analogRead(1); digitalWrite(led_i,HIGH); digitalWrite(led_d,HIGH); if (valorsensor_i500) && contador500 && valorsensor_d>500) && contador==vueltas) { paro(); for(int i=1;i

  • Proyecto Profundiza. IES Cecilio Jimnez

    12. IMGENES Y RESULTADOS FINALES http://www.youtube.com/watch?v=RQ8rT4itIVY http://www.youtube.com/watch?v=26pcZ0fuhDc http://www.youtube.com/watch?v=-zGiToJY4WM https://picasaweb.google.com/103046050225234591647/RobotSigueLineasProyectoProf

    undiza?feat=directlink

    El siguiente robot es un experiencia del profesor surgida a raz del desarrollo del proyecto. Dispone de un snar de distancias montado sobre un servo, un barra de 10 leds conectados a un expansor de puertos por i2c, 6 sensores infrarrojos, brjula electrnica en bus i2c, conector para el control mediante el mando nunchuk de la consola wii, dos pulsadores, un display serie 16x2 caracteres, un piezo buzzer, dos led azules de alta intensidad y dos interruptores para el robot y el display, control por PID.

    https://picasaweb.google.com/103046050225234591647/RobotOter_0?feat=directlink

    Robtica con arduino: Construccin y programacin de un robot sigue lneas Pg. 30

    Detalle del chip puente H Detalle de los sensores

    Montaje del motor en su soporteVista lateral izquierda

    Vista lateral derecha Detalle de las conexiones a Arduino

    1. INTERS DEL PROYECTO2. INTRODUCCIN A LA ROBTICA3. DESCRIPCIN BSICA DE LA TARJETA ARDUINO4. MATERIALES PARA EL ROBOT5. EJEMPLOS BSICOS DE PROGRAMACIN EN ARDUINO.6. MONTAJE DEL PUENTE EN H PARA EL CONTROL DE LOS MOTORES7. CONTROL DE LOS MOTORES DC8. IMPLEMENTANDO LOS SENSORES AL ROBOT9. CONTROLANDO LOS SENSORES INFRARROJOS10. CONTROLANDO EN PIEZOBUZER Y LOS LEDS.11. PROGRAMA FINAL12. IMGENES Y RESULTADOS FINALES