Nombre: RB0
Función: seguidor de línea.
Tipo: diferencial.
Motores: Tamiya. Twin motor gear box.
Driver: L298.
Sensores: CNY70 leer línea. Sensor GP2D120 para evitar obstáculos..
Microcontrolador: PIC16F877A.
Estructura: panel de PVC 3 mm, rueda loca tamiya, ruedas de Tamiya.
Otros circuitos: fuente conmutada.
Alimentación: Lipo 7.4 V.
Objetivo: iniciarse en la robótica.
Descripción:
Siento no disponer de los esquemas (para explicar su exacto funcionamiento), pcbs y programa de este robot, ya que se
encontraban en un disco duro que perdí, así que intentaré describirlo
lo mejor posible, en futuros proyectos pondré toda la información.
Después de un tiempo leyendo foros y libros sobre el tema, me
decidí por un "seguidor de línea" como primer robot. En
teoría suele ser el primer robot con el que empieza todo el
mundo, su finalidad es seguir una línea negra sobre un fondo
blanco.
Para ver la línea se usa el sensor CNY 70, que se compone de un
fotodiodo y un fototransistor en un mismo encapsulado, de tal forma que
cuando el sensor está sobre negro, el transistor recibe menos
luz que cuando está sobre otra superficie de distinto color, por
lo que en función de la luz reflejada tenemos una intensidad
distinta por el transistor. El montaje es muy simple, sólo hay
que añadir una resistencia en serie con el diodo (120 ohmios), y
otra en la base o en el colector del transistor (15 K ohmios), tomando
aquí su salida. Es decir si conectamos el emisor del CNY a la
resistencia y a tierra (emisor-resistencia-tierra), y tomamos nuestra
salida en el emisor, cuando el transistor este sobre negro, leeremos un
cero, circula poca intensidad. Cuando el transistor este sobre blanco
leeremos un uno, ya que la intensidad que pasa por la resistencia
será mayor V=I*R.
Con este sensor se puede hacer dos tipos de lecturas, una digital y
otra analógica para compensar la luz ambiente. En este caso se
realiza una lectura digital que es lo más sencillo, la salida va
directamente conectada a una entrada del microcontrolador con
disparador smichdt, dependiendo de la tensión que cae en la
resistencia (función de la luz reflejada) lo toma como un 1 o un
0, de esta forma sabemos si el sensor está sobre la línea
(0).
La placa de sensores se diseño con forma de V, así se
simplifica la programación a la hora de detectar ángulos
rectos (no perdemos todos los sensores de golpe), nuestro objetivo es
hacer un hardware adecuado que haga lo más fácil posible
la programación.
Para leer estos sensores y actuar en función de la
información recibida utilizamos un microcontrolador de 8 bits,
un PIC16F877A de microchip. Se encarga de comprobar el estado de la
salida de cada sensor para saber donde está la línea, y
dependiendo de la posición de ésta, manda una velocidad y
sentido a los motores para situar los sensores centrales sobre la
línea. El programa para el microcontrolador se realizó en
ensamblador, para la familia del 16 son algo más de 30
instrucciones, por lo que resulta sencillo de realizar aunque lento,
pero es la mejor forma de iniciarse y comprender como funciona uno de
estos microcontroladores.
Otras opciones más rápidas para realizar el programa es
usar un lenguaje de alto nivel como C, para ello necesitamos un
complilador, hay varios pero ninguno de ellos gratis. Microchip te
ofrece usar una demo de su compilador, con alguna limitación
pero que llega de sobra para hacer la mayoría de programas.
Bueno quién quiera saber de PICs que googlee, que hay mucha
información sobre el tema.
PIC16F877A
Para poder controlar los motores a través de un microcontrolador
necesitamos un driver, ya que la intensidad que puede proporcionar una
pata del microcontrolador es de 25 mA, y el consumo de un motor de los
usados con el rotor parado es de 1.5 A aproximadamente, por lo que si
intentamos alimentarlo directamente desde el PIC, además de no
moverse, acabaremos quemando el micro.
Como driver usamos un L298, puente en H de transistores bipolares, este
circuito integrado nos permite controlar dos motores en velocidad y
sentido, y además nos permite frenar el motor, para ello usa una
entrada de enable para cada motor, y dos de sentido por motor. El
esquema de este circuito se puede encontrar en su datasheet, lo
único que tenemos que añadir son los diodos externos para
no cargarnos el puente en H (un motor es una bobina y por tanto no le
gustan los cambios bruscos de intensidad) y algún condensador
para comernos transitorios.
Con este puente podemos manejar motores con un consumo de 2 A continuos
y picos de 2.5 A, la principal desventaja es que tiene una caída
de tensión alta frente a los puentes en H realizados con Mosfet
cuya Ron es muy baja, la ventaja es que realizar un puente en H no es
algo sencillo para la mayoría, y aquí nos lo dan todo en
un integrado. Este es un circuito que vamos a usar en muchos robots, ya
que los 2 A nos permite controlar un gran número de motores para
pequeños robots, así que viene bien tener unos cuantos de
estos a mano.
Para controlar la velocidad del motor el microcontrolador se encarga de
generar una señal de PWM a los enable del L298. Una señal
cuadrada de periodo fijo en la que se tiene un ancho de pulso variable,
la tensión eficaz y por tanto la velocidad del motor es
función del tiempo en que la señal está a uno
dentro del período.
Placa L298
El último circuito es una fuente conmutada con un LM2596 (se ve
en la parte superior del robot), su objetivo es convertir una
tensión mayor de 5 V a 5 V. La ventaja de usar una fuente
conmutada sobre un regulador disipativo es que nos durarán
más las pilas, ya que en un regulador disipativo toda la
tensión*intensidad que sobra se disipa en calor, la desvetaja
principal el precio. Este integrado tiene un rendimiento de algo
más del 80% para los 5 V, pero bueno este es un circuito que se
merece su propio análisis, así que ya lo pondré
más adelante. En este robot se podría haber utilizado
reguladores disipativos, ya que estamos bajando de 7.4 a 5,
habría que ver si merece la pena hacer la fuente conmutada.
Esta fuente es capaz de proporcionar hasta 3 Amperios, por lo que nos
valdrá incluso para alimentar dos motores además de la
electrónica. En este robot lo hacemos así, los motores
funciona a 3 voltios (aunque se pueden sobrealimentar tranquilamente),
por lo que bajamos a 5 V los 7.4 de la batería, a estos 5 V hay
que restar aproximadamente 1.7 V de caída en el L298, por lo que
al final nos quedamos en su tensión recomendada.
El esquema de la fuente conmutada se puede encontrar en su datasheet,
lo único un poco difícil de encontrar sea quizás
la bobina.
Visto las partes de la electrónica del robot, ahora toca la base.
El diseño es un robot diferencial, es decir un robot de dos
ruedas, la forma de girar es como la de los tanques, si la rueda de la
derecha gira más rápido que la rueda de la izquierda, el
robot girará hacía la derecha, y viceversa. La principal
ventaja de realizar un robot de este tipo es que puede girar sobre su
propio eje, es decir puede girar sobre sí mismo. Es un
diseño adecuado para un seguidor de línea, en donde nos
podemos encontrar ángulos muy pequeños.
Una forma rápida y barata de hacer la base es usar uno de los
kits de Tamiya, trae un par de motores y una caja a la que se le pueden
poner distintas reducciones, además ya tenemos los ejes sobre
los que poner las ruedas, por lo que lo único que hay que hacer
es buscar una superficie donde atornillarla y encajarle un par de
ruedas de Tamiya. Su precio esta entre $10 y $15, hay que comprarlas
fuera porque en España no hay mucho de esto. Yo suelo comprarlo
aquí: www.robotmarketplace.com.
A esta caja se le puede montar cualquier motor estándar de RC de
ese tamaño, hay muchos modelos donde elegir, pero con los que
trae son suficientes para este robot. Podemos elegir entre dos tipos de
ruedas de Tamiya:
Y por último nuestro robot necesita un tercer punto de apoyo,
para esto ponemos una rueda loca capaz de girar en cualquier
dirección, después de probar varios tipos a mi las que
mas me gustan son las que vienen en el kit de Tamiya, son ajustables en
altura. Se pueden encontrar en la tienda anterior.
Con estos kits por aproximadamente $30 tenemos la base completa con sus
motores, sólo hay que añadir una superficie plana para
atornillar la caja y la rueda loca. Para esto hay un material que es
muy fácil de trabajar a la vez que resistente para robots de
poco peso, son paneles de PVC, se venden con un grosor de 3 mm y 5 mm
en varios colores, para este robot se ha utilizado el de 3 mm de color
blanco. Para cortarlo y darlo forma con una cuchilla es suficiente.
Se pueden encontrar en www.robot-italy.com 200 mm x 200 mm x 3 mm por unos dos euros.
A mi es un material que me gusta mucho y que estoy usando en varios
robots para bases y para todo tipo de piezas, mejor que la madera y el
metraquilato, sólo por detrás del aluminio cuando este es
necesario.
Bueno pues esto fue mi primer robot... No tuve mucho tiempo para
programarlo, sólo para comprobar el correcto funcionamiento del
hardware, ya que enseguida me tuve que poner a preparar dos robots para
un concurso. Por lo que su programa fue lo que me deje pendiente.
El programa que hice era muy simple, sólo giraba hacía un
lado cuando los correspondientes sensores estaban activados, e iba
recto cuando estaba centrado. Esto originaba un constante cabeceo que
hay que corregir por software. Por lo demás la experiencia y el
resultado fueron satifactorios para un primer robot, y me sirvió
para aprender y mejorar siguientes diseños.
Aquí os pongo un video del robot siguiendo la línea, se ve como el robot va de lado a lado: