Nombre: VIT.
Tipo: Velocista, giro con servo.
Objetivo: seguir una línea lo más rápido posible.
Hardware: coche rc escala 1/18, motor dc, servomotor.
Microcontrolador: PIC18F4520 programado en C.
Sensores: CNY70.
Otros circuitos: fuente conmutada, estapa de potencia con mosfet IRLZ34N.
Alimentación: batería NiMh 6V.
Cosmobot fue un concurso de robótica que se celebro el pasado
mes de marzo en Madrid, había dos categorías de robots,
sumo y velocista. Uno de los dos robots presentados a la prueba de
velocistas fue éste, para su diseño se partió de
un coche rc de escala 1/18. Por un precio de unos 100 euros, tenemos
batería, cargador, regulador de velocidad y la base con
tracción a las cuatro ruedas, que incluye un microservo para la
dirección, y un motor de corriente continua, con el logramos una
velocidad más que suficiente.
A la hora de decidir las dimensiones del coche hay que tener en cuenta
los radios de curvatura de la pista, para este concurso teníamos
una pista de dos carriles, separados entre 10 y 15 cm, el radio de
curvatura mínimo del punto medio de la distancia entre los dos
carriles era de 40 cm, es decir que nos podíamos encontrar con
un radio mínimo de 32.5 cm en el carril interior y 45 cm en el
exterior. También contabamos con otra limitación que eran
las dimensiones del robot, no podía superar las dimensiones de
30 cm de largo por 20 cm de ancho.
Dentro de estas dimensiones se eligió un coche rc de escala
1/18, aproximadamente 22 cm de largo por 10 cm de ancho, el coche era
capaz de girar en esos radios de curvatura, pero a poca velocidad, esta
escala resulto ser muy grande para estos radios. El robot hizó
una media de 91 cm/s (algo más reales ya que corría por
el carril exterior) demasiado lento para las velocidades que
allí nos encontramos, el más rápido estaba sobre
los 160 cm/s, y 14 robots superaron el 1 m/s, se notaba que
había 5500 euros para repartir entre los tres primeros.
Contado como fue el concurso, vemos la electrónica y base del
robot, siento no tener los esquemas ni pcbs (estaban en un disco que
perdí) para poder detallarlo con exactitud, aprendida la
lección todos los archivos de los robots que hagamos en
adelanten estarán aquí.
Como base del robot usamos la versión barata del Xray, se puede
encontrar en España por unos 100 euros, en China por unos $70.
Si destripamos el coche nos encontramos con dos circuitos, un receptor
para la emisora, que se encarga de mandar la señal de
posición al servomotor y de mandar la señal de control al
segundo circuito, un regulador de velocidad para el motor. Se pueden
ver en la foto:
El receptor no lo usaremos para nada en nuestro velocista, el regulador
de velocidad si queremos si lo podemos aprovechar, puede ser lo
más conveniente ya que lo ideal es llevar un puente en H, y
realizar uno para la intensidad requerida no es tarea fácil.
Este regulador de velocidad está formado por un puente en H
hecho con Mosfets y su electrónica de control. Nos premite
controlar en velocidad y sentido el motor y frenarlo, para ello
necesitamos generar la señal de control producida por el
receptor. Esta señal consiste en un PWM de 50 Hz, cuyo duty
varía entre el 5% y 10% aproximadamente, siendo el valor medio
de este duty el motor parado, el valor máximo la mayor velocidad
hacía delante, y el valor mínimo la menor velocidad
marcha atrás.
La señal producida por el receptor vista en el osciloscopio es una cosa así:
No se pulsa ningún boton del mando:
Cuando se acelera al máximo.
Cuando damos al máximo marcha atrás:
Generando esta señal con el microcontrolador podemos controlar
el coche en velocidad y sentido, pero la electrónica del
regulador de velocidad tiene otra opción, que es la de frenar el
motor, para ello tenemos que pasar de un sentido hacía el otro
con el mando directamente, es decir si tenemos el duty al 10%, pasar al
5%, esto activaría el freno del coche.
Para controlar la dirección del coche sólo tenemos que
generar la señal de PWM de todo servo estándar, una
señal con período entre 10 ms y 30 ms y con un duty
variable que indica al servomotor a que posición debe girar.
Tarea para nuestro microcontrolador.
Pues con esto nos encontramos cuando compramos un coche rc, ahora
tenemos que decidir que es lo que queremos aprovechar. En este caso no
se aprovecho el regulador de velocidad, lo que fue un error que
explicó más tarde.
Nuestro objetivo es seguir una línea negra sobre fondo blanco a
la máxima velocidad posible, en el circuito no nos encontraremos
ángulos rectos ni nada parecido, tenemos un radio mínimo
de curvatura dado y dos carriles por los que ir, si nos alejamos
más de 10-15 cm de un carril, estamos eliminados.
En principio este puede que sea uno de los robots más simples
para hacer, según queremos correr más la cosa se va
complicando.
Para seguir el circuito se han puesto dos placas de sensores, una
delante y otra detrás con dos objetivos, el primero medir la
distancia del centro del robot a la línea, para ello necesitamos
una sóla placa. Y el otro objetivo es medir la
orientación del robot con respecto a la línea, para ello
necesitamos las dos placas. Esto nos resulto útil para realizar
cambios de carril, debido a que el radio de curvatura era muy
pequeño para este robot, a la mínima que fuesemos un poco
rápido se iba fuera, por lo que si ibamos siempre por el carril
interior, al llegar la curva nos saliamos al exterior, la
hacíamos por este carril, y una vez que el robot estuviese
centrado volviamos al carril interior. Esto nos funciono para poder
correr un poco más con el robot en el circuito que nos
encontramos.
Otro uso que le dimos a los sensores traseros era el de controlar la
velocidad del coche, en las pruebas resultó ser un coche muy
estable, el centro de la placa trasera de sensores apenas se
movía de la línea, por lo que en las pruebas observamos
que hacíamos mejores tiempos cuando controlabamos la velocidad
en función del sensor trasero activado, y el giro del servo con
los delanteros. Esto nos permite que en las curvas en las que el coche
va centrado de detrás no disminuya la velocidad. La pega es que
en las curvas pequeñas disminuyes la velocidad más tarde,
caso que solucionamos con un cambio de carril.
Placas de sensores:
Para leer la línea como se puede ver en la foto utilizamos el
CNY70, sólo hay que colocarle dos resistencias y tomar la salida
en el emisor o colector. Utilizamos una lectura digital sobre
analógica, y no tuvimos ningún tipo de problemas de luz
durante el concurso, por suerte nos encontramos con una sala en la que
no había mucha iluminación ni luz solar.
Para capturar el 1 o el 0 del sensor esta vez montamos trigger smichdt
en lugar de usar los internos del pic (teníamos 16 sensores), es
un operacional en modo comparador que se encarga en convertir la salida
en un 1 cuando la entrada supera cierto valor, y en un cero cuando no
lo es, con su histéresis. Además al poner los trigger
smichtt nos facilito la colocación de un diodo led en cada
sensor, que nos indicaba si ese sensor estaba sobre negro o blanco,
esto es muy útil a la hora de programar y ver el comportamiento
del robot sobre la pista, ya que mirando el led puedes ver que sensores
se activan en cada momento, si luego lo ves a cámara lenta no te
pierdes detalle.
Placa de trigger:
Para leer cada sensor y actuar tenemos el microcontrolador, esta vez
usamos un PIC18F4520 programado desde C, también teníamos
la misma placa montada con un PIC16F877A para programar en ensamblador,
estos dos PICs son compatibles pin a pin, es decir en el circuito que
va uno puede ir donde va el otro. La diferencia a la hora de
programación es que el 18 está pensado para ser
programado desde C, además el ensamblador de los 18 anda por las
80 instrucciones, el de 16 está en treinta y algo. Mientras que
el 16 no se lleva tan bien con el C, por lo que solemos hacer es si
queremos usar ensamblador usar un 16F si el diseño nos lo
permite, y en el resto de los casos usar un 18F. En este caso que
ibamos muy mal de tiempo el C fue vital, en una semana tuvimos que
hacer el hardware del segundo robot que presentamos entero y los
programas de ambos robots, además de montar la pista un par de
veces..
La placa del pic también incluye unos microinterruptores, casi
obligatorio llevarlos en los diseños a los concursos, ya que te
permiten seleccionar distintos programas u opciones del programa una
vez que estás en la pista, ya que a reprogramar no suele dar
tiempo y también evitas equivocarte con el programa malo. En
nuestro caso llevabamos diversos valores de velocidad, para una vez que
teníamos el coche sobre la pista ver lo que eramos capaces de
correr. Esto debe de hacerse durante la homologación del
concurso, te dan tres intentos para homologar el robot, la
homologación consiste en dar dos vueltas a la pista, por lo que
aquí se pueden gastar un par de intentos en intentar ajustar la
velocidad máxima. Ya no tendrás otra oportunidad de
hacerlo que no sea arriesgando una ronda de carrera. Almenos en este
concurso esto ocurrió así.
También incluimos un led tricolor en la placa del pic, lo que
nos permitía ver en que carril el robot se creía que
estaba asignandole un color a cada carril, muy útil durante la
programación y para detectar fallos, ya que si el robot se cree
que está en el carril equivocado se va fuera.
Placa del pic con el 16F877A.
Para controlar el motor necesitamos usar un driver, ya que el pic no es
capaz de suministras las intensidades necesarias que el motor requiere.
En los coches de RC nos podemos encontrar con motores con picos de
hasta 10 A tranquilamente. Por lo que aquí ya no nos vale usar
un puente en H como el L298 de transistores bipolares. Aquí o se
compra un puente hecho con Mosfets, que además de grande suele
ser caro, ó se utiliza el regulador de velocidad del coche RC,
que creo que es la opción más acertada, la única
pega es que nos tenemos que adaptar a las señales de su
electrónica, o se hace lo que hicimos nosotros, utilizar un
sólo Mosfet para controlar el motor.
Como es un robot velocista, sólo vamos a tener que ir en un
sentido, no tenemos que ir hacía atrás, por lo que con un
simple mosfet podemos controlar la velocidad del motor. En este caso
usamos un IRLZ34N, un mosfet que soporta unos 30 Amperios, más
que suficiente para nuestro motor, además tenemos una Ron muy
baja. Para ello lo único que tenemos que añadir al
circuito es un diodo schottky de potencia en antiparalelo con el motor,
para no romper nada cuando le cortamos la I a este, una resistencia de
gate a tierra y un condensador gordo para los transitorios del motor.
La principal desventaja de hacerlo de esta forma es que no tenemos el
frenado del puente en H, que es vital para este tipo de prueba, ya que
es como ir con un coche sin frenos. Este punto lo tenemos que analizar
bien (no estoy seguro), y ver lo que podemos hacer con el circuito de
sólo el Mosfet. Pero puede ser que lo más indicado sea
montar el puente en H, y para ello lo mejor es usar el regulador de
velocidad que viene con el coche de serie.
Foto del driver.
El último circuito es la fuente conmutada que teníamos ya
hecha del seguidor, aquí lo suyo hubierá sido usar un
regulador disipativo, ya que bajamos de 6.x voltios a 5, pero por
cuestiones de tiempo pusimos lo que teníamos a mano, al
funcionamiento no afectaba y espacio teníamos de sobra.
Aquí es donde tenemos otro de los errores graves de
diseño, en hacer la velocidad dependiente del estado de la
batería. Para corregir esto lo podemos hacer de diversas
maneras: la primera sería añadir un encoder para
controlar en todo momento la velocidad del coche. Otra solución
sería medir la tensión de la batería con un ADC
del pic, y ajustar la velocidad a esta tensión, como estamos en
una superficie plana podemos hacer esto. Y otra posibilidad es hacer un
convertidor cc-cc que de una salida mayor a la tensión de
entrada, de esta forma aunque disminuya el voltaje de la
batería, la tensión entregada al motor seguirá
siendo la misma. La opción más simple es la del ADC o
fuente, la mejor es la del enconder.
Respecto al programa llevabamos un control proporcional de velocidad y
de giro. Este es el punto principal en el que hay que trabajar para
siguientes concursos, lo ideal es hacer un controlador PD para corregir
la oscilación.
Pero bueno quedan muchas cosas que probar y mejorar de este coche para
siguientes concursos, tanto del hardware como del firm, la base ha
resultado ser buena y barata, ideal para un velocista si el radio se lo
permite. Sólo le añadimos unas protecciones de
metraquilato (para que se viesen los leds) para evitar romper los
sensores en los choques contra otros velocistas, además nos
sirvio de soporte para colocar la electrónica.
El Cosmobot para mi fue el primer concurso de robótica, en el
que había un gran nivel y bastantes participantes. Deseando que
llegue el del año que viene.
Seguro que me dejo muchas cosas, ya las iré poniendo según me vengan a la cabeza..
Video del robot, no tenemos ninguno del concurso. La
organización creo que los tiene, pero no los han subido a
ningún lado. Este es en una pista similar a la que allí
había.