Aplicación del BASIC Stamp: un sencillo rastreador de líneas
A través del siguiente proyecto 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.

Aritza Etxebarria Ruiz: Aplicación del BASIC Stamp: un sencillo rastreador de líneas (robot rastreador, autónomo, pbasic, sensores, puerto paralelo, servos)

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.

Aritza Etxebarria Ruiz: Aplicación del BASIC Stamp: un sencillo rastreador de líneas (robot rastreador, autónomo, pbasic, sensores, puerto paralelo, servos)
Vista superior del Basic Stamp I Rev. D

Vin 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 rotación contínua
2
18,00 €
Sensor de reflexión MSE-S110.1
2
8,00 €
Portapilas de 4 pilas de 1,5v
1
0,60 €
Conector Molex 12 pines hembra
1
0,15 €
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:

Aritza Etxebarria Ruiz: Aplicación del BASIC Stamp: un sencillo rastreador de líneas (robot rastreador, autónomo, pbasic, sensores, puerto paralelo, servos)

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.

Aritza Etxebarria Ruiz: Aplicación del BASIC Stamp: un sencillo rastreador de líneas (robot rastreador, autónomo, pbasic, sensores, puerto paralelo, servos)

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.

Aritza Etxebarria Ruiz: Aplicación del BASIC Stamp: un sencillo rastreador de líneas (robot rastreador, autónomo, pbasic, sensores, puerto paralelo, servos)

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:

Aritza Etxebarria Ruiz: Aplicación del BASIC Stamp: un sencillo rastreador de líneas (robot rastreador, autónomo, pbasic, sensores, puerto paralelo, servos)

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:

Aritza Etxebarria Ruiz: Aplicación del BASIC Stamp: un sencillo rastreador de líneas (robot rastreador, autónomo, pbasic, sensores, puerto paralelo, servos)

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:

Aritza Etxebarria Ruiz: Aplicación del BASIC Stamp: un sencillo rastreador de líneas (robot rastreador, autónomo, pbasic, sensores, puerto paralelo, servos)


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 ' El pin 0 del Basic Stamp actuará como ENTRADA
INPUT 1 ' 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.

Aritza Etxebarria Ruiz: Aplicación del BASIC Stamp: un sencillo rastreador de líneas (robot rastreador, autónomo, pbasic, sensores, puerto paralelo, servos)-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.microsparallax.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.

Página personal del autor: www.ikeretxebarria.net


Palabras claves: robot rastreador, autónomo, pbasic, sensores, puerto paralelo, servos

Comentarios de los lectores a este proyecto:

18/08/2005 - RAMON MELCHOR SEVILLA LIZARRAGA
EXELENTES

19/04/2006 - johann
va la madre

09/05/2006 - LUIS ALBERTO GARCIA
LA VERDAD ME PARECE MUY BUENO PERO HAY ALGO QUE NO ENTIENDO DEL POGRAMA CUAL USA ACA YO UTILIZO MPLAB PARA SIMULAR Y CORRER ME PUDEN COLABORAR CON DIAGRAMAS ESQUEMATICOS Y PROGRAMA POR FA COMUNICATE CON MIGO LO MAS PRONTO POSIBLE OK DE ANTEMANO MUCHAS GRACIAS POR TU ATENCION

09/05/2006 - Iker Etxebarria
El MPLAB se utiliza para programar PICs o dsPIC. El dispositivo que yo programo aquí es un Basic Stamp I que se programa con un software distinto y en un lenguaje distinto, PBASIC. Tanto el software como manuales puedes encontrarlos en esta misma web o en www.parallax.com.

19/07/2006 - Rodney Carvallo
Buenas... necesito algo de ayuda... me guie con este proyecto para hacer el mio... estoy utilizando los sensores QTI de parallax... PERO ESTOS NO RESPONDEN... no hacen cambio en el voltaje.. ni responden al programa de prueba de sensores... GRACIAS POR LA AYUDA...

01/08/2006 - Iker Etxebarria
Ultimamente me ha escrito gente que utiliza sensores de parallax QTI en vez de los que yo utilizo. En ese caso la rutina de lectura debe cambiar. A continuación os pongo un ejemplo de como se leen los sensores QTI. En este ejemplo verán que los valores devueltos no son 1 y 0 como en mis sensores sino un valor entre 0 y 65000. El programador deberá establecer un criterio para decidir que es blanco y negro (por ejemplo a partir de 200)

' -----[ Title ]------------------------------------------
' Mini-Sumo 3.1 : Line Sensor Test
' {$STAMP BS2}

' -----[ I/O Definitions ]--------------------------------
LineSnsrPwr CON 10 ' line sensor power
LineSnsrIn CON 9 ' line sensor input

' -----[ Constants ]--------------------------------------
ClrEOL CON 11 ' clear to end of line (DEBUG)

' -----[ Variables ]--------------------------------------
Sense VAR Word ' sensor raw reading

' -----[ Main Code ]--------------------------------------

Read_Sensor:
HIGH LineSnsrPwr ' activate sensor
HIGH LineSnsrIn ' discharge QTI cap
PAUSE 1
RCTIME LineSnsrIn, 1, Sense ' read sensor value
LOW LineSnsrPwr ' deactivate sensor

Display:
DEBUG Home
DEBUG "Sensor ", CR
DEBUG "-----", CR
DEBUG DEC Sense, ClrEOL
PAUSE 100
GOTO Read_Sensor

04/10/2006 - Rodney Carvallo
Disculpen la molestia pero todavia no logro utilizar los sensores QTI, ya que nose como traducir estos comandos de STAMP BS2 al STAMP BS1, si alguien porfavor puede ayudarme.. o por lo menos.. como puedo probar si los sensores estan buenos... GRACIAS

04/10/2006 - Lorenzo M. Oliver
Hola Rodney, en el manual de Parallax Sumo Robotics (5,3MB), en la actividad #3, tienes el procedimiento de la calibración de estos sensores (aunque no veo código para el BS1).

07/11/2006 - esneyder carvajal
Hola este proyecto es buenisimo pero quisiera saber como hago para programarlo en un basic stamp 2 si me pueden ayudar te lo lo agradezco

06/12/2006 - electro
esta muy agradable las imagenes pero yo sugiero que pongan mas informacion

Nombre
   Email
Comentario
(máx. 200 caráct.)  
--> Introduce este número en la siguiente casilla   
Robótica con microcontroladores BASIC Stamp de Parallax. Cualquier nombre de productos o marcas registradas que puedan aparecer en este sitio web, aparecen con fines de identificación y están registradas por sus respectivas compañías. 'BASIC Stamp' es una marca registrada de Parallax, Inc. Aviso legal
Descarga en
PDF (224KB)
Autor/es:
Aritza Etxebarria Ruiz
Datos contacto:
Más trabajos del autor/es: