Este documento presenta el reporte de elaboración de un robot autónomo capaz de resolver laberintos. El robot fue desarrollado con Arduino y sensores ultrasónicos para detectar paredes. El robot tiene ruedas y motores para moverse a través del laberinto. El objetivo es presentar los detalles del diseño del hardware y software para que el robot pueda navegar de forma autónoma a través de un laberinto prediseñado y encontrar la salida en el menor tiempo posible.
Diapositiva de Topografía Nivelación simple y compuesta
Robot Laberinto
1. Instituto Tecnológico de Tuxtla Gutiérrez
Ciencia y Tecnologia con sentido Humano
Ingeniería en Sistemas Computacionales
REPORTE DE ELABORACIÓN DE ROBOT RESOLVEDOR
DE LABERINTOS
Autores:
Córdova Morales, Diego A.; Viza Avendaño Hugo A.; González Hernández Jorge L.; Montejo
Gúzman Josúe.
Lenguajes de Interfaz.
Instituto Tecnológico de Tuxtla Gutiérrez, Carretera Panamericana Km. 1080, C.P. 29050, Apartado
Postal: 599, Tuxtla Gutiérrez, Chiapas.
Resumen—Se presenta el reporte sobre la elaboración de un robot autónomo resolvedor de
laberintos, usado en el 3er. Torneo estatal universitario de robótica, realizado para la materia
de Lenguajes de Interfaz, el cual fue desarrollado en arduino uno, y se muestra desde el inicio
su proceso de creación. El objetivo de este trabajo es presentar los detalles principales del
diseño del hardware y software de un robot autónomo que es capaz de desplazarse a través
de un laberinto prediseñado
Palabras clave: Robot, Arduino, laberinto, sensores ultrasónicos.
Introducción
En la actualidad la mayoría de los problemas
pueden ser resueltos de una forma
automatizada, el uso de la tecnología es
prácticamente parte de nuestro día a día,
desde que nos levantamos hasta que nos
acostamos. La misma sólo cuenta con un
objetivo, el facilitarnos la vida, muchas de
estas grandes cosas como automóviles,
televisiones, computadoras, refrigeradores,
etc. Están basadas en cosas mucho más
sencillas pero que con diversas adaptaciones
se pueden realizar grandes creaciones.
El hardware es la parte física de un sistema,
el software es la parte lógica, y ambos son
indispensables en la resolución de algunos
productos anteriormente mencionados, ya
que si uno de los dos es deficiente el otro no
podría desarrollar al máximo sus funciones.
En cuanto al hardware dependerá o se deberá
adecuar al medio ambiente que lo rodea, es
decir a su físico para que no se degrade a
medida que pasa el tiempo, y en cuanto al
software deberá tomar en cuenta las
necesidades y las capacidades del hardware
para trabajar, existen muchos lenguajes de
programación, pero algunos son orientados a
determinadas partes, por ejemplo existen
infinidad de lenguajes de programación de alto
nivel, compiladores, y algunos menos de bajo
nivel.
Los lenguajes de programación a alto nivel
trabajan en un ambiente más visual, y se
busca de un intérprete que pueda traducir lo
programado a un lenguaje que pueda
entender la computadora, el lenguaje a bajo
nivel trabaja directamente con el cerebro de
nuestro hardware, sin embargo el proceder en
su programación es mucho más complicado
que si de alto nivel se tratara, así pues el punto
óptimo sería el de trabajar con un lenguaje
amigable para el programador que pueda
sacar las máximas capacidades al hardware.
Aquí arduino se presenta como una solución.
Arduino es una plataforma de creación de
prototipos de código abierto basado en
hardware y software fácil de usar. Esto
permite a cualquier usuario crear de forma
independiente y fácilmente proyectos y
adaptarlos a sus necesidades particulares,
2. Instituto Tecnológico de Tuxtla Gutiérrez
Ciencia y Tecnologia con sentido Humano
Ingeniería en Sistemas Computacionales
contando además con apoyo de la comunidad
de desarrollo de arduino que cuenta con miles
de proyectos de libre uso para iniciar en este
mundo nuevo [1].
Es por eso que se ha decantado por utilizar
esta placa para llevar a cabo un robot capaz
de resolver cualquier laberinto, apoyándose
de componentes específicos.
Bases [2]
El robot
1. Las dimensiones del móvil no deben
superar los 25 cm. de largo y 25 cm de ancho
en estado inicial. Pudiendo tener la altura que
se desee. Cuando el robot compita, se puede
extender tanto como el diseño así lo permita.
2. Los móviles deben ser totalmente
autónomos; pudiéndose utilizar un medio
inalámbrico para la activación. (No control
remoto).
3. Los robots participantes deberán tener su
“interruptor de encendido” en un lugar visible
que permita ser apreciado tanto por los
Jurados como por el público.
4. El robot podrá utilizar cualquier medio de
locomoción (rueda, orugas, patas, etc.).
5. Los participantes pueden utilizar cualquier
tipo de materiales para la construcción de su
móvil. En la parte estructural, de sensado y
tipo de controlador (no hay ninguna
condicionante para construcción).
6. La única limitante es que el medio de
locomoción no dañe la superficie de juego.
Del juego
1. La competencia de Laberinto Básico
consiste en la creación de un robot autónomo
capaz de entrar y recorrer un Laberinto,
siguiendo las paredes, hasta salir en el menor
tiempo posible.
2. En esta prueba el robot debe ingresar y
recorrer el Laberinto hasta salir de él en un
tiempo máximo de 5 minutos.
3. El robot debe mantener la posición de
inicio por 5 segundos después de haber
presionado el interruptor de encendido.
4. La prueba se considerara finalizada
cuando el robot este completamente dentro de
la meta durante 5 segundos.
5. El método de Juego consistirá en tres
etapas (fácil, intermedio y complicado) en las
cuales se tendrán un diferente laberinto,
acorde a su dificultad de solución.
6. Cada robot tendrá 3 turnos o intentos para
realizar el recorrido en el Laberinto (etapa).
7. Los robots que resuelvan el nivel
correspondiente pasaran a la siguiente etapa
en la que se incrementara la dificultad del
laberinto.
8. Cuando se haya finalizado la primera
ronda, los participantes tendrán un tiempo de
10 minutos para que realicen alguna
reparación o reprogramación de su robot
según sea y consideren necesario.
9. Si el robot no pudo alcanzar a salir del
laberinto en el tiempo de 5 minutos
establecidos para la prueba, los Jurados
darán por finalizado su turno (participación) y
se le asignarán los puntos correspondientes
según su desempeño en el recorrido.
10. Si durante la prueba el robot se queda
inmóvil más de 30 segundos, los jurados
darán por concluido su turno.
11. En el caso de que el robot inicie su
recorrido por el Laberinto y retorne
nuevamente al lugar de partida, también
(como en el caso anterior) se dará por
finalizado su turno.
12. En el caso de que exista un empate y
los robots involucrados hayan concluido
satisfactoriamente la prueba, se tomará en
3. Instituto Tecnológico de Tuxtla Gutiérrez
Ciencia y Tecnologia con sentido Humano
Ingeniería en Sistemas Computacionales
cuenta el tiempo en que cada robot logró salir
del Laberinto y así se declara un vencedor.
13. En el caso particular de que ningún robot
llegue a la Meta, los Jurados tomarán en
cuenta qué robot es el ganador según su
desempeño y ésta decisión será inapelable.
14. La siguiente puntuación será utilizada
para llevar a cabo un desempate entre robots
que hayan terminado el laberinto:
· Si el robot sale del laberinto en
tiempo: +100 Puntos
· Por cada cambio de dirección hacia
la meta: +10 puntos
· Si el robot regresa al INICIO: No
gana puntos.
· Si el robot se queda inmóvil por más
de 30 seg.: - 10 Puntos
· Si el robot recorre un mismo tramo
3 veces: - 5 Puntos
Especificaciones
1. La competencia de Laberinto Básico se
realizará en una plataforma de madera, que
constará de un piso plano y paredes de
separación.
2. La superficie del piso del laberinto estará
pintada de color blanco.
3. El Área del Laberinto tendrá las
dimensiones de 220 cm de ancho x 220 cm.
de largo.
4. La altura de las paredes del Laberinto
será de 20 cm. y el grosor de éstas será de 1
cm., pintadas de color gris mate.
5. Los anchos de los senderos del Laberinto
tendrán la medida de 35 cm. Los senderos
podrán doblarse en ángulo recto (90º).
6. La zona de Salida (inicio) será marcada
por un cuadro de color amarillo.
7. La zona de llegada (Meta) será marcada
por cuadro de color negro.
8. Todos los senderos contaran con una
línea central discontinua de 2 cm de ancho. Se
tendrá un segmento de línea de 10 cm. A
continuación, un espacio entre segmentos de
5 cm.
Figura 1. Diseño del laberinto a resolver, indicando inicio
y final del mismo, con trazas horizontales y verticales
para los cruces.
Figura 2. Vista real del laberinto, con paredes marcadas
de acuerdo a las bases establecidas.
Desarrollo y diseño
Al iniciar a diseñar el prototipo se consideraron
diferentes aspectos que podrían afectar la
implementación exitosa del mismo.
Principalmente se consideraron aspectos
como el tamaño del robot, si sería muy grande
para realizar los giros, el tipo de rueda a usar,
ya que debería de contar con suficiente agarre
en el material del suelo, e inclusive contar con
4. Instituto Tecnológico de Tuxtla Gutiérrez
Ciencia y Tecnologia con sentido Humano
Ingeniería en Sistemas Computacionales
la alimentación necesaria para dar abasto a
cada uno de los componentes usados.
Chasis
El diseño del chasis es una de las claves en
cuanto a la implementación exitosa del robot,
ya que deberá contener a todas las piezas que
se utilicen, y deberá de ser capaz de prevenir
de algún daño a las mismas o de evitar la
propagación del fuego en caso de un corto
circuito. Para ello es optó por una base y
paredes de acrílico (Figura 3), la cual
permitiría ver todos los componentes y actuar
de forma inmediata en caso de algún fallo.
Figura 3. Acrílico. Usado como base y paredes del
chasis del robot, debido a que es de poco peso.
Desplazamiento
Para realizar el desplazamiento de nuestro
robot optamos por usar 2 llantas de plástico
(Figura 4), las cuales permitirían tener una
mejor tracción que una banda, además de una
rueda loca indispensable para realizar bien los
giros y lograr un equilibrio en la base del robot.
Se colocaron dos llantas a cada costado de la
parte frontal del robot, para tener un
direccionar seguro y confiable, y la rueda loca
en el centro de la parte trasera, para hacer que
cada giro realizado sea hecho con una mejor
precisión.
Figura 4. Llantas de plástico usadas para la tracción del
robot en la superficie establecida en las bases.
Sensores
Los sensores de distancia utilizados son
ultrasónicos HC-SR04 (Figura 5). Estos son
capaces de detectar objetos próximos y
calcular la distancia a la que se encuentran en
un rango de 2 a 450 cm. [3]
Funcionan enviando y recibiendo pulsos
ultrasónicos y contienen toda la electrónica
encargada de realizar la medición. Su
utilización se basa en enviar un pulso de
arranque y medir el tiempo de pulso de retorno
luego de la reflexión en el objeto.
Se colocaron de la siguiente forma: Dos
sensores laterales en la parte trasera del robot
mismos que a la hora de detectar un espacio
vacío facilitaría la hora de la rotación del robot,
realizándolo en ese mismo instante y sin la
necesidad de desarrollar cálculos posteriores,
se colocó además otro sensor en la parte
delantera del robot para que pueda identificar
puntos de ruptura y detenerse a analizar
posibles salidas en caso de haber un callejón
sin salida y así evitar chocar contra la pared
(Figura 6).
5. Instituto Tecnológico de Tuxtla Gutiérrez
Ciencia y Tecnologia con sentido Humano
Ingeniería en Sistemas Computacionales
Figura 5. Sensor ultrasónico HC-SR04
Figura 6. Sensor ultrasónico frontal.
Motores
Para el movimiento de las ruedas se usaron
motorreductores (Figura 7), esencialmente
por que su performance/costo es bastante
aceptable. Consisten en motores eléctricos
que operan en voltajes que oscilan entre 3 y
12 V de Corriente Directa.
Se colocaron 2 motorreductores, uno para
cada llanta. Estos nos permitirán realizar
avances, retrocesos y giros, cambiándoles la
intensidad de voltaje con las que trabaja, por
ejemplo para realizar un giro a la derecha,
bastaría con apagar el motor derecho del
robot y mantener en funcionamiento el motor
izquierdo.
Figura 7. Motorreductor.
Alimentación
Para lograr un prototipo autónomo se requiere
de una alimentación independiente, esto se
logra mediante el uso de pilas recargables. Se
usaron dos pilas de 9 V (Figura 8), una para el
funcionamiento del arduino y sus respectivas
salidas, y otra para el funcionamiento de los
motores, que son los que principalmente
consumen la mayor energía.
Figura 8. Pila de 9V, usada como fuente de poder del
robot.
Sensores ópticos
Se usaron sensores ópticos del tipo tcrt5000,
esto principalmente para identificar el cuadro
de inicio y de meta, revisando las bases
vemos que el punto de inicio es un cuadro
amarillo, mientras que la meta está contenida
en un cuadro negro, y para ganar será
necesario que el robot permanezca en meta
mínimo 5 segundos, para ello, deberemos
identificar el color de líneas que vayamos
cruzando a cada momento, para ello se
6. Instituto Tecnológico de Tuxtla Gutiérrez
Ciencia y Tecnologia con sentido Humano
Ingeniería en Sistemas Computacionales
instalaron 3 sensores ópticos en la parte
inferior del robot, junto a cada sensor para así
no confundirlas con las líneas ya predefinidas
en el suelo del laberinto. Una vez que se
detecte que están los tres sensores marcando
los colores negros indicará que estamos en el
punto de meta con lo cual suspenderán su
trabajar al menos el tiempo mínimo
establecido en las bases
Figura 9. Sensor óptico TCRT5000
Metodología para la resolución del
laberinto
Para ello se basó en el algoritmo de la mano
izquierda (Figura 10). En el cual el algoritmo
indicaría en base a la información obtenida por
cada componente como se controlarían los
motorreductores. S1 (Sensor lateral
izquierdo), S2(Sensor frontal) y S3(Sensor
lateral derecho). Se utiliza la siguiente
convención: si el sensor Si = 1 significa que se
está sensando una pared próxima, por lo tanto
no se habilita el giro hacia ese lado y si Si = 0,
se habilita el giro correspondiente.
Figura 10. Algoritmo de la mano izquierda para
manipular el movimiento de los motores.
Con esto lo que se trata de evitar son los
loops, o giros, los cuales si se tratara de
resolver de una forma más robusta, nuestro
robot pasaría varias veces por el mismo
camino, cosa que de acuerdo a las bases
establecidas en párrafos anteriores será
contada como una penalización, así que
mientras más se pueda evitar esta situación,
mejor.
Programación
Para realizar el proceso de programación se
recurrió al IDE oficial de Arduino (Figura 11),
en el cual podremos especificar mediante un
lenguaje de alto nivel el funcionamiento de
nuestro robot. Con pocas líneas de código se
pueden hacer grandes cosas.
7. Instituto Tecnológico de Tuxtla Gutiérrez
Ciencia y Tecnologia con sentido Humano
Ingeniería en Sistemas Computacionales
Figura 11. IDE de Arduino
A continuación se presenta el código fuente
implementado para el funcionamiento de
nuestro robot, indicando los pines de entrada
y de salida, además de indicar el
funcionamiento de algunas rutinas.
#include <Ultrasonic.h>
Ultrasonic ultrafront(4,5); // (Trig PIN,Echo PIN)
Ultrasonic ultraleft(2,3); // (Trig PIN,Echo PIN)
Ultrasonic ultraright(6,7 ); // (Trig PIN,Echo PIN)
int sensoradeval = 0;
int sensoriz = 0;
int sensordr = 0;
int v=100,tg=400,ta= 300;
void setup() {
Serial.begin(9600);
pinMode(10,OUTPUT);
pinMode(9,OUTPUT);
pinMode(11,OUTPUT);
pinMode(13,OUTPUT);
}
void loop() {
delay(6000);
while(true){
SENSORIZQ();
}
}
void acomodateD(){
delay(100);
digitalWrite(10,LOW);
analogWrite(9,v+30);
digitalWrite(11,LOW);
analogWrite(13,v);
}
void SENSORADEL() {
//.print("Front: ");
//Serial.print(ultrafront.Ranging(CM)); // CM or INC
//Serial.print(" cm " );
//delay(50);
if(ultrafront.Ranging(CM) > 15){
Serial.println("Avanzare hacia adelante");
if(ultraleft.Ranging(CM)<8){
acomodateD();
delay(ta);
}else{
IRADELANTE();
delay(ta);
}
}
else {
Serial.println("No hay espacio para adelante");
SENSORDER();
}
}
void SENSORIZQ() {
//Serial.print("Left: ";
//Serial.print(ultraleft.Ranging(CM)); // CM or INC
//Serial.print(" cm " );
// delay(50);
boolean band=true;
int daux1, daux2,aux3;
if(ultraleft.Ranging(CM) > 15){ //Si tiene un espacio
mayor a 15 gira a la izquierda
Serial.println("Voy a girar a la izquierda");
IRIZQUIERDA();
delay(tg);
/*if(ultrafront.Ranging(CM) > 15){
IRADELANTE();
delay(500);
}*/
if(ultrafront.Ranging(CM)<10 ){
analogWrite(10,v);
digitalWrite(9,LOW);
digitalWrite(11,LOW);
analogWrite(13,v);
delay(ta-200);
aux3=21;
IRDERECHA();
delay(tg);
}else{
IRIZQUIERDA();
delay(tg);
do{
Serial.println(ultrafront.Ranging(CM));
IRADELANTE();
Serial.println("Tengo espacio enfrente
avanzaré un poquito");
delay(ta);
Serial.println(ultrafront.Ranging(CM));
daux1=ultraleft.Ranging(CM);
if(band==true){
daux2=ultraleft.Ranging(CM);
band=false;
}
aux3=daux1-daux2;
}while(ultrafront.Ranging(CM) > 15 && aux3<20);
}
}
else {//izquierda menor que 15
8. Instituto Tecnológico de Tuxtla Gutiérrez
Ciencia y Tecnologia con sentido Humano
Ingeniería en Sistemas Computacionales
Serial.print("izq ");
Serial.println(ultraleft.Ranging(CM));
Serial.println("Casi estoy pegado de lado izquierdo");
SENSORADEL();
}
}
void SENSORDER() {
//Serial.print("Right: ");
//Serial.print(ultraright.Ranging(CM)); // CM or INC
//Serial.println(" cm" );
//delay(50);
if(ultraright.Ranging(CM) > 15){
Serial.println("Giraré a la izquierda");
IRDERECHA();
delay(tg);
IRADELANTE();
delay(ta);
}
else { //GIRO COMPLETO POR MITADES IZQUIERDA
Serial.println("No hay espacio por ningun lado, dare
media vuelta");
IRIZQUIERDA();
delay(tg);
STOP();
IRIZQUIERDA();
delay(tg);
}
}
void IRADELANTE(){
digitalWrite(10,LOW);
analogWrite(9,v);
analogWrite(11,v);
digitalWrite(13,LOW);
}
void IRATRAS(){
analogWrite(10,v);
digitalWrite(9,LOW);
digitalWrite(11,LOW);
analogWrite(13,v);
}
void IRIZQUIERDA(){
IRATRAS();
delay(100);
analogWrite(10,v);
digitalWrite(9,LOW);
analogWrite(11,v);
digitalWrite(13,LOW);
}
void IRDERECHA(){
IRATRAS();
delay(100);
digitalWrite(10,LOW);
analogWrite(9,v);
digitalWrite(11,LOW);
analogWrite(13,v);
}
void STOP(){
digitalWrite(10,LOW);
digitalWrite(9,LOW);
digitalWrite(11,LOW);
digitalWrite(13,LOW);
}
Pruebas
Se realizaron varias pruebas en suelos de
diferentes materiales con el objetivo de lograr
una buena calibración en los giros y el rango
de los sensores, provisionalmente se creó un
laberinto construido con paredes de base de
cartón, y se probaron diferentes condiciones
de decisiones.
Como se puede apreciar en las siguientes
imágenes.
Figura 12. Prueba en una línea recta para determinar la
estabilidad de la rueda loca.
Figura 13. Prueba decisión giro izquierdo, si encuentra
un espacio vacío en el sensor lateral izquierdo girará
hacia la izquierda.
9. Instituto Tecnológico de Tuxtla Gutiérrez
Ciencia y Tecnologia con sentido Humano
Ingeniería en Sistemas Computacionales
Conclusiones
En este trabajo se realizó una investigación y
análisis exhaustivo sobre cada uno de los
componentes que nos permitirían realizar un
robot autónomo capaz de resolver cualquier
tipo de laberinto que tuviera cierres de 90º en
cualquier sentido.
Pese a las limitaciones de recursos con las
que se puede contar, se logró realizar un
prototipo barato en términos económicos,
utilizando equipamiento genérico, lo que
indiscutiblemente hace a un robot único, y que
le permite ser mejor que los demás es su
software, para ello se requiere contar con un
buen algoritmo de solución del problema, la
solución dada en este documento es sólo una
de las muchas alternativas que existen para
lograr dicho objetivo.
Este proyecto pese a ser muy básico se puede
seguir expandiendo hasta, como se
mencionaba en un inicio, ir agregando nuevos
módulos y no sólo limitarlo a que resuelva
laberintos, sino que podría incluso usarse con
otros fines, como el servicio a la comunidad.
Se espera así que el lector, pueda elaborar un
juicio y soberana idea sobre que podría
resultarle útil o no, y adecuarlo a sus
necesidades.
Aplicaciones del robot en un entorno
social
Si bien este prototipo fue realizado sólo con el
objetivo de resolver laberintos, se puede
adaptar y mejorar para funcionar como un
seguidor de gas, solamente bastaría con
agregar el sensor apropiado para realizar
dichas mediciones, y cuando se detecté que
existe una fuga de gas acudir inmediatamente
al sitio de origen e indicar de manera remota a
personal capacitado el punto de origen de
esta, y así ahorrar en gran medida el tiempo y
el riesgo de exposición de personas ante tales
situaciones. Esto es sólo uno de las muchas
otras aplicaciones que pueden basarse en el
prototipo de robot resolvedor de laberintos.
Referencias
[1] Arduino, «Arduino,» 26 Mayo 2016. [En línea].
Available:
https://www.arduino.cc/en/Guide/Introduction#.
[2] Club Robotec Ittg, «Club Robotec,» 26 Mayo 2016.
[En línea]. Available:
http://clubrobotecittg.blogspot.mx/p/lalaberinto.html.
[3] Geek Factory, «Geek Factory,» [En línea].
Available:
http://www.geekfactory.mx/tienda/sensores/hc-
sr04-sensor-de-distancia-ultrasonico/. [Último
acceso: 26 Mayo 2016].