Escolar Documentos
Profissional Documentos
Cultura Documentos
un robot seguidor de lnea quizs este proyecto pueda ayudarte. Construccin detallada de
un robot velocista bsico, fcil de hacer y de bajo coste, para iniciarse en esta prueba.
Aunque ya est todo dicho en el proyecto Robot Zero, vuelvo a hacer un pequeo resumen
aqu con la versin final.
Uno de los proyectos que tenemos en comn varias personas en el C.I.r.E. es el desarrollo
de robots velocistas, por lo que llevamos ya meses hablando sobre el tema y discutiendo
ideas. Intentando sintetizar parte de las ideas subo aqu mi versin final con la que cierro el
proyecto de robot velocista de iniciacin, a no ser que me haya equivocado en algn pin del
pcb o similar dejo aqu el mundo de los velocistas.
No soy experto en el tema y slo he ido a un par de concursos, a falta de informacin
disponible espero que a alguien que quiera ir a un concurso y sepa an menos que yo del
tema le pueda ayudar. Eso s no garantizo el funcionamiento de nada, slo pongo lo que a
mi me ha funcionado, por lo que si alguien lo monta que lo haga segn su criterio.
Una opcin es comprar el velocista entero directamente, en internet se pueden encontrar
algunos robots velocistas para comprar. No lo recomiendo ya que pierde toda la gracia el
asunto, nos dan todo hecho y la mayor parte del programa, por lo que lo nico que hay que
hacer es darle al botn. Y supongo que en los concursos no admitirn su participacin, ya
que el mrito del que lo lleva es mnimo y por tanto poco digno de ser premiado.
Lo primero a la hora de montar un robot es elegir los componentes y es donde toda persona
que quiere hacer su primer robot encuentra la primera dificultad, qu motor elegir, qu
sensores, etc.. Lo mejor que he encontrado son los componentes de Pololu, por un precio
muy razonable encontramos todos los componentes necesarios para construir un robot que
no lo haga mal en los concursos, no vamos a ganar pero lo mismo podemos pasar la
primera clasificatoria, lo que sera un resultado satisfactorio para muchos principiantes.
Mi eleccin de componentes es la siguiente:
Ruedas $6.98.
DC-DC $11.95.
Batera $11.95.
Cargador $16.95.
Podemos elegir dos motores para el proyecto, si tu objetivo es hacer un primer robot y te
conformas con que funciones recomiendo la opcin B, si tu objetivo es intentar ir lo ms
rpido posible recomiendo la opcin A. El problema de la opcin A es que son motores que
consumen mucha intensidad y existe la posibilidad de quemar el DC-DC, es muy poco
probable quemarlo, pero la posibilidad est ah, para mi gusto son los mejores motores que
podemos comprar por ese precio. Con la rueda seleccionada y la opcin B se pueden
alcanzar velocidades sobre 2 m/s, mientras que con la opcin A podremos alacanzar los 4
m/s.
En total por unos $122.66 tenemos todos los componentes necesarios para el velocista, a lo
que habra que sumarle unos $10-15 aproximadamente en componentes para unirlo todo.
Pongamos el proyecto completo sobre unos 100-110 al cambio en material. Los
componentes se encuentran en dos tiendas y los gastos de envio de cada una estn entre $10
y $15 por correo normal y suelen tardar 7-12 das, he realizado pedidos muchas veces y
siempre llegan y no suelen caer en aduanas.
An as si queremos comprarlo todo en un slo pedido en http://www.robotshop.com/eu
econtramos todos los componentes, aunque sale ms caro ya que como toda tienda te hacen
el cambio $1 = 1, por lo que la mayora de las veces sale mejor comprar directamente en $
$.
Para unir todos los componentes tenemos dos opciones: usar un pcb que a la vez sirva de
base del robot para conectarlo todo, o usar un pcb/placa de topos que poner en una base que
fabriquemos. Pongo foto de las dos opciones:
La mejor opcin de ambas para nuestros objetivos es la de construir un base sobre la que
poner el pcb, ya que nos va a permitir tener un robot verstil al que le podemos poner
distintas bases con diferente longitud y anchura, lo que nos permitir probar y experimentar
con diferentes configuraciones y adaptarnos a los circuitos que nos den en los concursos.
Por ejemplo en un circuito con curvas con un radio grande y rectas largas nos puede
interesar llevar una base ms larga y ancha, mientras que si nos dan un circuito con muchas
curvas pequeas y poca recta puede ser mejor opcin una base pequea. Adems las
dimensiones del robot dependen de las inercias y la fuerza de rozamiento del robot que nos
adhiere al suelo, por lo que muchas veces la nica forma de encontrar las dimensiones
ptimas es probando distitnas bases.
Si montamos todo el robot en un pcb pues no podremos cambiar sus dimensiones, los
robots que venden hechos vienen montados en un pcb ya que es ms fcil integrar todo y
supongo que ms barato de fabricar, el ahorro de peso es mnimo ya que la base en plstico
pesa ms o menos igual que el pcb. Por lo que para un primer robot con el que aprender y
experimentar la mejor es tener bases intercambiables.
La idea final es tener algo como sto, un robot que montar sobre distintas bases.
Por lo que lo primero podra ser empezar a construir la base, para ello nos hacemos una
plantilla a mano o con el pc que pegamos sobre un trozo de PVC expandido o forex de
3mm, con un punzn marcamos los agujeros de los motores ( han de ir en la plantilla ya
que deben quedar bien alineados) y con una cuchilla cortamos y marcamos en el PVC la
plantilla, pasando luego a recortarla y hacer el resto de taladros, el PVC expandido de 3 mm
se puede cortar y trabajar a mano.
Adjunto un par de plantillas de bases de ejemplo (las dimensiones de los robots en los
concursos mximas son de 30 cm de largo y 20 cm de ancho) y una foto del proceso para
realizar la base.
Base 1.
Base 2.
Las dimensiones de la base para mi gusto no son las ideales, pero son las que he probado.
La otra parte que necesitamos para unir los componentes es realizar un pcb o utilizar una
placa de topos como explic Guillermo en la entrada anterior. Adems esta placa nos
servir para pegar con cinta de doble cara la batera elegida, de tal forma que quede por
debajo del robot, lo que proporciona un centro de gravedad lo ms bajo posible.
La placa de la electrnica se puede ver aqu (click para mayor detalle):
Pin para encender y apagar los sensores y as ajustar el nivel de luz que emiten.
Un dc-dc que nos proporciona una tensin de referencia fija para la velocidad de los
motores, por lo que facilita el algoritmo de control.
Montamos el pcb y lo ponemos en la base del robot, para conectar los motores
se pueden poner un par de conectores o soldar los cables directamente. Lo
siguiente es pegar la batera con cinta de doble cara al pcb y hacer un agujero
para pasar el cable.
Colocamos la rueda loca, podemos usar unos tornillos para fijarla o pegarla directamente
aunque sto signifique tener que usar una por base. Por ltimo colocamos la placa de
sensores haciendo los correspondientes agujeros para pasar los tornillos, y hacemos el
cables para unir los sensores con la placa de electrnica.
Respecto a la placa de sensores que compramos hay que cambiar o quitar unas resistencias,
ya que los llevamos muy pegados al suelo y vienen pensados para una mayor distancia.
En la imagen superior se puede ver como se ha soldado una resistencia de 100 Ohmios
(101) y desoldado dos resistencias, esas dos resistencias en paralelo vienen para limitar la
corriente de los diodos, podemos quitar una o quitar las dos y soldar una donde aparece en
la iamgen de mayor valor. Aunque no he probado muchos valores una resistencia de unos
82 ohmios podra funcionar bien, depende, ya que algunas placas de Pololu nos la dan con
resistencias de 43 Ohmios y otras con resistencias de 66 Ohmios en los diodos. Otra cosa
que hemos podido comprobar es que estos sensores son terribles para hacer lecturas en
analgico, ya que su orientacin (inclinacin) afecta enormemente a la lectura, por lo que si
el robot vibra u oscila, o la pista no es totalmente lisa podemos encontrar problemas, pero
bueno esto se ve bien cuando desarrollemos la parte de la telemtra en el C.I.r.E., que
supongo que ser lo siguiente.
Por lo que todo montado queda una cosa as:
Esta sera la parte de la base y ahora falta la parte de la programacin, adjunto un programa
sencillo para estos robots que sigue la lnea sin oscilar a una velocidad constante. Al
programa no se le ha dedicado tiempo, es el primero que hic y ha ido pasando de robot a
robot porque pareca que funcionaba, por lo que puede tener fallos por algn lado. La idea
es muy sencilla, medir la distancia de la lnea al centro de los sensores, medir la velocidad
con la que se aleja o se acerca la lnea al centro de los sensores, multiplicar estas medias
por unas constantes que utilizamos para ajustar la respuesta del robot, sumarlas y convertir
la cantidad obtenida en una diferencia de velocidad entre los motores, lo que provoca el
giro.
Programa.
Pongo un par de videos en los que se puede ver el funcionamiento del programa, el segundo
de ellos a cmara lenta (a partir del segundo 30). El robot va montado en la base ms larga
y la tensin de salida del dc-dc es 6.4 V.
>ALGORITMO EN ARDUINO
#include <QTRSensors.h>
/////////////////////////////////////////////////////////////////////////////////////
//
digitalWrite(mot_d,HIGH);
analogWrite(pin_pwm_d,255-motor_der);
}
else
{
digitalWrite(mot_d,LOW);
motor_der= motor_der*(-1);
analogWrite(pin_pwm_d,motor_der);
}
}
void frenos_contorno(int tipo,int flanco_comparacion)
{
if(tipo==0)
{
if (position<=500) //si se salio por la parte derecha de la linea
{
motores(-80,90); //debido a la inercia, el motor
//tendera a seguri girando
//por eso le damos para atras , para que frene
// lo mas rapido posible
while(true)
{
qtrrc.read(sensorValues); //lectura en bruto de sensor
if ( sensorValues[0]>flanco_comparacion || sensorValues[1]>flanco_comparacion )
//asegurar que esta en linea
{
break;
}
}
}
if (position>=6500) //si se salio por la parte izquierda de la linea
{
motores(90,-80);
while(true)
{
qtrrc.read(sensorValues);
if (sensorValues[7]>flanco_comparacion || sensorValues[6]>flanco_comparacion )
{
break;
}
}
}
}
//*******
if(tipo==1) //para linea blanca con fondo negro
{
if (position<=500) //si se salio por la parte derecha de la linea
{
motores(-80,90); //debido a la inercia, el motor
//tendera a seguri girando
//por eso le damos para atras ,
//para que frene lo mas rapido posible
while(true)
{
qtrrc.read(sensorValues); //lectura en bruto de sensor
if ( sensorValues[0]<flanco_comparacion || sensorValues[1]<flanco_comparacion )
//asegurar que esta en linea
{
break;
}
}
}
if (position>=6500) //si se salio por la parte izquierda de la linea
{
motores(90,-80);
while(true)
{
qtrrc.read(sensorValues);
if (sensorValues[7]<flanco_comparacion || sensorValues[6]<flanco_comparacion)
{
break;
}
}
}
}
}
Soporte de motores
Boost de 4-25 V
Boost de 5 V
Driver TB6612FNG
Forex (para el chasis) en Venezuela lo consigues como "pvc inflado" o "espuma de pvc"
Esta configuracin se obtuvo luego de muchas pruebas. Result ser la mas idnea para las
pruebas en competencias venezolanas donde hay muchas curvas y poco espacio para
acelerar, por lo que se necesita un robot pequeo y lo ms ligero posible, para salir de las
curvas rpido y tener poca inercia.
El tema del peso fue extremadamente importante, nos dimos cuenta que mientras ms
ligero mejor. Llegando al punto que el robot solo pesa 54 gramos (47 sin batera). Para
lograrlo usamos hilos de cobre esmaltado para las conexiones entre mdulos y sensores y
substituimos los pesados tornillos de metal por unos de acrlico.
- Por ser analgico nos permite lecturas ms precisas de la linea y una mayor resolucin,
permitiendo que podamos distinguir si el sensor est sobre la linea inclusive esta a medias
sobre esta.
- Tiene 8 sensores que es una cantidad suficiente para llevar un buen control PID del robot.
Estos sensores son costosos, pero pueden ser sustituidos por CNY70 o por QRD1114.
Ruedas:
Es sin duda uno de los aspectos ms importantes. Por lo general, la mayor limitacin es el
agarre. Mientras ms agarre a mayor velocidad puede girar en las curvas.
Hemos comprado 3 ruedas para determinar cual es la mejor.
Ruedas de solarbotics:
Tienen buen agarre, aunque son pesadas. Cuando se usan el robot es sacado de las curvas
por la centrifuga.
Ruedas banebots.
Vienen en tres tipos de material: verde blando, naranja semiduro y azul duro. Eleg las
verdes porque son las que tienen mejor traccin. Aunque estas son las que se desgastan ms
no importa, puesto que las pistas de velocistas son lisas y el desgaste es mnimo.
Estas ruedas tienen el mejor agarre, el detalle es que son demasiado pesada (incluso mucho
mas que las solarbotics). Hace que el robot acelere lento, y la respuesta sea mucho menos
delicada, por lo cual quedan descartadas. Se puede usar si se substituye la pieza central por
una de acrlico, pero no lo he intentado.
Actualizado (2015)
Para las ultimas competencias se utilizaron ruedas impresas en 3D
Estas ofrecen ms superficie de contacto y su radio es muy inferior a las de
pololu.
El aumento de estabilidad y agarre fue considerable. Nos basamos en el
modelo en 3D de las ruedas del robot zero. Se le modific el ancho de la chapa
Ball caster
La ball caster no debe estar muy alejada del eje de loas ruedas, puesto que
mientras mayor sea la separacin mayor es la distancia que recorre para un
giro determinado, lo que aumenta la friccin y disminuye el control.
Puede ver que mientras mas se aleja del eje de las ruedas "ms se mueve"
Estas son las opciones que he probado:
Led:
S, as como lees. Un led como ball caster es una buena opcin, Es liviano y
podemos graduar la altura inclinandolo. La desventaja es que con la friccin el
led se va desgastando y hay que cambiarlo continuamente.
Ball caster de metal: tiene muy poca friccin y se desliza muy bien. La
recomiendo para pistas largas. La desventaja es que pesa mucho (3.96
gramos) y si lo colocas en la parte delantera del robot el control se va a
complicar por el efecto palanca.
Soporte de motores:
Boost XL6009
Boost de 5 V:
Inconvenientes:
- El shaft en media luna hace que vibre
- Su consumo no es eficiente.
- Los engranajes estn expuestos y se daan con facilidad ante la obstruccin
de algn granito de arena. Hay que protegerlos mucho.
- No son precisos y el freno fem es dbil.
Ventajas:
- Es pequeo y liviano
- Es lo mejor que vamos a conseguir en ese precio.
- Tiene un torque aceptable.
Consejo: suelden bien los cables de alimentacin puesto que la
vibracin por el shaft en D hace que se despeguen con facilidad.
Cuando se piensa en motores pololu generalmente se elige entre 10:1 y 5:1. La
eleccin depende del peso de tu robot y del tipo de pista.
Si eliges motores 10:1 tendras ms torque, lo que permite tener buen control,
preciso, aceleracin y un mejor frenado. Es ideal si tu robot pesa ms de 60
Gramos y/o si el tipo de pista es pequea con muchas curvas. En las
competencias venezolanas el mayor tiempo del recorrido se tarda en
desacelerar para entrar en una curva y acelerar para salir de esta, no hay
Driver
Chasis
Conexiones
Diagrama de conexiones de un seguidor de linea bsico:
Las conexiones entre mdulos se hicieron con hilos de cobre esmaltado. Lo que reduce el
peso de forma considerable.
/*
* [ Cdigo Fuente: Robot Velocista Lenin ]
* [ Fecha: Agosto 2013 ]
*
* [ Equipo: Bolchevique ]
*
- Abraham Jos
*
- Lihon Fredy
*
- Oliveros Hector
*/
#include <QTRSensors.h>
#define
#define
#define
#define
#define
#define
#define
STANDBY
MOTORLEFT_DIR_A
MOTORLEFT_DIR_B
MOTORLEFT_PWM
MOTORRIGHT_DIR_A
MOTORRIGHT_DIR_B
MOTORRIGHT_PWM
9
7
8
6
#define NUM_SENSORS
4
11
// Setea Velocidad
analogWrite(MOTORLEFT_PWM,value);
}
// funcin Velocidad Motores
void setMotors(int left, int right)
{
digitalWrite(STANDBY,HIGH);
setMotorLeft(left);
setMotorRigh(right);
}
// funcin Freno en Motores
void setBrake(boolean left, boolean right, int value)
{
// pin STAND BY
digitalWrite(STANDBY,HIGH);
if ( left )
{
// pines LEFT motor
digitalWrite(MOTORRIGHT_DIR_A,HIGH);
digitalWrite(MOTORRIGHT_DIR_B,HIGH);
analogWrite (MOTORRIGHT_PWM, value);
}
if ( right )
{
// pines RIGHT motor
digitalWrite(MOTORLEFT_DIR_A,HIGH);
digitalWrite(MOTORLEFT_DIR_B,HIGH);
analogWrite (MOTORLEFT_PWM, value);
}
}
void setup()
{
// inicializar pines de
pinMode(LEDPIN
pinMode(STANDBY
pinMode(MOTORRIGH_DIR_A
pinMode(MOTORRIGH_DIR_B
pinMode(MOTORRIGH_PWM
pinMode(MOTORLEFT_DIR_A
pinMode(MOTORLEFT_DIR_B
pinMode(MOTORLEFT_PWM
salida
,OUTPUT);
,OUTPUT);
,OUTPUT);
,OUTPUT);
,OUTPUT);
,OUTPUT);
,OUTPUT);
,OUTPUT);
pinMode(BUTTONPIN
,INPUT);
//
//
//
//