APLICACIÓN DEL BASIC STAMP:
UN SENCILLO RASTREADOR DE LINEAS
Aritza Etxebarria
ikercv2001@yahoo.es
Profesor del Colegio Vizcaya
A través del siguiente artículo queremos acercar al lector al mundo de la programación
de microcontroladores Basic Stamp de la empresa Parallax. Varios aspectos son los que
convierten a este microcontrolador en el ideal para iniciarse en el mundo de la
programación de microcontroladores:
Sencillez de conexión
Frente a otros microcontroladores que requieren de un extenso hardware auxiliar para su
funcionamiento (fuente de alimentación, circuito del reloj, circuito de reset, circuito
grabador, etc.) las principales versiones del Basic Stamp incorporan toda esta circuitería
en el microcontrolador.
Sencillez de programación
Frente a los lenguajes de bajo nivel utilizados en la mayoría de los microcontroladores,
el basic stamp utiliza un lenguaje de alto nivel llamado PBASIC, muy similar al
archiconocido BASIC.
Asistencia técnica gratuita
La empresa Parallax, proporciona soporte para cualquier tipo de duda que pudiera surgir
con el uso de sus microcontroladores, desde problemas de programación, conexionado,
hasta dudas de electrónica. (stamptech@parallaxinc.com)
Para demostrarlo, a continuación vamos a presentar un proyecto para la realización de
un robot rastreador de líneas, basado en Basic Stamp.
Paso cero: Análisis del problema del robot rastreador.
El problema del robot rastreador consiste en realizar un robot autónomo que sea capaz
de seguir una línea de color blanco sobre fondo negro. En la mayoría de los concursos
de robótica universitarios, se practica esta modalidad.
En la siguiente imagen, podemos apreciar un posible circuito muy simple. El robot debe
atravesar desde el extremo inicial hasta el final, sin abandonar el camino, en menos
tiempo que sus adversarios para conseguir ganar el concurso.
Para poder llevar a cabo esta tarea el robot debe tener al menos 2 sensores de reflexión
(por ejemplo CNY70) que detectan el color blanco o el negro. Existen múltiples
soluciones para llevar a cabo el rastreo, pero nosotros analizaremos la más sencilla tan
solo utilizando dos sensores.
Los sensores se colocarán en paralelo y uno de ellos deberá ir por la parte blanca del
circuito mientras que el otro por la parte negra. Es decir, el robot bordeará la línea.
Mientras el robot lea que en el sensor izquierdo el color de la superficie es blanco y en
el sensor de la derecha el color es negro, el robot avanzará hacia delante.
Sin embargo, cuando el robot encuentre en ambos sensores el color blanco o en ambos
sensores el color negro, el robot deberá girar para volver a encontrar el camino deseado
que es negro en el sensor derecho y blanco en el izquierdo.
Según esta configuración en el cruce que presentamos en la siguiente figura el robot
tomaría el camino de la derecha. Analicémoslo paso a paso.
Colocamos el robot en la posición INICIO de
forma que tenga un sensor en la parte blanca
y otro en la parte negra. Al encenderlo, al
detectar blanco en el sensor izquierdo y negro
en el derecho el robot avanza hasta la
posición A.
En la posición A el robot detecta blanco en
los 2 sensores, y deberemos programarlo para
que entonces gire a derecha hasta volver a
leer blanco en el sensor izquierdo y negro en
el derecho. En ese momento vuelve a avanzar
hasta la posición B. En esta posición los
sensores leen negro en ambos y entonces
debemos programarlo para que gire a izquierda hasta leer negro y blanco. Entonces
avanzará hasta el punto C, etc.
Primer paso: Elección del Microcontrolador
Una vez analizado el problema anterior, observamos que necesitamos programar un
microcontrolador para controlar 2 sensores y el movimiento del robot. Para esto último
utilizaremos 2 servomotores de rotación continua que tan solo necesitan una entrada de
control para su funcionamiento. Por lo tanto, sólo necesitaremos 2 entradas y 2 salidas
para realizar nuestro robot.
Es importante analizar el número de entradas y salidas que necesitamos a la hora de
elegir el microcontrolador, ya que este número es limitado y diferente en cada
microcontrolador.
Dentro de la familia de microcontroladores de Basic Stamp, existen varias versiones del
mismo. Aunque para la iniciación suele recomendarse empezar por el Basic Stamp II,
debido a las múltiples herramientas y documentación existente, nosotros lo haremos con
el Basic Stamp I, debido principalmente a su menor coste económico. Dentro de los
distintos modelos de Basic Stamp I, elegiremos el modelo Basic Stamp I Rev. D por su
sencillez de conexión con los periféricos a emplear. Este tiene 8 pines que pueden
actuar como entradas o salidas suficiente para manejar las cuatro líneas que
necesitamos.
Vin
Vista superior del Basic Stamp I Rev. D
Entrada positiva de la carga
sin regular
+5V Salida regulada a +5 voltios
+5V Salida regulada a +5 voltios
P7
Patita 7 del microcontrolador
P6
Patita 6 del microcontrolador
P5
Patita 5 del microcontrolador
P4
Patita 4 del microcontrolador
P3
Patita 3 del microcontrolador
P2
Patita 2 del microcontrolador
P1
Patita 1 del microcontrolador
P0
Patita 0 del microcontrolador
GND Toma de tierra
GND Toma de tierra
GND Toma de tierra
Cuadro 1: Conexiones del BSI Rev.D
Además esta pequeña placa contiene el circuito grabador, posibilidad de debug en
tiempo real, rectificador de corriente a 5 voltios, modulación de pulsos, etc.
Segundo paso: Diseño del robot rastreador
Un error muy típico a la hora de diseñar un micro robot es menospreciar el diseño de la
parte mecánica del mismo y centrarse únicamente en la parte electrónica y
programación del mismo.
El tamaño y tipo de las ruedas, los motores empleados, el anclaje de estos sobre el
chasis del robot, las pilas empleadas, todo influye sobre la solución final del proyecto y
cualquier fallo puede hacernos fracasar en el intento.
Para montar la estructura del robot, proponemos construir un pequeño armazón de
madera donde encajaremos los 2 motores (servomotores de rotación continua), los 2
sensores de reflexión, el Basic Stamp I Rev. D y las pilas. Estos son los componentes
que vamos a utilizar:
LISTA DE COMPONENTES
Componente
Unidades Precio Unitario Aprox.
Basic Stamp I Rev. D.
1
47,00 €
Servomotor Parallax de
2
18,00 €
rotación contínua
Sensor de reflexión MSE2
8,00 €
S110.1
Portapilas de 4 pilas de 1,5v
1
0,60 €
Conector Molex 12 pines
1
0,15 €
hembra
CD 8 cms.
2
1,20 €
Rueda loca
1
1€
Material diverso (Conectores
varios, tornillos,…)
Con la ayuda de una sierra y un taladro confeccionaremos la estructura en madera del
robot donde alojaremos los motores con tornillos de métrica 2. Es muy importante que
los motores estén perfectamente anclados a la estructura. Para unir las distintas tablas
podemos usar un pegamento de pegado rápido. Un posible ejemplo se observa en la
siguiente fotografía:
Tras tener los servomotores perfectamente sujetos a la estructura, incorporamos los
sensores de reflexión mediante 2 tornillos, en la parte delantera de la estructura. La
distancia entre ambos, no debe ser superior a la anchura mínima de la línea a seguir.
A continuación colocamos una tapa a la estructura de madera con 3 agujeros. Uno
grande para pasar los conectores de los servos, y otros 2 para atornillar el Basic Stamp I
rev. D a la estructura.
A continuación realizamos las distintas conexiones necesarias según el programa
diseñado. Para los conectores del BStamp podemos usar un conector molex de 12 pines
colocado de forma que sobren dos de los 3 pines de tierra. Así las conexiones serían las
siguientes:
Servomotor
izquierdo
Servomotor
derecho
Sensor
izquierda
ROJO = Vin
NEGRO = GND
BLANCO = PIN7 del BStamp
ROJO = Vin
NEGRO = GND
BLANCO = PIN6 del BStamp
1 = +5v
2 = GND
3 = PIN1 del BStamp
Sensor derecha 1 = +5v
2 = GND
3 = PIN0 del BStamp
Por último creamos las ruedas del robot. Para conseguirlas, proponemos pegar el
conector que viene junto al servomotor a 2 CDs de 8 centímetros con un adhesivo como
Loctite y rodear el CD con una goma para que no patinen las ruedas. (Por ejemplo
pegando la goma de una alfombrilla de ratón alrededor del CD). Y colocamos una rueda
loca en la parte trasera del micro robot que servirá de apoyo.
El resultado final podría ser algo parecido al que presentamos en la siguiente fotografía:
Cuarto paso: Programación del robot
Una vez construido el robot, vamos a meternos con la programación del mismo. Lo
primero que haremos será construir el cable de programación necesario para comprobar
el perfecto funcionamiento del basic stamp con el que confeccionaremos nuestro primer
programa.
Creación del cable de programación
El Basic Stamp I se programa por el puerto paralelo mediante un cable especial que
también puede adquirirse por el precio aproximado de 18 Euros. Sin embargo
proponemos crear dicho cable para abaratar costes.
La construcción del cable es muy sencilla, simplemente hay que seguir el siguiente
esquema:
Busque este símbolo en
la placa del BSTAMP I
Prueba del microcontrolador
Una vez creado el cable, es imprescindible bajarse de internet (www.parallax.com) el
editor de Basic Stamp I, programa desde el que programaremos el microcontrolador. El
programa funciona bajo MSDOS, y puede que dé algún problema a los usuarios de
Windows XP, sin embargo con otras versiones de windows, funciona perfectamente.
Una vez ejecutado el editor, conectamos el cable con el Basic Stamp observando el
símbolo >> serigrafiado en la placa, alimentamos el Basic Stamp con las pilas y
teclearemos el siguiente programa:
debug “Hola mundo, soy tu Basic Stamp”
A continuación pulsaremos ALT + R y observaremos el resultado en pantalla. ¡El Basic
Stamp nos habla!
¿Cómo que no nos habla? Si en la pantalla de su ordenador no viese el mensaje en
cuestión, revise el cable de programación creado, y revise que el Basic Stamp esté
correctamente alimentado.
Pero si por el contrario lee el mensaje en pantalla, ¡Enhorabuena! Acaba usted de
ejecutar su primer programa sobre el Basic Stamp.
Existen múltiples manuales de programación en el sitio web de parallax pero en la
bibliografía le recomendamos otra web donde encontrará los manuales de parallax en
castellano. Pasemos ahora, a otra fase de la programación
Leyendo los sensores
Los sensores, los tenemos colocados en las patitas 0 y 1 del microcontrolador. Lo
primero que debemos hacer es indicarle al controlador que esas patitas van a ser de
entrada. Para ello utilizaremos la instrucción input de la siguiente manera:
INPUT 0
INPUT 1
‘ El pin 0 del Basic Stamp actuará como ENTRADA
‘ El pin 1 del BStamp actuará como ENTRADA
Fíjese que tras la instrucción hemos añadido dos comentarios con el símbolo apóstrofe
por delante.
A continuación leeremos la entrada de cada pin y la mostraremos con el comando debug
en un bucle infinito:
INPUT 0
‘ El pin 0 del Basic Stamp actuará como ENTRADA
INPUT 1
‘ El pin 1 del BStamp actuará como ENTRADA
Leer:
‘ Etiqueta para el bucle infinito
DEBUG pin0,pin1 ‘Mostramos en pantalla el estado del pin 0 y 1
PAUSE 500
‘ esperamos medio segundo (500 milisegundos)
GOTO Leer
‘Saltamos a la etiqueta Leer para repetir el ciclo
‘ de forma indefinida
Al pulsar ALT + R nos aparecerá en pantalla el estado del pin0 y el pin 1. Si colocamos
en un folio un trozo de cinta aislante negra y vamos variando la posición de los sensores
sobre el folio y la cinta aislante observaremos en pantalla los distintos valores de los
sensores. La altura a la que deben estar los sensores con respecto a la superficie a leer
debe ser aproximadamente (varía con la iluminación empleada) de medio centímetro.
Ahora, en cuanto sepamos como mover los servos, podremos crear el programa
rastreador.
Moviendo los servos
Para mover el robot hemos seleccionado 2 servomotores de rotación contínua que
distribuye la empresa parallax. Estos motores se caracterizan por tener una circuitería
auxiliar que permite que con una única señal de pulsos electrónicos controlemos el
movimiento del motor. Así nos ahorramos la etapa de potencia que deberíamos usar con
otros motores y ganamos en sencillez de diseño.
Pero basta de teoría. Empecemos a mover el robot. Dependiendo de la señal que
enviemos al servomotor conseguiremos un movimiento u otro. Para crear una señal de
pulsos electrónicos el Basic Stamp dispone de una instrucción llamada PULSOUT. No
nos vamos a extender con el funcionamiento de los servos. Simplemente indicaremos a
continuación un programa que controla el movimiento de los servos.
Al poner los dos servomotores enfrentados, si mandamos la misma señal a los
servomotores, girarán en sentido contrario y si mandamos señales distintas girarán en el
mismo sentido. Veámoslo y comprobémoslo con el ejemplo.
‘Pruservo.bs2
‘Programa para la prueba de servos
SYMBOL MotorIzq = 7
‘El motor de la izquierda lo conectamos al pin7
SYMBOL MotorDer = 6
‘El motor de la derecha lo conectamos al pin6
‘La instrucción SYMBOL se utiliza para declarar variables y constantes
OUTPUT MotorIzq
‘Configuramos la patita 7 como salida
OUTPUT MotorDer
‘Configuramos la patita 6 como salida
FOR B0 = 1 TO 20
‘Para observar el movimiento del robot
‘mandamos la señal durante 20 impulsos
PULSOUT MotorIzq,300 ‘Con el parámetro 300 en el motor izq
‘conseguimos que este avance rápidamente
PULSOUT MotorDer,1
‘Y el motor derecho avanza cuando mandamos un
‘1 pulso de 10 microsegundos
PAUSE 20
‘Y al avanzar los dos motores, el robot avanza
NEXT
FOR B0 = 1 TO 20
‘El motor izquierdo sigue avanzando
PULSOUT MotorIzq ,300 ‘ pero al mandar la señal contraria al servo
PULSOUT MotorDer , 300 ‘ derecho, este retrocede.
PAUSE 20
‘ Y así al avanzar una rueda y girar la otra
NEXT
‘conseguimos que el robot gire
Para aprender más sobre el movimiento y control de los servomotores no dude en
consultar la bibliografía indicada al final del artículo. En caso de no conseguir el efecto
deseado cambie las constantes en la instrucción PULSOUT hasta conseguirlo. Con
cambiar el 1 por 300 y viceversa, debería ser suficiente.
Una posible solución
Si integramos todos los aspectos analizados a través de todo el artículo, y con un poco
de conocimiento del lenguaje PBASIC, podríamos llegar fácilmente a una solución muy
parecida a esta:
'***************************************************************
'*
Programa de control de robot
*
'*
para Basic Stamp Rev D.
*
'*
AUTOR: Aritza Etxebarria 2.003
*
'***************************************************************
'=======================
' Asignaci¢n de patitas
'=======================
symbol p0 = pin0
'Pin0 conectado al detector de l¡nea der
symbol p1 = pin1
'Pin1 conectado al detector de l¡nea izq
symbol MotorIzq = 7 'Conectado al servomotor izquierdo
symbol MotorDer = 6 'Conectado al servomotor derecho
'=================================
' Constantes de control de Servos
'=================================
symbol Avizq = 300
'Hace avanzar el servomotor izquierdo
symbol Reizq = 1
'Hace retroceder el servomotor izquierdo
symbol AvDer = 1
'Hace avanzar el motor derecho
symbol ReDer = 300
'Hace retroceder el motor derecho
'===========
' Variables
'===========
symbol pulsos = b0
'Para el control del bucle de los motores
symbol lectura = b1
'Para almacenar el estado de la lectura
'================
' Inicializaci¢n
'================
input p0
'p0 y p1 son entradas
input p1
'de los sensores de reflexion
output MotorIzq
'El Motor izquierda es de salida
output MotorDer
'El Motor derecha es de salida
'====================
' Programa principal
'====================
Principal:
GOSUB LeeSensores
'Leemos el estado de los sensores
Continua:
' En fucnci¢n de dicho estado nos encontramos en una superficie u otra
' y actuamos en consecuencia
BRANCH lectura, (BlancoBlanco,BlancoNegro,NegroBlanco,NegroNegro)
GOTO Principal
'Repetimos el bucle indefinidamente
'====================
' Rutinas auxiliares
'====================
NegroNegro:
for pulsos = 1 to 5
‘Hacemos girar el robot a izquierda
pulsout MotorDer,AvDer
pulsout MotorIzq,ReIzq
pause 20
next
GOTO Principal
NegroBlanco:
for pulsos = 1 to 5
‘Hacemos girar el robot a derecha
pulsout MotorDer,ReDer
pulsout MotorIzq,AvIzq
pause 20
next
GOTO Principal
BlancoNegro:
‘El robot avanza
pulsout MotorIzq,AvIzq
pulsout MotorDer,AvDer
pause 20
GOTO Principal
BlancoBlanco:
‘El robot gira a derecha
for pulsos = 1 to 5
pulsout MotorDer,ReDer
pulsout MotorIzq,AvIzq
pause 20
next
GOTO Principal
'==================================================================
'Esta rutina devuelve en una variable el estado de los bits p0 y p1
'==================================================================
LeeSensores:
lectura = p1*2 + p0
‘ Convierte los bits en valor decimal
RETURN
' Vuelve al programa principal
Si introducimos esta solución en el robot, este se encontrará listo para seguir la línea
que usted le marque. ¡Adelante¡ Constrúyase su propio circuito de pruebas y trate de
depurar el programa hasta conseguir mejores velocidades.
¿Quiere entretenerse más?
A continuación le presentamos posibles mejoras del robot y/o transformaciones:
-Añadir un interruptor de encendido/apagado.
-Añadir un switch y modificar el programa para que el robot vaya por los caminos de la
derecha o la izquierda. Cuando se concursa con un robot rastreador, siempre suele haber
un camino mejor que el otro. Si nosotros solo programamos el robot para que elija el
camino de la derecha (como en nuestro ejemplo) corremos el riesgo de que el mejor
camino sea el de la izquierda. Por eso sería interesante añadirle un switch al robot para
que en función del switch, siga siempre el de la izquierda o siga siempre el de la
derecha.
-Modificar el robot para ser un luchador de sumo. Una vez superada esta fase del robot
rastreador, intente crear un robot luchador de sumo. Parallax dispone de un robot de
lucha sumo llamado Sumobot, cuyo manual de ensamblaje y programación puede
bajarselo gratuitamente de la web de parallax junto con las reglas de este concurso.
-Conseguir mejores giros del robot, utilizando más sensores. Si utiliza más sensores
podría determinar el tipo de giro que debe dar el robot: Muy cerrado, poco cerrado, etc.
Modifique el robot para que detecte cada tipo de giro y haga que las ruedas giren de
distinta forma dependiendo del tipo de giro, de
forma que optimice el tiempo empleado en el
circuito.
-También puede ahorrarse algo de dinero si en
vez de usar los sensores de reflexión
MSES110.1 los confecciona usted mismo
siguiendo
el
siguiente
esquema
de
conexionado de los CNY70
Bibliografía recomendada:
www.parallax.com o www.stampsinclass.com
sitio web oficial de la empresa parallax, con
extensos manuales, catálogos de productos,
software, todos ellos gratuitos.
www.cursoderobotica.com.ar Dentro de la sección libros encontrará una serie de
manuales en castellano que le ayudarán de una forma muy sencilla a introducirse en la
programación de estos microcontroladores, creación de robots, …
www.microcontroladores.com Distribuidor en España de los microcontroladores
Parallax y de los sensores utilizados.