Básicamente el algoritmo que queremos implantar en el robot es el que se muestra en la imagen. El robot se mueve hasta encontrar un obstáculo. Cuando lo encuentra, retrocede, gira y sigue su camino tratando de evitar el obstáculo.
Existen muchos lenguajes de programación y prácticamente todos nos servirían para implementar este algoritmo. No obstante, utilizaremos uno extremadamente sencillo de aprender y que es utilizado con frecuencia en las primeras etapas de aprendizaje en robótica. Este lenguaje es el LOGO.
Existen varios interpretes de este lenguaje que podemos descargar de Internet. Los más interesantes son MSWLogo, que es freeware y WinLogo, que aunque es comercial, se puede utilizar la versión demo, que tiene el 100% de funcionalidad de la versión comercial, pero no permite grabar los programas. En cualquier caso los programas se puedes escribir desde otro editor, como el block de notas y guardarlos con extensión “.log” y posteriormente cargarlos en el intérprete. Utilizaré el WinLogo por resultarme más cómodo. Puede descargarse la versión demo de WinLogo AQUÍ. También hay una página con recursos interesantes sobre WinLogo AQUÍ.
Básicamente los comandos clave que utilizaremos serán:
escribepuerto (puerto) (dato): Permite escribir a un puerto. Para escribir un byte a las salidas del puerto paralelo, se elegirá el puerto 888. Los datos que escribiremos serán: 0 (0000b) para detener los motores, 9 (1001b) para avanzar con ambos motores en la misma dirección, 6 (0110b) para retroceder, 5 (0101b) para girar a la derecha y 10 (1010b) para girar a la izquierda. Los cuatro bits afectados por cada uno de estos valores corresponde a D3, D2, D1, D0, que son los que controlan los motores.
leepuerto (puerto): Es una función que devuelve el valor de las entradas de un puerto. Para leer las del puerto paralelo se utilizará el puerto 889. Los valores leídos serán: 72 para indicar que los bumpers no han detectado obstáculo, 104 para indicar que el bumber derecho (S5) ha detectado obstáculo, 88 para indicar que el bumper izquierdo (S4) ha detectado obstáculo y 120 para indicar que ambos bumpers han detectado obstáculo.
espera (csg): permite hacer una pausa de un numero de centésimas de segundo determinado. Como el Logo es un lenguaje interpretado, su ejecución es lenta y en la realidad no se consigue una precisión de pausa de centésimas de segundo. Por ello se ha creado en el programa un procedimiento llamado “pausar” que hace una pausa muy corta. Este procedimiento se utiliza para generar el PWM de los motores.
Los motores son demasiado rápidos, por lo que el robot se mueve de forma incontrolada. Por ello se ha utilizado la técnica de generar una señal PWM para hacer que los motores se muevan más lentos. Esta técnica consiste en mandar pulsos altos y bajos alternos. Cuanto más duren los pulsos altos y menos los bajos, el motor irá más rápido y viceversa.

El código del programa es el siguiente:
Para robot_parar
escribepuerto 888 0
espera 100
FinPara robot_adelante
escribepuerto 888 0
pausar
escribepuerto 888 9
pausar
FinPara robot_atras
escribepuerto 888 0
espera 10
escribepuerto 888 6
espera 5
FinPara robot_derecha
escribepuerto 888 0
espera 10
escribepuerto 888 5
espera 200
FinPara robot_izquierda
escribepuerto 888 0
espera 10
escribepuerto 888 10
espera 200
FinPara robot_bumpers
Haz “bumpers leepuerto 889
Si :bumpers=104 [robot_parar robot_atras robot_izquierda robot_parar]
Si :bumpers=88 [robot_parar robot_atras robot_derecha robot_parar]
Si :bumpers=120 [robot_parar robot_atras robot_derecha robot_parar]
FinPara pausar
repite 5 [Haz “loquesea 20]
FinPara inicio
repite 5000 [robot_adelante robot_bumpers]
robot_parar
Fininicio
Los valores de pausas y repeticiones se han calculado empíricamente, haciendo funcionar el robot y cambiándolos para mejorar su respuesta. El resultado es que Econobot finalmente funciona!!. Se puede descargar un video del robot en acción AQUÍ. (MPEG. 1,2Mb)
———–
El reto queda por tanto conseguido: Demostrar que la creatividad es capaz de superar las barreras económicas. Ha quedado con ello comprobado que es posible fabricar un robot básico por cero euros y con herramientas muy limitadas.
———–
