Introducción:
Hace algún tiempo leí un artículo sobre un concurso para crear un robot con un coste de 10$ para el aprendizaje de robótica en escuelas con un coste admisible. Este concurso es el reto AFRON.
Así que me pareció una buena idea participar. Se me ocurrió que un robot muy simple de hacer pero que es un buen punto de partida para aprender es un seguidor de luz, donde los sensores del robot están buscando si hay un foco luz y cuando lo encuentran se dirigen hacia el. Me puse a buscar los componentes, a construir el robot y al final he terminado a L.I.O.S. (Light input output system):
Como se puede ver en el vídeo, las ruedas y el chasis son de cartón de una caja reciclada. Aunque no se aprecie, los sensores son LDR, los motores son dos servos trucados para rotación continua, el cerebro es un microcontrolador PIC 12F683, tiene dos diodos led para indicar el estado y una batería lipo de 3,7V. y 130 mAh para alimentar el sistema.
Funcionamiento:
Nada más enchufar la batería los leds parpadean varias veces. Hay dos LDR que el microcontrolador está comprobando constantemente; si este detecta que en uno de ellos hay una intensidad de luz grande, entonces enciende el led del lado del LDR y activa el servo del lado contrario (si la luz está a la derecha, entonces es la rueda izquierda la que tiene que moverse y viceversa); si ambos sensores detectan luz entonces los dos led se encienden y los dos motores se activan para ir recto; si no detecta suficiente luz entonces permanece parado y los leds apagados.
Consumo
En resposo consume 23 mA.
Cuando sigue una luz puede consumir hasta 300 mA.
Velocidad
8,7 cm/s. cuando la batería está a 3,7V.
Construcción:
Componentes
Nombre | Descripción | Precio unitario (enlace) | Cantidad | Total | |
---|---|---|---|---|---|
PIC12F683 | El cerebro | 1,78$ | 1 | 1,78$ | |
Zócalo DIP | Para meter o sacar el PIC | 0,18$ | 1 | 0,18$ | |
Batería Lipo | Para alimentar el circuito | 1,33$ | 1 | 1,33$ | |
Conector hembra | Para enchufar la batería | 0,47$ | 1 | 0,47$ | |
LDR | Para detectar la luz | 0,32$ | 2 | 0,64$ | |
Servo | Para mover el robot | 2,69$ | 2 | 5,38$ | |
diodo led | Para mostrar estado | 0,13$ | 2 | 0,26$ | |
Resistencia 180Ω | Para los led | 0,08$ | 2 | 0,16$ | |
Resistencia 10KΩ | Para los LDR y los servos | 0,08$ | 6 | 0,48$ | |
Otros | Cartón (reciclable de cualquier caja), cables (usar los del propio servo), estaño, pegamento y tubo termoretráctil | 0,05$ (por reciclaje o mínimas cantidades) | 0,05$ | ||
Total |
10,73$ |
Herramientas
Nombre | Uso | Precio aproximado | |
---|---|---|---|
Cutter | Cortar el cartón | 4$ | |
Pegamento | Pegar cartón, brazos de servos y servos | 3$ | |
Cinta adhesiva | Pegar la plantilla y la batería al cartón | 1,50$ | |
Aguja | Agujerear el cartón | 0,02$ | |
Pistola de termocola | Pegar LDR, leds, resistencias y zócalo al cartón | 15$ | |
Pelacables | Pelar todos los cables | 10$ | |
Mechero | Reducir los tubos termoretráctiles | 2$ | |
Corta cables | Cortar topes de los servos, cables y tubos termoretráctiles | 5$ | |
Destornillador PH0 | Apretar o aflojar los tornillos de los servos | 1$ | |
Soldador | Soldar cables con LDR, leds, resistencias, enchufe y zócalo | 10$ – 25$ | |
Estaño | Para soldar | 5$ | |
Programador | Programar el PIC | 14$ – 45$ | |
Cargador de baterías | Cargar la batería Lipo | 15$ – 75$ | |
Multímetro | Medir la carga de la batería Lipo | 5$ – 30$ |
Precauciones
- La hoja del cutter es afilada, tener cuidado de no cortarse.
- La aguja es muy fina, tener cuidado de no pincharse.
- El pegamento es muy fuerte, tener cuidado de que no entre en contacto con los ojos y/o la piel.
- La termocola está muy caliente, tener cuidado de no tocarla.
- El soldador está muy caliente, tener cuidado de no tocarlo, de no ponerlo en contacto con el cartón y de evitar respirar el humo de la soldadura.
- La batería lipo no debe cortocircuitarse, ni sobrecargarse por encima de 4,2V. ni descargarse por debajo de 3V.
Servos
Los servos contienen electrónica para manejar su sentido de rotación y tienen engranajes para aumentar su fuerza de tracción, sin embargo sólo pueden rotar 180º, por lo que vamos a modificarlos para que su rotación sea continua como la de cualquier motor.
Lo primero es desmontarlos extrayendo los 4 tornillos de su base y separar las tapas inferior y superior:
Después hay que extraer los engranajes. Uno de ellos contiene una pestaña para que haga de tope y no avance más (marcado con un circulo rojo):
Así es como queda al cortarla:
Por otro lado tenemos el potenciómetro. Aquí debemos desoldar los cables (las flechas verdes) y romper la pared que contiene las dos pestañas que también hacen tope (las fechas rojas):
Así es como quedaría la pared que comentaba:
A continuación debemos soldar las dos resistencias de 10KΩ formando un divisor resistivo en los cables que habíamos desoldado antes (el cable blanco entre las dos resistencias). Para aislar los contactos poner tubo termoretráctil:
También aislar el extremo con tubo termoretráctil:
Finalmente unir todos los engranajes de nuevo, meter la electrónica, poner las tapas y atornillarlas:
Chásis y ruedas
Imprimir en papel esta plantilla en DXF a escala 1:1 (yo he usado el programa de software libre LibreCad):
Pegar el papel con cinta adhesiva al cartón. Agujerear los círculos pequeños con una aguja y cortar las líneas con un cutter:
A continuación poner la aguja en el agujero de una rueda, poner pegamento en el brazo alargado de un servo e introducir el agujero central de este por la aguja hasta pegarlo a la rueda. Repetir el proceso con la otra rueda:
Quitar la pegatina del lateral del servo, poner pegamento en ese lateral y pegarlo en el extremo superior izquierdo de la superficie grande de cartón. Repetir el proceso en el otro lado con el otro servo:
Cortar levemente la superficie pequeña de cartón por el primer tercio, poner pegamento y adherirla a la incisión hecha anteriormente en la superficie grande de cartón (según la plantilla). Colocar las dos ruedas en los ejes del servo:
Agujerear 4 orificios entre los servos, introducir desde abajo los LDR, girarlos 30 grados desde el centro y pegarlos con termocola. Hacer dos orificios a cada lado, introducir desde abajo los diodos led y pegarlos con termocola:
Electrónica
Este es el esquema electrónico:
LDR
- Soldar una de las patillas de cada LDR a VCC.
- Soldar la otra patilla de cada LDR a un extremo de una resistencia de 10KΩ
- Desde la anterior unión izquierda soldar un cable hasta el pin 7 del zócalo y poner tubo termoretráctil.
- Desde la anterior unión derecha soldar un cable en hasta el pin 6 del zócalo y poner tubo termoretráctil.
- Soldar el otro extremo de cada resistencia a GND.
- Pegar las resistencias a la base con termocola.
SERVO
- Pelar los cables y soldar el rojo a VCC y el marrón a GND de cada servo.
- Soldar el cable naranja del servo izquierdo al pin 3 del zócalo y poner tubo termoretráctil.
- Soldar el cable naranja del servo derecho al pin 2 del zócalo y poner tubo termoretráctil.
LED
- Soldar un extremo de una resistencia de 180Ω a VCC.
- Soldar el otro extremo al de otra resistencia de 180Ω.
- Desde la anterior unión soldar un cable hacia la patilla del ánodo del led derecho.
- Desde la anterior unión soldar un cable hacia la patilla del cátodo del led izquierdo.
- Soldar el extremo restante de la segunda resistencia a GND.
- Pegar las resistencias a la base con termocola.
- Desde el cátodo del led derecho soldar un cable hacia el ánodo del led izquierdo.
- Desde la anterior unión soldar un cable hacia el pin 5 del zócalo y poner tubo termoretráctil.
PIC
- Soldar el pin 1 del zócalo a VCC y poner tubo termoretráctil.
- Soldar el pin 8 del zócalo a GND y poner tubo termoretráctil.
- Pegar el zócalo a la base con termocola.
Batería
- Enchufar el conector a la batería y comprobar cual es VCC y cual GND con un polímetro.
- Soldar un cable a VCC y otro a GND y juntarlos con el resto del circuito. Poner tubo termoretráctil.
- Enrollar un trozo de cinta adhesiva y ponerla en la zona trasera de la base.
- Poner la batería encima de la cinta adhesiva y enchufar esta al conector.
Programación:
Desde aquí se puede descargar el código fuente para el firmware del PIC. Para entender el funcionamiento de los registros del PIC 12F683 lo mejor es leerse el datasheet.
Desde aquí se puede descargar el fichero .hex para programar el PIC.
El compilador que se ha usado es el SDCC, que es software libre. Para compilarlo he usado el siguiente comando:
1 |
sdcc -mpic14 -p12f683 --use-non-free lios.c |
Para subir el fichero .hex al PIC hay que tener un programador de PICs y un software que maneje el programador. Hay mucha variedad. Yo he usado el pickit3 de Microchip y su software para windows, pero hay otras alternativas más baratas que se pueden usar con software libre o gratuitas para linux, mac y windows.
Explicación
A grandes rasgos el funcionamiento es el siguiente:
Al enchufar la batería los leds parpadean 10 veces rápidamente. Los leds están en una configuración determinada para que si el pin del PIC está configurado como salida y la pone en alto luzca un led, si la pone en bajo luce el otro led; si está configurado como entrada (alta impedancia) los leds permanecen apagados.
Se activan las interrupciones del timer0 y del ADC. La interrupción del timer0 está configurada para que salte cada 0,1 ms. y sirve para contabilizar los tiempos en los servos. La interrupción del ADC salta cada vez que un valor ha sido leído en un LDR para activar el led asociado (si se traspasa cierto umbral), poner un valor en una variable de estado, cambiar el canal de ADC y leer el siguiente LDR.
En el bucle principal del programa se comprueba la variable de estado para saber qué servos deben activarse. La activación de los servos es distinta ya que estos están enfrentados y la rotación para ir hacia delante es diferente en cada uno. Para uno supone una señal alta de 1 ms y otra baja de 19 ms., mientras que para el otro supone una señal alta de 2 ms y otra baja de 18 ms.
Modificaciones:
Los sensores del robot son LDR, pero podrían haberse cambiado por dos CNY70 para hacer un robot seguidor de línea con el siguiente esquema:
O dos interruptores de acción rápida para hacer un robot que detectase colisiones con el siguiente esquema: