Você está na página 1de 124

CICLO FORMATIVO DE GRADO SUPERIOR

SISTEMAS DE TELECOMUNICACIN E
INFORMTICOS




Robot rastreador con Arduino

Jos Reyes Romero


Cabra, 19 de Junio de 2013










Robot Rastreador con Arduino by Jos Reyes Romero is licensed
under a Creative Commons Reconocimiento-CompartirIgual 3.0
Unported License.


Robot rastreador con Arduino

Alumno:
Jos Reyes Romero


Tutor:
Francisco Cruz Roldan



Miembros del Tribunal

Presidente:
Nombre y apellidos



Secretario:
Nombre y apellidos



Vocal:
Nombre y apellidos



Fecha de Lectura y Defensa
19/06/2013

Calificacin obtenida





Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
1
ndice
ndice de ilustraciones. ................................................................................. 4
1 Introduccin. ............................................................................................. 7
1.1 Motivaciones. ...................................................................................... 7
1.2 Objetivos. ........................................................................................... 8
2 Robot ....................................................................................................... 9
2.1 Reglamento robots. ............................................................................. 9
2.1.1 Requisitos del Robot ...................................................................... 9
2.1.2 Pista ............................................................................................. 9
2.1.3 Pruebas......................................................................................... 9
................................................................................................................. 10
3 Desarrollo de un robot seguidor de lnea. Eleccin de componentes. ........... 10
3.1 Microcontolador ................................................................................. 10
3.1.1 Qu es Arduino? ........................................................................ 12
3.1.2 Por qu usar Arduino? ................................................................ 13
3.1.3 Partes de una placa Arduino. ........................................................ 13
3.1.4 Lenguaje de programacin. .......................................................... 17
3.1.5 Entorno de desarrollo. .................................................................. 18
.............................................................................................................. 19
3.1.6 Estructura de un Sketch. .............................................................. 20
3.1.7 Modelos de Arduino. .................................................................... 26
3.1.8 Eleccin del Microcontrolador ....................................................... 32
3.2 Ruedas ............................................................................................. 33
3.2.1 Configuracin de ruedas ............................................................... 33
3.2.2 Modelos de ruedas ....................................................................... 36
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
2
3.2.3 Eleccin ...................................................................................... 37
3.3 Motores ............................................................................................ 38
3.3.1 Motores paso a paso .................................................................... 39
3.3.2 Motores de corriente continua. ..................................................... 40
3.3.3 Clculo de la velocidad ................................................................. 42
3.3.4 Eleccin de motor ........................................................................ 43
3.4 Actuador electrnico .......................................................................... 44
3.4.1 QU ES UN PUENTE EN H? ......................................................... 45
3.4.2 L298N ......................................................................................... 49
3.5 Sensores ........................................................................................... 52
3.5.1 Sensores Infrarrojos .................................................................... 52
3.5.2 Sensor de Ultrasonidos ................................................................. 61
3.6 Alimentacin ..................................................................................... 67
3.6.1 Estudio de los componentes ......................................................... 67
3.6.2 Eleccin: Pilas VS bateras Lipo ..................................................... 68
3.7 Chasis ............................................................................................... 70
3.7.1Modelos de chasis ......................................................................... 70
3.7.2 Eleccin ...................................................................................... 71
.............................................................................................................. 72
3.8 Resumen ........................................................................................... 72
4. Construccin del Robot y Pruebas. ........................................................... 73
5. Sigue lneas............................................................................................ 83
6 Salir del Mogolln .................................................................................... 86
7 Detector de Obstculos ............................................................................ 95
8 Presupuesto ............................................................................................ 96
8.1 Coste de la mano de obra .................................................................. 96
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
3
8.1.1 Salario ........................................................................................ 96
8.1.2 Cargas Sociales ........................................................................... 96
8.1.3 Coste de mano de obra ................................................................ 97
8.2 Costes de materiales .......................................................................... 97
8.3 Gastos Varios .................................................................................... 98
8.4 Gastos Generales ............................................................................... 98
8.5 Importe Total del Proyecto ................................................................. 99
9 Puntos fuertes y futuras mejoras del robot. ............................................... 99
9.1 Puntos fuertes del Robot .................................................................... 99
9.1.1 Tamao ..................................................................................... 100
9.1.2 Peso .......................................................................................... 101
9.1.3 Velocidad ................................................................................... 101
9.1.4 Estructura .................................................................................. 101
9.2 Posibles mejoras ............................................................................... 102
9.2.1 Disposicin de los sensores infrarrojos. ........................................ 102
9.2.2 Circuito para los sensores. ........................................................... 102
9.2.3 Colocacin del sensor de ultrasonidos. ......................................... 102
10 Conclusiones ........................................................................................ 103
11 Webgrafa ............................................................................................ 103
Anexo: Cdigos. ........................................................................................ 105
Anexo 1: Pruebas de funcionamiento de los motores y controlador. .......... 105
Anexo 2 Pruebas de los sensores infrarrojos. ........................................... 107
Anexo 3 Prueba funcionamiento sensor Ping ............................................ 108
Anexo 4 Cambiar de modo ...................................................................... 109
Anexo 5 Seguidor de lnea ...................................................................... 109
Anexo 6 Salir del Mogolln ...................................................................... 112
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
4
Anexo 7 Cdigo Final. ............................................................................. 116

ndice de ilustraciones.
Ilustracin 1 Diagrama de todo el sistema ..................................................... 7
Ilustracin 2 Circuito para prueba Salir del mogolln .................................... 10
Ilustracin 3 Logotipo Arduino ..................................................................... 12
Ilustracin 4 Esquema del modelo Arduino UNO rev3 ................................... 14
Ilustracin 5 Microcontrolador ATmega328 y ATmega2560 ........................... 15
Ilustracin 6 Programacin de una Arduino UNO a travs de otro dispositivo . 16
Ilustracin 7 Entorno de programacion de Arduino ....................................... 18
Ilustracin 8 Boton de reset de una placa Arduino ........................................ 19
Ilustracin 9 Boton para cargar sketch del IDE de Arduino ............................ 19
Ilustracin 10 Difetentes modelos de Arduino............................................... 27
Ilustracin 11 Arduino Mega 2560 ............................................................... 28
Ilustracin 12 Arduino Mega ADK for Android ............................................... 29
Ilustracin 13 Arduino UNO ......................................................................... 30
Ilustracin 14 Arduino Pro Mini .................................................................... 30
Ilustracin 15 Arduino Leonardo .................................................................. 31
Ilustracin 16 Configuradion de ruedas diferencial ........................................ 34
Ilustracin 17 Configuracin en triciclo ........................................................ 35
Ilustracin 18 Configuracion Ackerman ........................................................ 36
Ilustracin 19 Ruedas de goma A4WD ......................................................... 38
Ilustracin 20 Relacin velocidad-torque-corriente ........................................ 39
Ilustracin 21 Funcionamiento motor paso a paso ........................................ 40
Ilustracin 22 Funcionamiento motor de corriente continua .......................... 41
Ilustracin 23 Micro DC Motor engranado con Shaft Volver ........................... 44
Ilustracin 24 Esquema de un puente en H .................................................. 45
Ilustracin 25 Giro en un sentido del motor.................................................. 46
Ilustracin 26 Giro en otro sentido del motor ............................................... 46
Ilustracin 27 Situaciones no posibles .......................................................... 47
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
5
Ilustracin 28 Relacion entre el voltaje y la velocidad ................................... 48
Ilustracin 29 Esquema del L298N ............................................................... 49
Ilustracin 30 contolador L298N .................................................................. 50
Ilustracin 31 Relacion de pines del L298N .................................................. 51
Ilustracin 32 Matriz de sensores infrarrojos ................................................ 53
Ilustracin 33 placa perforada ..................................................................... 54
Ilustracin 34 esquema sensor CNY70 ......................................................... 55
Ilustracin 35 Montaje circuito auxiliar ......................................................... 56
Ilustracin 36 Esquema montaje auxiliar ...................................................... 56
Ilustracin 37 disposicin de los sensores .................................................... 58
Ilustracin 38 montaje sensores infrarrojos .................................................. 58
Ilustracin 39 sketch prueba sensores CNY70 .............................................. 59
Ilustracin 40 sensores infrarrojos colocados en la placa perforada .............. 59
Ilustracin 41 captura de los datos en el monitos serial ................................ 60
Ilustracin 42 Sensor paralax de ultrasonidos ............................................... 61
Ilustracin 43 funcionamiento sensor Ping .................................................. 62
Ilustracin 44 funcionamiento de sensor de ultrasonidos .............................. 63
Ilustracin 45 montaje de sensor de ultrasonidos ......................................... 65
Ilustracin 46 montaje en el robot del sensor de ultrasonido ......................... 65
Ilustracin 47 sketch de prueba del sensor de ultrasonidos ........................... 66
Ilustracin 48 captura de datos en el monitor serial ...................................... 67
Ilustracin 49 bateria LiPo .......................................................................... 69
Ilustracin 50 pilas de 9V y de 1,5 V ............................................................ 69
Ilustracin 51 plataforma Pirate-4WD Mobile Platform ................................. 72
Ilustracin 52 despieze de los componentes del chasis ................................. 74
Ilustracin 53 colocacion de los motores ...................................................... 75
Ilustracin 54 disposcin de los cables de los motores .................................. 75
Ilustracin 55 dispodion final de los cables, de la alimentacion y los motores . 76
Ilustracin 56 cables M-H ............................................................................ 77
Ilustracin 57 regulacin de la placa perforada............................................. 78
Ilustracin 58 sensor colocado en la placa perdorada ................................... 78
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
6
Ilustracin 59 placa perforada ..................................................................... 78
Ilustracin 60 esquema para el circuito auxilar de los sensores infrarrojos y
disposcion del patillaje del sensor ................................................................ 79
Ilustracin 61 placa board con circuito auxiliar de los sensores ...................... 79
Ilustracin 62 disposicin de los sensores .................................................... 80
Ilustracin 63 montaje del sensor Ping ........................................................ 81
Ilustracin 64 esquema sensor ping ............................................................. 81
Ilustracin 65 parte superior del robot ......................................................... 82
Ilustracin 66 esquema del circuito necesario para cambiar de modo ............ 82
Ilustracin 67 situacin de sensores en modo sigue linea .............................. 84
Ilustracin 68 situacin de sensores en modo sigue linea .............................. 84
Ilustracin 69 situacin de sensores en modo sigue linea .............................. 85
Ilustracin 70 situacin de sensores en modo sigue linea .............................. 86
Ilustracin 71 Circuito para prueba Salir del mogolln ................................... 87
Ilustracin 72 situacin de sensores para prueba salir del mogolln............... 88
Ilustracin 73 situacin de sensores para prueba salir del mogolln............... 89
Ilustracin 74 situacin de sensores para prueba salir del mogolln............... 90
Ilustracin 75 situacin de sensores para prueba salir del mogolln............... 91
Ilustracin 76 situacin de sensores para prueba salir del mogolln.............. 92
Ilustracin 77 situacin de sensores para prueba salir del mogolln............... 93
Ilustracin 78 situacin de sensores para prueba salir del mogolln............... 94
Ilustracin 79 situacin de sensores para prueba salir del mogolln............... 95
Ilustracin 80 dimensiones del robot .......................................................... 100
Ilustracin 81 dimensiones del robot .......................................................... 101

Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
7
1 Introduccin.

El presente proyecto abarca la construccin y configuracin de un robot
sigue lnea, as como la redaccin de un cdigo para que el robot realice sus
funciones. Como su propio nombre indica, un robot sigue lneas debe ser capaz
de seguir una trayectoria marcada en el suelo de forma autnoma, tambin de-
bera ser capaz de encontrar la salida de un cerco marcado por una lnea negra
y finalmente salir.
El robot deber contar con una serie de sensores para deducir en qu
posicin se encuentra y en funcin de esta ser capaz de elegir el camino a seguir.
Para ello este sistema ser controlado por un microcontrolador, el cual tendr un
algoritmo de control que ser el encargado de variar la velocidad y direccin de
los motores para corregir la posicin del robot.








1.1 Motivaciones.
En primer lugar una de las motivaciones para la realizacin de este pro-
yecto ha sido la de poner en prctica los conocimientos adquiridos durante estos
cursos.
Sensores
Microcontrolador
Algoritmo de control
Motores
Ilustracin 1 Diagrama de todo el sistema
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
8
Otra motivacin, para la creacin de un robot, fue la de ponerme a prueba
para demostrar que soy capaz de entender y llevar a la prctica las aplicacin de
los diferentes elementos electrnicos que se utilizan.
Finalmente una motivacin con carcter de reto, la de ser capaz de elabo-
rar un cdigo para el control y desarrollo de funcin del robot.

1.2 Objetivos.
Mnimos:
El objetivo ltimo es dotar al robot de lo necesario para que sea capaz de
seguir la trayectoria de una lnea marcada en el suelo sin desviarse adems de
ser capaz de encontrar la salida de un cerco marcado con una lnea negra. Pero
para conseguir esto se debern conseguir otros objetivos:
Manipulacin de sensores.
Control de motores.
Diseo de un sketch de control.
Programacin de un microcontrolador.

Mximos:
A parte de las caractersticas anteriormente mencionadas, si hay tiempo y presu-
puesto el debera hacer tambin:
Detectar objetos que se encuentren en la trayectoria de la lnea negra que
tiene que seguir, y pararse o esquivarlos y seguir su camino.
Robot que se pueda controlar mediante comandos de voz.
Conectar una pantalla LCD en la que se indiquen datos como la velocidad
y si detecta en ese momento o no lnea negra en cada momento.
Comunicacin entre el sistema y dispositivos externos mediante algn sis-
tema inalmbrico.

Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
9
2 Robot
2.1 Reglamento robots.

En este apartado se redactarn las principales normas que deben cumplir
todo robot que quieren participar en la prueba de rastreadores.

2.1.1 Requisitos del Robot

Los robots rastreadores debern ser autnomos. No podrn recibir datos
que alteren su comportamiento.
El tamao del robot no debe superar las dimensiones de 20 cm de ancho
por 30 cm de largo y 20 cm de alto.
El dimetro de las ruedas debe ser como mximo de 6 cm, no habiendo
lmite para el nmero de ruedas.
El nmero de sensores es ilimitado y se tienen en cuenta para el clculo
de la dimensin.

2.1.2 Pista
Las pistas consistirn en una superficie de color blanco con una lnea negra
(camino a seguir) de una anchura 302mm, esta anchura ser la misma
en todo el circuito.
Dimetro de la curva mnimo de 20 cm.
2.1.3 Pruebas
El robot tendr que superar dos pruebas, por lo que tambin dispondr
de dos modos de funcionamiento.
Las pruebas que tendr que superar son:
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
10
Seguidor de lnea, en la cual tendr que seguir el trazado echo por una
lnea de color negro sobre un fondo blanco, adems de detenerse si se le
interpone algn obstculo en el trazado de la lnea.
Salir del Mogolln, en esta prueba el robot tendr que salir de un cerco
parecido al que se mostrara en siguiente imagen, tendr que salir de el
sin sobre pasar las lneas que delimitan el cerco.









3 Desarrollo de un robot seguidor de lnea. Eleccin de com-
ponentes.

3.1 Microcontolador

Un microcontolador es un circuito integrado constituido por las tres unida-
des funcionales al igual que un ordenador y estas unidades son: microprocesador,
memoria y perifricos de entrada/salida.
Ilustracin 2 Circuito para prueba Salir del mogolln
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
11
La forma en la que funciona un microcontolador viene determinada por el
programa que almacena en su memoria. Este programa se puede disear y es-
cribir en diferentes lenguajes de programacin, tras una compilacin se descarga
en la memoria interna del microcontolador de forma que se pueda ejecutar. Esto
unido a su alta flexibilidad, hacen que los microcontroladores se empleen cada
vez en ms aplicaciones, como pueden ser: automatizacin, robtica, domtica,
medicina, aeronutica, telecomunicaciones, etc.

Las principales caractersticas de los microcontroladores son:
Microprocesador: tpicamente de 8 bits, pero existen otras versiones de 4
, 32 y hasta 64 bits con arquitectura Harvad, con memoria/bus de datos
separada de la memoria/bus de instrucciones de programa, o arquitectura
von Neumann con memoria/bus de datos y memoria/bus de programa
compartida.
Memoria de Programa: puede ser una memoria ROM (Read Only Memory),
EPROM (Electrically Programable ROM), EEPROM (Electrically Erasa-
ble/Programable ROM) o Flash. Es la encargada de almacenar el cdigo
del programa que ejecutar el microprocesador.
Memoria de Datos: es una memoria RAM (Random Access Memory) que
tpicamente puede ser de 1, 2, 4, 8, 16 o 32 kilobytes.
Generador de Reloj: cristal de cuarzo que produce unos impulsos con una
determinada frecuencia y genera una seal oscilante. Esta frecuencia
suele ir desde 1 a 40 MHz.
Interfaz de Entrada/Salida: puertos paralelos, seriales (UARTs, Universal
Asynchronous Receiver/Transmitter), I2C (Inter-Integrated Circuit), Inter-
faces de perifricos seriales (SPIs, Serial Peripheral Interfaces), Red de
rea de Controladores (CAN, Controller Area Network), USB (Universal Se-
rial Bus), etc.
Otras opciones:
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
12
Conversores Analgicos-Digitales (A/D, analog-to-digital) para convertir
un nivel de voltaje en un cierto pin a un valor digital manipulable por el
programa del microcontolador. Estos conversores A/D suelen tener una
resolucin tpica de 10 bits, aunque existen versiones de 12, 16 o 32 bits.
Moduladores por Ancho de Pulso (PWM, Pulse Width Modulation) para ge-
nerar ondas cuadradas de frecuencia fija pero con ancho de pulso variable.
Aunque cualquier salida digital del microcontolador puede ser programada
para hacer esta funcin mediante el uso de interrupciones y temporizado-
res, muchos microcontroladores incluyen algunas salidas especialmente
dedicadas a este efecto, lo cual simplifica su uso.


3.1.1 Qu es Arduino?

Arduino es una plataforma de hardware y software open source que est
basado en una placa que permite conectar sensores y actuadores mediante en-
tradas y salidas analgicas y digitales en un entorno de desarrollo basado en el
lenguaje de programacin Processing.







Al tratarse de una plataforma open source, permite que tanto su distribu-
cin como diseo sea libre. Es decir, puede ser utilizada para desarrollar cualquier
tipo de proyecto sin tener que adquirir ningn tipo de licencia. Adems el texto
Ilustracin 3 Logotipo Arduino
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
13
de referencia est publicado bajo licencia Creative Commons (Reconocimiento-
Compartir) bajo la misma licencia 3.0. Los ejemplos de cdigo de la referencia
estn liberados al domino pblico.

3.1.2 Por qu usar Arduino?

Las razones por las que he eligi Arduino como el microcontrolador que
se usara en el proyecto fueron:
Barato: por apenas 22 se puede conseguir una placa Arduino comple-
tamente funcional incluyendo el cable serie-USB para cargarle los sketch.
Popular: la plataforma Arduino es ampliamente conocida por miles de
personas que continuamente desarrollan proyectos y los comparten. Ade-
ms existen tutoriales y foros que facilitan el desarrollo del cualquier pro-
yecto.
Verstil: una misma placa puede servir para proyectos de muy variopin-
tas ndoles como puede, ser la robtica, domtica, control de sistemas o
como programador de otros microcontroladores.
Open Source: se encuentran en la misma web de Arduino los planos,
esquemas de las diferentes placas, por lo que se puede modificar cualquier
componente como se prefiera incluso construirte la tuya propia.
Multiplataforma: El software de programacin para Arduino es multipla-
taforma, es decir funciona en cualquier sistema operativo.

3.1.3 Partes de una placa Arduino.

Para explicar las principales partes que conforman una placa Arduino se
va a utilizar como modelo la placa Arduino UNO rev3, ya que todas las placas
tienes unos componentes estndar. Las principales partes son:
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
14








Pines:
- 3.3V, 5V, VIN (marrn violeta): Terminales para alimentar la placa. VIN
(a veces marcado como 9V), es el voltaje de entrada a la placa Arduino
cuando se est utilizando una fuente de alimentacin externa, es decir
se puede alimentar la placa Arduino mediante este pin.
- Reset (naranja): Se pone a nivel bajo LOW para resetear el microcon-
trolador. Utilizado tpicamente para aadir un botn de reset a la
shields que bloquean (no se puede acceder) el de la placa original.
- GND (amarillo): Toma de tierra.
Reset
ICSP
USB
Led Leds comunicacin
serial
Led encendido
ICSP microcon-
trolador
Microcontrolador
Alimentacin
externa
Regulador
de tensin
Cristal de
cuarzo
Convertidor
USB-Serial
US
Ilustracin 4 Esquema del modelo Arduino UNO rev3
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
15
- A0 A5 (rojo): Terminales de entrada analgica, aunque tambin se
pueden configurar como entradas digitales.
- IOREF (blanco) Este terminal proporciona la referencia de tensin con
la que opera el microcontrolador.
- AREF (gris): Terminal de referencia analgica. Referencia de voltaje
para las entradas analgicas.
- 2-13 (verde): Terminales digitales.
- RX-TX (azul): Terminales digitales E/S serie- Tx/Rx, estos pines no se
pueden utilizar como e/s digitales si se est utilizando comunicacin en
serie.

Microcontrolador: las placas Arduino generalmente emplean los micropro-
cesadores de la familia ATmega328 y ATmega2560, estos son chips sen-
cillos y de bajo coste que permiten el desarrollo de mltiples diseos.










Terminal ICSP USB microcontrolador: estos terminales permiten progra-
mar el bootloader del microcontrolador ATmega y poder cargar los pro-
gramas directamente en el microcontrolador sin tener que utilizar progra-
madores externos.
Ilustracin 5 Microcontrolador ATmega328 y ATmega2560
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
16








El bootloader es un conjunto de instrucciones mnimo que permanece
almacenado en la memoria Flash del microcontrolador. Le permite interac-
tuar con el interface de Arduino, interpretar los programas que se cargan,
reciben y enviar datos por los diferentes puertos o generar seales de control
y permite la comunicacin USB.

LED encendido: Led cuya funcin es indicar si la placa recibe la suficiente
alimentacin como para funcionar.
LEDs comunicacin en serie: estos LEDs se encienden cuando hay una
comunicacin en serie. Si est recibiendo un dato se encender el LED RX
(receive) y si se est transmitiendo se encender el LED TX (transmit).
LED: este LED est unido mediante una resistencia interna (resistencia
pull-up) al terminal 13. Permite comprobar el correcto funcionamiento de
la salida digital 13 sin necesidad de conectar ningn elemento externo a
esta para limitar la corriente proporcionada por esta salida.
ICSP USB: permiten emplear la placa de Arduino como un programador
de otros microcontroladores.
Reset: sirve para resetear el microcontrolador.
Convertidor Serie USB: este dispositivo permite la conversin de los
datos que llegan por el USB a datos entendibles por el microcontrolador,
Ilustracin 6 Programacin de una Arduino UNO a travs de otro dispositivo
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
17
es decir, transforma los datos a serie. Permite la programacin directa del
Arduino desde el ordenador.
Terminal USB: permite tanto alimentar la placa como programarla y car-
gar el sketch.
Cristal de cuarzo: dispositivo que permite que los microcontroladores ope-
ren a una cierta frecuencia. En Arduino esta frecuencia se encuentra entre
8 o 16 MHz.
Regulador de tensin: sirve para independientemente de la tensin con
la cual se est alimentando la placa cada elemento interno de la placa
obtenga la tensin que necesita para funcionar, ya sea 3,3V o 5V.
Alimentacin externa: permite conectara una fuente de alimentacin ex-
terna para alimentar la placa, siempre que no est conectada por USB.


3.1.4 Lenguaje de programacin.
Las placas Arduino se programan utilizando un lenguaje propio basado en
el lenguaje de alto nivel Processing, aunque tambin se pueden emplear otros
lenguajes de programacin y aplicaciones como C, C++, Java, Matlab o Python,
y luego programarse mediante un compilador AVR (Alf (Egil Bogen) and Vegard
(Wollans)s RISC processor), el cual corresponde con la familia de microcontro-
ladores de Atmel que incluyen todas las placas de Arduino.
Sin embargo, uno de los aspectos que hacen atractiva la programacin de
Arduino es su interfaz de programacin. El equipo de Arduino ha desarrollado
una aplicacin en el lenguaje Processing (que a su vez est basado en Java), que
permite una programacin muy sencilla y similar a la de otros lenguajes me-
diante la utilizacin de un lenguaje pseudocdigo. Esto hace que el diseador
pueda desentenderse de aspectos engorrosos de la programacin del microcon-
trolador y concentrarse en otros aspectos del proyecto.

Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
18
3.1.5 Entorno de desarrollo.

Para poder crear programas y programar la paca Arduino se necesita des-
cargar de la pgina de Arduino http://arduino.cc/es/Main/Software , el entorno
de desarrollo (IDE).









Ilustracin 7 Entorno de programacion de Arduino
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
19
En la imagen anterior se muestra el entorno de desarrollo de Arduino. En
la parte superior se encuentran las opciones habituales de todos los programas.
En la segunda fila, se encuentran las opciones que son propias para la progra-
macin del Arduino, como son verificar, cargar, nuevo, abrir, guardar y monitor
serial (de izquierda a derecha).
Despus se encuentra el nombre del sketch, y la parte central es donde
se localiza el sketch propiamente dicho, es decir donde se escribe el cdigo del
programa. En la parte inferior es donde se informa de los errores de compilacin.
Y por ltimo en la parte inferior se encuentra el modelo de la placa y el puerto
serie en la que est conectada la placa Arduino.
Una vez que sea a creado el cdigo antes de proceder a cargarlo en la
placa hay que comprobar la sintaxis del programa sea la correcta, y eso se hace
pulsando sobre verificar.
Si no nos reporta ningn error, ya est el cdigo preparado para cargarlo,
pero para evitar que quede algn dato de algn de un programa anterior se
recomienda pulsar el botn reset de la placa y a continuacin pulsar en el IDE el
botn cargar









Y ya se puede comprobar si el sketch hace la funcin que querremos o no.
Ilustracin 8 Boton de reset de una placa Arduino
Ilustracin 9 Boton para cargar sketch del IDE de Arduino
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
20
3.1.6 Estructura de un Sketch.
Todo sketch est formado por dos partes como mnimo la parte de void
setup y void loop. Para la explicacin de estas partes se va a tomar como ejemplo
el sketch Blink, el cual permite encender y apagar el LED que incorpora la placa.
La estructura seria la siguiente:
Declaracin de variables:
void setup()
{
estamentos;
}
void loop()
{
estamentos;
}
Declaracin de variables

Lo primero que se debe hacer al empezar a elaborar un sketch es
definir las variables y constantes que se van a emplear en l mismo. Estas
variables se pueden a asociar a nombres o nmeros que sern de gran
utilidad a la hora de elaborar y de modificar los programas en un futuro.

Ej

En el ejemplo se ha definido la variable led como un entero y de valor 13.

Configuracin de la placa (void setup () ).

Tras declarar las variables y constantes que va a emplear, se pro-
cede a configurar la placa, es decir indicar que funcin va a tener cada pin
de la placa Arduino que se vaya a emplear.
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
21
Las funciones que se suelen usar con ms frecuencia es la funcin
pinMode cuya funcin es definir si el terminal se va emplear como una
entrada o como salida. Y por otro lado la funcin Serial.Begin que esta-
blece la velocidad de datos en bits por segundo para la transmisin de
datos en serie.
Esta parte del programa es la primera que se ejecuta y solamente
una vez, adems tiene que ser incluida aunque no haya declaraciones que
ejecutar.

Ej

En este caso se ha definido el pin 13 al que se le ha asignado la
variable led, como un pin de salida, para configurarlo como entrada habra que
cambiar OUTPUT por INPUT.

Bucle del programa principal (void loop () )

Una vez configura la placa se llega al propiamente dicho el bucle del
sketch, esta parte es la que se va estar cclicamente ejecutndose hasta
que se apague el sistema o una orden en este bucle lo detenga. En esta
parte se encuentran las funciones que realizan la mayor parte del trabajo
del sketch, y las funciones ms utilizadas en esta parte son las de lectura
y escritura en de los pines: digitalWrite, digitalRead, analogRead, analo-
gWrite.

Ej




Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
22
En este ejemplo se observa, como se utiliza la funcin digitalWrite para
escribir en el pin 13, un valor alto es decir un 1 lgico, despus espera un segundo
(el tiempo se expresa en ms), y vuelve a escribir en el pin 13 pero ahora un valor
bajo, es decir un 0 lgico a continuacin esperara 1s mediante la funcin delay
otra vez, y as se estara repitiendo este bucle indefinidamente mientras no se
reseteara la placa o se dejara de alimentar.
En este ejemplo se ha podido comprobar como en apenas 10 lneas, se ha
podido controlar el encender y apagar el LED interno de la placa Arduino. Una
vez se ha comprendido como se enciende y como se apaga un LED se est en
disposicin para poder controlar otros dispositivos, como pueden ser sensores,
motores, etc.

Funciones
Una funcin es un bloque de cdigo que tiene un nombre y un conjunto
de estamentos que son ejecutados cuando es llamada dicha funcin. Las funcio-
nes se declaran asociadas a un tipo de valor denominado type. Este valor ser
el que la funcin devuelva. Hay diferentes tipos de funciones, por ejemplo si es
del tipo int la funcin devolver un nmero entero, si se trata del tipo float
devolver un nmero que puede tener decimales, esta funciones junto con la
funcin char que sirve para devolver como valor un carcter de texto son las
ms empleadas. Si la funcin no devuelve ningn valor se colocara delante la
palabra void (funcin vaca)
Despus de declarar el tipo de dato que devuelve la funcin, se escribe el
nombre de la funcin y los parmetros que se ejecutaran.
Type nombreFuncin (parmetros)
{
estamentos
}
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
23
Entre llaves {}:
Las llaves son utilizadas para definir el comienzo y fin de un bloque
de instrucciones. Se utilizan en los bucles setup(), loop(), if, for, etc.
Una llave de apertura {siempre debe ir seguida de una llave de
cierre }, sino es as el programa dar errores.
El compilador de Arduino tiene una funcin muy til para comprobar
si todas la llaves abiertas han sido correspondidas con su complementaria
llave de cierre, para comprobarlo solo tenemos que hacer click en el punto
de insercin de una llave abierta e inmediatamente se marcara el corres-
pondiente cierre de ese bloque.

Punto y coma ; :
El punto y coma se utiliza para separar las instrucciones en el len-
guaje de Arduino al igual que ocurre con otros lenguajes de programacin
como C. Adems de esta funcin tambin se utiliza para separar los ele-
mentos de una instruccin de tipo bucle FOR. Recordatorio en los bucles
FOR las instrucciones se tienen que separar mediante ; aunque no se
escriba ninguna instruccin.

Bloque de comentarios /* */
Son reas de texto, en la que el texto no es interpretado por el
programa, estos comentarios se utilizan para ayudar a comprender las
funciones que realiza el programa. Comienzan con /* y terminan como */.

/* Estos es un comentario de varias lneas
no se debe olvidar cerrar los comentarios
sino el programa querra interpretarlos. */

Lnea de comentarios //
Una lnea de comentario empieza con // y no necesitan que se cie-
rre. Al igual que los comentarios de bloque, las lneas de comentario son
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
24
ignoradas por el programa y no ocupan espacio en la memoria de la placa
Arduino.
// Esto es un comentario de una sola lnea.

Este tipo de comentarios se suele emplear despus de una instruc-
cin, para proporcionar ms informacin sobre lo que hace o para recordar
en futuro cul era su utilidad.

Variables.

Una variable es una manera de nombrar y almacenar un valor nu-
mrico para su posterior uso. Como se deduce de su nombre el valor de
las variables puede ir cambiando, al contrario del valor de las constantes.
Una variable debe ser declarada y opcionalmente inicializada con un valor.
Ej
int variableEntrada = 0; // declara una variable y le asigna el valor 0
variableEntrada = analogRead(A2);// la variable recoge el valor analgico
del PIN2

Todas las variables tienen que declararse antes de que se puedan
utilizar. Una variable puede ser declarada al inicio de del programa antes
de la parte de configuracin de la placa setup (), a nivel local dentro de
las funciones, y a veces dentro de un bloque, como en lo bucles for, if,
etc. En una funcin del lugar donde se declare la variable, se determina
mbito de aplicacin.
Una variable global es aquella que se puede utilizar por cualquier
funcin y estamento de un programa. Este tipo de variables se declara al
comienzo del programa, es decir antes del setup().
Una variable local es aquella que se defina dentro de una funcin o
como parte de un bucle, y por lo tanto solamente es visible y se puede
utilizar dentro de la funcin en la que se declar.
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
25
Por lo tanto se pueden tener ms de una variable con el mismo
nombre siempre que estas sean de tipo local, y no formen parte del mismo
bucle o funcin.


Instrucciones ms utilizadas.
- pinMode (pin,mode). Esta instruccin es utilizada en la parte de
configuracin y sirve para configurar el modo de trabajo que va tener un
determinado PIN pudiendo ser INPUT (entrada) u OUTPUT (salida).
pinMode(pin, OUTPUT); // configura pin como salida

Los terminales de Arduino suelen estar por defecto, configurados
como entradas, por lo tanto no es necesario definirlos en el caso de que
vayas a ser usados como entradas. Estos pines desde el punto de vista
elctrico quedan como entradas en estado de alta impedancia.
- digitalRead(pin). Lee el valor de un pin (definido como digital)
dando un resultado HIGH o LOW. El pin desde el cual se quiere leer
se puede especificar como una variable o una constante.

Valor = digitalRead(Pin); // hace que valor sea igual al estado ledo
en Pin

- digitalWrite (pin, value). Enva escribe en el pin definido previa-
mente como OUTPUT el valor HIGH o LOW. El pin se puede espe-
cificar ya sea como una variable o como una constante.

- analogWrite (pin, value). Esta instruccin sirve para escribir un
pseudo-valor analgico utilizando el procedimiento de modulacin
por ancho de pulso (PWM). Esta instruccin solamente se puede
hacer si selecciona un pin marcado como PWM. En esta placa los
pines marcados como PWM son del 0 a 13.
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
26

La tcnica de PWM es empleada para producir seales digitales que
se comportarn como seales analgicas.

- analogRead (pin). Lee el valor de un determinado pin definido como
entrada analgica, con una resolucin de 10 bits. Esta instruccin
solo funciona en los pines definidos como analog IN que van desde
el (A0 A15). El rango de valores que podemos leer oscila desde 0
a 1023.

Esta instruccin ha sido usada en este proyecto para leer los valores
recogidos por los sensores infrarrojos.
- Delay. Esta instruccin sirve para detener los procesos de la placa
durante un cierto tiempo, este tiempo se expresa en milisegundos.
Delay (2000) // espera 2 segundos.

Para ms informacin acerca de las instrucciones, comandos y estructuras
que se pueden emplear en la programacin de Arduino se puede visitar ar-
duino.cc/es/Reference/Extended .

3.1.7 Modelos de Arduino.

En la actualidad existen infinidad de modelos de Arduino: UNO, Leona-
rado Mega, LilyPad, Micro, Pro mini, Bluetooth
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
27


Arduino Mega 2560.

El Arduino Mega es un microcontrolador basado en el ATmega2560. Dis-
pone de 54 terminales digitales (14 de ellos se pueden emplear como sa-
lidas PWM), 16 terminales analgicos y 4 puertos serie (8 pines los puertos
estn formados por un pin de TX y otro de RX).
Posee una memoria flash interna de 256 KB que permite guardas
cdigos extensos (8 KB son empleados por el bootloader). Adems cuenta
con 8KB de SRAM y 4KB de EEPROM, al cual se puede acceder desde la
librera EEPROM.
Ilustracin 10 Difetentes modelos de Arduino.
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
28



Todo esto hace que este modelo sea el ms adecuado para los proyectos
ms complejos en lo que se necesitan multitud de entradas y salidas o ms
memoria. Por otro lado se trata del Arduino de mayores dimensiones.

Arduino ADK
El Arduino ADK es un microcontrolador basado en el ATmega2560, por
lo que las caractersticas de esta placa son muy similares a las de la placa
MEGA.
La diferencia principal es que esta placa cuenta con una interfaz host USB
para conectar con los telfonos basados en Android, basado en el
MAX3421EIC. Tiene 54 terminales digitales (de los cuales 15 se pueden
utilizar como salidas PWM), 16 entradas analgicas y 4 puertos serie (8
pines los puertos estn formados por un pin de TX y otro de RX).
Posee una memoria flash interna de 256 KB que permite guardas cdigos
extensos (8 KB son empleados por el bootloader). Adems cuenta con 8KB
Ilustracin 11 Arduino Mega 2560
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
29
de SRAM y 4KB de EEPROM, al cual se puede acceder desde la librera
EEPROM



Todas estas caractersticas lo hacen el modelo ms adecuado para pro-
yectos ms complejos en los que se necesiten multitud de entradas y salidas o
ms memoria o se necesite la comunicacin con telfonos basados en Android.
Por otro lado se trata de la placa con mayores dimensiones al igual que la MEGA,
pero el precio de la ADK es ms elevado.
Arduino UNO

El Arduino UNO es un microcontrolador basado en el ATmega328. Dispone
de 14 terminales digitales (6 de ellos se pueden emplear como salidas
PWM), 6 terminales analgicos y un puerto serie).
Ilustracin 12 Arduino Mega ADK for Android
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
30









Posee una memoria interna de 32 KB Posee una memoria interna de 32
KB (05 kB son empleados por el bootloader). Adems cuenta con 2 KB de SRAM
y 1 KB de EEPROM, al que tambin se puede acceder desde la librera EEPROM.
Este es modelo es el ms adecuado para proyectos en los que no se ne-
cesitan muchas entradas ni salidas y el tamao no sea un problema ya que es el
modelo ms econmico.

Arduino Pro Mini.
El Arduino Pro Mini es un microcontrolador que dispone de las mismas carac-
tersticas que el Arduino UNO, es decir cuentas con el mismo nmero de en-
tradas y salidas digitales, analgicas y misma memoria.





Ilustracin 13 Arduino UNO
Ilustracin 14 Arduino Pro Mini
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
31
La principal diferencia entre el Arduino Pro Mini respecto al UNO es su
tamao, ya que un espacio muy reducido se puede contar con todas las opciones
que ofrece el Arduino UNO. Esto lo convierte en el modelo ms adecuado en el
que el factor del tamao sea fundamental. Sin embargo cabe destacar que por
razones de coste esta placa no incorpora el circuito interfaz Serie-USB, con lo
cual se necesita disponer de un hardware adicional para programarlo.
Arduino Leonardo
El Arduino Leonardo es un microcontrolador basado en el ATmega32U4.
Dispone de 20 terminales digitales (de los cuales 7 se pueden emplear
como salidas PWM) y 12 terminales como entradas analgicas y 1 puerto
serie.
Posee una memoria interna de tipo flash 32KB (4KB son empleados por el
bootloader). Adems cuenta con 2,5 KB de SDRAM y 1KB de EEPROM, al
cual se puede acceder desde la librera EEPROM.









Todo esto hace que este modelo se pueda emplear para proyector en los
que el tamao de la placa sea importante y que no se necesiten un gran nmero
de entradas. Aunque como ventaja frente al Arduino pro-mini incluye el interfaz
serie-micro USB.

Ilustracin 15 Arduino Leonardo
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
32
3.1.8 Eleccin del Microcontrolador

Modelo Arduino Mega Arduino ADK Arduino UNO Arduino Pro Mini Arduino Leonardo
Micro ATmega 2560 ATmega 2560 ATmega 328 Atmega 328 ATmega32U4
Tensin de fun-
cionamiento
7-12 V 7-12 V 7-12 V 7-12 V 7-12 V
Tensin reco-
mendada
5V 5V 5V 5V 5V
Tensin lmite 6-20 V 6-20 V 6-20 V 6-20 V 6-20 V
Corriente pines
entrada/salida
40 mA 40 mA 40 mA 40 mA 40 mA
Pines Digitales 54 (14 PWM) 54 (14 PWM) 16 (6 PWM) 16 (6 PWM) 20 (7 PWM)
Pines Analgi-
cos
16 16 6 6 12
Puerto serie 4 4 1 1 1
Memoria in-
terna
256 KB (8 KB
bootloader)
256 KB (8 KB
bootloader)
32 KB (0,5 KB
bootloader)
32 KB (0,5 KB
bootloader)
32 KB (4 KB
bootloader)
SRAM 8KB 8KB 2KB 2KB 4 KB
EEPROM 4KB 4KB 1KB 1KB 1KB
Frecuencia 16 MHz 16 MHz 16 MHz 16 MHz 16 MHz
Ventajas
Gran cantidad de
entradas/salidas
y mucha memo-
ria
Gran cantidad
de entradas/sa-
lidas , mucha
memoria y co-
municacin con
Android
Econmico Reducido Tamao
Reducido Tamao y
mayor nmero de sali-
das que Arduino Pro-
Mini
Desventajas Gran Tamao Gran Tamao
Pocas Sali-
das/entradas
No dispone de con-
versor USB-SERIE y
hay que soldar los pi-
nes
Hay que soldar los pi-
nes
Tabla 1 Caracteristicas de los microcontoladores preseleccionados

Tras esta comparativa de los diferentes modelos de desecho el emplear el
Arduino Pro Mini por la necesidad de tener que adquirir el conversor USB-SERIE
y el reducido nmero de entradas/salidas que no sera suficientes para llevar a
cabo el desarrollo de este proyecto. El Arduino UNO tambin se desech por no
contar con el suficiente nmero de entradas y salidas.
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
33
Mientras que el Arduino Leonardo si contaba con el suficiente nmero de
entradas y salidas, aunque no son suficientes ya que se pretende que se en un
futuro se le vayan aadiendo ms sensores por lo que haran falta ms.
Por lo tanto ya solo quedan dos modelos para elegir, entre ellos el nmero
de entradas y salidas es el mismo, y ya que el proyecto no requiere que tenga
que haber comunicacin con dispositivos Android, se decidi elegir el Arduino
Mega que respecto al modelo ADK es ms econmico.
Finalmente se decidi realizar el proyecto empleando como microcontro-
lador el Arduino Mega, que a pesar de sus mayores dimensiones no son un in-
conveniente para este proyecto en el que el tamao no es un problema.

3.2 Ruedas
3.2.1 Configuracin de ruedas

A continuacin se va a realizar un estudio sobre las distintas configuracio-
nes posibles que puede prestar el robot en cuanto a disposicin de sus ruedas.
Configuracin Diferencial
Esta configuracin consta de dos ruedas paralelas entre s con traccin
independiente. En teora esta es la mecnica ms fcil de construir ya que
nicamente se necesitan ruedas de traccin, ya que los giros se consiguen
con la diferencia de sentido de giro de las rudas y la diferente velocidad.
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
34

Para conseguir que este conjunto sea ms estable se suelen usar dos rue-
das locas o patines que aguantarn el peso del robot impidiendo que este se
incline. Sin embargo este sistema puede presentar problemas si la pista es
irregular ya que las ruedas pueden perder traccin.
De esta forma su principal ventaja es que es muy fcil de construir. Y de
conseguir que el vehculo gire simplemente variando la velocidad de giro de
las ruedas.
Sin embargo esta disposicin presenta una serie de inconvenientes. La
principal de ellas es que las ruedas de traccin no pueden ir a la mxima
velocidad siempre. Por ejemplo en las curvas la rueda interior (la que se en-
cuentra ms cerca al centro de la curva) deber frenar incluso invertir el sen-
tido de giro. Adems, para asegurar el movimiento rectilneo del robot se
deber comprobar que ambas ruedas giran a la misma velocidad.
Configuracin en Triciclo
Esta configuracin se compone de tres ruedas que forman un tringulo.
La delantera proporciona la direccin y las dos traseras, paralelas entre s,
son las de traccin.




Ilustracin 16 Configuradion de ruedas diferencial
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
35








Su principal ventaja es que las ruedas traseras pueden ir siempre a la
mxima velocidad siempre que el radio de la curva sea lo suficiente grande.
Sim embargo el principal problema de esta configuracin son los giros. El
radio mnimo que pueda girar el robot sin problemas depender de la distancia
que exista entre las ruedas de traccin y la rueda de direccin.
Configuracin Ackerman
Esta la configuracin que tienen los coches, es decir, cuatro ruedas siendo
dos de ellas las direccin y la otras la motrices. Pueden existir diferentes con-
figuraciones dependiendo donde se encuentren las ruedas de traccin. Si es-
ts se encuentran en la parte trasera, el coche seria de traccin trasera, mien-
tras que si las ruedas de traccin se encuentran en la parte delantera, el coche
seria de traccin delantera.
Ilustracin 17 Configuracin en triciclo
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
36







En un coche normal las ruedas de direccin generalmente suelen ser las
delanteras ya que son las que se encuentran ms cercanas al conductor. Sin
embargo, en un robot podran ser las traseras, aunque por costumbre y pa-
recido a la realidad se suelen elegir como ruedas de direccin las delanteras.
La ventaja de la traccin delantera es que se aprovecha mucho mejor la
energa en curva porque la fuerza se transmite en la direccin de esta por lo
que sern ms fciles de controlar. Sim embargo si la potencia es elevada se
hace difcil de manejar el vehculo de esta manera ya que tienden a subvirar.
Las principales ventajas que ofrece la configuracin Ackerman son que las
ruedas de traccin pueden ir a mxima velocidad siempre que el radio de giro
sea lo suficientemente grande y que ofrece una gran estabilidad.
Por otro lado, el radio de giro en esta configuracin no es muy pequeo,
por lo que se ha de frenar antes de entrar en una curva.
3.2.2 Modelos de ruedas

Al mismo tiempo que se analizaban las diferentes configuraciones que po-
da tomar el robot en cuanto al nmero y disposicin de las ruedas se com-
pararon las diferentes ruedas que estaban disponibles en el mercado

Ilustracin 18 Configuracion Ackerman
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
37
Imagen Modelo Dimetro Precio

Ruedas 60x8
mm
60 mm 6,90

Rueda todo te-
rreno 42x19
mm
42 mm 5,90

Ruedas de
goma 32x7
mm
32 mm 5,95

Ruedas de
goma para
A4WD y A2WD
65 x 25 mm
65 mm 3,70
Tabla 2 Modelos de ruedas.

3.2.3 Eleccin

Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
38
Tras este anlisis se eligi el sistema diferencial, aunque con unas pecu-
liaridades ya que no se han utilizado dos ruedas traccin sino 4 ruedas de trac-
cin, por lo que no necesita ruedas locas ni patines. Este sistema es el ms fcil
de implementar, adems al estar formado por 4 ruedas es ms estable y cuando
va en lnea recta pueden ir a todo velocidad.
Aunque est formado por cuatro ruedas, las ruedas delanteras estn pa-
ralelas entre s, al igual que las traseras, por lo que manipulando la velocidad de
las ruedas es como se consigue que el robot se desplace y gire sin tener que
manipular otro elemento.

En cuanto a las ruedas de traccin se eligieron las ruedas de goma para
A4WD de 65mm ya que eran las de precio ms econmico y las que ms estabi-
lidad proporcionan al coche ya que son las ms anchas.




3.3 Motores
Un motor elctrico es una mquina que transforma la energa elctrica en
movimiento, y generalmente en un movimiento rotativo. Hay muchos tipos de
motores, pero los ms empleados en robtica son los motores paso a paso y los
motores de corriente continua pudiendo estos ser de dos tipos, con escobillas (la
tradicional) o sin escobillas (brushless).
Los parmetros principales que describen las caractersticas de un motor
son la velocidad, media en rpm, y el par, medio en mN-m o g-cm. La unidad del
par muestra la dependencia que hay entre la fuerza y la distancia a la que se
aplica. Por ejemplo, un motor con 2 mN-m de par puede producir una fuerza de
Ilustracin 19 Ruedas de goma A4WD
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
39
2 mN con una palanca de 1 metro conectada a su eje, 1 mN con una palanca de
2 metros, 05 mN con una palanca de 4 metros, etc.
Todo motor tiene una velocidad mxima (cuando no se aplica fuerza sobre
su eje) y un par mximo (cuando se aplica una fuerza en su eje y esta para el
motor). Estos parmetros se denomina free-running speed y stall torque (Ts).
El motor consume menos corriente cuando no se aplica fuerza sobre su
eje y la corriente aumenta a medida que la fuerza aplicada sobre su eje aumenta,
hasta llegar al punto de mximo par (Ts).Esta relacin es directa, pero puede no
ser lineal dependiendo del tipo de motor que se emplee.







En los siguientes apartados se describirn los diferentes tipos de motores
y se determinar la velocidad que deben dar estos motores.

3.3.1 Motores paso a paso

Un motor paso a paso, es un dispositivo el cual produce una rotacin en
ngulos iguales, denominados pasos, por cada impulso digital que llega a su en-
trada. Por ejemplo, si en el caso de un motor un pulso produce un giro de 5 ,
entonces 72 pulsos producirn un rotacin de 360. Adems poseen la peculiari-
dad de que se pueden enclavar en una cierta posicin. Estos motores son los ms
Ilustracin 20 Relacin velocidad-torque-corriente
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
40
apropiados y los ms utilizados para aplicaciones en la que la precisin en la
posicin angular del eje sea un requisito esencial.
Existen diversos tipos de motores paso a paso, entre los que destacan los
de reluctancia variable, los de imn permanente y el hbrido.
Bsicamente un motor paso a paso est compuesto por una parte mvil,
el rotor, y una parte fija, el estator. El rotor suele ser un imn permanente o un
inducido ferromagntico. En el estator se ubican las bobinas por las que se har
circular la corriente que inducirn un campo magntico. La corriente se va alter-
nando por las diferentes bobinas, lo que provoca que se cree un campo magn-
tico giratorio, el cual seguir el rotor, producindose de este modo el giro del
rotor.


De esta forma, si se consigue que la corriente circule por las bobinas de
una manera ordenada y con la frecuencia adecuada se podr conseguir que el
motor avance un paso en uno u otro sentido.
La principal ventaja que proporciona este tipo de motores es la precisin
de giro que son capaces de proporcionar, por lo que el movimiento del robot ser
ms preciso. Cuanto menor sea el paso del motor, mayor ser la precisin.

3.3.2 Motores de corriente continua.
Un motor de corriente continua proporciona un par de giro proporcional a
la corriente inyectada en su armadura. Por este motivo su control de par requiere
un lazo cerrado de control de corriente, sim embargo, para aplicaciones sencillas
Ilustracin 21 Funcionamiento motor paso a paso
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
41
donde la carga del motor permanece casi constante, se puede tomar como refe-
rencia que esta corriente controlar la velocidad de giro del motor. Tienen velo-
cidades de giro muy altas, por lo que es necesario montar cajas reductoras para
adaptar la velocidad a un rango utilizable.
Este tipo de motor est compuesto por un estator, el cual da soporte me-
cnico al sistema y posee una cavidad en el centro, y un rotor al que le llega la
corriente procedente del estator a travs de escobillas.
El principio de funcionamiento de este tipo de motores est basado en la
ley de Lorentz tambin llamada la ley de la mano Izquierda, por la que al intro-
ducir un conductor por el que circula una corriente elctrica en un campo mag-
ntico este sufrir una fuerza perpendicular al plano formado por el campo mag-
ntico y la corriente.


F = B * l * I
Donde F es la fuerza expresada en newtons, B es la densidad de flujo en
teslas, l es la longitud del conductor en metros e I es la corriente que circula por
el conductor en amperios.
El rotor tiene varios devanados repartidos por la periferia. A medida que
gira, la corriente se activa en el conductor apropiado. De esta forma, el sentido
de giro de un motor de corriente continua depender del sentido relativo de las
corrientes circulares por los devanados inductor e inducido. Si se quiere invertir
el sentido de giro del motor se deber invertir el sentido del campo magntico o
de la corriente del inducido.
Ilustracin 22 Funcionamiento motor de corriente continua
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
42
La ventaja principal de este tipo de motores reside en su fcil adaptacin
a las diferentes situaciones que puede presentar el sistema, permitiendo ajustar
o variar la velocidad, el par y el sentido de rotacin.
El problema principal es el mantenimiento de las escobillas. Debido a que
es una superficie que est en continuo rozamiento con otra superficie, estas se
desgastan a largo plazo y es necesario realizar operaciones de mantenimiento
peridicas. Esto es de especial importancia en aplicaciones industriales donde el
ambiente puede ser especialmente agresivo. El contacto entre estas dos superfi-
cies es clave para el correcto funcionamiento del motor, por lo que habr que
asegurarse que no existe ningn problema.
Sin embargo en aplicaciones de robtica pequeas o de juguetera, no
suele haber ningn problema con estos componentes durante el periodo de vida
del motor.

3.3.3 Clculo de la velocidad

Como objetivo se va a fijar que el motor se mueva aproximadamente a 1
m/s. Para determinar las rpm que debe tener el motor se aplica la siguiente
formula.
V= 2RN/60
Tal que V viene en m/s, R en m y N en rpm. Teniendo en cuenta que el radio de
las ruedas escogidas es de 32.5 mm se tiene:

0,5 = 2 0,0325
60

N =147 rpm

Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
43
3.3.4 Eleccin de motor

Tras analizar cada uno de los tipos de motores se opt por emplear moto-
res de corriente continua. Este tipo de motores se adapta mejor a las necesidades
del robot, ya que se pretende que el motor sea capaz de cambiar su velocidad
cuanto ms rpido mejor, y en ese aspecto los motores de corriente continua son
ms apropiados que los de paso a paso. Adems el control de la velocidad de los
motores de corriente continua ofrece ms posibilidades que el control de motores
de paso a paso.
Imagen Modelo
Reduc-
tora
Velocidad
sin carga
Consumo
sin carga
Precio

MOTOR MICRO
METAL DC CON
REDUCTORA
30:1
30:1 440 rpm
40mA (Max:
360mA)
13,20

MOTOR MICRO
METAL DC CON
REDUCTORA
10:1
10:1 1250 rpm
40mA (Max:
360mA)
13,20

MOTOR MICRO
METAL DC CON
REDUCTORA
50:1
50:1 250 rpm
40mA (Max:
360mA)
13,20
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
44

Micro DC Motor
engranado con
Shaft Volver
120:1 160 rpm
40mA (Max:
360mA)
3,78
Tabla 3 Tipos de motores

Segn las ruedas escogidas de 32,5 mm de radio los motores ofrecern
una velocidad de 1,5 m/s el modelo de 30:1, de 4,2 m/s el modelo de 10:1, de
0,85 m/s el modelo de 50:1 y el modelo de 120:1 una velocidad de 0,54 m/s, por
lo tanto el modelo que ms se acerca a la velocidad que se peda es el modelo
cuya caja reductora es 120:1.





3.4 Actuador electrnico

Como se ha especificado en el apartado anterior, los motores selecciona-
dos necesitan de al menos 40 mA para funcionar. Si se recuerdan las especifica-
ciones del Arduino Mega cualquier lnea de salida de este puede proporcionar
hasta un mximo de 40 mA, por lo que se necesita de otro componente que
pueda alimentar a los motores.
Adems, si se desea que la velocidad de giro de los motores sea variable
y adems que se pueda producir en ambos sentidos se hace ms evidente la
necesidad de otro componente.
Ilustracin 23 Micro DC Motor
engranado con Shaft Volver
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
45
De entre las diferentes tipologas de actuadores electrnicos de potencia,
en este proyecto se emplear la conocido como etapa conmutada en puente en
H. Este componente se denomina puente en H. Es una de las partes crticas del
robot, ya que un mal funcionamiento o un mal montaje de este provocarn que
el robot no funcione como se espera de l. En los siguientes apartados se va a
proceder a explicar los motivos de su eleccin y su funcionamiento.

3.4.1 QU ES UN PUENTE EN H?

Un puente en H es un circuito electrnico de potencia que est formado
por una serie de transistores, los cuales permitirn pasar o cortar la corriente en
un determinado sentido. Como se acaba de comentar, los puntos de trabajo de
los transistores sern el de corte (OFF) o saturacin (ON), y estos puntos de
trabajo sern controlados mediante sus terminales de Base (en el caso de tran-
sistores BJT) o de Puerta (en el caso de transistores MOSFET).
Para el caso unipolar, la etapa se compone de cuatro transistores que
actan como interruptores, los cuales pueden estar en dos estados, abierto (ON)
y cerrado (OFF). Cuando un interruptor est abierto no permite el paso de co-
rriente a travs de l, en cambio cuando est cerrado s lo permitir.







Ilustracin 24 Esquema de un puente en H
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
46
Variando los puntos de trabajo de los interruptores se puede conseguir
que el motor gire en un sentido u otro, o que se quede parado al fijar los dos
terminales del motor a una misma tensin.
Si el puente en H tiene los interruptores 1 y 4 cerrados mientras que los
interruptores 2 y 3 permanecen abiertos, se permite el paso de la corriente de
izquierda a derecha. De esta forma el motor gira en un sentido.






Si se invierte el estado de los interruptores la corriente circula en sentido
contrario.
De esta forma variando entre estas dos posiciones se consigue que el mo-
tor gire en uno o en otro sentido.








Ilustracin 25 Giro en un sentido del motor
Ilustracin 26 Giro en otro sentido del motor
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
47
Tambin hay que tener en cuenta que no todas las combinaciones son
correctas, ya que algunas posiciones crean cortocircuitos. Es decir, los interrup-
tores de una misma rama (1-3 y 2-4) no podrn estar cerrados al mismo tiempo.






Por ltimo, si los interruptores 1 y 2 estuvieran cerrados y los interruptores
3 y 4 abiertos tendran ambos terminales del motor el mismo voltaje, con lo que
el motor se parara rpidamente, ms incluso que si se cortase la alimentacin.
A este modo se le llama Fast stop.
En la siguiente tabla se resumen todas las combinaciones posibles de los
interruptores y el resultado que tienen sobre el motor:
Estado I1 I1 I3 I4 Resultado
1 Abierto Abierto Abierto Abierto
El motor se detiene bajo su iner-
cia
2 Cerrado Abierto Abierto Cerrado El motor gira en avance
3 Abierto Cerrado Cerrado Abierto El motor gira en retroceso
4 Cerrado Cerrado Abierto Abierto Fast stop
Tabla 4 Estados de los motores en funcin de los estados de los interruptores

Una de las principales ventajas del actuador en puente en H es que per-
mite controlar de forma precisa el valor promedio de tensin que se aplica en su
carga. Es decir, que no es un actuador Todo/Nada como pudiera parecer debido
al funcionamiento en forma de interruptor de sus transistores, sino que es posible
obtener valores intermedios controlables de tensin en la carga. Esto permite
Ilustracin 27 Situaciones no posibles
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
48
controlar la corriente que se inyecta en los motores y, en ltima instancia, la
velocidad a la que gira.
Esto se consigue mediante la tcnica de Modulacin de Ancho de Pulsos o
PWM de sus siglas en ingls (Pulse Width Modulation). Esta tcnica consiste en
un sencillo principio que consiste en alternar el estado de conduccin del puente
a una frecuencia alta, mucho mayor que la constante de tiempos del motor ali-
mentado. De esta manera, el motor no percibe las bruscas variaciones de tensin,
sino que las ve como un valor promedio. Como el voltaje que ve el motor es una
serie de pulsos de ancho variable, a este mtodo se denomina Modulacin de
Anchos de Pulsos.







El principal concepto importante de entender es el conocido como ciclo de
trabajo.
Este se define como la fraccin del periodo de conmutacin en que la seal
se encuentra en estado activo:
=


Donde D es el ciclo de trabajo, es la duracin en la que la seal se
encuentra en estado activo y T el periodo de la seal.
En la grfica se puede ver un ejemplo de PWM. En un principio el ciclo de
trabajo es del 100 %, por lo que el motor gira al 100 % de su velocidad nominal.
Ilustracin 28 Relacion entre el voltaje y la velocidad del motor en funcin del tiempo
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
49
Sin embargo, cuanto ms bajo es el ciclo de trabajo menor es la velocidad a la
que gira el motor, hasta llegar al 0 %.
A continuacin se van a estudiar el componente que se va a utilizar como puente
en H del robot.

3.4.2 L298N

El L298N es un circuito integrado formado por dos puentes en H sepa-
rados. Cada uno de estos puentes permite obtener hasta 2 A (o 4 A si se conectan
en paralelo ambos puentes), por lo que se puede utilizar para alimentar a los
motores.

Se emple este circuito integrado, ya que fue el que se pudo conseguir y
adems cumpla los requerimientos de los motores.
Sim embargo, tras investigar sobre las ventajas e inconvenientes de este
integrado, se descubri, que entre los inconvenientes que presenta destacan:
Un excesivo calentamiento, por lo que habra que incorporar un radiador.
Ilustracin 29 Esquema del L298N
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
50
Otro inconveniente es que el integrado por s solo no incluye ningn ele-
mento de proteccin contra sobretensiones inversas (problema muy frecuente
cuando se alimentan cargas de componente inductiva), por lo que haba que
aadirle un total de ocho diodos (4 para cada motor) para su perfecto funciona-
miento y evitar que algn pico de tensin inversa pudiera daar algn transistor.
Estos diodos suelen conocerse como diodos de libre circulacin.
Para revertir estos inconvenientes se decidi escoger el controlador de
motores de doble puente en H, del cual se muestra su imagen a continuacin y
est controlador incluye todos los componentes incluidos. Quedando mediante
su utilizacin los inconvenientes subsanados y adems proporciona un fcil mon-
taje.












Ahora se va explicar a estudiar cada conexin del integrado, adems este
integrado emplea transistores BJT.
Ilustracin 30 contolador L298N
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
51
A continuacin se van a explicar cada una de las conexiones del circuito
integrado.

1. GND: Tierra.
2. Sense A: Pin de medida del Puente A. Se deber conectar a tierra si no se
desea usar este pin, en nuestro caso dejar el jumper como viene conec-
tado.
3. N.C: No se utiliza
4. Out 1: Salida 1 del Puente A.
5. Out 2: Salida 2 del Puente A.
6. Vs: Alimentacin del Puente
7. Input 1: Entrada lgica 1 del puente A
8. Enable A: Activador del puente A
9. Input 2: Entra lgica 2 del puente A
10. GND: Tierra.
Ilustracin 31 Relacion de pines del L298N
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
52
11. GND: Tierra.
12. VSS: Alimentacin del multiplicador del oscilador.
13. Input 3: Entrada lgica 1 del puente B
14. Enable B: Activador del puente B
15. Input 4: Entrada lgica 2 del puente B
16. Out 3: Salida 3 del Puente B.
17. Out 4: Salida 3 del Puente B.
18. N.C : No se utiliza
19. Sense B: Pin de medida del Puente B. Se deber conectar a tierra si no se
desea usar este pin, en nuestro caso dejar el jumper como viene conec-
tado.
20. GND: Tierra.

3.5 Sensores

Los sensores van a ser el nico medio a travs del cual el robot recibir
informacin de su entorno cuando se encuentre funcionando.
Los sensores con los cuales va a contar el robot son de dos tipos, unos
sensores infrarrojos para determinar la situacin de la lnea negra, y un sensor
de ultrasonidos para detectar la situacin de obstculos en la parte delantera del
coche.
3.5.1 Sensores Infrarrojos

La funcin de estos sensores es la de leer la oscuridad del suelo en puntos
concretos, por lo que es importante elegir el nmero y la distribucin de los sen-
sores.
Lo ms habitual es que estos sensores se ubiquen en la parte delantera
del robot para que de esta manera se pueda anticipar ante la llegada de una
curva. Ahora bien existen diferentes configuraciones posibles
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
53
La primera de ellas consiste en adquirir una matriz de sensores infrarrojos.
Esta matriz est compuesta por una serie de sensores infrarrojos dentro de un
mismo circuito integrado, el nmero de estos sensores puede variar. La principal
ventaja es su reducido tamao, mientras que su desventaja esta que no se puede
colocar cada sensor donde elijas.




Tambin es posible adquirir cada sensor infrarrojo por separado y colocar
cada uno donde se prefiera, esta opcin es la que se ha elegido para este robot.
El sensor por excelencia que se utiliza para esta funcin es el CNY70, del cual se
puede encontrar multitud de informacin en Internet y no toda ella es cierta. La
ventaja de esta distribucin es que se pueden colocar los sensores en la parte
que se prefiera, pero tambin surge un inconveniente es que esta configuracin
requiere ms espacio, ya que necesita montar una circuitera adicional compuesta
por resistencias, para que los sensores funcionen de la manera correcta.
Otro factor importante a tener en cuenta a la hora de elegir los sensores
infrarrojos es su distancia al suelo. Esta viene determinada por el tipo de sensor
y el tipo de lectura que se realiza. En la mayora de las ocasiones la lectura es
digital, es decir, se leen 0s y 1s. En general, cuanto ms pegado est el sensor
al suelo mejores lecturas realizar.
Por ltimo es importante determinar la distancia que hay entre los senso-
res y el eje de los motores. Cuanto ms alejados estn los sensores del eje de
los motores antes se anticipar la llegada de una curva, pero, sin embargo, los
motores debern de hacer ms fuerza para mover o corregir el robot, por lo que
en principio responder peor. De esta forma hay que encontrar un equilibrio entre
la distancia a la que se encuentran los motores entre s y la distancia que existe
entre los sensores y el eje de los motores.
Ilustracin 32 Matriz de sensores infrarrojos
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
54
Finalmente se eligi como sensor infrarrojo el CNY70, y se montaran en
una placa perforada y su circuito adicional, se montara en una placa board. La
razn por la que se eligi el comprar los sensores por separado fue la libertad de
colocacin de estos.
3.5.1.1CNY70

Los sensores infrarrojos CNY70 estn diseados especficamente para la
utilidad que se la va a dar en este robot, es decir, para detectar lnea negra sobre
fondo blanco y viceversa; aunque se puede emplear para otros propsitos como
por ejemplo sensor de proximidad.
Se van a emplear dos sensores para el modo sigue lnea, y cuatro para el
modo salir del mogolln. Los dos que se emplean para el modo sigue lnea tam-
bin se emplean para salir del mogolln, por lo que se necesitaran 4 sensores.
Estos sensores se colocaran en una placa perforada de unas dimensiones
de 78x58 mm, como la que aparece en la imagen.







El CNY70 es un sensor de infrarrojos de corto alcance basado en un emisor
de luz y un receptor, ambos apuntando en la misma direccin, y cuyo funciona-
miento se basa en la capacidad de reflexin del objeto, y la deteccin del rayo
reflectado por el receptor.
Ilustracin 33 placa perforada
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
55
Este sensor funciona con una longitud de onda de 950 nm lo que lo hace
interesante para su utilizacin en entornos de gran iluminacin.



Las caractersticas del sensor son:
Longitud de onda del haz infrarrojo de 950nm.
Intensidad del diodo emisor Iak=50mA.
Intensidad de colector Ic=50mA.
Tensin colector emisor Ice=32V
Tensin emisor colector Vec=7V.
Consumo aproximado de 200mW.
Distancia de deteccin de 0.3 a 5mm

Para el funcionamiento correcto de cada sensor se necesita montar un
circuito, auxiliar el cual est compuesto por una resistencia de 220 (R1) para
proteger al emisor que se trata de un diodo led infrarrojo y una resistencia de
47K (R2) para tomar el dato desde el colector del fototransistor . El circuito se
alimenta mediante una salida de 5V de la placa Arduino.
El montaje del circuito se realiz en una placa board para poder realizar
ms pruebas ya que su montaje y desmontaje es ms rpido.
Ilustracin 34 esquema sensor CNY70
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
56


El funcionamiento de este sensor, es el siguiente, el dio led se encuentra
constantemente emitiendo, y en funcin de la superficie sobre la que el haz emi-
sor se refleje, este reflejo ser mayor o menor.
Si la superficie sobre la que se refleja el haz es negra, esta superficie ab-
sorber toda la luz por lo que el receptor no recibir nada y la lectura del colector
del fototransistor indicara que el emisor se encuentra sobre un superficie negra.
Sin embargo si se encuentra sobre una superficie blanca esta superficie reflejara
todo la luz, por lo tanto esta le llegara al receptor, el dato que se obtendr en el
colector indicara que se encuentra sobre una superficie blanca.
Los datos que se obtienen de la salida del colector pueden ser diferentes,
estos datos dependen de si la salida se conecta a una entrada digital o analgica
del microcontrolador.
Si la entrada a la que se conecta es digital, los datos que se obtendrn
sern un 0 si la superficie refleja (blanca) y un 1 si la superficie no refleja (negro)
Sim embargo si la entrada se conecta a una entrada analgica como es
nuestro caso, permite la deteccin dinmica del blanco y negro (muy til cuando
el recorrido presenta alteraciones en la iluminacin). De esta forma se distingue
Ilustracin 36 Esquema montaje auxiliar
Ilustracin 35 Montaje circuito auxiliar
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
57
el blanco del negro discriminando los valores que da un color y los que propor-
ciona l otro.
Al utilizar para leer los datos una entrada de tipo analgica tambin se
pueden emplear estos sensores para distinguir colores, ya que cada color pro-
porciona una franja de valores indicativos de cada uno.

3.5.1.2PruebasCNY70
Al igual que el L298, los sensores cny70, son una de las piezas clave del
robot, por lo que se realizaron una serie de pruebas antes de su montaje en el
robot. En primer lugar hay que entender cmo funciona el cny70. La secuencia
de funcionamiento de cada sensor es la siguiente:
1. Encender el LED infrarrojo.
2. Emisin del LED.
3. Reflexin del haz de luz.
4. Recepcin del haz.
5. Lectura del dato.
6. Interpretacin del dato.

Tras haber entendido como funciona el sensor se llev a cabo su montaje
y se comprob que los sensores funcionaban correctamente.
Para ver si los LED emiten o no necesitamos la ayuda de una cmara para
poder ver si los diodos estn encendidos o no, ya que al ser la emisin infrarroja
no lo podemos ver a simple vista.
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
58



















Despus se realiz un sketch para comprobar el funcionamiento de los
sensores, y recoger los datos que proporcionan, estos nos servirn para deducir
si se encuentra sobre una lnea negra o lnea blanca.
Ilustracin 37 disposicin de los sensores
Ilustracin 38 montaje sensores infrarrojos
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
59
El sketch que se utiliz para ver si los sensores funcionaban y ver que
valores obtienen es el que se muestra a continuacin. Tambin se encuentra en
el anexo 2.

Para obtener los valores los sensores se han colocado en la placa perfo-
rada, se ha ajustado la altura mediante dos tornillos, y se han colocado sobre un
folio blanco en el cual se haba pegado un trozo de cinta adhesiva de color negro.
Los sensores se han ido colocando en las diferentes posiciones que se pueden
dar, es decir unas veces sobre negro y otras veces sobre blanco y as sucesiva-
mente con cada uno de los sensores.

Ilustracin 39 sketch prueba sensores CNY70
Ilustracin 40 sensores infrarrojos colocados en la placa perforada
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
60
La distancia respecto al suelo a la que se han colocado los sensores ha
sido de 4mm.
A continuacin se muestra una captura del monitor serial del compilador
de Arduino, en esta captura se muestran los valores que han obtenido los senso-
res, en un determinado momento.











*Recordamos que para hacer al monitor serial hay que pulsar el icono
De todos los datos que nos proporcionan estos sensores, se toman los
valores, que indican los sensores cuando estn sobre fondo blanco y los que se
encuentran cuando estn sobre fondo negro.
Los valores sobre fondo blanco oscilan entre 974 - 1002
Los valores sobre fondo negro oscilan entre 1007- 1020
Estos valores sern utilizados en el sketch fundamental del robot, y sern
los que se comparan con los que obtengan los sensores durante su movimiento,
para as saber la posicin del coche respecto a la lnea negra.
Ilustracin 41 captura de los datos en el monitos serial
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
61

3.5.2 Sensor de Ultrasonidos

La funcin de este sensor es la detectar si delante del coche se encuentra
algn obstculo.
Lo ms habitual es que estos sensores se ubiquen en la parte delantera
del robot para as poder anticiparse ante la presencia de algn obstculo.
Este sensor puede estar anclado al chasis del coche y mirar solo hacia
delante, o puede estar sobre un pan/tilt que vaya cambiando de posicin ccli-
camente para as detectar si hay algn obstculo en posiciones.
Ya que el coche en las dos modalidades de funcionamiento que va a tener,
lo va a hacer en circuitos libres de obstculos, salvo que se coloque uno adrede
delante de l.
Se decidi que el sensor de ultrasonido seria anclado al chasis del robot y
su posicin seria la del mirar al frente.
Para esta funcin se pueden utilizar varios tipos de sensores de ultrasoni-
dos, pero para este proyecto se va a utilizar el sensor de ultrasonidos de Arduino
que el Ping de Paralax.






Ilustracin 42 Sensor paralax de ultrasonidos
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
62
Un factor a la hora de elegir un sensor de ultrasonido es la distancia a la
cual es capaz de detectar un obstculo, generalmente contra ms lejos se en-
cuentra el obstculo ms imprecisin suele tener el valor, pero para nuestro pro-
yecto no es un inconveniente ya que los obstculos que se van a detectar se van
a encontrar a escasos centmetros por delante del coche.
Como inconveniente nos podemos encontrar con que para el sensor fun-
cione correctamente y sus datos sean exactos, el sensor debe estar perpendicular
al obstculo con el cual el ultrasonido choque, adems de esto el obstculo no
puede ser de un tamao pequeo ya que no reflejara todo el sonido emitido.


Se eligi este sensor ya que nos aseguramos un completo entendimiento
entre el sensor y nuestra placa Arduino y con l no se necesita disponer de un
circuito adicional para conseguir su control.

3.5.2.1Ping

El sensor Ping est especialmente diseado para la funcin que se le va a
dar en este robot, es decir la de detectar la distancia a la que se encuentra de
un obstculo.
Se van a emplear un solo sensor, que se ubicara en la parte de arriba del
robot.
Ilustracin 43 funcionamiento sensor Ping a) correcto b) y c) datos incorrectos
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
63
El sensor Ping es un sensor medidor de distancia por ultrasonidos.
Las caractersticas del sensor son:
Rango: 2 cm a 3 metros
Tensin de alimentacin: 5V +/-10- (Min: 4.5V, Max: 6V)
Consumo: 30 mA tpico, (35 mA max)
Interfaz: 3 pines (VCC, GND, Seal)
Comunicacin "pulse in / pulse out"
LED indicador de medicin en curso
Pulso TTL, mnimo 2 s (5 s tpico)
Pulso echo: Pulso TTL positivo, 115 s a 18.5 ms
Burst Frequency: 40 kHz for 200 s
Tamao: 22 mm x 46 mm x 16 mm
El funcionamiento del sensor es el mismo que emplean los radares, y esto
consiste en que el sensor emite un ultrasonido a travs de su altavoz y cronome-
tra el tiempo que el sonido tarda en llegar a un obstculo y rebotar entonces es
recibido por su micrfono ultrasnico.






Una vez sabiendo el tiempo que ha tardado el sonido en regresar y te-
niendo como dato conocido la velocidad de propagacin del sonido, se puede
calcular la distancia. Para realizar esta operacin debemos dividir entre dos el
tiempo que tarda en regresar el sonido, ya que ese tiempo involucra el tiempo
de ida y vuelta.
Ilustracin 44 funcionamiento de sensor de ultrasonidos
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
64
Este clculo se puede realizar con la siguiente formula (e=v*t), siendo e
el espacio al cual se encuentra el objeto con el que el ultrasonido a rebotado.
Una pregunta que nos puede surgir es la de como lee la seal, si solamente
dispone de un pin de seal, y si por l es por donde se manda la seal para el
ultrasonido. Pues s es por el mismo pin por el cual se recibe la seal del ultra-
sonido y se manda la seal para enviar el ultrasonido.
Esto es debido a que el pin que se conecta la seal procedente del sensor,
va cambiado de modo que durante la emisin de sonido es de salida, y durante
el tiempo de escucha es de entrada, esto se observa mejor en el cdigo de
prueba, donde se ver cmo se van alternando las funciones para cambiar el
modo de funcionamiento de pin de la placa Arduino.
3.5.2.2PruebasPing

El sensor de ultrasonidos tambin es una parte importante, ya que de l
depender que nuestro robot coche contra los obstculos o se detenga a tiempo,
evitando de esta manera que se puede deteriorar por el choque.
En primer lugar aunque ya se haya mencionado vamos a esquematizar el
funcionamiento del sensor.
1. Definir el pin como salida.
2. Emitir ultrasonido.
3. Definir el pin como entrada.
4. Recibir el ultrasonido.
5. Calcular la distancia al obstculo
6. Interpretar el dato.
En la parte de interpretar el dato nos referimos a que dependiendo de la
distancia que se haya especificado en el cdigo como lmite el coche seguir su
marcha o se detendr si el obstculo est cerca.
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
65
Tras haber entendido el funcionamiento del sensor se llev a cabo el mon-
taje respetando las conexiones y alimentando el sensor de la manera adecuada.












Despus se realiz un sketch para comprobar el funcionamiento del sen-
sor, y comprobar si los datos que proporcionan son los correctos, podemos com-
probar el que sensor est en funcionamiento mediante un led que se encuentra
entre el emisor y el receptor, este led nos indica la actividad del sensor.
El sketch que se emple para comprobar el funcionamiento del sensor fue
el que se muestra a continuacin. Que tambin se puede encontrar en el anexo
3.
Ilustracin 45 montaje de sensor de ultrasonidos
Ilustracin 46 montaje en el robot del sensor de
ultrasonido
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
66


En el cdigo se puede observar como el pin va alternando entre salida y
entrada.
El tiempo que ha tardado el sonido el volver se lee mediante el comando
pulseIn()
Para obtener los valores del sensor est se ha colocado en el lugar que
va a estar en el coche, se han realizado las conexiones pertinentes, se ha colo-
cado el sensor mirando hacia un obstculo que en este caso ha sido una pared.
Ilustracin 47 sketch de prueba del sensor de ultrasonidos
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
67
Despus con ayuda del monitor serial se han observado los datos que
indicaban la distancia a la que se encontraba el obstculo, y despus con ayuda
de un metro se ha verificado que la distancia fuera la misma.











*Recordamos que para hacer al monitor serial hay que pulsar el icono

Tras comprobar que los datos que obtiene el sensor se corresponden con
los que se midieron con el metro, se decide que la distancia que se va a utilizar
como frontera para que el robot se pare o sigua avanzando va a ser de 13 cm.
Deteniendo se el robot cuando se encuentre un obstculo a unos 3 cm delante
de donde se encuentran los sensores infrarrojos.
3.6 Alimentacin
3.6.1 Estudio de los componentes

Ilustracin 48 captura de datos en el monitor serial
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
68
A continuacin se va a representar en una tabla las tensiones que requie-
ren cada uno de los componentes que van a conformar el robot.

Componente
Voltaje m-
nimo
Voltaje m-
ximo
Voltaje recomen-
dado
Consumo
(mA)
Arduino Mega 6 20 De 7 a 12 -
Motor 6 12 6V 300
L298 5 7 6 36
CNY70 1,5 2,5 1,5 -
Ping 3,3 5 5 30
Tabla 5 tensiones de los componentes.
Tras un breve anlisis se puede llegar a la conclusin de que tanto el
CNY70 y Ping los puede alimentar las salidas de Vcc del Arduino, ya que esta
ofrece 5 V. Del resto el voltaje mnimo ms alto es el del L298N (5V) mientras
que el voltaje mximo ms bajo es el del L298 (7V)
Por lo tanto se decidi que para alimentar el Arduino y por consiguiente
los sensores tanto infrarrojos como el de ultrasonidos, se iba a emplear una
fuente de alimentacin comprendida entre los 8 y 9 V por lo tanto se va a emplear
una pila de 9V. Mientras que para alimentar las los motes y el controlador se va
a utilizar 5 pilas AA de 1.5 V.
3.6.2 Eleccin: Pilas VS bateras Lipo

En primer lugar se pens en utilizar batera LiPo ya que ofrecen una gran
autonoma y una elevada capacidad de descarga. Pero todas los pack batera +
cargador que se encontraron tenan un precio elevado.
Por lo que finalmente se desech el uso de bateras.
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
69









Tras rechazar el uso de las bateras se pes en utilizar pilas de 9V para la
alimentacin del Arduino ya que estas proporcionan el voltaje necesario, mientras
que para alimentar los motores y el controlador se utiliz 5 pilas de 1.5 V dis-
puestas en un portapilas del cual se dispona.
El principal inconveniente de utilizar pilas, es su duracin, pero no se le
presto ms importancia, ya que el precio de ellas hace que se puedan reponer
con un coste bajo.


Ilustracin 49 bateria LiPo
Ilustracin 50 pilas de 9V y de 1,5 V
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
70
3.7 Chasis
Un aspecto importante es la forma que va a tener y cual va ser el chasis
que va a disponer.
En un primer momento se pens en disear y construir nuestro propio
chasis, pero rpidamente esta opcin se desestim ya que no se disponan del
suficiente tiempo para la elaboracin del mismo. Aunque como ventaja el cons-
truirlo supona un ahorro econmico y posiblemente mejor adaptacin de los
componentes al chasis ya que est se hara a medida de los componentes.
Tras desechar la opcin de crear un chasis, procedimos a la busque de
diferentes tipos de chasis, en los cuales se pudieran adaptar nuestros componen-
tes y adems cumplieran con las reglas establecidas.
3.7.1Modelos de chasis


Imagen Modelo Dimensiones Precio

Robot Smart Car
19,6 cm x 10,5
cm x 0,3 cm
8

De doble capa 4-
Motor Smart Car
Chasis
25,5 cm x 18,0
cm x 6,5 cm
10
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
71

Turtle - 2WD Mo-
bile Platform
170 mm dimetro
de la base
13

Pirate-4WD Mo-
bile Platform
18 cm x 15cm x
10 cm
9
Tabla 6 tipos de chasis .
3.7.2 Eleccin

Tras la bsqueda de diferentes modelos de chasis los cuales se pudieran
adaptar a los componentes seleccionados en otros apartados.
Se procedi a la eleccin del chasis, el modelo Robot Smart Car y el Turtle
- 2WD Mobile Platform se rechazaron por no cumplir con la configuracin de
ruedas que se haba elegido. Dentro de los modelo que nos quedaban se des-
cart el modelo De doble capa 4-Motor Smart Car Chasis porque aunque como
todos los dems, como se demuestran en las fotos los dems elementos se pue-
den adaptan sin problema, este modelo supera las dimensiones establecidas
como regla que deba cumplir el robot, incumple esta regla al colocarle las ruedas,
supera los 20 cm de ancho.
Por lo tanto nos queda el modelo Pirate-4WD Mobile Platform , el cual
cumple con la configuracin de las ruedas que se deseaba, cumple con la posibi-
lidad de incorporar los dems materiales y sus dimensiones incluyndoles las
ruedas no superan las establecidas por el reglamento.

Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
72








Adems este modelo incluye el material necesario para montarlo como son
tornillos, tuercas, y lo ms importante como se observa en la imagen se puede
adaptar perfectamente a los componentes, tambin cuenta con el suficiente es-
pacio para todos los dems componentes como son el Arduino, el controlador de
motores y los sensores.
3.8 Resumen

En la siguiente tabla se muestra la lista de componentes necesarios para
la construccin del robot.




Cantidad Componente Descripcin
1 Arduino Mega Microcontrolador
4 Ruedas de goma Ruedas de traccin
4
Micro DC Motor engranado con Shaft Vol-
ver
Motores
1 L298N Controlador de motores
4 CNY70 Sensores Infrarrojos
Ilustracin 51 plataforma Pirate-4WD Mobile Platform
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
73



4. Construccin del Robot y Pruebas.

Despus de disponer de todos los componentes que van a formar parte
del robot se procedi a su construccin. Para ello primero se hizo un anlisis de
los elementos por separado, para pensar cual va a ser la secuencia de montaje
del robot.
Adems del ir montando las piezas que constituyen nuestro robot, tambin
se fueron realizando las pertinentes pruebas para comprobar que realizaba las
funciones que se pretendan y de la forma que se esperaba.
En primer lugar se procedi a montar el chasis, los motores el portapilas
para alimentar los motores y el controlador adems de un interruptor para con-
trolar la alimentacin.
1 Ping Sensor de ultrasonidos
1 Pila de 9V Alimentacin
5 Pilas de 1,5V Alimentacin
1 Led Diodo
4 Resistencia de 220 Resistencias
4 Resistencia de 47K Resistencias
2 Interruptor -
1 Pirate-4WD Mobile Platform Chasis
1 Placa perforada 78x58 mm Soporte de sensores
Tabla 7 Componentes necesarios
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
74










Lo primero que se hizo fue unir los motores a los laterales utilizando unos
tornillos, estos motores se colocaron en los laterales de del chasis.
Posteriormente se procedi unir el frontal y la parte trasera, formando el
cuadro que da forma al coche.
Seguidamente mediante un cable se unieron los bornes los motores de los
laterales, de la forma que se muestra en la imagen, los cables se cruzan para
que a la hora de girar ambos giren en el mismo sentido.

Ilustracin 52 despieze de los componentes del chasis
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
75









Una vez que hemos cableados los motores, es recomendable aplicar ten-
sin a los motores para comprobar que funcionan y por lo tanto las soldaras si
hicieron de forma correcta.
Adems a uno de los motores de cada lateral se le soldaran un cable en
cada borne los cuales sern los que se conecten al controlador.









Ilustracin 53 colocacion de los motores
Ilustracin 54 disposcin de los cables de los motores
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
76
Ahora procederemos a montar en portapilas en su base, y lo atornillaremos
a la misma placa.
Ya estamos en disposicin de conectar la alimentacin al interruptor, se
conectara de la siguiente manera, el positivo del portapilas se soldara a una pa-
tilla del interruptor y en otra patilla se soldara otro cable que se conectara al
controlador; y por ltimo el negativo del portapilas se conectara a GND del con-
trolador.
Quedndonos 6 cables que se conectaran al controlador.









Los cables quedaran conectados de la siguiente manera:
- Del interruptor a VMS
- Negativo del portapilas a GND
- Positivo de los motores a B
- Negativo de los motores a A
- De GND del controlador a un pin de GND de Arduino.

Ya en estos momentos podemos atornillar la parte de arriba, en esta parte
y con ayuda de los soportes que tenemos colocamos la placa Arduino, no se debe
Ilustracin 55 dispodion final de los cables, de la alimentacion y los motores
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
77
colocar directamente sobre la placa ya que se podran producir corto circuito o
derivaciones entre las soldaduras de la placa Arduino.
A continuacin procedemos a conectar el controlador a nuestro Arduino
Mega.
Las conexiones a la placa Arduino sern as
Arduino Pin 8 -> I1 (entrada lgica 1 del puente A)
Arduino Pin 9 -> I2 (entrada lgica 2 del puente A)
Arduino Pin 11 -> EA (activador del puente A)
Arduino Pin 6 -> I3 (entrada lgica 3 del puente B)
Arduino Pin 7 -> I4(entrada lgica 4 del puente B)
Arduino Pin 10 ->EB (activador del puente A)

Estos pines que se han usado del Arduino son de tipo PWM para as poder
controlar la velocidad de los motores mediante estas seales.
Las conexiones entre el controlador y la placa Ar-
duino se realizara mediante la unin de cables hembra-
hembra y macho-macho del tipo de que se muestra en
la imagen siguiente.



En esta parte ya podemos empezar a hacer pruebas y comprobar como
nuestro robot ya se empieza a mover, un cdigo para probar como funciona
nuestro coche podemos utilizar el cdigo que se encuentra en el anexo 1 el cual
har que nuestro coche se retroceda avance y gire para ambos lados.
Ilustracin 56 cables M-H
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
78

Ahora pasaremos a la instalacin de los sensores infra-
rrojos, que como ya se dijo en otro apartado de este documento
sern cuatro estarn colocados en una placa perforada y su al-
tura se regulara con la ayuda de dos tornillos.


Las placas perforadas son unas placas las cuales cuentan con unas perfo-
raciones de un tamao suficiente para que puedan pasar las patillas de los sen-
sores









Como se observa en la imagen las patillas del sensor caben perfectamente
en los agujeros de la placa. Ahora respetando la funcin de cada patilla se pro-
ceder a realizar las conexiones ayudndonos de cables hembra-hembra y ma-
cho-macho para realizar el siguiente circuito.
Ilustracin 57 regulacin
de la placa perforada
Ilustracin 59 placa perforada
Ilustracin 58 sensor colocado en la placa
perdorada
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
79



Siendo R1=220 R2=47K, la alimentacin ser de 5 voltios procedente
de un pin de alimentacin de Arduino, la lectura de los sensores se realizara
mediante una entrada analgica, el circuito auxiliar que necesitan los sensores
para poder funcionar se montara en un placa board, quedando el circuito despus
de realizar todas las conexiones necesarias como se muestra.
Est mini placa board de ubicar
al lado del Arduino por lo que
sus conexiones se podrn reali-
zar rpidamente.
Para comprobar que el circuito
funciona correctamente, pode-
mos realizar varias pruebas, la
primera consistira en alimentar
el Arduino y comprobar que los
diodos infrarrojos de los senso-
res se encienden, recordamos que para ver si estn encendido debemos ayudar-
nos de una cmara, ya que a ser el diodo de luz infrarroja no lo podemos ver a
simple vista.
Ilustracin 60 esquema para el circuito auxilar de los sensores infrarrojos y disposcion del patillaje del sensor
Ilustracin 61 placa board con circuito auxiliar de los sensores
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
80
Como ya se coment en el apartado de pruebas de los sensores infrarro-
jos, se realiz un sketch para probar que datos recogan los sensores, datos los
cuales se visualizaron mediante el monitor serial del compilador de Arduino. El
cdigo que se emple para la realizacin de esta prueba se puede encontrar en
el anexo 2.
Las entradas analgicas que se utilizaron para la lectura de los datos de
los sensores fueron:
- Cny70 1 entrada A14.
- Cny70 2 entrada A0.
- Cny70 3 entrada A13.
- Cny70 4 entrada A12.
La distribucin de los sensores si se mira de frente es la que se muestra
en la imagen.


Fototransistor
Emisor diodo LED infrarrojo
1
2
3
4
Ilustracin 62 disposicin de los sensores
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
81
Ya podemos seguir con el montaje de nuestro robot, ahora se sigui con
el montaje del sensor de ultrasonidos, este se ubic en la parte superior de nues-
tro robot como ya se haba comentado en apartados anteriores, este sensor se
conect sobre otra mini placa board y desde ella se llevaron a cabo las conexiones
entre el sensor y los pines de nuestra placa Arduino Mega.








Para comprobar si toda esta correcto podemos utilizar el sketch que
se muestra en el apartado pruebas sensor ultrasonidos, y que tambin se en-
cuentra en el anexo 3.
Las conexiones que se emplearon en el Arduino fueron las siguientes:
- GND a un pin GND de Arduino.
- 5V a un pin de alimentacin.
- SIG al pin 3.
Solamente nos queda ya colocar un interruptor el cual nos servir para
cambiar el modo de funcionamiento del robot, del modo sigue lnea al modo salir
del mogolln, se cambiara de modo dependiendo del estado del interruptor, este
estado se leer mediante una entrada de tipo digital.
Ilustracin 63 montaje del sensor Ping
Ilustracin 64 esquema sensor ping
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
82
Este interruptor se encontrara en la zona sealada en
la imagen y esa placa corresponde con lo que sera la
segunda planta del coche. El circuito formara el siguiente
circuito se conectara de la forma que tambin se indica
en la imagen.




La entrada de Arduino que se utilizara ser el pin 2.
Este pequeo circuito se montara en la misma mini placa board que se
encuentra el sensor de ultrasonido, ya que comparten algunas conexiones y por
cercana entre el sensor y el interruptor.
Para probar si el interruptor hace su funcin, se puede utilizar el sketch
que se cre para esta funcin, este sketch se puede encontrar en el anexo 4, y
con este sketch se puede observar el estado del interruptor mediante el monitor
serial.
Siendo un 1 cuando el interruptor se encuentra cerrado y un 0 cuando
est abierto. Adems se va incluir un diodo LED para ver de manera visual en
qu modo de funcionamiento se encuentra en cada momento.

Ilustracin 65 parte superior
del robot
Ilustracin 66 esquema del circuito necesario para cambiar de modo
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
83
5. Sigue lneas

En este apartado se va a explicar cmo funciona el robot en este modo
de funcionamiento.
Mientras el robot se encuentra en este modo de funcionamiento se puede
encontrar con 4 situaciones, las cuales dependiendo la que ocurra tendr que
solventarla de una manera u otra. Estas situaciones pueden ser:
Se recuerda que para el modo de sigue lnea solo se usaran los sensores
1 y 2.
Para este modo de funcionamiento se realiz un sketch en el que se ana-
lizan los valores que obtienen los sensores y en funcin de ellos se decide el
movimiento que va a desarrollar el robot, el sketch se puede consultar en el
anexo 5.

Sensor 1 y 2 sobre negro
Ante esta situacin en la que los datos proporcionados por los sensores le
indiquen al microcontrolador que estos sensores se encuentran sobre una lnea
negra, el microcontrolador manda la orden a los motores para que avancen. Para
avanzar todos los motores giran en el mismo sentido que en este caso es hacia
delante.
Esta orden de que los motores giren hacia delante se estar produciendo
hasta que los datos proporcionados por los sensores indiquen que la situacin de
los sensores es otra. La situacin de los sensores respecto a la lnea negra se
puede observar en la siguiente imagen, esta situacin es si se mira desde arriba.

Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
84








Sensor 2 negro, sensor 1 blanco
Ante esta situacin en la que los datos de los sensores le indican al micro-
controlador que el sensor 1 si se encuentra sobre un fondo negro, mientras que
los datos del sensor 2 indican que el fondo sobre el que se encuentra este sensor
es un fondo blanco, el microcontrolador manda la orden pertinente a los motores
para que el robot gire hacia la izquierda.
Esta orden la cual propicia que los motores de la izquierda giren hacia
atrs y lo de la derecha hacia delante se estar produciendo hasta que los datos
proporcionados por los sensores indiquen que la situacin del robot respecto a la
lnea es diferente. La situacin de los sensores respecto a la lnea negra se puede
observar en la siguiente imagen, esta situacin es si se mira desde arriba.








1 2
3
4
Direccin de
Avance
1 2
3
4

Direccin
de
Avance
Ilustracin 67 situacin de sensores
en modo sigue linea
Ilustracin 68 situacin de sensores en modo sigue
linea

Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
85
Sensor 1 negro, sensor 2 blanco.
Ante esta situacin en la que los datos que proporcionan los sensores in-
dican que el sensor 1 se encuentra sobre la lnea negra, mientras el sensor 2 se
encuentra sobre un fondo blanco, esto lo interpreta el microcontrolador y manda
la instruccin pertinente a los motores para que el robot gire hacia la derecha.
Esta orden de que los motores de la derecha giren hacia atrs y los de la
izquierda hacia delante se estar produciendo hasta que los datos proporcionados
por los sensores indiquen que la situacin del robot sobre la lnea sea otra. La
situacin de los sensores respecto a la lnea negra se puede observar en la
siguiente imagen, esta situacin es si se mira desde arriba.











Sensor 1 y 2 sobre blanco
Ante esta situacin en la que los datos que proporcionan los sensores le
indican al microcontrolador que el sensor 1 y el sensor 2 se encuentran sobre
fondo blanco, esta situacin aunque no debera ocurrir puede suceder si el robot
al tomar una curva muy cerrada se ha salido del trazado, y ante esta situacin el

Direccin de
Avance
Ilustracin 69 situacin de sensores en
modo sigue linea

Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
86
microcontrolador manda la orden pertinente a los motores para retrocedan y de
esta manera se espera que los sensores encuentre otra vez el color negro.
Esta orden de que los motores giren hacia atrs se estar produciendo
hasta que los datos proporcionados por los sensores indiquen que la situacin de
los sensores es otra. La situacin de los sensores respecto a la lnea negra se
puede observar en la siguiente imagen, esta situacin es si se mira desde arriba.











6 Salir del Mogolln
En este apartado se va explicar cmo reacciona el robot ante las situacio-
nes que se le pueden presentar mientras se encuentra en el modo para realizar
la prueba llamada salir del mogolln.
Recordamos que el circuito al cual se enfrentara en esta prueba tendra
un aspecto parecido al que se muestra en la siguiente imagen.
El sketch que se ha elaborado para este modo de funcionamiento se puede
ver en el anexo 6

Direccin
de Avance
Ilustracin 70 situacin de sensores en modo
sigue linea

Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
87









Para solventar esta prueba se analizan los datos que proporcionan los 4
sensores infrarrojos de los cuales dispone el robot, y las situaciones con las cuales
se puede encontrar en el trascurso de las pruebas para las cuales debe reaccionar
de una manera especfica son las que se muestran a continuacin.
Todos los sensores blanco
Ante esta situacin en la que los datos que ofrecen los sensores indican
que se encuentran solamente sobre una superficie de color blanco, es interpre-
tado por el microcontrolador, y da la orden a los motores para que estos avancen.
En el trascurso de esta orden todos los motores giran en el mismo sentido
que es el de avanzar. Esta situacin se representa en la imagen que se muestra
a continuacin.
Ilustracin 71 Circuito para prueba Salir del mogolln
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
88










Sensor 3 negro y los sensores 1 ,2 y 4 blanco

Ante esta situacin en la que los datos que proporciona el sensor numero
3 indican que se encuentra sobre lnea negra, mientras que los dems sensores
indican que estn sobre una superficie blanca, estos datos los interpreta el mi-
crocontrolador y toma la decisin de que el robot debe girar hacia la izquierda
por lo que manda la orden pertinente a los motores que la efectuaran, y esta
orden se estar llevado a cabo hasta que los datos que proporcionan los sensores
indiquen que la situacin del robot es otra diferente.
Mientras dura esta instruccin los motores giran los de la parte izquierda
hacia atrs y los de la parte derecha hacia delante. Y esta instruccin se est
repitiendo hasta que los datos proporcionados por los sensores indiquen que el
robot se encuentra en otra situacin.
1 2
3
4
Ilustracin 72 situacin de sensores para prueba salir del
mogolln
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
89










El sensor 1 y 3 negro, el sensor 2 y 4 blanco
En esta situacin en la que los datos proporcionados por los sensores 1
y 3 indican que estn sobre la lnea negra que limita el cerco, mientras que los
sensores 4 y 2 indican mediante sus datos que se encuentran sobre una superficie
blanca, hacen que el microcontrolador tome la decisin pertinente que en este
caso es la de ordenar al robot que se desplace hacia la izquierda, y se produce
cuando los motores de la parte izquierda giran hacia atrs mientras que los mo-
tores de la parte derecha giran avanzan.
Esta accin por parte de los motores se estar produciendo hasta que
los datos que proporcionan los sensores le hagan tomar al microcontrolador otra
decisin. Esta situacin se simula en la imagen que sigue.


1 2
3
4

Direccin
de Avance
Ilustracin 73 situacin de sensores para
prueba salir del mogolln
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
90











Sensor 1 y 2 negro, el sensor 3 y 4 blanco.
Ante esta situacin en la que los datos que recogen los sensores indican
que los sensores 1 y 2 se encuentran sobre lnea negra que limita el permetro
del cerco, mientras que los sensores 3 y 4 detectan que se encuentran sobre una
superficie blanca, el microcontrolador acta, ordenando que gire sobre s mismo
hasta que los sensores detecten que se encuentran en otra situacin y actuara
el microcontrolador de la manera que proceda en ese caso.
1 2
3
4
Direccin
de Avance
Ilustracin 74 situacin de sensores para
prueba salir del mogolln
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
91











Sensores 2 y 4 negro, el sensor 1 y 3 blanco
En esta situacin en la cual los valores de los sensores arrogan el dato de
que los sensores 4 y 2 se encuentran sobre la lnea perimetral del cerco, mientras
que los datos proporcionados por los sensores 1 y 3 indican que ellos se encuen-
tran sobre una superficie blanca. Estos datos le hacen al microcontrolador tomar
la decisin de que el robot debe desplazarse hacia la derecha esta accin se
realiza poniendo los motores de la parte derecha a girar hacia atrs, mientras
que los motores de la parte izquierda avanzan. Esto estar producindose hasta
que los datos son proporcionados por los sensores le hagan al microcontrolador
tomar otra decisin.
Una representacin de una situacin en la cual se tuviera que proceder de
esta manera, puede ser la que se muestra en la imagen.


1 2
3
4

Direccin
de Avance
Ilustracin 75 situacin de sensores para
prueba salir del mogolln

Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
92









Sensor 4 negro y el sensor 1 , 3 y 2 blanco
Para afrontar esta situacin en la que los datos de los sensores indican
que solamente el sensor 4 se encuentra sobre fondo blanco, hace que el micro-
controlador tome de la decisin de que el robot debe girar hacia la derecha, por
lo que el microcontrolador mandara la instruccin a los motores para que giren
hacia la derecha, esta accin se realiza cuando los motores de la parte izquierda
giran hacia delante, mientras que los de la derecha retroceden. Esta accin se
estar repitiendo hasta que los datos que proporcionan los sensores indiquen una
situacin distinta.
Una representacin de una situacin en la cual se tuviera que proceder de
esta manera, puede ser la que se muestra en la imagen.
1 2
3
4

Direccin
de Avance
Ilustracin 76 situacin de sensores
para prueba salir del mogolln

Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
93











Sensor 1 negro y los dems sensores blanco
En esta situacin en la que el nico sensor que se encuentra sobre
negro, segn los datos que proporciona este sensor , mientras que los datos de
los dems sensores indican que estn sobre fondo blanco, en esta situacin y
con estos datos el microcontrolador ordena que robot debe cambiar su posicin
para que todos los sensores se encuentren sobre fondo blanco, y para que esto
ocurra el robot debe desplazarse hacia izquierda y para esto los motores de la
parte izquierda giraran hacia atrs mientras que los de la derecha avanzaran.
Esta accin se estar repitiendo hasta que los datos que aportan los
sensores hagan que el microcontrolador tome otras decisin, una posible situa-
cin para la cual el microcontrolador tendra que actuar de esta manera, pude
ser la que se muestra en la siguiente imagen.

1 2
3
4

Direccin de
Avance
Ilustracin 77 situacin de sensores para
prueba salir del mogolln

Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
94











Sensor 2 negro , el sensor 3 , 1 y 4 blanco
Cuando el robot se encuentra en una situacin en la cual los datos que
proporcionan los sensores indican que todos los sensores se encuentran sobre
fondo blanco excepto el sensor 2. Ante esta situacin el microcontrolador tras
analizar los datos de los sensores toma la decisin de que el robot debe cambiar
su posicin hasta que los datos de todos los sensores indique que se encuentra
sobre fondo blanco, y para que esto ocurra el robot debe desplazarse hacia la
derecha, y para que esta accin se lleve a cabo los motores de la parte izquierda
deben avanzar mientras que los del otro lateral se encuentras girando hacia atrs.
Esta accin se estar repitiendo hasta que los datos que aportan los sen-
sores hagan que el microcontrolador tome otras decisin, una posible situacin
para la cual el microcontrolador tendra que actuar de esta manera, pude ser la
que se muestra en la siguiente imagen.

1 2
3
4
Direccin
de Avance
Ilustracin 78 situacin de sensores para
prueba salir del mogolln

Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
95











7 Detector de Obstculos

Este modo de funcionamiento estar activo durante el desarrollo de todas
las pruebas, y servir para evitar que robot se coche contra los obstculos que
se pueda encontrar.
Esta deteccin se realiza mediante un sensor de ultrasonidos cuyo funcio-
namiento ya se explic en el apartado sensor de ultrasonidos.
Los datos que obtenga este sensor son tomados como prioritarios sobre
los datos que sean obtenidos por los sensores infrarrojos, ya que se prioriza que
el robot no tenga obstculos antes que el fondo sobre el cual se encuentren los
sensores.
Cuando los datos que proporciona este sensor indican que a 13 cm o
menos distancia del robot se encuentra un obstculo el cual tiene que tener como
mnimo un altura de 17 cm para que pueda ser detectado por este sensor ya
1 2
3
4

Direccin
de Avance
Ilustracin 79 situacin de sensores para
prueba salir del mogolln

Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
96
que si se encontrara situado a otra altura no podra rebotar en el objeto el
ultrasonido enviado por el sensor para detectar obstculos, tambin este obs-
tculo debe ser de un tamao determinado ya que si es demasiado pequeo el
reflejo del ultrasonido no sera de las mismas caractersticas que el emitido y por
lo tanto no se podra determinar con certeza la distancia a la cual se encuentra
el obstculo.
El cdigo definitivo en el cual intervienen todos los circuitos y es el que se
ha empleado en el desarrollo de las pruebas del robot se puede encontrar en el
anexo 7
8 Presupuesto

8.1 Coste de la mano de obra

8.1.1 Salario

Tcnico Superior Meses Sueldo/mes Total
1 2 1.500,00
3.000,00

Total
3.000,00

Tabla 8 Salario

8.1.2 Cargas Sociales



Concepto Porcentaje
Contingencias Generales 28,30%
Desempleo, fondo de garanta salarial
y formacin profesional 8,90%
Accidentes 0,99%
Total 38,19%
38,19% del salario (3.000) 1.175,70
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
97


8.1.3 Coste de mano de obra

Concepto Importe
Salario 3.000,00
Cargas sociales 1.175,70
Total 4.175,70
Tabla 10 coste de mano de obra
8.2 Costes de materiales

Microcontrolador Unidades Precio Unitario Total
Arduino Mega 1 41,00 41,00
Total 41,00
Ruedas Unidades Precio Unitario Total
Ruedas de goma para A4WD y
A2WD 65 x 25 mm 4 3,70 14,80
Total 14,80
Motores Unidades Precio Unitario Total
Micro DC Motor engranado con
Shaft Volver 4 3,78 15,12
Total 15,12
Controlado motores Unidades Precio Unitario Total
CONTROLADOR DE MOTORES
DOBLE PUENTE H - L298 1 21,50 21,50
Total 21,50
Sensores Infrarrojos Unidades Precio Unitario Total
CNY70 4 1,40 5,60
Total 5,60
Sensor Ultrasonidos Unidades Precio Unitario Total
Ping 1 27,30 27,30
Total 27,30
Alimentacin Unidades Precio Unitario Total
Pila 9V 1 3,00 3,00
Pilas 1,5 V 5 0,53 2,65
Adaptador 9V a Jack Alimenta-
cin 1 2,30 2,30
Total 7,95
Tabla 9 cargas sociales
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
98
Chasis Unidades Precio Unitario Total
Pirate-4WD Mobile Platform 1 9,00 9,00
Total 9,00
Componentes electrnicos Unidades Precio Unitario Total
Cables Jumper M-M 210mm 10 0,29 2,85
Cables Jumper M-M 150mm 50 0,20 9,85
Cables Jumper H-H 20 0,29 5,70
Mdulo Board 170 Pines 2 3,85 7,70
Placa Perforada 58x79 mm 1 2,45 2,45
Resistencia 220 5 0,20 1,00
Resistencia 47 K 4 0,20 0,80
Led 1 0,02 0,02
Interruptor 2 0,81 1,62
Tornillos 40 0,20 8,00
Tuercas 25 0,08 2
Total 41,99
TOTAL 184,26
Tabla 11 costes de materiales

8.3 Gastos Varios

Concepto Importe
Material de oficina, foto-
copias, encuadernacin,
cinta aislante, papel
Kraft
23,00
Total 23,00

Tabla 12 gastos varios

8.4 Gastos Generales

Son los concernientes al equipamiento empleado para medidas y pruebas
en concepto de amortizacin de los equipos y gastos de energa. Se han estimado
como el 10% de los apartados 8.1, 8.2 y 8.3.

Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
99
Concepto Importe Porcentaje Importe
Coste de mano de obra 4.175,70 10% 417,57
Coste de materiales 184,26 10% 18,726
Gastos varios 23,00 10% 2,3
Total 438,59
Tabla 13 gastos generales
8.5 Importe Total del Proyecto

Concepto Importe
Coste de mano de obra 4.175,70
Coste de materiales 184,26
Gastos Varios 23,00
Gastos generales 438,59
TOTAL 4.821,55
Tabla 14 importe total del proyecto

El importe total del proyecto realizado asciende a CUATRO MIL
OCHOCIENTOS VEINTIUNO Y CINCUENTA Y CINCO CNTIMOS de
EUROS SIN IVA

9 Puntos fuertes y futuras mejoras del robot.

A continuacin se van a desarrollar posibles mejoras que se le pueden
aplicar robot para su funcionamiento. Para ello en primer lugar se analizaran los
principales puntos fuertes del robot y despus se comentaran las posibles mejo-
ras que se le pueden realizar al robot.
9.1 Puntos fuertes del Robot

Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
100
9.1.1 Tamao

Un punto fuerte del robot es su tamao, el cual hace que se pueda utilizar
para las competiciones de robot de este tipo. Cuando se inici este proyecto se
pens elaborar un robot como si se fuera a presentar a un concurso, por lo cual
debamos cumplir una serie de reglas, como son las del tamao que han sido
respetadas, ya que las dimensiones del robot son de 27 cm de largo por 15,5
cm de ancho y 14,5 cm de alto.









15,5
27 cm
Ilustracin 80 dimensiones del robot
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
101












9.1.2 Peso

Otro aspecto interesante es el peso del robot pese a que las piezas que se
han utilizado son mayoritariamente de metlicas. Todo el conjunto pesa 1Kg

9.1.3 Velocidad

El tercer punto fuerte del robot es su velocidad. Haciendo pruebas en cir-
cuitos sin apenas curvas se han alcanzado velocidades de hasta 45 cm/s
9.1.4 Estructura

El ltimo punto fuerte de este robot, es su estructura la cual le configura
una gran resistencia frente a golpes, ya que est formado en su gran mayora
14,5 cm
Ilustracin 81 dimensiones del robot
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
102
por piezas metlicas, por lo que con unas pequeas modificaciones podra tam-
bin competir en las pruebas de Sumo, que son otras pruebas bastantes usuales
en las competiciones de robot de estas caractersticas.
9.2 Posibles mejoras

9.2.1 Disposicin de los sensores infrarrojos.

La mejora ms evidente que se podra llevar a cabo es la de cambiar las
disposicin de los sensores infrarrojos, para que estos se dispongan de ms am-
plitud para rastrear el circuito y de esta manera que se pueda anticipar antes y
con ms precisin a los cambios en el trazado que se presenten.
9.2.2 Circuito para los sensores.

Una mejora que puede repercutir en la disminucin del nmero de cables
empleados al igual que en el aspecto visual que dara el robot al estar ms libre
de cables, es la de implementar el circuito auxiliar que necesitan los sensores
infrarrojos para su funcionamiento en la misma placa perforada en la que se
encuentran los sensores.
9.2.3 Colocacin del sensor de ultrasonidos.

Otro aspecto que se podra mejorar y el cual repercutira en las funciona-
lidades del robot, en la colocacin del sensor de ultrasonido, el cual se encuentra
en una posicin esttica, desde la cual solamente puede detectar los obstculos
que se encuentran delante de ellos, sim embargo una solucin sera la de colocar
este sensor sobre un pan/tilt el cual fuera modificando su posicin tanto de ma-
nera vertical como horizontal y as se podran detectar la presencia de obstculos
en todo el frente por el cual se puede mover el robot.
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
103
10 Conclusiones

El principal objetivo con el que se inici este proyecto fue el de profundizar
en la programacin de microcontroladores, ya que durante el trascurso del grado,
solo se haba tratado apenas un trimestre, y resulto que fue una de las ensean-
zas que ms me gustaron. De esta forma, y gracias a la robtica se pudo profun-
dizar en la programacin de microcontroladores de una forma entretenida e in-
cluso, divertida segn el momento.
Adems, con la realizacin de este proyecto se han tratado diversos temas.
Documentacin: se ha tenido que leer multitud de hojas de caractersticas
de componentes para conseguir que todos los elementos que formasen el
robot fueran compatibles.
Electrnica: se ha tenido que escoger elementos como resistencias y con-
densadores para que todo el sistema funcione de manera ptima,
Programacin: se ha tenido que profundizar en el lenguaje de programa-
cin de Arduino

Para concluir, espero que ms estudiantes opten por realizar su Proyecto
Integrado apoyndose en la robtica y que este proyecto sirva para futuros pro-
yectos.

11 Webgrafa

Arduino: http://arduino.cc/
Circuito para CNY70: http://webdelcire.com/wordpress/wp-con-
tent/uploads/2011/04/esquemaencoder.jpg
Tienda para comprar los componentes: http://www.dfrobot.com/index.php
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
104
Normativa para concurso: http://www.iesabastos.org/webfm_send/510
Pines de Arduino Mega: http://www.arduteka.com/wp-con-
tent/uploads/2013/02/ArduinoMega.png
Hoja de caractersticas del sensor Ping: http://www.para-
llax.com/dl/docs/prod/acc/28015-PING-v1.3.pdf
Hoja de caractersticas del CNY70:
http://www.vishay.com/docs/83751/cny70.pdf
Como leer el estado de un interruptor: http://es.scribd.com/doc/56803303/Tuto-
rial-3-Botones
http://tcrobotics.blogspot.com.es/2011/05/orugasrobot-arduinoorugaspan.html
http://xapus.blogspot.com.es/
http://lab.cavedu.com/arduino
http://exergy123.blogspot.com.es/2011/12/proyecto-ejemplo.html
http://alonsodub.wordpress.com/2012/06/10/sensor-cny70/
http://mehedesvelado.blogspot.com.es/2012/03/primeros-pasos-con-arduino-
mini-robot.html
http://arduino.cc/es/Main/ArduinoBoardMega
http://www.muchotrasto.com/TiposDePlataformas.php
http://blog.reclone3d.com/category/arduino/
http://tecnopujol.wordpress.com/
http://cochearduino.blogspot.com.es/
http://arduino.cc/en/Main/Software
http://josemanuelruizgutierrez.blogspot.com.es/
http://seaside.citilab.eu/scratch
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
105
Anexo: Cdigos.

Anexo 1: Pruebas de funcionamiento de los motores y controlador.

/****************************************************************
* Prueba funcionamiento motores y controlador *
*****************************************************************/


#define MOTOR1_CTL1 8 // I1 Entrada lgica 1 del puente A
#define MOTOR1_CTL2 9 // I2 Entrada lgica 2 del puente A
#define MOTOR1_PWM 11 // EA Activador del puente A

#define MOTOR2_CTL1 6 // I3 Entrada lgica 1 del puente B
#define MOTOR2_CTL2 7 // I4 Entrada lgica 2 del puente B
#define MOTOR2_PWM 10 // EB Activador del puente B

#define MOTOR_DIR_FORWARD 0
#define MOTOR_DIR_BACKWARD 1

/*
===============
= SETUP =
===============*/

void setup()
{
// Se declaran los pines como salida

// Pines para el motor 1
pinMode(MOTOR1_CTL1,OUTPUT);
pinMode(MOTOR1_CTL2,OUTPUT);
pinMode(MOTOR1_PWM,OUTPUT);

// Pines para el motor 2
pinMode(MOTOR2_CTL1,OUTPUT);
pinMode(MOTOR2_CTL2,OUTPUT);
pinMode(MOTOR2_PWM,OUTPUT);
}


void setSpeed(char motor_num, char motor_speed)
{
if (motor_num == 1) // Si en el loop se indica el motor 1
{
analogWrite(MOTOR1_PWM, motor_speed); //se activa el puente A que controla los motores 1
}
else
{
analogWrite(MOTOR2_PWM, motor_speed); //se activa el puente B que controla los motores 2
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
106
}
}

void motorStart(char motor_num, byte direction)
{

char pin_ctl1; // la variables pin_ctl1 como tipo texto, pin de control de los motores conector A
del controlador
char pin_ctl2; // la variables pin_ctl2 como tipo texto, pin de control de los motores conector B
del controlador

if (motor_num == 1) // motores 1 los que se encuentran a la derecha si se mira el coche desde
atrs.
{
pin_ctl1 = MOTOR1_CTL1; // se iguala el valor de pin de control al de la variable motor1
pin_ctl2 = MOTOR1_CTL2; // se iguala el valor de pin de control al de la variable motor2
}
else
{
pin_ctl1 = MOTOR2_CTL1; // se iguala el valor de pin de control al de la variable motor1
pin_ctl2 = MOTOR2_CTL2; // se iguala el valor de pin de control al de la variable motor2
}

/*
=============
= Direccin =
=============*/

switch (direction)
{
case MOTOR_DIR_FORWARD: // caso para que los motores avancen
{
digitalWrite(pin_ctl1,LOW); // conector A del controlador cable negro
digitalWrite(pin_ctl2,HIGH); // conector B del controlador cable rojo
}
break;

case MOTOR_DIR_BACKWARD: // caso para que los motores retrocedan
{
digitalWrite(pin_ctl1,HIGH); //conector A del controlador cable negro
digitalWrite(pin_ctl2,LOW); // conector B del controlador cable rojo
}
break;
}
}

/*
===============
= LOOP =
===============
*/
void loop()
{
//AVANZA
motorStart(1, MOTOR_DIR_FORWARD); // motores 1 avanza
setSpeed(1, 200); //setSpeed( n motor, velocidad rpm)
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
107
motorStart(2, MOTOR_DIR_FORWARD); // motores 2 avanza
setSpeed(2, 200); //setSpeed( n motor, velocidad rpm)

delay(2000); //est avanzando durante 2 segundos

// RETROCEDE
motorStart(1, MOTOR_DIR_BACKWARD); // motores 1 retrocede
setSpeed(1, 200); //setSpeed(motor, velocidad rpm)
motorStart(2, MOTOR_DIR_BACKWARD); // motores 2 retrocede
setSpeed(2, 200); //setSpeed( n motor, velocidad rpm)

delay(2000); //est retrocediendo durante 2 segundos

//IZQUIERDA
motorStart(1, MOTOR_DIR_FORWARD); // motores 1 avanza
setSpeed(1, 140); //setSpeed(motor, velocidad rpm)
motorStart(2, MOTOR_DIR_BACKWARD); // motores 2 retrocede
setSpeed(2, 140); //setSpeed( n motor, velocidad rpm)

delay(2000); //est girando hacia la izquierda durante 2 segundos

//DERECHA
motorStart(1, MOTOR_DIR_BACKWARD); // motores 1 retrocede
setSpeed(1, 140); //setSpeed(motor, velocidad rpm)
motorStart(2, MOTOR_DIR_FORWARD); // motores 2 avanza
setSpeed(2, 140); //setSpeed( n motor, velocidad rpm)

delay(2000); //est girando hacia la derecha durante 2 segundos

}

Anexo 2 Pruebas de los sensores infrarrojos.

/****************************************************************
* Prueba funcionamiento sensores infrarrojos *
*****************************************************************/

/*
===============
= SETUP =
===============*/
void setup()
{
Serial.begin (9600);// definir la velocidad de transmisin en baudios
}

/*
===============
= LOOP =
===============
*/
void loop ()
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
108
{
int cny1 = analogRead(A14);//Declaracin de variable y asignacin del valor ledo de la entrada
A14
Serial.println(cny1); //Imprimir el dato de la variable cny1
int cny2 =analogRead(A0);//Declaracin de variable y asignacin del valor ledo de la entrada
A0
Serial.println(cny2);//Imprimir el dato de la variable cny2
int cny3=analogRead (A13);//Declaracin de variable y asignacin del valor ledo de la entrada
A13
Serial.println(cny3);//Imprimir el dato de la variable cny3
int cny4=analogRead (A12);//Declaracin de variable y asignacin del valor ledo de la entrada
A12
Serial.println(cny4);//Imprimir el dato de la variable cny4
Serial.println("\n"); // Imprimir un salto de lnea
delay (500); // esperar 500 ms
}


Anexo 3 Prueba funcionamiento sensor Ping

/****************************************************************
* Prueba funcionamiento Sensor Ping *
*****************************************************************/

const int pingPin = 3; // declaracin de constante de tipo entero y asignacin de pin

/*
===============
= SETUP =
===============*/
void setup() {

Serial.begin(9600); // inicializacin comunicacin serial
}

/*
===============
= LOOP =
===============
*/
void loop()
{
long duration, cm;//definir variables de tipo long
pinMode(pingPin, OUTPUT);
digitalWrite(pingPin, LOW);
delayMicroseconds(2);
digitalWrite(pingPin, HIGH);
delayMicroseconds(5);
digitalWrite(pingPin, LOW);
pinMode(pingPin, INPUT);
duration = pulseIn(pingPin, HIGH);

cm = microsecondsToCentimeters(duration); // convertir tiempo en distacia
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
109
Serial.print(cm); // imprimir el valor de la variable cm
Serial.print("cm"); // imprimir la letras cm
Serial.println();

delay(100);
}
long microsecondsToCentimeters(long microseconds)
{
return microseconds / 29 / 2;
}


Anexo 4 Cambiar de modo

/****************************************************************
* Interruptor cambiar de modo *
*****************************************************************/
/*
===============
= SETUP =
===============*/
void setup ()
{

Serial.begin (9600);
}
/*
===============
= LOOP =
===============
*/
void loop ()
{
int inter = digitalRead(2);
Serial.println(inter);
}


Anexo 5 Seguidor de lnea

/****************************************************************
* Seguidor de linea *
*****************************************************************/
#define MOTOR1_CTL1 8 // I1 Entrada lgica 1 del puente A
#define MOTOR1_CTL2 9 // I2 Entrada lgica 2 del puente A
#define MOTOR1_PWM 11 // EA Activador del puente A

#define MOTOR2_CTL1 6 // I3 Entrada lgica 1 del puente B
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
110
#define MOTOR2_CTL2 7 // I4 Entrada lgica 2 del puente B
#define MOTOR2_PWM 10 // EB Activador del puente B

#define MOTOR_DIR_FORWARD 0
#define MOTOR_DIR_BACKWARD 1


/*
===============
= SETUP =
===============*/
void setup()
{
Serial.begin (9600);

// Se declaran los pines como salida

// Pines para el motor 1
pinMode(MOTOR1_CTL1,OUTPUT);
pinMode(MOTOR1_CTL2,OUTPUT);
pinMode(MOTOR1_PWM,OUTPUT);

// Pines para el motor 2
pinMode(MOTOR2_CTL1,OUTPUT);
pinMode(MOTOR2_CTL2,OUTPUT);
pinMode(MOTOR2_PWM,OUTPUT);
}

void setSpeed(char motor_num, char motor_speed)
{
if (motor_num == 1) // Si en el loop se indica el motor 1
{
analogWrite(MOTOR1_PWM, motor_speed); // se activa el puente A que controla los motores 1
}
else
{
analogWrite(MOTOR2_PWM, motor_speed); // se activa el puente B que controla los motores
}
}

void motorStart(char motor_num, byte direction)
{

char pin_ctl1; // la variables pin_ctl1 como tipo texto, pin de control de los motores conector A
del controlador
char pin_ctl2; // la variables pin_ctl2 como tipo texto, pin de control de los motores conector B
del controlador

if (motor_num == 1) // motores 1 los que se encuentran a la derecha si se mira el coche desde
atras.
{
pin_ctl1 = MOTOR1_CTL1; // se iguala el valor de pin de control al de la variable motor1
pin_ctl2 = MOTOR1_CTL2; // se iguala el valor de pin de control al de la variable motor2
}
else
{
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
111
pin_ctl1 = MOTOR2_CTL1; // se iguala el valor de pin de control al de la variable motor1
pin_ctl2 = MOTOR2_CTL2; // se iguala el valor de pin de control al de la variable motor2
}

/*
=============
= Direccin =
=============*/

switch (direction)
{
case MOTOR_DIR_FORWARD: // caso para que los motores avancen
{
digitalWrite(pin_ctl1,LOW); // conector A del controlador cable negro
digitalWrite(pin_ctl2,HIGH); // conector B del controlador cable rojo
}
break;

case MOTOR_DIR_BACKWARD: // caso para que los motores retrocedan
{
digitalWrite(pin_ctl1,HIGH); // conector A del controlador cable negro
digitalWrite(pin_ctl2,LOW); // conector B del controlador cable rojo
}
break;
}
}

/*
===============
= LOOP =
===============
*/
void loop()
{
// Start motors!
int cny1 = analogRead(A14);//Declaracin de variable y asignacin del valor ledo de la entrada
A14
int cny2 = analogRead (A0); //Declaracin de variable y asignacin del valor ledo de la entrada
A0

Serial.println(cny1); //Imprimir el dato de la variable cny1
Serial.println(cny2); //Imprimir el dato de la variable cny2
Serial.println("\n"); // Imprimir un salto de lnea

if (cny1>1005 && cny1<1025 && cny2>1005 && cny2<1025) // cny1 negro y cny2 negro
{
//AVANZA
motorStart(1, MOTOR_DIR_FORWARD); // motores 1 avanza
setSpeed(1, 100); //setSpeed( n motor, velocidad rpm)
motorStart(2, MOTOR_DIR_FORWARD); // motores 2 avanza
setSpeed(2,100); //setSpeed( n motor, velocidad rpm)
}
else if (cny1<1002 && cny1>970 && cny2<1025 && cny2>1005)// cny1 blanco cny2 negro
{
// Izquierda
motorStart(1, MOTOR_DIR_FORWARD); // motores 1 avanza
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
112
setSpeed(1, 140); //setSpeed( n motor, velocidad rpm)
motorStart(2, MOTOR_DIR_BACKWARD); // motores 2 retrocede
setSpeed(2,140); //setSpeed( n motor, velocidad rpm)
}
else if (cny2<1002 && cny2>970 && cny1<1025 && cny1>1005) // cny2 blanco y cny2 negro
{
// Derecha
motorStart(1, MOTOR_DIR_BACKWARD); // motores 1 retrocede
setSpeed(1, 140); //setSpeed( n motor, velocidad rpm)
motorStart(2, MOTOR_DIR_FORWARD); // motores 2 avanza
setSpeed(2, 140); //setSpeed( n motor, velocidad rpm)
}
else if (cny1<1002 && cny1>970 && cny2<1002 && cny2>970) // cny1 y cny2 blanco
{
// RETROCEDE
motorStart(1, MOTOR_DIR_BACKWARD); // motores 1 retrocede
setSpeed(1,50); //setSpeed( n motor, velocidad rpm)
motorStart(2, MOTOR_DIR_BACKWARD); // motores 2 retrocede
setSpeed(2, 50); //setSpeed( n motor, velocidad rpm)
}

}

Anexo 6 Salir del Mogolln

/****************************************************************
* Modo salir del Mogolln *
*****************************************************************/
#define MOTOR1_CTL1 8 // I1 // I1 Entrada lgica 1 del puente A
#define MOTOR1_CTL2 9 // I2 // I2 Entrada lgica 2 del puente A
#define MOTOR1_PWM 11 // EA // EA Activador del puente A

#define MOTOR2_CTL1 6 // I3 // I3 Entrada lgica 1 del puente B
#define MOTOR2_CTL2 7 // I4 // I4 Entrada lgica 2 del puente B
#define MOTOR2_PWM 10 // EB // EB Activador del puente B

#define MOTOR_DIR_FORWARD 0
#define MOTOR_DIR_BACKWARD 1

const int pingPin = 3; // definir constante para sensor ping

/*
===============
= SETUP =
===============*/
void setup()
{
Serial.begin (9600);

// Se declaran los pines como salida

// Pines para el motor 1
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
113
pinMode(MOTOR1_CTL1,OUTPUT);
pinMode(MOTOR1_CTL2,OUTPUT);
pinMode(MOTOR1_PWM,OUTPUT);

// Pines para el motor 2
pinMode(MOTOR2_CTL1,OUTPUT);
pinMode(MOTOR2_CTL2,OUTPUT);
pinMode(MOTOR2_PWM,OUTPUT);
}

void setSpeed(char motor_num, char motor_speed)
{
if (motor_num == 1) // Si en el loop se indica el motor 1
{
analogWrite(MOTOR1_PWM, motor_speed); // se activa el puente A que controla los motores 1
}
else
{
analogWrite(MOTOR2_PWM, motor_speed); // se activa el puente B que controla los motores
}
}

void motorStart(char motor_num, byte direction)
{

char pin_ctl1; // la variables pin_ctl1 como tipo texto, pin de control de los motores conector A
del controlador
char pin_ctl2; // la variables pin_ctl2 como tipo texto, pin de control de los motores conector B
del controlador

if (motor_num == 1) // motores 1 los que se encuentran a la derecha si se mira el coche desde
atras.
{
pin_ctl1 = MOTOR1_CTL1; // se iguala el valor de pin de control al de la variable motor1
pin_ctl2 = MOTOR1_CTL2; // se iguala el valor de pin de control al de la variable motor2
}
else
{
pin_ctl1 = MOTOR2_CTL1; // se iguala el valor de pin de control al de la variable motor1
pin_ctl2 = MOTOR2_CTL2; // se iguala el valor de pin de control al de la variable motor2
}

/*
=============
= Direccin =
=============*/
switch (direction)
{
case MOTOR_DIR_FORWARD: // caso para que los motores avancen
{
digitalWrite(pin_ctl1,LOW); // conector A del controlador cable negro
digitalWrite(pin_ctl2,HIGH); // conector B del controlador cable rojo
}
break;

case MOTOR_DIR_BACKWARD: // caso para que los motores retrocedan
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
114
{
digitalWrite(pin_ctl1,HIGH); // conector A del controlador cable negro
digitalWrite(pin_ctl2,LOW); // conector B del controlador cable rojo
}
break;
}
}


/*
===============
= LOOP =
===============
*/

void loop()
{
// Start motors!
int cny1 = analogRead(A14);//Declaracin de variable y asignacin del valor ledo de la entrada
A14
int cny2 = analogRead (A0);//Declaracin de variable y asignacin del valor ledo de la entrada
A0
int cny3 = analogRead (A13);//Declaracin de variable y asignacin del valor ledo de la entrada
A13
int cny4 = analogRead (A12);//Declaracin de variable y asignacin del valor ledo de la entrada
A12
long duration, cm;

Serial.println(cny1);//Imprimir el dato de la variable cny1
Serial.println(cny2);//Imprimir el dato de la variable cny2
Serial.println(cny3);//Imprimir el dato de la variable cny3
Serial.println(cny4);//Imprimir el dato de la variable cny4
Serial.println("\n");

/* Activacin sensor Ping y cambio de modo del pin de seal del sensor*/
pinMode(pingPin, OUTPUT);
digitalWrite(pingPin, LOW);
delayMicroseconds(2);
digitalWrite(pingPin, HIGH);
delayMicroseconds(5);
digitalWrite(pingPin, LOW);


pinMode(pingPin, INPUT);
duration = pulseIn(pingPin, HIGH);

cm = microsecondsToCentimeters(duration);// convertir tiempo en distacia

Serial.print(cm); // imprimir el valor de la variable cm
Serial.print("cm"); // imprimir la letras cm
Serial.println();


if (cm<13) // si se detecta un obstculo a menos de 13 no se mueve
{
motorStart(1, MOTOR_DIR_BACKWARD);
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
115
setSpeed(1,0); //setSpeed( n motor, velocidad rpm)
motorStart(2, MOTOR_DIR_BACKWARD);
setSpeed(2, 0); //setSpeed( n motor, velocidad rpm)


}
else // si no objeto
{
if (cny3 <1025 && cny3>990 && cny1<925 && cny1>815 && cny2<925 && cny2>815 &&
cny4<925 && cny4>815)//cny3 negro dems blanco
{
// girar derecha
motorStart(1, MOTOR_DIR_FORWARD); // motores 1 avanza
setSpeed(1, 140); //setSpeed( n motor, velocidad rpm)
motorStart(2, MOTOR_DIR_BACKWARD); // motores 2 retrocede
setSpeed(2, 140); //setSpeed( n motor, velocidad rpm)

}

else if (cny1>990 && cny1<1025 && cny2>990 && cny2<1025 && cny3<925 && cny3>815
&& cny4<925 && cny4>815) // cny1 cny2 negro - cny3 cny4 blanco
{
// Gira
motorStart(1, MOTOR_DIR_ FORWARD);// motores 1 avanza
setSpeed(1, 140); //setSpeed( n motor, velocidad rpm)
motorStart(2, MOTOR_DIR_BACKWARD);// motores 2 retrocede
setSpeed(2,140); //setSpeed( n motor, velocidad rpm)
}
else if ( cny2<1025 && cny2>990 &&cny1<925 && cny1>815 && cny3<925 && cny3>815 &&
cny4<925 && cny4>815 )// cny2 negro - cny1 cny3 cny4 blanco
{
// derecha
motorStart(1, MOTOR_DIR_BACKWARD);// motores 1 retrocede
setSpeed(1, 140); //setSpeed( n motor, velocidad rpm)
motorStart(2, MOTOR_DIR_FORWARD); // motores 2 avanza
setSpeed(2, 140); //setSpeed( n motor, velocidad rpm)
}
else if (cny1<1025 && cny1>990 && cny2<925 && cny2>815 && cny3<925 && cny3>815 &&
cny4<925 && cny4>815 )// cny1 negro - cny2 cny3 cny4 blanco
{
// izuierda
motorStart(1, MOTOR_DIR_FORWARD);// motores 1 avanza
setSpeed(1, 200); //setSpeed( n motor, velocidad rpm)
motorStart(2, MOTOR_DIR_BACKWARD); // motores 2 retrocede
setSpeed(2, 200); //setSpeed( n motor, velocidad rpm)
}
else if (cny1<925 && cny1>815 && cny2<925 && cny2>815 && cny3<925 && cny3>815 &&
cny4<925 && cny4>815)// todos blanco
{
//avanza
motorStart(1, MOTOR_DIR_FORWARD);// motores 1 avanza
setSpeed(1,200); //setSpeed( n motor, velocidad rpm)
motorStart(2, MOTOR_DIR_FORWARD); // motores 2 avanza
setSpeed(2, 200); //setSpeed( n motor, velocidad rpm)
}
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
116
else if (cny4 <1025 && cny4>990 && cny1<925 && cny1>815 && cny2<925 && cny2>815 &&
cny3<925 && cny3>815)//cny4 negro - cny1 cny2 cny3 blanco
{
// derecha
motorStart(1, MOTOR_DIR_BACKWARD);// motores 1 retrocede
setSpeed(1, 200); //setSpeed( n motor, velocidad rpm)
motorStart(2, MOTOR_DIR_FORWARD); // motores 2 avanza
setSpeed(2, 200); //setSpeed( n motor, velocidad rpm)

}
else if(cny1<1025 && cny1>990 && cny3<1025 && cny3>990 && cny2<925 && cny2>815 &&
cny4<925 && cny4>815)// cny1 cny3 negro - cny2 cny4 blanco
{
// izuierda
motorStart(1, MOTOR_DIR_FORWARD);// motores 1 avanza
setSpeed(1, 200); //setSpeed( n motor, velocidad rpm)
motorStart(2, MOTOR_DIR_BACKWARD); // motores 2 retrocede
setSpeed(2, 200); //setSpeed( n motor, velocidad rpm)

}
else if (cny2<1025 && cny2>990 && cny4<1025 && cny4>990 && cny1<925 && cny1>815 &&
cny3<925 && cny3>815) // cny2 cny4 negro - cny1 cny3 blanco
{
// derecha
motorStart(1, MOTOR_DIR_BACKWARD);// motores 1 avanza
setSpeed(1, 200); //setSpeed( n motor, velocidad rpm)
motorStart(2, MOTOR_DIR_FORWARD); // motores 2 avanza
setSpeed(2, 200); //setSpeed( n motor, velocidad rpm)

}
}

}
long microsecondsToCentimeters(long microseconds)
{

return microseconds / 29 / 2;


}

Anexo 7 Cdigo Final.

/****************************************************************
* Codigo final *
*****************************************************************/
// declaracin de variables
#define MOTOR1_CTL1 8 // I1 Entrada lgica 1 del puente A
#define MOTOR1_CTL2 9 // I2 Entrada lgica 2 del puente A
#define MOTOR1_PWM 11 // EA EA Activador del puente A

#define MOTOR2_CTL1 6 // I3 Entrada lgica 1 del puente B
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
117
#define MOTOR2_CTL2 7 // I4 Entrada lgica 2 del puente B
#define MOTOR2_PWM 10 // EB Activador del puente B

#define MOTOR_DIR_FORWARD 0
#define MOTOR_DIR_BACKWARD 1

const int pingPin = 3; // declaracin de variable y asignacin del pin


/*
===============
= SETUP =
===============*/
void setup()
{
Serial.begin (9600);// velocidad de transmisin de los datos en baudios

// Se declaran los pines como salida

// Inicializacin motor 1
pinMode(MOTOR1_CTL1,OUTPUT);
pinMode(MOTOR1_CTL2,OUTPUT);
pinMode(MOTOR1_PWM,OUTPUT);

// Inicializacin motor 2
pinMode(MOTOR2_CTL1,OUTPUT); // configurar el pin como salida
pinMode(MOTOR2_CTL2,OUTPUT);// configurar el pin como salida
pinMode(MOTOR2_PWM,OUTPUT);// configurar el pin como salida
}

void setSpeed(char motor_num, char motor_speed)
{
if (motor_num == 1) // Si en el loop se indica el motor 1
{
analogWrite(MOTOR1_PWM, motor_speed); // se activa el puente A que controla los motores 1
}
else
{
analogWrite(MOTOR2_PWM, motor_speed); // se activa el puente B que controla los motores
}
}

void motorStart(char motor_num, byte direction)
{

char pin_ctl1; // la variables pin_ctl1 como tipo texto, pin de control de los motores conector A
del controlador
char pin_ctl2; // la variables pin_ctl2 como tipo texto, pin de control de los motores conector B
del controlador

if (motor_num == 1) // motores 1 los que se encuentran a la derecha si se mira el coche desde
atrs.
{
pin_ctl1 = MOTOR1_CTL1; // se iguala el valor de pin de control al de la variable motor1
pin_ctl2 = MOTOR1_CTL2; // se iguala el valor de pin de control al de la variable motor2
}
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
118
else
{
pin_ctl1 = MOTOR2_CTL1; // se iguala el valor de pin de control al de la variable motor1
pin_ctl2 = MOTOR2_CTL2; // se iguala el valor de pin de control al de la variable motor2
}

/*
=============
= Direccin =
=============*/

switch (direction)
{
case MOTOR_DIR_FORWARD: // caso para que los motores avancen
{
digitalWrite(pin_ctl1,LOW); // conector A del controlador cable negro
digitalWrite(pin_ctl2,HIGH); // conector B del controlador cable rojo
}
break;

case MOTOR_DIR_BACKWARD: // caso para que los motores retrocedan
{
digitalWrite(pin_ctl1,HIGH); // conector A del controlador cable negro
digitalWrite(pin_ctl2,LOW); // conector B del controlador cable rojo
}
break;
}
}

/*
===============
= LOOP =
===============
*/
void loop()
{
// declaracin de una variable de tipo local.
int cny1 = analogRead(A14);//Declaracin de variable y asignacin del valor ledo de la entrada
A14
int cny2 = analogRead (A0);//Declaracin de variable y asignacin del valor ledo de la entrada
A0
int cny3 = analogRead (A13);//Declaracin de variable y asignacin del valor ledo de la entrada
A13
int cny4 = analogRead (A12);//Declaracin de variable y asignacin del valor ledo de la entrada
A12
int inter = digitalRead (2);//Declaracin de variable y asignacin del valor ledo de la entrada 2
para el interruptor
long duration, cm;// declaracin e inicializacin tipo long (mas valores) para el sensor de dis-
tancia.

Serial.println(cny1); //Imprimir el dato de la variable cny1
Serial.println(cny2);//Imprimir el dato de la variable cny1
Serial.println(cny3);//Imprimir el dato de la variable cny1
Serial.println(cny4);//Imprimir el dato de la variable cny1
Serial.println("\n");// un salto entre los datos

Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
119
//activacin funcionamiento del sensor ping
pinMode(pingPin, OUTPUT); // se configura el modo de trabajo del pin como salida
digitalWrite(pingPin, LOW);// se escribe en ese pin un valor bajo
delayMicroseconds(2);// se espera 2 microsegundos
digitalWrite(pingPin, HIGH); // se escribe un valor alto en el pin
delayMicroseconds(5);// se espera 5 microsegundos
digitalWrite(pingPin, LOW);//se escribe en el pin un valor bajo


pinMode(pingPin, INPUT); // se configura el pin pingPin, ahora como una salida
duration = pulseIn(pingPin, HIGH); //a la variable duration se le asigna el valor ledo en pingPin

cm = microsecondsToCentimeters(duration); // convertir tiempo en distancia

Serial.print(cm); // imprimir dato en el monitor serial
Serial.print("cm");// imprimir en el monitor las letras cm
Serial.println(inter);// imprimir dato del estado del interruptor



if (cm<13)// si la distancia de un obstculo es menor a 13 cm
{
motorStart(1, MOTOR_DIR_BACKWARD);
setSpeed(1,0);
motorStart(2, MOTOR_DIR_BACKWARD);
setSpeed(2, 0);
}

else // si la distancia a un objeto es mayor a 13 cm
{
if (digitalRead(2)==1)//Mogolln lee el estado del pulsado y si es un realiza este bucle .
{
if (cny3 <1025 && cny3>1005 && cny1<1002 && cny1>970 && cny2<1002 && cny2>970
&& cny4<1002 && cny4>970)//cny3 negro dems blanco
{
// girar derecha
motorStart(1, MOTOR_DIR_FORWARD);
setSpeed(1, 140);
motorStart(2, MOTOR_DIR_BACKWARD);
setSpeed(2, 140);

}

else if (cny1>1005 && cny1<1025 && cny2>1005 && cny2<1025 && cny3<1002 &&
cny3>970 && cny4<1002 && cny4>970) // cny1 cny2 negro - cny3 cny4 blanco
{
// gira
motorStart(1, MOTOR_DIR_BACKWARD);
setSpeed(1, 140);
motorStart(2, MOTOR_DIR_FORWARD);
setSpeed(2,140);
}
else if ( cny2<1025 && cny2>1005 &&cny1<1002 && cny1>970 && cny3<1002 && cny3>970
&& cny4<1002 && cny4>970 )// cny2 negro - cny1 cny3 cny4 blanco
{
// derecha
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
120
motorStart(1, MOTOR_DIR_BACKWARD);
setSpeed(1,140);
motorStart(2, MOTOR_DIR_FORWARD);
setSpeed(2, 140);
}
else if (cny1<1025 && cny1>1005 && cny2<1002 && cny2>970 && cny3<1002 && cny3>970
&& cny4<1002 && cny4>970 )// cny1 negro - cny2 cny3 cny4 blanco
{
// izuierda
motorStart(1, MOTOR_DIR_FORWARD);
setSpeed(1, 140);
motorStart(2, MOTOR_DIR_BACKWARD);
setSpeed(2, 140);
}
else if (cny1<1002 && cny1>970 && cny2<1002 && cny2>970 && cny3<1002 && cny3>970
&& cny4<1002 && cny4>970)// todos blanco
{
//avanza
motorStart(1, MOTOR_DIR_FORWARD);
setSpeed(1,100);
motorStart(2, MOTOR_DIR_FORWARD);
setSpeed(2, 100);
}
else if (cny4 <1025 && cny4>1005 && cny1<1002 && cny1>970 && cny2<1002 && cny2>970
&& cny3<1002 && cny3>970)//cny4 negro - cny1 cny2 cny3 blanco
{
// derecha
motorStart(1, MOTOR_DIR_BACKWARD);
setSpeed(1, 140);
motorStart(2, MOTOR_DIR_FORWARD);
setSpeed(2, 140);
}

else if(cny1<1025 && cny1>1005 && cny3<1025 && cny3>1002 && cny2<1002 &&
cny2>970 && cny4<1002 && cny4>970)// cny1 cny3 negro - cny2 cny4 blanco
{
// izuierda
motorStart(1, MOTOR_DIR_FORWARD);
setSpeed(1, 140);
motorStart(2, MOTOR_DIR_BACKWARD);
setSpeed(2, 140);
}
else if (cny2<1025 && cny2>1005 && cny4<1025 && cny4>1005 && cny1<1002 &&
cny1>970 && cny3<1002 && cny3>970) // cny2 cny4 negro - cny1 cny3 blanco
{
// derecha
motorStart(1, MOTOR_DIR_BACKWARD);
setSpeed(1, 140);
motorStart(2, MOTOR_DIR_FORWARD);
setSpeed(2, 140);

}
}

else // si el estado del pulsador es 0 Sigue Lnea.
{
Robot rastreador con Arduino


Jos Reyes Romero 19/06/13
121
if (cny1>1005 && cny1<1025 && cny2>1005 && cny2<1025 ) // sensores ambos detectan
negro.
{
motorStart(1, MOTOR_DIR_FORWARD);//AVANZA
setSpeed(1, 100);
motorStart(2, MOTOR_DIR_FORWARD);
setSpeed(2,100);
}
else if (cny1<1002 && cny1>970 && cny2<1025 && cny2>1005 ) // cny1 blanco - cny2 negro
{
//Izquierda
motorStart(1, MOTOR_DIR_FORWARD);
setSpeed(1, 140);
motorStart(2, MOTOR_DIR_BACKWARD);
setSpeed(2, 140);
}

else if (cny2<1002 && cny2>970 && cny1<1025 && cny1>1005 )// cny1 negro - cny2 blanco
{
//Derecha
motorStart(1, MOTOR_DIR_BACKWARD);
setSpeed(1, 140);
motorStart(2, MOTOR_DIR_FORWARD);
setSpeed(2, 140);
}

else if (cny1<1002 && cny1>970 && cny2<1002 && cny2>970 )// ambos blanco
{
// RETROCEDE
motorStart(1, MOTOR_DIR_BACKWARD);
setSpeed(1,50);
motorStart(2, MOTOR_DIR_BACKWARD);
setSpeed(2, 50);
}
}// else no obstculo
}// else de sigue lnea
}//cierra void loop

long microsecondsToCentimeters(long microseconds)
{
return microseconds / 29 / 2;

}

Você também pode gostar