Sie sind auf Seite 1von 30

Proyecto Profundiza.

IES Cecilio Jimnez

PROYECTO PROFUNDIZA
ROBTICA CON ARDUINO
CONSTRUCCIN Y PROGRAMACIN DE UN ROBOT SIGUE LINEAS

IES Cecilio Jimnez


Profesor Adolfo J. Pedraza Garca
adolfo.jpg@gmail.com

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 ROBTICA
Un 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 ROBOT


Los 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

Motor con reductora 50:1

Rueda de goma

Arduino Uno

Sensores pticos QRD1114

Fundas/soporte motores

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

Direccin Web

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

http://www.bricogeek.com/shop/
robotica/110-rueda-de-goma32x7mm.html

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

http://www.bricogeek.com/shop/
sensores/217-sensor-opticoqrd1114.html

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

Pg. 6

Proyecto Profundiza. IES Cecilio Jimnez

Rueda loca

Chip L293D (Puente en H)

Zumbador piezo

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

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

http://www.bricogeek.com/shop/
componentes/299-zumbadorpiezo-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

Cables de conexin

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

http://www.cookinghacks.com/index.php/arduinojumper-cables.html
(Se puede encontrar en tiendas
de electrnica)

http://www.bricogeek.com/shop/
cables/343-cable-usb-a-b.html
Cable USB (A/B)
(Se puede encontrar en tiendas
de electrnica)

Tubo Termoretrctil

http://www.bricogeek.com/shop/
cables/386-tubotermoretractil.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 500
int t_off = 100; //creamos la variable t_off y le asignamos un
//valor de 100 milisegundos
int 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 salidas
pinMode(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 segundos
digitalWrite(4, LOW); //apagamos el led rojo
digitalWrite(5, HIGH); //activamos el pin 5 (led amarillo)
delay(1000); //esperamos 1 segundo
digitalWrite(5,LOW); //apagamos el led amarillo
digitalWrite(6,HIGH); //activamos el pin 6 (led verde)
delay(4000); //esperamos 4 segundos
digitalWrite(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<7;i=i+1) {
pinMode(i,OUTPUT);
}
}
//Para definir el bucle se requieren tres parmetros:
a) definir una variable y un valor inicial
b) definir la condicin para que se repita el bucle (interprtalo
como repite esto mientras que 'i' valga menos de 7)
c) definir el incremento (o decremento) del valor de la variable
en cada repeticin. En este caso 'i' se incrementa en una unidad
en cada repeticin
// el resto del programa continua igual que el anterior.
Tarea: Modifica el programa anterior para conseguir que el led amarillo parpadee 5 veces durante 1
segundo antes de conectar el led rojo.

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

Pg. 11

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).

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.

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

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();
delay(2000);
paro();
delay(1000);
}

//llamamos a la funcin creada


// esperamos 2 segundos con el motor en marcha
//paramos el motor utilizando la funcin paro

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();
delay(2000);
paro();
delay(1000);
}

//llamamos a la funcin creada


// esperamos 2 segundos con el motor en marcha
//paramos el motor utilizando la funcin paro

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<255;i=i+10) {

/*la variable i se utiliza para


almacenar el valor del pulso PWM. Se
suma 10 unidades en cada repeticin
del bucle for */

analogWrite(5,i);
analogWrite(6,i);
delay(100);
}
}

8. IMPLEMENTANDO LOS SENSORES AL ROBOT


8.1. INTRODUCCIN
En robtica, el uso de diversos sensores es esencial ya que permiten al robot captar
informacin sobre su entorno. Luego, por medio del control, podremos interpretar las seales
proporcionadas y actuar en consecuencia. Los sensores son por tanto bsicos para que el robot
pueda actuar sobre su entorno conforme a sus sensores y al programa de control.
En la clasificacin de los sistemas de control, tenemos dos grupos:
Sistemas automticos de lazo abierto: suelen
funcionar sobre una base de tiempos prefijados e
invariables segn las condiciones del sistema a
controlar. Ejemplos: una lavadora, un semforo,
llenado de un depsito por tiempos de conexin
de una bomba, etc.
Sistemas automticos de lazo
cerrado: comparan continuamente
la seal de referencia con la seal de
uno o varios sensores y actan sobre
el sistema en funcin de esa
diferencia y de las instrucciones
contenidas
en
el
programa.
Ejemplos: El control estable de la
temperatura o humedad de un recinto (frigorfico o sistema de riego automtico), llenado de un
depsito con sistema antirrebose, encendido automtico de iluminacin en funcin de la oscuridad,
mantenimiento estable de la velocidad de un vehculos, sistemas detectores de colisin, etc.
Estos sistemas de control son ms completos que los de lazo abierto y permiten realizar
funciones ms complejas.
Tipos de sensores hay muchos, por ejemplo:

Sensores de luz

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

Sensores inclinacin
Pg. 20

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


(receptor en saturacin)

El negro absorbe la luz


(receptor en corte)
Pin 1 Colector
Pin 2 Emisor
Pin 3 nodo
Pin 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 LOW
Color 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 izquierda

HIGH

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: ");
Serial.println(lectura_izq);

//escribimos el texto entre


en el monitor serie
/*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

<500

Coche en lnea

Los dos motores giran


adelante

<500

>500

Coche se desva a
izquierda

Girar a derecha

>500

<500

Coche se desva a derecha

Girar a izquierda

>500

>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_i<500 && valorsensor_d<500)
{
adelante();
}
if (valorsensor_i>500 && valorsensor_d<500)
{
gira_izq();
}
if (valorsensor_i<500 && valorsensor_d>500)
{
gira_der();
}
if (valorsensor_i>500 && valorsensor_d>500)
{
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 buzzer
frecuencia 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<3;i++) {
tone(buz,784,200); //damos dos tonos de 200 milisegundos a una
frecuencia de 784 Hz (Sol, 5 octava)
}
tone(buz,1568,400); //un tono de 400 ms a 1568 Hz (Sol, 6
octava)
}
y los leds? Para los leds inferiores, que tienen como funcin iluminar el suelo para reducir la
influencia de las condiciones lumnicas de diferentes ambientes, programaremos un sencillo
intermitente alternativo entre los led izquierdo y derecho. Prevemos que esta funcin la llamaremos
cuando el robot llegue a meta.
int led_i=12;
int led_d=8;
void led () {
for (int i=1;i<20;i=i+1)
{
digitalWrite(led_d,HIGH);
delay(100);
Robtica con arduino: Construccin y programacin de un robot sigue lneas

Pg. 26

Proyecto Profundiza. IES Cecilio Jimnez

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

11. PROGRAMA FINAL


Se 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<20;i=i+1)
{
digitalWrite(led_d,HIGH);
delay(100);
digitalWrite(led_d,LOW);
digitalWrite(led_i,HIGH);
delay(100);
digitalWrite(led_i,LOW);
}
Robtica con arduino: Construccin y programacin de un robot sigue lneas

Pg. 27

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<3;i++)
{
tone(buz,784,200);
delay(200);
noTone(buz);
delay(200);
}
tone(buz,1568,400);
delay(400);
noTone(buz);
}
void loop () {
tiempo=millis();
if(tiempo<5) {
delay(2000);
tonosalida();
delay(1000);
}
Robtica con arduino: Construccin y programacin de un robot sigue lneas

Pg. 28

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_i<500 && valorsensor_d<500)
{
adelante();
}
if (valorsensor_i>500 && valorsensor_d<500)
{
gira_izq();
}
if (valorsensor_i<500 && valorsensor_d>500)
{
gira_der();
}
if ((valorsensor_i>500 && valorsensor_d>500) &&
contador<vueltas)
{
paro();
aviso();
adelante();
if(contador!=vueltas-1) {
delay(50);
}
contador++;
}
if ((valorsensor_i>500 && valorsensor_d>500) &&
contador==vueltas)
{
paro();
for(int i=1;i<4;i++) {
aviso();
delay(100);
}
led();
}
}
El seguimiento de la lnea del robot puede mejorarse mediante un control por PID
(Proporcional Integrador Derivativo). En esta experiencia, la implementacin de esta variante de
control escapa a los objetivos del proyecto y a las posibilidades de comprensin para el nivel del
alumnado al que va dirigido. Pero es una buena va de investigacin y mejora del proyecto. Su
estudio conlleva el empleo de tcnicas avanzadas de programacin.

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

Pg. 29

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

Vista lateral derecha

Detalle de las conexiones a Arduino

Detalle del chip puente H

Detalle de los sensores

Vista lateral izquierda

Montaje del motor en su soporte

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

Pg. 30

Das könnte Ihnen auch gefallen