Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
co/)
MENÚ
Robótica Educativa (Http://Tdrobotica.Co/Categoria/3)
Proyectos Robóticos (Http://Tdrobotica.Co/Categoria/12)
Partes Para Robots (Http://Tdrobotica.Co/Categoria/13)
¿Quiénes Somos? (Http://Tdrobotica.Co/Categoria/3)
Tutoriales (Http://Tdrobotica.Co)
Noticias (Http://Tdrobotica.Co/Categoria/3)
¿Tienes Preguntas? (Http://Tdrobotica.Co/)
Seguidor de línea(profesional)
24 enero, 2014 (http://aprender.tdrobotica.co/2014/01/24/) 3 respuestas (http://aprender.tdrobotica.co/seguidor-de-
lineaprofesional/#comments)
Nota: Este articulo fue escrito con la colaboración de nuestro amigo robotista Sebástian Agudelo, agradecemos mucho su apoyo e
interés en compartir su conocimiento y experiencia con la comunidad.
Después de un largo tiempo tenemos la oportunidad de actualizar nuestro ya éxitoso tutorial de robot seguidor de línea
(http://www.tdrobotica.co/noticias/robotica/53) (http://tdrobotica.co/noticias/robotica/53
(http://www.tdrobotica.co/noticias/robotica/53)), vale la pena decir que no es cualquier actualización, este tutorial muestra las partes y
funcionamiento de uno de los seguidores de línea más famosos del 2012 y 2013 en las competencias de Bogotá, Colombia.
Para muchas personas un robot seguidor de línea es la puerta de entrada al mundo de la electrónica y la robótica, para otros se
convierte en una obsesión, en un reto, en una excusa para continuar mejorando sus conocimientos y experiencia en la robótica.
Creemos que esta última opción es la que mejor define a Sebastián y sus creaciones.
Iniciemos conociendo a Sebastián y sus robots en esta vídeo entrevista realizada por Ibraim:
tdrobotica: Sebástian y sus seguidores de línea
Ahora dejemos que Sebastián nos guíe sobre los pasos para construir tu robot seguidor de línea éxitoso para este nuevo año.
(http://tienda.tdrobotica.co/producto/305)
(http://tienda.tdrobotica.co/producto/411)
(http://tienda.tdrobotica.co/producto/429)
Placa Baby Orangután (http://tienda.tdrobotica.co/producto/429): Esta pequeña placa agrupa un puente H para
controlar los motores y un microcontrolador conectados previamente ahorrándote prácticamente toda la parte
electrónica y será nuestro controlador. Definitivamente es la mejor opción que puedes tener para tu robot
basados en las características de tamaño, precio, potencia y fácilidad de programación.
(http://aprender.tdrobotica.co/wp-content/uploads/2014/01/par-ruedas-para-sumo-alta-densidad-azules1.jpg)Ruedas
para seguidor de línea (http://tdrobotica.co/par-de-ruedas-seguidor-de-linea-velocista/382.html): Son indispensables este tipo de
ruedas ya que aunque el robot es un seguidor de línea, al alcanzar velocidades de más de 2 mts segundo necesita un agarre optimo
en cada curva.
Placa, PCB Robot: Esta placa será la estructura del robot, donde se soldaran y acoplaran todos los componentes. También puedes
encontrar los diseños en el archivo adjunto al final.
(http://aprender.tdrobotica.co/wp-content/uploads/2014/01/bateria-de-polimero-de-iones-de-litio-300mah-
74v.jpg)Batería 7.4v 300mAH (http://tdrobotica.co/bateria-lipo-300mah-74v/290.html): Las baterías de LiPo son la mejor opción en
robótica el día de hoy, está en particular es excelente opción para el robot ya que su tamaño y peso en relación a su eficiencia es muy
buena. Ten en cuenta que estás baterías no se puede cargar con cualquier cargador, sino que se necesita un cargador especial que
también encuentras en tdrobotica: cargador de baterías de LiPo (http://tdrobotica.co/cargador-lipo-2-y-3-celdas/297.html).
Trompa Robot: Este componente es de acrílico, al final del tutorial encontraras un archivo zip en donde se encuentran los planos para
que lo puedas fabricar.
Programador AVR Pololu (http://tienda.tdrobotica.co/producto/55): Para programar el Baby Orangutan es necesario usar este
programador de AVR, puedes programarlo ya sea desde el AVR Studio o la interfaz de programación de Arduino como será nuestro
caso.
Regleta 40 Pines: Esto lo usaras en conjunto con los cables de 5 pines, igualmente para conectar la batería a la placa.
Regleta Hembra: Esta se usara para conectar la baby orangután a la placa principal. Este elemento al igual que los siguientes los
conseguiras con tu proveedor favorito de partes electrónicas.
2 Leds 3mm: Te indicara el estado del robot, y será una buena decoración.
Resistencias Superficiales 1k: Resistencias para los leds y el pulsador, su función es no dañar los leds y no crear un corto con el
pulsador al microcontrolador de la placa Baby Orangutan.
Super Bonder: Más conocido como pegante instantáneo, se usara demasiado para algunos ajustes.
3. Construcción y Diseño
Puedes encontrar en el zip del proyecto una carpeta con todos los diseños para que los modifiques y un archivo en pdf que te puede
servir también para crear tu propio chasis. El diseño se realizó en el PCB Wizard (http://www.new-wave-concepts.com/ed/wizard.html),
puedes descargar una versión de prueba en el sitio web del fabricante aquí (http://www.new-wave-concepts.com/ed/wizard.html).
Siguiente a esto, se debe con los soportes para motores, ajustar los motores uno en cada lado, siguiendo los agujeros de referencia en
la placa.
Ahora el siguiente paso es soldar la regleta que tiene incluida los sensores, de esta manera:
Seguidamente colocar los sensores en la base numero 2 de la trompa del robot, entran perfectamente, y para ajustarlos debes tener 2
pequeños tornillos.
Cuanto ya tengas todo esto armado el siguiente paso es usar los 2 cables de 5 pines y conectar un extremo de ambos cables a la
regleta de sensores, y el otro extremo a la regleta de 11 pines que soldamos en nuestro robot.
Si hiciste correctamente todos los pasos todo debería verse algo así:
3.6 Ruedas
Tu seguidor cada vez tiene más forma, y es hora de colocarle sus respectivas ruedas, como antes hemos mencionado aunque estas
ruedas sean de sumo, son excelentes para el seguidor de línea velocista ya que tienen un agarre increíble.
Para colocar las ruedas de tu robot debes insertar el eje del motor en el rin, verificando que la parte plana del eje este contra el
tornillo, seguidamente pasar ajustarlo.
(http://aprender.tdrobotica.co/wp-content/uploads/2014/01/par-ruedas-para-sumo-
alta-densidad-azules.jpg)
Ya ajustado debes insertar el neumático a presión y ya tienes una de las dos ruedas en el robot… Sigue los mismos pasos para la otra.
4. Programación
Esta es la etapa final de tu seguidor, no queremos que esta sea una etapa compleja y para esto te daremos todo para que tu seguidor
funcione y lo puedas adaptar a tus necesidades.
Antes de programar nuestro robot, debemos tener en cuenta que usamos una placa no nativa con el entorno Arduino y debemos
configurar y cambiar algunas cosas para que la placa sea programada correctamente.
Pololu la empresa que fabrica esta placa, te explica un poco que debes hacer para que funcione debidamente en el siguiente link:
http://www.pololu.com/docs/0J17/3 (http://www.pololu.com/docs/0J17/3)
Igualmente tienes que instalar los drivers del programador AVR V1, en este link Pololu te explica:
Después de estos pasos, hay que guardar las siguientes librerías en esta dirección en tu PC: C:\Program Files (x86)\Arduino\libraries En
el caso que Arduino esté instalado en otra dirección tienes que buscarla y guardar las librerías en la carpeta libraries. Adjunto Archivo
4.2 Programa
¡¡¡En buena hora solo falta programar tu robot y lo tendrás en pista de inmediato!!!.
Con la batería puesta debes prender el robot y verificar que en la placa Baby Orangutan prenda el led verde, de otra forma alguno de
los pasos anteriores incluso la PCB puede estar mal. Si todo sale bien conecta el programador a tu PC ya configurado y este a tu Baby
Orangutan.
Abre el entorno Arduino y pega el siguiente Código, también lo encuentras en la documentación adjunta.
#include <QTRSensors.h>
#include <OrangutanMotors.h>
//‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐//
//Sensores de Linea PD
#define NUM_SENSORS 6 // Numero de sensores que usa
#define NUM_SAMPLES_PER_SENSOR 5 // Muestras por sensor
#define EMITTER_PIN 2 // emitter is controlled by digital pin 2
// sensors 0 through 5 are connected to analog inputs 0 through 5, respectively
QTRSensorsAnalog qtra((unsigned char[]) {0, 1, 2, 3, 4, 5},
NUM_SENSORS, NUM_SAMPLES_PER_SENSOR, EMITTER_PIN);
unsigned int sensorValues[NUM_SENSORS];
OrangutanMotors motors;
//‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐//
//Velocidad Maxima Robot//‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐//‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐//
const int maximum = 80;
//‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐//
//VALORES PD//‐‐‐‐‐‐‐‐‐‐//VALORES PD//‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐//
int VProporcional = 1.45;
int VDerivativo = 16;
//‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐//
//Velocidad de Calibracion
int velcalibrate = 20;
//‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐//
void setup()
{
int inPin = 10;
int val = 0;
pinMode(9, OUTPUT);
pinMode(8, OUTPUT);
pinMode(inPin,INPUT);
val = digitalRead(inPin);
while (val == HIGH)
{
digitalWrite(9, HIGH);
digitalWrite(8, HIGH);
val = digitalRead(inPin);
};
if (val == LOW)
{
digitalWrite(9, LOW);
digitalWrite(8, LOW);
};
motors.setSpeeds(0,0);// Motores detenidos
//‐‐‐‐‐‐‐‐‐‐‐‐‐Instrucciones para Empezar a hacer la Calibracion de Sensores‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐//
delay(1500);
digitalWrite(9, HIGH);
digitalWrite(8, HIGH);// Enciende el leds para indicar que se esta calibrando.
for (int counter=0; counter<21; counter++)
{
if (counter < 6 || counter >= 15)
OrangutanMotors::setSpeeds(‐velcalibrate, velcalibrate);
else
OrangutanMotors::setSpeeds(velcalibrate, ‐velcalibrate);
qtra.calibrate();
delay(20);
}
digitalWrite(9, LOW); // Apaga el led para indicar que se termino la calibracion.
digitalWrite(8, LOW);
OrangutanMotors::setSpeeds(0, 0);
delay(200);
digitalWrite(9, HIGH);
digitalWrite(8, HIGH);
delay(200);
digitalWrite(9, LOW); // Parpadeo para indicar que el robot esta listo.
digitalWrite(8, LOW);
delay(200); // Parpadeo para indicar que el robot esta listo.
digitalWrite(9, HIGH);
digitalWrite(8, HIGH); // Parpadeo para indicar que el robot esta listo.
delay(200);
digitalWrite(9, LOW); // Parpadeo para indicar que el robot esta listo.
digitalWrite(8, LOW);
delay(200);
//‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐Fin Calibracion de Sensores‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐//
pinMode(inPin,INPUT);
val = digitalRead(inPin);
while (val == HIGH)
{
digitalWrite(9, HIGH);
digitalWrite(8, HIGH);
val = digitalRead(inPin);
};
if (val == LOW)
{
digitalWrite(9, LOW);
digitalWrite(8, LOW);
delay(1000); // Retardo X segundos antes de Empezar a andar
};
}
unsigned int last_proportional = 0;
long integral = 0;
void loop()
{
unsigned int position = qtra.readLine(sensorValues); // leemos posicion de la linea en la variable position
// Referencia donde seguira la linea, mitad sensores.
int proportional = (int)position ‐ 2500;
// Calculos PD
int derivative = proportional ‐ last_proportional;
integral += proportional;
last_proportional = proportional;
int power_difference = proportional/VProporcional + integral*0 + derivative*VDerivativo;
if (power_difference > maximum)
power_difference = maximum;
if (power_difference < ‐maximum)
power_difference = ‐maximum;
if (power_difference < 0)
OrangutanMotors::setSpeeds(maximum, maximum + power_difference);
else
OrangutanMotors::setSpeeds(maximum ‐ power_difference,maximum);
};
Antes de programarlo deberás seleccionar la placa Baby Orangutan y el Programador AVR ISP v2 de la siguiente forma:
Cuando ya tengas esto seleccionado, lo único que falta es que programes y tu robot debería funcionar torpemente.
Esto quizá es la parte más compleja del robot ajustar esos dos números mediante muchas pruebas, aunque algunos tips te pueden
facilitar la obtención de los valores adecuados, a continuación veras cuales y donde se encuentran en el código estos números:
//‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐//
//VALORES PD//‐‐‐‐‐‐‐‐‐‐//VALORES PD//‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐//
int VProporcional = 1.45;
int VDerivativo = 16;
Otro valor importante es la velocidad del robot, que varía de 0 a 255 y se encuentra en este lugar:
//‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐//
//Velocidad Maxima Robot//‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐//‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐//
const int maximum = 80;
Retomando los valores del PD para lograr ajustarlos, una vez que estás seguro que el robot funciona, debes al valor llamado
VProporcional: darle un numero bajo, y el Valor llamado VDerivativo: Darle un valor de 0, una vez hagas esto programas el robot y
pruebas que quede oscilatorio pero siguiendo la línea, sin volverse loco a la velocidad que tu deseas, te recomiendo empezar con
menos de 150.
Hay dos posibilidades, una que el robot oscile de una manera adecuada sin descontrolarse, y otra que el robot se vuelva “loco”, si
sucede esto debes conectar al PC nuevamente y probar otro valor hasta encontrar la oscilación adecuada.
Si ya has encontrado la oscilación adecuada, es el momento para agregarle un número al valor llamadoVDerivativo, podrías agregarle
un número mayor al valor de VProporcional, prográmalo y prueba el robot… Podrás notar que el robot tiene un comportamiento
totalmente diferente y que ese valor cambio todo, ahora es cuestión de cambiar esos valores hasta encontrar que el robot funcione
como en los videos que te hemos mostrado.
Esto es un arduo trabajo y lo que más toma tiempo, lo que yo te recomendaría es que varíes el valorVDerivativo más que el
VProporcional ya que este una vez encontrado es efectivo, una forma de darte cuenta es que en rectas no oscile y acelere al 100% de
la velocidad establecida, en este punto tuVProporcional esta casi perfecto, ahora si se sale en las curvas debes cambiar el VDerivativo
poco a poco hasta encontrar el valor adecuado que haga conjunto con tu valor VProporcional y poco a poco vallas subiendo la
velocidad y cambiando los valores, la velocidad del robot afecta los valores directamente.
NOTA: Hay que tener en cuenta que cada vez que el robot se apague debe calibrar sensores, esta función está incluida en el código, y
mueve el robot para que los sensores pasen por toda la línea, cuando la batería esta descargada el robot le cuesta hacer esta
operación y debe ser recargada.
DESCARGA
(http://www.tiendaderobotica.com/download
/seguidor.zip) acá los planos del PCB, los
diseños de la trompa, las librerías y el
programa en Arduino.
← Anterior (http://aprender.tdrobotica.co/guia-basica-de-arduino/)
Siguiente → (http://aprender.tdrobotica.co/maker-faire-bay-area-2014/)
Artículos relacionados
Guía de Raspberry
Usando programación
Pi 3,Robot
La Revolución
Mágico (http://aprender.tdrobotica.co/guia-de-programacion-robot-
de las Mini PC y La Computación Física
(http://aprender.tdrobotica.co/usando-raspberry-pi-3-la-revolucion-de-las-mini-pc-y-la-computacion-
magico/)
fisica/)
Guía delaensamble
Wizard revolución
Robot
de las
Mágico
competencias
(http://aprender.tdrobotica.co/guia-de-ensamble-robot-magico/)
de minisumo (http://aprender.tdrobotica.co/wizard-la-
revolucion-de-las-competencias-de-minisumo/)
Guía de
ensamble tLED
(http://aprender
.tdrobotica.co/g
uia-de-
ensamble-tled/)
Oruga controlada desde Android (http://aprender.tdrobotica.co/oruga-controlada-desde-android/)
Robot MiniSumo
ROS y turtlebot
(http://aprender.tdrobotica.
(http://aprender.tdrobotica.co
co/robot-minisumo/)
/ros-y-turtlebot/)
3 comentarios
tengo una duda en tu pcb,en que parte va la alimentacion de los motores(Li-Po),puesto que veo que en la imagen utilizas dos
pilas,por eso me genera si utilizas dos pilas una para alimentar el circuito y otra para los motores,o solo es una. Es un poco confuso
para mi si me pudieras aclarar un poco el panorama
Responder (/seguidor-de-lineaprofesional/?replytocom=220#respond)
hola yo quiero comprar todas piezas para hacer este carrito usted puede me vender
Responder (/seguidor-de-lineaprofesional/?replytocom=231#respond)
Adolfo Zaragoza (http://aprender.tdrobotica.co/seguidor-de-lineaprofesional/#comment-240) 21 abril, 2016 de 10:22 pm
Responder (/seguidor-de-lineaprofesional/?replytocom=240#respond)
Deja un comentario
Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *
Nombre *
Correo electrónico *
Web
Comentario
Publicar comentario
Lo último T
a
Competencias de Robótica en Colombia 2016-2 g
(http://aprender.tdrobotica.co/competencias-robotica-en-colombia-2016-
2/)
(http://aprender.tdrobotica.co/competencias-
robotica-en-colombia-2016-2/)
Usando Raspberry Pi 3, La Revolución de las Mini PC y La Computación
Física (http://aprender.tdrobotica.co/usando-raspberry-pi-3-la-revolucion-
de-las-mini-pc-y-la-computacion-fisica/)
(http://aprender.tdrobotica.co/usando-raspberry-
pi-3-la-revolucion-de-las-mini-pc-y-la-
computacion-fisica/)
(http://aprender.tdrobotica.co/vacaciones-
tiempo-de-crear/) Vacaciones: tiempo de crear! (http://aprender.tdrobotica.co/vacaciones-
tiempo-de-crear/)
(http://aprender.tdrobotica.co/nuestro-brochure/)
Siganos
Contacto
(1) 3 101197 - 300 5606931
Ventas@Tdrobotica.Co (Mailto:%76%65%6e%74%61%73@%74%64%72%6f%62%6f%74%69%63%61.%63%6f )
Mi Cuenta
Información
Promociones Especiales (Http://Tdrobotica.Co/Precios-Bajos)
Novedades (Http://Tdrobotica.Co/Nuevos-Productos)
Aprende Más
Noticias (Http://Aprender.Tdrobotica.Co/Noticias/)
Tutoriales (Http://Aprender.Tdrobotica.Co/Tutoriales/)