Professional Documents
Culture Documents
DE MICROROBOTS MÓVILES
Trabajo realizado para la asignatura de Diseño de Microrrobots
Móviles de la Universidad de Alcalá
por
Noviembre 2006
ROBOTS LEGO MINDSTORMS
0. ÍNDICE
0. ÍNDICE ............................................................................................................................... 1
1. INTRODUCCIÓN ............................................................................................................. 6
2. DESCRIPCIÓN GENERAL........................................................................................... 10
2.1. EL RCX:......................................................................................................................... 10
2.1.1. DESCRIPCIÓN ............................................................................................................... 10
2.1.2. PUERTOS DE ENTRADA (1, 2,3)..................................................................................... 11
2.1.3. PUERTOS DE SALIDA..................................................................................................... 12
2.1.4. BOTONES DE CONTROL: ............................................................................................... 13
2.1.5. PANTALLA LCD:.......................................................................................................... 13
2.1.6. PUERTO DE COMUNICACIÓN INFRARROJA.................................................................... 13
2.1.7. TRANSMISOR DE INFRARROJOS. ................................................................................... 13
2.1.8. ALIMENTACIÓN:........................................................................................................... 14
2.2. EL NXT: ......................................................................................................................... 15
2.3. DIFERENCIAS HARDWARE ENTRE EL NXT Y RCX: .................................................... 20
2.4. BIBLIOGRAFÍA PARA LA PARTE DE DESCRIPCIÓN: ...................................................... 21
3. TRANSDUCTORES Y SENSORES:............................................................................. 23
Página 1
ROBOTS LEGO MINDSTORMS
4. MOTORES:...................................................................................................................... 53
Página 2
ROBOTS LEGO MINDSTORMS
6. PROGRAMACIÓN ......................................................................................................... 69
Página 3
ROBOTS LEGO MINDSTORMS
Página 4
ROBOTS LEGO MINDSTORMS
Página 5
ROBOTS LEGO MINDSTORMS
1. INTRODUCCIÓN
Lego Mindstorms es una plataforma para el diseño y desarrollo de robots, que sigue la
filosofía de la marca LEGO, armar y construir todo tipo de objetos simplemente uniendo
bloques interconectables. Pues eso es LEGO Mindstorms,
1.2.1. Ventajas:
-Fácil de montar y desmontar, no es necesario usar soldadura, ni tornillo. Todo lo que se arma
se puede desarmar rápidamente. Además, eso permite usar las piezas en múltiples diseños
distintos.
-Muy extendido por todo el mundo, lo que permite encontrar gran cantidad de información e
ideas por Internet, diseños, soluciones, participar en foros, competiciones.
-No es un pack cerrado, es decir, se puede comprar más ampliaciones de lego, adquirir
piezas deterioradas o perdidas, o añadir piezas echas manualmente, como por ejemplo,
sensores o motores, e incluso circuitos neumáticos.
Página 6
ROBOTS LEGO MINDSTORMS
-Que sea escalable, es decir, que a partir de un material básico haya opciones de ampliación.
-Muy indicado para entornos educativos, desde colegios a universidades, pues se puede
aprender de forma fácil tanto mecánica como electrónica.
1.2.2. Desventajas
-La principal desventaja de LEGO es su estructura. Está formada por bloques de LEGO, que
se unen por simple presión. Cierto que se pueden añadir elementos de refuerzo y sujeción,
pero para diseños exigentes, no es recomendable. Golpes, caídas, pueden debilitar
rápidamente la estructura, llegando a desarmar el robot.
-No se pueden construir estructuras circulares, pues todas las piezas y ladridos de LEGO son
rectangulares.
-Relación masa-volumen. Las piezas LEGO no son útiles en diseños donde la relación masa-
volumen se hace crítica. Por ejemplo, para construir un robot de SUMO, no sería eficiente,
pues la estructura LEGO es demasiado liviana, y se deberían añadir pesos para hacer el
robot más robusto, o el caso contrario, para construir robot pequeños, ligeros, y resistentes,
las piezas LEGO son mucho peores que los materiales cómo la fibra de carbono.
-Precio. Obviamente, comprar un robot “prefabricado”, resulta más caro que construirte tu
propio robot.
Página 7
ROBOTS LEGO MINDSTORMS
Así, las piezas de LEGO, tanta veces usadas para armar y desarmar, se convirtieron en una
auténtica plataforma de desarrollo y estudio, implantándose en colegios y universidades.
Página 8
ROBOTS LEGO MINDSTORMS
LEGO MINDSTORMS NXT incluye el NXT Intelligent Brick con procesador de 32-bit, 3 Servo
motores interactivos, un sensor de sonido, un sensor visual ultrasónico, un sensor de tacto
mejorado, y un preciso sensor de luz. El kit incorpora 519 piezas de LEGO TECHNIC.
Además incorpora 4 puertos (input), 3 puertos (output), altavoces, las tecnologías USB 2.0 y
Bluetooth junto con un software de programación compatible con PC y Mac.
Página 9
ROBOTS LEGO MINDSTORMS
2. DESCRIPCIÓN GENERAL
La parte mas importante de este tipo de robots es el elemento de control, según el modelo se
le conoce por RCX o NXT.
2.1. El RCX:
2.1.1. Descripción
Es el cerebro de Robotics Invention System, que contiene el sistema de comandos para el
robot. Es una mini computadora integrada en un ladrillo Lego. Se puede programar con un PC
o utilizar uno de sus cinco programas que tiene integrados.
El núcleo del RCX es un microcontrolador Hitachi H8, exactamente el H8/3292. Tiene una
velocidad de funcionamiento de 16 MHz y esta alimentado con 5V.
Tiene una memoria interna ROM de 16 KB que contiene el driver que se ejecuta cuando se
alimenta por primera vez el RCX y los programas base para no perderlos en caso de que se
desconecte la alimentación, una memoria interna de tipo RAM de 512 bytes y otra externa del
mismo tiempo de 32 KB para el firmware (sistema operativo que controla el boque), los
programas y configuraciones personales, pues con este tipo de memorias si se va la
alimentación durante mas de un minuto se perderán sus datos y habrá que volver a cargarlos
desde el PC. Tiene dos temporizadores de 8 bits y uno de 16 bit, un conversor
analógico/digital de 8 bit y un altavoz integrado, capaz de emitir sonidos sencillos (Beep).
Página 10
ROBOTS LEGO MINDSTORMS
Tiene tres puertos de entrada para los sensores. Dependiendo del tipo de sensores, activos o
pasivos, tiene una forma de funcionar distinta.
Si los sensores son pasivos, como son el de contacto o el de luz, que no necesitan
alimentación utilizan el siguiente hardware.
Página 11
ROBOTS LEGO MINDSTORMS
Si los sensores son activos, necesitan alimentación, pero como solo tenemos dos hilos, y uno
es la masa, tenemos que conmutar el otro para poder leer el sensor.
El interruptor S se mantiene cerrando durante 3 ms. para alimentar el sensor y durante 0.1
ms. se abre para obtener el estado del sensor.
Tiene tres puertos de salida para los actuadotes (motores y lámparas). Cada puerto puede
estar en tres estados: on, off y floating. Cada salida tiene solo dos hilos por ello solo tienen
una dirección asociada, forward (hacia adelante) y reverse (hacia atrás) y utilizan una
modulación por ancho de pulso (PWM). Los pulsos se envían cada 8 ms. y presentan hasta
ocho posibles anchos, desde 1ms. (nivel de potencia mas bajo) a 8ms. (nivel de potencia mas
alto, potencia continua).
Página 12
ROBOTS LEGO MINDSTORMS
Son 4 los botones de control. El botón rojo (On-OFF) enciende y apaga el RCX. Los demos
solo funcionan cuando el ladrillo controlador esta encendido. El botón verde (RUN) inicia y
detiene el programa seleccionado. En este modo el “personaje” de la ventana de visualización
aparece andando. El botón gris (PRGM) permite cambiar entre los 5 programas integrados del
RCX. El número de programa seleccionado aparece a la izquierda del “personaje” en la
ventana de visualización. El botón negro (VIEW) sólo está activo después de descargar el
firmware y permite obtener información de los sensores y motores. Se pueden ver las lecturas
de sensor en los puertos de entrada 1,2 o 3 y la dirección del motor en los puertos de salida
A, B o C.
Página 13
ROBOTS LEGO MINDSTORMS
2.1.8. Alimentación:
La alimentación del RCX se lleva a cabo mediante seis pilas de tipo AA/LR6. Se recomienda
utilizar alcalinas aunque también se pueden utilizar recargables pero su potencia será menor.
Curiosidades:
Al tener esta forma de ladrillo Lego, permite la construcción muy rápida de robots con piezas
de tipo ladrillo Lego y de otros tipos.
La primera vez que se enciende el RCX o después de cambiar las baterías tardando más de 1
min., el RCX se encuentra en “Modo de arranque”. En la pantalla de visualización no aparece
el reloj.
Página 14
ROBOTS LEGO MINDSTORMS
2.2. El NXT:
En la figura anterior se muestra el NXT brick, es el objeto donde reside todo el control del
robot. Para ello, esta compuesto por un microprocesador ARM-7 de 32 bits, el
AT91SAM7S256 de Atmel. Este microprocesador de arquitectura Risc incluye 256 KB de
memoria flash (no volátil), 64 kB de RAM (volátil) y una velocidad de funcionamiento de 48
MHz. (Ver hojas características para conocerlo con mayor profundidad).
Tiene cuatro botones en la parte superior para utilizar los programas que tengamos
instalados, configurarlos y ejecutarlos. También podemos visualizar en la pantalla el estado
de los sensores o crear pequeños programas sin necesidad de utilizar el ordenador y
programas adicionales. El botón de color naranja tiene como funciones el encendido (ON), la
confirmación de acciones (Enter) y el comenzar (Start). Las flechas de color gris son para
moverse por los menús y el rectángulo gris oscuro es para limpiar la pantalla (Clear) y volver
atrás (Go back).
Página 15
ROBOTS LEGO MINDSTORMS
Mediante una pantalla gráfica de LCD de 1000 x 64 píxel blancos y negros, con un área de
visión de 26 x 40,6 mm manejamos el NXT de una manera muy sencilla. El LCD se controla
mediante un UltraChip 1601 que se conecta mediante un bus SPI de 2 MHz de velocidad, al
ARM7. Lo que se visualiza en el display esta almacenado en memoria como si fuera un array
bidimensional (X, Y) y se actualiza cada 17 ms.
Podemos emitir sonidos, pues también incluye un altavoz con un sistema de sonido de 8 bits
de resolución, 8 Khz. de calidad de sonido y que soporta una frecuencia de muestreo entre 2
y 16 kHz. La señal de salida es una señal PWM controlada por el microprocesador ARM7. Se
filtra, pasa por un amplificador diferencial (SPY0030A de SunPlus) de ganancia máxima igual
a 20 y sale al exterior por un altavoz de impedancia característica de 16 Ω y un diámetro de
21 mm. A continuación se muestra su esquemático:
Para interactuar con el exterior, esta compuesto por 8 puertos de entrada/salida que se unen
mediante conectores muy similares a los de tipo telefónico. Tienen 6 hilos pero tienen la
ranura a la derecha en vez de en el medio como el del teléfono. (Para convertir un cable
telefónico al uno valido para el NXT visitar el siguiente enlace:
http://philohome.com/nxtplug/nxtplug.htm)
Página 16
ROBOTS LEGO MINDSTORMS
Los puertos de salida son el A, el B y el C y son para los motores. El siguiente esquemático
muestra en detalle un puerto de salida.
MA0 y MA1 son señales de salida para controlar a los actuadotes. El pin 3 es masa y el pin 4
es Vcc que esta conectado internamente a todos los Vcc de todos los puertos tanto de
entrada como de salida. TACHOA0 y TACHOA1 son señales de entrada al microcontrolador
ARM-7.
Los puertos de entrada son el 1, el 2, el 3 y el 4 y son para los sensores. Como antes,
mostramos el esquemático de un puerto de entrada.
Los pines 5 y 6, DIGIAI0 y DIGIAI1, son pines digitales de entrada/salida usados para la
comunicación digital con el ARM-7 mediante un bus I2C a una velocidad de 9600 baudios.
El puerto 4 puede funcionar como un puerto de alta velocidad. Un RS485 esta implementado
en el interior el puerto. Esto permite una comunicación bidireccional de alta velocidad.
Página 17
ROBOTS LEGO MINDSTORMS
También consta de un puerto USB de gran velocidad (12Mbits/s) que se encuentra al lado de
los puertos de salida, es el primero de la parte superior derecha.
La gestión de las entradas y salidas es llevada a cabo por un procesador AVR de 8 pines, el
ATmega48 de Atmel. Que tiene 4 kB de memoria Flash, 512 B de RAM y una velocidad de
funcionamiento de 8 MHz. Sus funciones mas importantes son el control de la alimentación,
la creación de las señales de salida PWM para los motores y la conversión A/D de las
señales de entrada de los sensores. Se conecta con el microprocesador ARM7 a través de un
bus I2C. A causa de las limitaciones del ARM7, esto solo funciona como maestro en la
comunicación por el I2C.
Para la gestión del Bluetooth tiene otro microcontrolador de la empresa CSR (Cambridge
Silicon Radio), llamado BlueCoreTM 4 y una memoria Flash externa de 8 Mbit, que contiene
todo el hardware necesario para una comunicación inalámbrica.
Se conecta al ARM7 a través de un modulo SPI (Interfaz serie sincronía) y un modulo UART
(Transmisor-Receptor Asíncrono Universal).
Gracias a este sistema pueden conectarse hasta 4 NXT-brick a la vez, uno como maestro y
los otros tres como esclavos, pero solo puede comunicarse con uno en un mismo tiempo.
Como fuente de alimentación podemos utilizar 6 pilas AA o una batería recargable de litio,
que se conecta en la parte inferior del modulo NXT.
Página 18
ROBOTS LEGO MINDSTORMS
Página 19
ROBOTS LEGO MINDSTORMS
Nº puertos salida 3 3
Nº puertos de entrada 3 4
Sistema de batería NO SI
recargable
Compatibilidad con IR SI NO
Comunicación múltiple de SI SI
bricks
Drive straight NO SI
A pesar de las diferencias que tienen, se pueden usar los motores y los sensores del RCX
para el nuevo NXT. Esta conexión se facilita gracias al siguiente cable de conexión.
Cuya función es unir el PIN1 y el PIN2 con los hilos del conector antiguo.
Página 20
ROBOTS LEGO MINDSTORMS
http://www.etse.urv.es/~aoller/robmob_eaiei/LEGO%20MindStorms%20RIS.htm: sobre el
RCX
Página 21
ROBOTS LEGO MINDSTORMS
http://gonzo.teoriza.com/2005/08/03/robotica-con-lego-mindstorms/
http://graphics.stanford.edu/~kekoa/rcx/
http://www.lego.com/eng/education/mindstorms/home.asp?pagename=rcx
http://robotics.benedettelli.com/
Página 22
ROBOTS LEGO MINDSTORMS
3. Transductores y Sensores:
3.1.1. Sensor:
Dispositivo sensible que utiliza un fenómeno físico o químico dependiente de la naturaleza y
el valor de la magnitud físico química a medir, lo cual permite la transducción del estímulo a
una señal utilizada directa o indirectamente como medida.
3.1.2. Transductor:
Un transductor es un dispositivo que transforma un tipo de variable física (por ejemplo, fuerza,
presión, temperatura, velocidad, etc.) en otro.
Un sensor es un transductor que se utiliza para medir una variable física de interés. Algunos
de los sensores y transductores utilizados con más frecuencia son los calibradores de tensión
(utilizados para medir la fuerza y la presión), los termopares (temperaturas), los velocímetros
(velocidad).
Cualquier sensor o transductor necesita estar calibrado para ser útil como dispositivo de
medida. La calibración es el procedimiento mediante el cual se establece la relación entre la
variable medida y la señal de salida convertida.
Los transductores y los sensores pueden clasificarse en dos tipos básicos, dependiendo de la
forma de la señal convertida.
Transductores analógicos: Proporcionan una señal analógica continua, por ejemplo voltaje o
corriente eléctrica. Esta señal puede ser tomada como el valor de la variable física que se
mide.
Página 23
ROBOTS LEGO MINDSTORMS
Los sensores activos son más complejos, pero abren una amplia gama de posibilidades de
detección. Entre los ejemplos de sensores activos se incluyen los sensores infrarrojos [que
detectan presencia y distancia], los sensores de efecto Hall [que detectan los campos
magnéticos], los sensores de ruido, los sensores de vibración, etc.
Página 24
ROBOTS LEGO MINDSTORMS
La fórmula Temp = (785 − RAW) / 8 puede determinar la temperatura detectada por el sensor.
Funciona en un rango de temperaturas entre –20 y +50 grados Celsius. El RCX puede leer y
mostrar las lecturas en grados Celsius o Fahrenheit (ref. W979889).
En este caso, si la presión supera una medida estándar de 450, mostrado en la pantalla de
LCD, se considera que el sensor está presionado, sino está sin presión. Este Sensor se
puede utilizar para determinar cuando un Robot toca algo con el fin de que tome la decisión
de regresar o cambiar de dirección. (ref. W779911).
El bloque RCX calcula con la fórmula Luz = 146 − RAW / 7 para determinar el porcentaje
obtenido por la lectura de la luz, tomando una muestra cada 2,9 ms, siendo leído en 100 us. ,
el valor que se lee a partir del sensor.
Página 25
ROBOTS LEGO MINDSTORMS
Debido a que este sensor capta grados de luminosidad, no es capaz de distinguir colores,
sólo captando la existencia del blanco (claridad), negro (oscuridad) y los tonos de grises que
corresponden a los distintos porcentajes de luz existentes en el medio. (ref. W779758).
2,0volts -> 4,5 volts -> 1,3 volts -> 3,3 volts (en sentido horario)
3,3 volts -> 1,3 volts -> 4,5 volts -> 2,0 volts (en sentido antihorario)
Con estos estados se permite verificar cuantas variaciones de energía han sucedido desde la
lectura. Cada voltaje representa un giro aproximado de 22,6º del sensor, por lo tanto
existiendo cerca de 16 ciclos de voltaje para detectar un giro completo. El problema de esta
lectura es a bajas velocidades, debido a que genera unas minúsculas variaciones de energía,
debido a que los valores intermedios no son considerados como movimiento válido. Lee 16
posiciones de rotación con un máximo de 500 revoluciones por minuto (RPM). El RCX puede
leer tanto ángulos de rotación como dieciseisavas partes de un giro completo. (ref. W979891).
Página 26
ROBOTS LEGO MINDSTORMS
del robot, mediante el principio de la detección ultrasónica. Este sensor es capaz de detectar
desde 0 a 255 cms, con una precisión relativa del +/- 3 cms.
Mediante el principio del eco, el sensor es capaz de recibir la información de los distintos
objetos que se encuentren en el campo de detección, teniendo un mejor reflejo del eco los
elementos planos que los curvos, como pelotas u otros elementos similares. Una advertencia
que se realiza es acerca de las conexiones múltiples de este sensor, ya que se puede detener
la ejecución y/o lectura de los distintos elementos.
El sensor estará configurado por defecto para medir la distancia a un objeto, pero también
puede ser capaz de medir las distancias hasta un máximo de 8 objetos en un único periodo
de medida.
El sensor de sonido también puede reconocer patrones de sonido. Por ejemplo, puede
programarse el robot para desarrolle un comportamiento en concreto mientras que con dos
palmadas haga algo totalmente diferente. El sensor también es capaz de discriminar tonos.
Página 27
ROBOTS LEGO MINDSTORMS
El sensor de color funciona iluminando la superficie del objetivo con tres fuentes de luz
coloreadas (Diodos emisores de luz o led): uno rojo, otro verde y el tercero azul. La diferencia
entre la luz ambiente y el aumento debido a las fuentes de luz del sensor es utilizada para
medir la luz de cada color absorbida por la superficie del objeto. Los tres valores de color se
procesaran para corregir la dispersión en el espectro de emisión de cada uno de los led.
El NXT recibe tres valores: el nivel de ROJO, el nivel de VERDE y el nivel de AZUL.
El valor correspondiente a cada color está comprendido entre 0 y 255. por ejemplo, si el valor
devuelto es Rojo =255, Verde =255 y Azul =255 el color leído es el Blanco.
Negro 0 0 0
Rojo 255 0 0
Verde 0 255 0
Azul 0 0 255
El sensor actualiza las lecturas a razón de 100 muestras por segundo. Las características del
modo de control del sensor de color permiten dos tipos de calibración a efectuar por el
programa del NXT.
La calibración por nivel de negro puede utilizarse para eliminar reflejos no deseados
provenientes de la estructura en la que el sensor está colocado.
La calibración por balance de blancos puede utilizarse para adecuar la sensibilidad del sensor
para cada uno de los tres led cuando ilumina una superficie blanca a una distancia
determinada.
Página 28
ROBOTS LEGO MINDSTORMS
La ranura es suficientemente ancha para acomodar varias piezas Lego. En particular, una
rueda de 0.95 pulgadas con 6 huecos, de modo que bloquea el haz infrarrojo 6 veces por
revolución. El sentido de la rotación no se puede determinar monitorizando la señal del
fototransistor, pero esto es irrelevante si la rueda se halla conectada al motor, cuyo sentido de
giro es conocido.
Página 29
ROBOTS LEGO MINDSTORMS
Circuito: El circuito es muy sencillo, y del mismo modo que sucede con el resto de
resistencias no es necesario tener en cuenta la polaridad.
Montaje: Hay diferentes modos para montar este sensor. El más simple es cortar un cable de
los utilizados para conectar motores y sensores, y soldar directamente el LDR a él. Otro es el
que se puede ver en la figura. El LDR tiene sus terminales soldadas a los conectores de la
pieza blanca inferior. De este modo, podremos conectar el sensor por medio de un cable
estándar Lego.
Programa: El sensor que hemos montado a pesar de ser un sensor de luz es un sensor
pasivo, es decir, no requiere alimentación. En consecuencia, en lugar de configurarlo como
sensor de luz lo haremos como sensor de contacto en modo RAW (también es posible
configurarlo en modo porcentual, pero siempre la precisión será mayor en modo RAW).
Página 30
ROBOTS LEGO MINDSTORMS
Estos dispositivos infrarrojos pequeños pueden medir distancia entre 10 y 80 centímetros con
buena precisión y bastante inmunes a las variaciones producidas por la reflectividad de los
obstáculos y de la luz ambiente.
Para poder conectar el sensor con salida análoga GP2D12 usando un diseño lo más simple
posible y utilizando solo la energía que viene de la entrada del sensor. ¡Esto supone un
verdadero desafío debido a los 35mA del GP2D12 por debajo de 5V, mientras que la entrada
del sensor de RCX se encuentra limitada a 14mA!
El concepto principal para alcanzar esta meta seria: almacenar la energía en un condensador
mientras que el GP2D12 no se acciona, una vez cargado utilizaremos la carga para obtener
una medida. Por supuesto hay un pequeño problema con esta técnica: el tiempo de la carga
es largo. ¡El GP2D12 requiere 50ms por medida, mientras que el circuito necesita 300ms!
Con el siguiente circuito, podemos ver que durante 250ms, se configura el sensor mientras
que se acciona un pequeño sensor, entonces se carga C1 con D1 hasta alcanzar el valor
necesario para obtener una medición. El regulador U1 de la entrada genera una tensión
regulada de +5V. Q1 es cortado por D2 (D2 mantiene la base a una tensión más alta o igual
a su tensión del emisor), así que GP2D12 no se acciona.Q3 también esta en corte, por lo que
la corriente no atraviesa D3/R5/Q2. La única corriente significativa es la de la carga C1 que
con R1 se hace menor de 2mA, y al final de esta fase C1 se carga completamente.
Fase de la medida: Durante los 50ms siguientes, el sensor se configura como sensor de
tacto (pasivo). Como la tensión de +5V con 10KΩ (interior RCX), que existe a su entrada
resulta
Página 31
ROBOTS LEGO MINDSTORMS
Lista De Componentes:
C1 almacena la energía que será utilizada durante fase de medida. Debe proporcionar +5V
en el extremo de esta etapa. Los valores típicos asumidos para el GP2D12 (I=35mA,
conversión time=50ms) y un +7.5V inicial a través de C1, su valor son C = I * despegue/dV =
35 * 50/(7.5-5) = el µF 700. Margen pequeño con el µF 1000…
Para Q1 podemos utilizar un transistor de Zetex de alto rendimiento, como el ZTX718 que
ofrece un rápido aumento de intensidad.
El C2 estabiliza U1 y permite absorber los picos de corriente. Lo mejor seria una versión
barata del ESR.
El módulo de interfaz.
Vista superior
Página 32
ROBOTS LEGO MINDSTORMS
Página 33
ROBOTS LEGO MINDSTORMS
El cuadro 5 demuestra el tablero de PC poblado con tres fotocélulas de los CDes para los
sensores. Las fotocélulas particulares usadas (Mouser #338-54C348) son bastante pequeñas
caber en la poca área ahuecada alrededor de los agujeros en vigas de la técnica de Lego.
Los pedazos cortos de tubería aislada resbalaron sobre el plomo infundado de las fotocélulas
evitan el poner en cortocircuito durante la operación. Las tres fotocélulas se deben alimentar
a través de la viga antes de soldar al tablero de PC. Una caja del caramelo de Tictac®
proporciona un recinto simple para el proyecto terminado según las indicaciones del cuadro
6. La conexión al RCX es hecha cortando un alambre del motor de Lego #5111 9V por la
mitad.
Página 34
ROBOTS LEGO MINDSTORMS
Sensor de color: La detección del color depende de medir la intensidad de la luz en diversas
longitudes de onda. Un espectrómetro hace esto partiendo la luz con un prisma o una rejilla
de difracción en sus longitudes de onda componentes. Sin embargo, los espectrómetros son
complejos y demasiado difíciles de construir. Otro acercamiento mide la intensidad de luz en
tres vendas del color primario: rojo, verde, y azul. Entonces calcula el color o la tonalidad de
la luz en software.
La tonalidad es un solo número que describe el color total de una luz. Se extiende a partir de
la 0 a 360, como los grados del ángulo alrededor de un círculo. En el caso de tonalidad: 0 es
rojo, 120 es verde, 240 es azules y 360 está detrás alrededor al rojo otra vez. Los colores
intermedios tienen tonalidades como 60 para el amarillo, 180 para ciánico y 300 para la
magenta. El cálculo de la tonalidad de valores rojos, verdes y azules es un algoritmo simple
descrito más adelante.
Mi primer acercamiento era utilizar las lentes coloreadas del LED para los filtros. Puedes
verlos en el cuadro 3. Resultaron ser demasiado pálidos y de color para las medidas
exactas. Entonces investigué con las placas transparentes de Lego. Son rojo disponible,
verde y azul en el kilt de accesorios transparente de Lego #5316. Tapan perfectamente en
los agujeros de las vigas de la técnica para formar los filtros para los sensores de los CDes
demostrados en el cuadro 6.
Después de la experimentación substancial, encontré que las placas azules y verdes eran
demasiado pálidas para el uso individualmente. Apilar dos placas verdes y tres azules creó
bastante densidad del filtro para la buena medida de color. El espectro real del color de los
filtros que resultan se puede considerar por la luz del sol que fotografía que brilla a través de
ellos con una rejilla de difracción según las indicaciones del cuadro 8.
Página 35
ROBOTS LEGO MINDSTORMS
// de Michael Gasperi
Sensor del COLOR SENSOR_1 //color del #define en el puerto 1 del sensor
cañería de la tarea ()
¡mientras que (COLOR! de = el canal 0 del mux 100) //only leerá 100
Espera (SHORT_WAIT);
Página 36
ROBOTS LEGO MINDSTORMS
Espera (SHORT_WAIT);
Espera (SHORT_WAIT);
si (b>max) {max=b;}
si (b<min) {min=b;}
gd = (máximo - g) /d;
bd = (máximo - b) /d;
si (r==max) {h = bd - gd;}
tonalidad = h;
Después de que sea variable la declaración y la inicialización allí sea “mientras que color no
igual” un lazo a 100. Este lazo maneja la sincronización para cerciorarse de que el
multiplexor está en la cuenta derecha. Solamente cuando el contador en el multiplexor es
cero querer la lectura sea 100. El programa guarda el accionar la palanca de la energía y el
registrar del multiplexor hasta que lee 100.
Hay una llamada de PlaySound en el fondo del lazo que hace un sonido del zumbido. Esto
señala que está ocurriendo la sincronización. Después la primera vez a través, el programa
Página 37
ROBOTS LEGO MINDSTORMS
no debe necesitar entrar este lazo otra vez. Si el RCX guarda el hacer del sonido del zumbido
para más que algunos segundos, hay algo mal con el multiplexor.
El programa siguiente camina palanca la energía y leyó los valores rojos, verdes y azules.
Porque el RCX tiene solamente matemáticas del número entero, los valores necesitan ser
escalados para arriba por 100 para una aritmética más última. En número entero la
matemáticas 1 se dividió por 4 resultados en 0 no 0.25 puesto que no hay particiones
fraccionarias. Escalando el denominador por ciento ante la división, el resultado se convierte
en 25. Una palanca adicional de la energía después del azul de la lectura fija el multiplexor
para comenzar el proceso encima otra vez.
Resultados: Cuadro 9 demostraciones como de bien el sensor del color funciona. La carta
compara la tonalidad de casi 100 diversas fuentes de luz a la lectura de RCX. Los valores de
la transmisión fueron obtenidos brillando la luz fluorescente del amplio-espectro a través de
los filtros transparentes fabricados por Rosco Laboratorio Ltd. y disponible de Edmund
científico como número de catálogo CR30394-17. Un ingeniero de Rosco me envió los
valores rojos, verdes y azules equivalentes de los filtros, que fueron utilizados para calcular la
tonalidad prevista. Los valores de la emisión fueron tomados sosteniendo el sensor contra
una ventana del color sólido en la pantalla de un monitor de la computadora. Un programa
básico visual simple permitió el control de los componentes rojos, verdes y azules del color
para el color de la ventana. Los valores reflejados donde medido reflejando la luz de las
muestras del color de un patrón de prueba en un profesional Photoguide de Kodak.
Parece la medida de la tonalidad es exacto dentro de más o menos 60. Eso significa por
ejemplo, puede ser que no puedas discriminar entre verde y ciánico, pero puedes decir
ciertamente verde del azul. El color y el tipo de fuente de luz tienen un efecto significativo en
la exactitud también. Si utilizas el sensor del color para clasificar ladrillos, necesitas calibrar la
lectura de la tonalidad para los ladrillos que deseas clasificar con una fuente de luz
controlada.
Página 38
ROBOTS LEGO MINDSTORMS
Componentes bien escogidos. Esta clase de sensor se construye generalmente con una
variedad especial de resistor que su valor disminuya mientras que la temperatura sube (NTC,
resistor negativo del coeficiente de la temperatura). La resistencia del sensor de LEGO es
12KΩ a 25°C. Pero, Este valor no es fácilmente disponible, y el sensor se construye
probablemente usando una serie de 10KΩ NTC montada con un resistor fijo 2K2Ω.
Si el margen de error es aproximado a 1°C lo consideraremos como bueno (el RCX mide
temperaturas de -20°C a 70°C solamente).
Página 39
ROBOTS LEGO MINDSTORMS
Material necesario:
ladrillo 2x4
placa 2x4
resistor 2.2KOhm
2 pedazos del tubo de cobre amarillo del diámetro de 4m m, un 1cm largo, un 4 cm largo
un pedazo de calor-contrae el tubo bastante grande para caber el tubo de cobre amarillo
el alambre eléctrico fino, soldadura, multa calor-contrae el tubo para aislar los alambres
Montaje:
Sujetar juntos ambos tubos de cobre amarillo con el tubo del encogimiento del calor, mientras
que dejar un 1 milímetro abre entre los pedazos. La extremidad de la punta de prueba será
separada termal del resto del sensor. Los alambres de la soldadura y el resistor 2.2KOhm al
resistor de NTC, aíslan las soldaduras con el tubo fino del encogimiento del calor.
Página 40
ROBOTS LEGO MINDSTORMS
Sellar el tubo y fijar el NTC con una gota de rápido-curan el pegamento de epoxy.
Usar el cortador que molía montó en el taladro de la energía con el soporte, quita dos de tres
tubos internos del ladrillo 2x4. Perforar un agujero de 4 milímetros a través del extremo del
ladrillo y del tubo interno restante. Hacer una muesca en parte posterior del ladrillo termina
con el archivo para permitir que el cable haga salir.
Insertar el tubo en agujero del ladrillo, después cable eléctrico de la soldadura LEGO. Pegar
el tubo de cobre amarillo al ladrillo con pegamento cyanoacrylic.
Un multiplexor funciona conectando los sensores múltiples con una sola entrada una a la vez.
La mayoría de las computadoras emplean un multiplexor en su hardware a digital de la
conversión análoga al espacio y al dinero de ahorro. De hecho, el RCX tiene un multiplexor,
Página 41
ROBOTS LEGO MINDSTORMS
pero solamente tres entradas están disponibles para el usuario. El RCX utiliza uno de los
otros canales internamente para leer su propio voltaje de la batería.
El diseño de un multiplexor para el RCX es difícil. Algunos esquemas obvios utilizan salidas
del motor con los relees para seleccionar los sensores múltiples. Sin embargo, porque el
RCX tiene solamente tres salidas, estos métodos no se parecen muy aceptables. Algo es
necesario que pueda detectar que el programa de RCX desea cambiar a un diverso sensor
sin perder una de las salidas preciosas.
Para diseñar un multiplexor aceptable que necesitas entender cómo el RCX lee sus entradas
del sensor. El RCX tiene dos modos del sensor, pasivo y accionado. Los ejemplos de tipos
pasivos son sensores del tacto y de temperatura. Mientras que están accionados los tipos
incluyen los sensores de la luz y de la rotación.
En el modo pasivo, el RCX mide un voltaje en la entrada. Para hacer lectura los sensores o
los interruptores resistentes más fáciles, hay un resistor del ohmio 10K que intenta tirar de la
entrada hasta 5V. En modo accionado, el RCX se aplica sobre 8V a la entrada para 3ms y
después lee la entrada apenas como un tipo pasivo durante un período corto 0.1ms.
Rápidamente accionando la palanca de una entrada del modo accionado a la voz pasiva y a
la parte posterior un circuito del multiplexor podría detectar que el programa de RCX deseó
cambiar a otro sensor. La selección de si una entrada está en pasivo o el modo accionado se
puede cambiar en marcha dentro de lenguajes de programación como no absolutamente C o
básico visual. Desafortunadamente, la lengua de la escritura del P-ladrillo del código de RCX
y de Lego no permite esta flexibilidad.
La limitación del tipo de sensores multiplexados a la voz pasiva alcanza una gran
simplificación en el diseño del multiplexor. Significa que solamente las señales del sensor
están cambiadas y no la energía de funcionarlos. La detección ligera pasiva con las
fotocélulas del sulfuro de cadmio (CDes) trabaja sobre así como el sensor ligero de Lego de
todos modos.
El cuadro 1 es el diagrama esquemático del multiplexor del sensor. Permite que los tres
sensores resistentes S1, S2 y S3 compartan una sola entrada de RCX. Los buenos ejemplos
de sensores resistentes son fotocélulas, termistores, y potenciómetros. Los interruptores
pueden también ser utilizados puesto que son apenas ejemplos extremos de sensores
resistentes.
Página 42
ROBOTS LEGO MINDSTORMS
El circuito integrado U2 es un contador digital que ordena a partir la cero a tres y entonces
reajustes. Los diodos D7 y D8 junto con el resistor R3 y el condensador C1 crean el reloj para
U2. El voltaje en la entrada de reloj permanece alto durante la lectura accionada normal del
modo del sensor por el RCX, pero el punto bajo de las gotas durante el tiempo mucho más
largo en que la entrada del sensor cambia a la voz pasiva. Cuando el sensor entró palancas
de nuevo a modo accionado el circuito crea el borde de levantamiento necesitado para
registrar U2.
El circuito integrado U1 contiene los interruptores análogos usados para conectar un sensor
con el RCX a la vez. U1A proporciona la regeneración al RCX para la sincronización. Si no,
no podrías decir qué sensor fue conectado. El interruptor análogo U1A se cierra cuando U2
cuenta cero y éste conecta el RCX a través del diodo D5 o D6 y R1 con la tierra. La lectura
creada en el RCX bajo esta condición es siempre 100. Los tres sensores conectan con R2,
que es clasificó de modo que su lectura máxima alcance nunca absolutamente 100.
El cuadro 2 demuestra una gama de entradas y la lectura que resulta en el RCX. Los
sensores resistentes o los voltajes se pueden aplicar a las entradas. Las lecturas son al revés
de lo que puede ser que esperes. Voltio cero da lugar a una lectura cerca de 95 mientras que
sobre 4.3V es 0. La resistencia cero da lugar a una lectura cerca de 95 mientras que la
resistencia muy alta lee 0.
Página 43
ROBOTS LEGO MINDSTORMS
Los palitos de madera son excelentes para fabricar estructuras simples. Son más sólidos que
el papel, por lo cual, al usarlos con una lámina de aluminio podemos fabricar sensores de
contacto mucho más rígidos. La foto siguiente muestra un ejemplo.
Página 44
ROBOTS LEGO MINDSTORMS
Para fabricar este tipo de sensor se necesita dos contactos conductores superpuestos a un
material no conductor. Las protecciones de diapositivas son muy útiles porque son flexibles.
Podemos pegar en ellas la lámina de aluminio y usar dos de ellas para hacer una especie de
bocadillo con un pedazo de cartulina. Debemos hacer agujeros en la cartulina para permitir
que las láminas entren en contacto al tocarlas.
Interruptores comerciales:
Página 45
ROBOTS LEGO MINDSTORMS
Como los LDRs son simplemente resistencias, se pueden conectar sencillamente los dos
pines del sensor.
Se puede mejorar el sensor de humedad conectando los dos cables a un pedazo de yeso,
argamasa o cualquier otro material que absorba el agua. La idea es siempre la misma, pero
mejorando la pureza del medio conductor. El comportamiento del sensor no cambiará
demasiado de un lugar a otro. El yeso es el material usado para cubrir el interior de los
edificios (cielos rasos, muros, etc. Se usa también para hacer una escayola a un paciente.
Página 46
ROBOTS LEGO MINDSTORMS
Página 47
ROBOTS LEGO MINDSTORMS
Una idea simple para este sensor es emitir luz sobre un LDR (sensor de luz). Si alguien pasa,
bloquea la luz y el LDR lo detecta. Si la fuente luminosa es un foco, estamos simplemente
detectando sombras. Si usamos un puntero láser como fuente luminosa, su detección tendrá
más alcance y sus lecturas serán muy precisas.
Existe otra idea para cumplir la misma tarea. Puede emitir luz hacia afuera y medir la cantidad
de luz que se refleja de vuelta. Cuando no hay nada que la bloquee, la luz reflejada será muy
pequeña. Sin embargo, si un objeto bloquea la luz, ella reflejará más luz de vuelta. Esto es lo
que se llama un sensor de luz reflectante. El beneficio de este tipo de sensor es que está
situado totalmente fijo en un lugar y no se necesita ninguna alineación cuando cambiamos la
dirección del sensor.
Página 48
ROBOTS LEGO MINDSTORMS
Puede conseguirse una mejor versión del sensor reflectante anterior usando luz infrarroja (IR),
ya que hay muchas menos interferencias. La IR es un tipo de luz que los seres humanos no
podemos ver. Es conveniente cuando no se desea que la gente vea nuestro sensor (por ej. en
los sistemas de seguridad).
Observe en el diagrama, como usamos un fototransistor IR en lugar del LDR. En este caso,
los dos funcionan de la misma manera, pero el fototransistor IR es mucho más sensible a la
luz IR que un LDR. A continuación mostramos un esquema de cómo fabricar este sensor.
Página 49
ROBOTS LEGO MINDSTORMS
También puede comprar los sensores reflectantes IR. Generalmente vienen en un tamaño
compacto y las lecturas de los sensores son más fiables.
Podemos usar este sensor para detectar la presencia de imanes. Las aplicaciones son
similares al sensor reflectante IR pero no dependen de la luz, lo que a menudo significa que
son más fiables. Sin embargo, necesita tener un imán, mientras que la luz se encuentra en
todas partes.
Éste es un ejemplo de cómo montar un sensor de efecto Hall (de digikey.com, número de
pieza DN6848-ND)
Página 50
ROBOTS LEGO MINDSTORMS
Para aquéllos que se interesen por los detalles técnicos más a fondo, hay una resistencia de
referencia de 33K en cada puerto de sensor, que es usada para determinar las lecturas que
obtenemos. La figura de abajo muestra cómo se coloca la resistencia de referencia. El
microcontrolador mide la caída de tensión a través del sensor, la cual puede calcularse
mediante la siguiente ecuación.
V = 5 x ( Rs / (33K + Rs))
Sabemos que si la tensión cae de 5v obtenemos una lectura de 1023. Podemos usar la
misma ecuación para determinar las lecturas del sensor directamente.
Por ejemplo, si nuestro sensor tiene una resistencia de 10k Ohmios, nuestra lectura de sensor
será:
Página 51
ROBOTS LEGO MINDSTORMS
www.tik.ee.ethz.ch/tik/education/lectures/PPS/mindstorms/sa_nxt/index.php?page=home
www.labview.ch/doc/FAQ/FAQ.LEGO.M/LEGO%20MINDSTORMS_NXT?set_language=en&c
l=en
www.lego.com/eng/education/mindstorms/home.asp?pagename=input
www.radioshack.com
www.allelectronics.com
www.digikey.com
Página 52
ROBOTS LEGO MINDSTORMS
4. Motores:
Tracción y dirección.
Servomotores.
Motor que funciona con corriente eléctrica continúa. El campo magnético se crea en el
inducido (rotor) y en el inductor (estator). Necesitan un colector en el rotor y escobillas para su
alimentación eléctrica. Este tipo de motor fue el primero que se utilizó en la tracción de los
vehículos eléctricos por la simplicidad de los sistemas de control de revoluciones. Tiene un
elevado mantenimiento por el desgaste de las escobillas y de los colectores por el alto
consumo de corriente que tienen. En los motores de alta potencia, su tamaño llega a ser muy
voluminoso.
En lugar de un armazón con un núcleo de hierro y muchos bobinados, hay una única espira
conductora cuadrada girando alrededor de un eje, el cual no se dibuja.
Página 53
ROBOTS LEGO MINDSTORMS
Las flechas rojas indican el sentido convencional de la corriente (de más a menos). Las líneas
de campo magnético aparecen en rojo, dirigiéndose desde el polo norte (pintado en azul)
hacia el polo sur (pintado en verde). Las flechas de color negro representan la fuerza de
Lorentz que se ejerce sobre un conductor por el que circula una corriente eléctrica situado en
el seno de un campo magnético.
Una vez explicado lo que es un motor y para que nos sirva, pasamos a mostrar los motores
que tiene Lego.
Página 54
ROBOTS LEGO MINDSTORMS
Página 55
ROBOTS LEGO MINDSTORMS
Motor NXT
El 43362 que resulta equivalente al 71427, es un 30 % más ligero. Esto es generalmente una
ventaja, excepto cuando el motor es usado como un contrapeso, o para equilibrar la
estructura.
Página 56
ROBOTS LEGO MINDSTORMS
Vcc: 9 V
Velocidad
4100 1300
de rotación 35 r.p.m. 360 r.p.m. 340 r.p.m. 460 r.p.m. 170 r.p.m.
r.p.m. r.p.m.
Corriente
35 mA 6 mA 3.5 mA 9 mA 160 mA 31 mA 60 mA
sin carga
El motor 43362 tiene una corriente más alta sin carga que el 71427, probablemente causado
por la gran fricción interna. El modelo 47154 tiene una corriente sin carga elevada, debido a
su reducción de engranaje de 5 etapas. Para esto usa engranajes de diente grande en las
últimas etapas, probablemente mucho más robusto que el de 2 etapas, con engranajes
internos de diente delgado como 71427/43362. Los 5292 también exponen una corriente sin
carga muy alta, aquí otra vez causado por la fricción interna. Como es habitual para motores
de corriente continua, la velocidad de rotación es proporcional ala tensión aplicado a ellos.
Vcc: 9 V
Torque en 0.85 1.6 N.cm 6 N.cm 5.5 N.cm 12 N.cm 6 N.cm 50 N.cm
Página 57
ROBOTS LEGO MINDSTORMS
parado N.cm
Corriente
700 mA 80 mA 360 mA 340 mA 3.2 A 580 mA 2A
parado
Se debe tener cuidado en no mantener los motores demasiado tiempo funcionando, pues
disipan demasiada potencia (6 vatios para 2838, 3 W para 71427) la cual provoca una rápida
subida de temperaturas. ¡¡Atención a los motores 71427 y 43362, equipados con un termisor,
deben ser protegidos de las altas temperaturas!! El motor NXT también esta protegido por un
termisor (Raychem RXE065 o Arroyos MF-R065). Esto significa que la corriente por el resulta
muy alta, entorno a los 2A la cual sólo puede ser mantenida durante unos segundos.
El cilindro se encuentra colocado directamente sobre el eje del motor, excepto en el motor
2838 al cual se le coloca una reducción de engranaje de 1/5, que resulta muy necesaria para
la mayor parte de usos. El momento de rotación mostrado por el motor corrige la reducción de
engranaje. El motor 5292 es muy rápido, por lo que también tuvo que ser medido con una
reducción de engranaje de 1/3.
Torque o Velocidad
Poder Poder
momento de Corriente Rendimiento
Mecánico Eléctrico
de rotación rotación
2838
Página 58
ROBOTS LEGO MINDSTORMS
Torque o Velocidad
Poder Poder
momento de Corriente Rendimiento
Mecánico Eléctrico
de rotación rotación
71427
Torque o Velocidad
Poder Poder
momento de Corriente Rendimiento
Mecánico Eléctrico
de rotación rotación
43362
Torque o Velocidad
Poder Poder
momento de Corriente Rendimiento
Mecánico Eléctrico
de rotación rotación
47154
Página 59
ROBOTS LEGO MINDSTORMS
Torque o Velocidad
Poder Poder
momento de Corriente Rendimiento
Mecánico Eléctrico
de rotación rotación
2986
Torque o Velocidad
Poder Poder
momento de Corriente Rendimiento
Mecánico Eléctrico
de rotación rotación
5292
Torque o Velocidad
Poder Poder
momento de Corriente Rendimiento
Mecánico Eléctrico
de rotación rotación
NXT
Página 60
ROBOTS LEGO MINDSTORMS
Página 61
ROBOTS LEGO MINDSTORMS
www.monografias.com
mindstorms.lego.com/eng/products/ris/index.asp
Página 62
ROBOTS LEGO MINDSTORMS
Transmisiones entre ejes que se cortan: Cuando hay que transmitir movimiento y
esfuerzos entre ejes que se cortan se utilizan los engranajes cónicos. LEGO ofrece
engranajes cónicos de 12 dientes. Además, hay otro engranaje de 24 dientes (ver la figura)
que combinado con engranajes rectos permite transmitir movimiento entre ejes que se cortan.
Transmisiones entre ejes que se cruzan: Cuando dos ejes se cruzan se utiliza la
combinación tornillo sinfín - corona (en nuestro caso la corona será un engranaje recto). Por
medio de estas combinaciones se consiguen grandes relaciones de transmisión. En este
engranaje el tornillo sinfín siempre será el conductor y la corona la conducida. El tornillo sinfín
Página 63
ROBOTS LEGO MINDSTORMS
que suministra LEGO es de una entrada, por lo que las relaciones de transmisión serán las
siguientes:
Engranajes que limitan el par: Este engranaje se utiliza para limitar el par. Con él se pueden
proteger ciertos mecanismos, por ejemplo, para que cuando lleguen a un límite no sufran
daños.
Diferencial: Cuando un vehículo gira, las ruedas de un lado describen un recorrido de mayor
longitud que las del otro, así que si no se desea que se produzca un deslizamiento las
Página 64
ROBOTS LEGO MINDSTORMS
velocidades de las ruedas no podrán ser iguales. Cuando se monta un robot móvil con las
ruedas de los dos lados movidas por un solo motor conviene utilizar un diferencial. Para ello
combinaremos el elemento de la figura con tres engranajes cónicos. El diferencial puede ser
útil en otros casos, por ejemplo, cuando se controlan dos movimientos con un solo motor. Si
uno de los movimientos llega a un tope el otro podrá continuar sin problemas.
El tornillo sinfín será el conductor, mientras que el engranaje recto se encontrará bloqueado.
De este modo pueden conseguirse desplazamientos rectilíneos con gran precisión. El paso
del tornillo es de 3.175 mm, así que por cada vuelta del eje el desplazamiento horizontal será
de 3.157 mm.
Página 65
ROBOTS LEGO MINDSTORMS
Ruedas dentadas. Engranajes: Las ruedas dentadas rectas que contiene LEGO MindStorms
tienen 8, 16, 24 y 40 dientes. Si las combinamos de dos en dos se pueden conseguir las
relaciones de transmisión que se recogen en la tabla: (Las imágenes de los elementos LEGO
de esta página están cogidos de la página Technic con el permiso de su autor)
Los valores de la fila superior son el número de dientes de la rueda conductora, y los de la
columna izquierda los de la conducida.
8 16 24 40
8 1 2 3 5
Página 66
ROBOTS LEGO MINDSTORMS
Poleas: La segunda opción que se ofrece para transmitir movimiento y fuerza entre ejes
paralelos es utilizar poleas. Este sistema permite aumentar la distancia entre ejes. Además, el
sentido de giro de los dos ejes será el mismo. Sin embargo, la transmisión de movimiento y
esfuerzos por medio de engranajes ofrece mayor precisión y capacidad para transmitir
mayores esfuerzos.
Las tres poleas que contiene Lego MindStorms tienen los siguientes diámetros: 8.6, 21.9 y
34.2.
Página 67
ROBOTS LEGO MINDSTORMS
Los valores de la fila superior son el diámetro de la rueda conductora, y los de la columna
izquierda, los de la conducida.
8.6 1 2.5 4
www.legoengineering.com/
llk.media.mit.edu/projects/cricket/about/index.shtml
www.ni.com/company/robolab.htm
lcs.www.media.mit.edu/groups/el/projects/programmable-brick/
www.eduteka.org/RoboticaSondas.php
www.Mindtorms.lego
robotikas.blogspot.com/2006/08/precios-de-lego-educacin_25.html
www.etse.urv.es/~aoller/robmob_eaiei/LEGO%20MindStorms%20RIS.htm
Página 68
ROBOTS LEGO MINDSTORMS
6. Programación
Para programar el núcleo sin tener grandes conocimientos de programación se nos presentan
diversos lenguajes: RCX y Robolab, que son herramientas muy útiles y con grandes
posibilidades. Existen además otros lenguajes como NQC e Interactive C que nos permiten
programar en el lenguaje C, muy conocido por la mayoría de usuarios. Lego nos ofrece a
posibilidad de programar en Java o LabView siendo éste último un referente en los últimos
años para programar RCX. Por último existe la posibilidad de programar en lenguajes
orientados a objetos como Visual Basic, Visual C etc. Destacar además la posibilidad de
programar directamente en C el núcleo a través del sistema operativo del núcleo: LegOS y
BrickOS, siendo esto último el más utilizado en éstos últimos años.
6.2. RCX-Code
6.2.1. Introducción:
RCX-Code es el entorno de programación gráfico suministrado con LEGO MindStorms para
Windows. Está dirigido al mercado doméstico. Es fácil de utilizar, y está basado en el lenguaje
educativo LOGO. Puedes editar un programa arrastrando bloques semejantes a los
tradicionales ladrillos LEGO. Una vez secuenciados de modo adecuado, y modificados sus
parámetros para adaptarlos a nuestros deseos, el programa puede ser transferido al RCX por
medio de la conexión de infrarrojos. A partir de ese momento, el robot podrá funcionar de
modo autónomo sin depender del ordenador.
Página 69
ROBOTS LEGO MINDSTORMS
Página 70
ROBOTS LEGO MINDSTORMS
Página 71
ROBOTS LEGO MINDSTORMS
Como podemos observar un bloque se ejecuta detrás de otro, puede haber bucles y varias
hebras que se puede ejecutar a la vez.
Página 72
ROBOTS LEGO MINDSTORMS
6.2.2. Comandos
Movimiento de motores. Este es el bloque que permite controlar el movimiento de los
motores.
Sonidos:
Página 73
ROBOTS LEGO MINDSTORMS
Contadores:
Temporizadores:
Página 74
ROBOTS LEGO MINDSTORMS
Condiciones sensoriales
Página 75
ROBOTS LEGO MINDSTORMS
Página 76
ROBOTS LEGO MINDSTORMS
Bibligrafía
[1] Vicente Matellán Olivera, Jesús M. González Barahona, Pedro de las Heras Quirós, José
Centeno González, Programación de Lego MindStorms bajo GNU/Linux, 11 de noviembre
2000, 7 de noviembre 2006, http://es.tldp.org/Presentaciones/200002hispalinux/conf-16/16-
html/.
[3] Mario Ferrari, Marco Beri, EmuLegOs, 7 de noviembre 2006, 7 de noviembre 2006,
http://emulegos.sourceforge.net/.
[5] Alvin J. Alexander, DevDaily.com, Empezando con Lego MindStorms, 17 mayo 2003, 7 de
noviembre de 2006, http://www.devdaily.com/java/lejos/GettingStartedWithLejos/node1.shtml.
Página 77
ROBOTS LEGO MINDSTORMS
[6] Paul Andrews Jürgen Stuber, José Solórzano, LejOs, W22 agosto del 2006, 7 de
noviembre de 2006, http://lejos.sourceforge.net.
Página 78
ROBOTS LEGO MINDSTORMS
Pilot nivel 1:
En este primer nivel nos muestran un programa muy sencillo. Cada símbolo nos
indica una función:
Pilot nivel 2:
Página 79
ROBOTS LEGO MINDSTORMS
En este nivel se nos ofrece la posibilidad de controlar la potencia de cada elemento. Se puede
observar en la figura que la potencia tiene un rango de 1 a 5. Se han incluido nuevos
símbolos cuyas funciones son:
Sensor de contacto. Este símbolo nos indica que cuando es presionado este sensor,
el programa avanza al siguiente paso.
Pilot Nivel 3:
Página 80
ROBOTS LEGO MINDSTORMS
Sensor de luz. Continua con la ejecución del siguiente paso cuando detecta una zona
oscua.
Sensor de luz. Continua con la ejecución del siguiente paso cuando no detecta una
zona oscura.
Pilot nivel 4:
Este nivel se diferencia del anterior en que puede programarse en múltiples pasos
haciendo más extenso el programa.
Página 81
ROBOTS LEGO MINDSTORMS
Inventor nivel 1:
En este nivel nos aparece un entorno de programación diferente a los ya vistos anteriormente
en el modo pilot. A la derecha de la pantalla tenemos a nuestra disposición las diversas
funciones que nos permite en este nivel, siendo el propio programador el que selecciona el
orden de ejecución y realiza el diagrama. La mayoría de las funciones ya nos son conocidas
por lo que explicaremos las nuevas. Cada programa siempre comienza con el símbolo del
semáforo en verde y finaliza con el semáforo en rojo. Una función que no hemos visto
anteriormente es la siguiente:
Inventor nivel 2:
Página 82
ROBOTS LEGO MINDSTORMS
En este nivel se nos ofrecen diversas funciones como cambio de dirección, saltar y
aterrizar y tiempo al azar:
Tiempo al azar. Mediante esta función el siguiente paso no se ejecutará hasta que
transcurra un determinado tiempo aleatorio. Ejemplo:
Inventor nivel 3:
Página 83
ROBOTS LEGO MINDSTORMS
Se repite 30 veces.
Página 84
ROBOTS LEGO MINDSTORMS
Inventor nivel 4:
Este último nivel presenta una diferencia relevante respecto al nivel anterior. Esta
diferencia es la posibilidad de utilizar contenedores. Un contenedor es un icono que almacena
un determinado valor y ordena al programa en qué momento se envía ese valor. Veamos
mediante un sencillo ejemplo el uso de los contenedores:
Página 85
ROBOTS LEGO MINDSTORMS
http://www.ceeo.tufts.edu/robolabatceeo/Resources/articles/robolab.pdf
http://www.matnatverdensklasse.dk/uv-mat/robolab/robolab.pdf
http://cache.lego.com/downloads/education/led_quick_start_guide_ES.pdf
6.4. LABVIEW
Aplicaciones de LabVIEW
Robolab esta basado en una versión sencilla de LabVIEW pero solo es valida para
el NTX y no es tan potente como LabVIEW. Si queremos sacarle el máximo
partido al NTX o incluso al RCX tenemos que hacernos con una versión de
LabVIEW la versión básica seta disponible por 1249.00 € y la profesional por 4249.00
€. Además tendremos que comprar el toolkit de LabVIEW para LEGO MINDSTORMS por
unos 18 €, National Instruments también pone a nuestra disposición tarjetas de adquisición
Página 86
ROBOTS LEGO MINDSTORMS
de datos preparadas para actuar sobre los sensores y motores de lego con una mayor
cantidad de puertos que con el NTX o RCX. Teniendo en cuenta todo esto a continuación se
explicará como utilizar LabVIEW genéricamente, de tal forma que el lector pueda comprender
su uso y poder abordar la programación con LEGO MINDSTORMS.
Página 87
ROBOTS LEGO MINDSTORMS
también es necesario tener en cuenta que cuando se realiza una conexión a un VI esta
conexión se identifica por un tipo de dato especifico, que debe coincidir con el tipo de dato de
la entrada del VI (aunque esto no necesariamente es cierto ya que puede haber varios tipos
de datos conectados de VI a VI, además de que un arreglo de datos ``cluster`` puede
albergar varios tipo de variables) permitiendo una concordancia en el flujo de datos; no
siempre el tipo de dato de la entrada del VI es el mismo que el de la salida, pero sin embargo
para la mayoría de los casos si se cumple.
Las funciones pueden ser VIs prediseñados y que pueden ser reutilizados en cualquier
aplicación, estos bloques funcionales constan de entradas y salidas, igual que en un lenguaje
de programación estándar las funciones procesan las entradas y entregan una o varias
salidas, estos VI pueden también estar conformados de otros subVIs y así sucesivamente, de
esta forma se pueden representar como un árbol genealógico donde un VI se relaciona o
depende de varios SubVIs. Labview tiene VIs de adquisición de datos e imágenes, de
comunicaciones, de procesamiento digital de señales, de funciones matemáticas simples,
hasta funciones que utilizan otros programas como Matlab o HiQ para resolver problemas,
otras mas complejas como "nodos de formula" que se utilizan para la resolución de
ecuaciones editando directamente estas como en lenguajes de programación tradicionales y
definiendo las entradas y las salidas. Labview también se puede utilizar para graficar en tres
dimensiones, en coordenadas polares y cartesianas, tiene disponibles herramientas para
Página 88
ROBOTS LEGO MINDSTORMS
Página 89
ROBOTS LEGO MINDSTORMS
Página 90
ROBOTS LEGO MINDSTORMS
Página 91
ROBOTS LEGO MINDSTORMS
el canal por donde se reciben los datos, para este ejemplo se ha tomado el canal de entrada
numero 0 de la PCI1200.
Numero de muestras 1000, Significa en cada ciclo de captura se va ha tomar N muestras par
representar la señal
2. Envío del comando VOLT020 para programar la fuente a un voltaje de 2Voltios. Mediante
el VI de Serial Port Writer, se envía un string seguido de un carrier return. El string tiene un
formato necesario para que el comando se especifique de la forma adecuada. La
herramienta de formato de string se encuentran en la paleta de funciones.
Página 92
ROBOTS LEGO MINDSTORMS
Lea del puerto serial de la computadora la información de confirmación que envía la fuente
Lo que se desea es escribir y leer datos por el puerto paralelo del PC. Las funciones
indicadas para esta aplicación son IN PORT y OUT PORT (ubicadas en advanced/port i/o),
que entran y sacan un byte o una palabra a una dirección específica de memoria. Por lo cual
debemos saber cual es la dirección del puerto paralelo del PC, cuyo dato se encuentra en la
información del sistema en el panel de control; por lo general es 0378-037B hex (888-891
dec). También es necesario configurar en el setup del PC el puerto paralelo en modo EPP, el
cual, según sus especificaciones se encuentra que la dirección de datos i/o es 888 dec y la
de control es 890 dec, de 8 bits cada una.
La palabra de control se configura con el bit # 1 para leer (1) o escribir (0), tiene además 5
bits libres para cualquier aplicación que se necesite como por ejemplo multiplexación.
Control 7 6 5 4 3 2 1 0
1 1 x x x x i/o x
Página 93
ROBOTS LEGO MINDSTORMS
Para lograr esto, se utiliza la estructura Secuence, que como su nombre lo indica, corre un
número deseado de secuencias en forma cíclica y ordenada, por lo que es ideal para nuestra
aplicación. Primero configuramos el puerto para escribir, para lo que necesitamos escribir en
el control (890 dec) un 0 en el bit #1 (por ejemplo 0 dec).
Una vez configurado el puerto para escribir, se procede a escribir en la dirección de datos
(888 dec) el dato deseado por medio del control.
Página 94
ROBOTS LEGO MINDSTORMS
Hasta el momento se han sacado datos, pero ahora podemos leer éstos mismos
configurando primero el puerto para lectura, enviando a la dirección de control un 1 al bit #1
(por ejemplo 2 dec). Por último con la ayuda de la función IN PORT leemos estos datos de la
dirección 888 dec y los visualizamos en el indicador.
http://www.ni.com/academic/mindstorms/
http://www.lawebdelprogramador.com/cursos/
Página 95
ROBOTS LEGO MINDSTORMS
Una vez hemos instalado la herramienta RCX COMMAND CENTER, nos disponemos
a ejecutarla y nos aparecerá la siguiente pantalla:
Por defecto vienen marcadas las casillas Automatic y RCX. Esto significa que el software
buscará en los diferentes puertos de comunicaciones la existencia del núcleo de
programación RCX. Si por el contrario sabemos la ubicación en la cual hemos conectado el
RCX entonces marcaremos el puerto de comunicación correspondiente. En caso de no
detectar la conexión del núcleo nos aparecerá por pantalla el siguiente mensaje:
Página 96
ROBOTS LEGO MINDSTORMS
En la parte superior de la figura tenemos una barra en la que aparecen las siguientes
opciones:
Debajo de las mismas podemos observar diversos botones de acceso rápido, los cuales nos
permiten acceder a diversas opciones del programa sin necesidad de ir a la barra de
herramientas:
En la parte derecha de la figura principal del programa nos encontramos con una guía de los
comandos más utilizados en NQC para la programación del robot. La guía nos permite
conocer rápidamente el nombre de la función que necesitamos dependiendo que sea para el
manejo de sensores, las diversas salidas para el manejo de motores o para generar sonidos.
Página 97
ROBOTS LEGO MINDSTORMS
Para empezar a escribir nuestro código del programa que queremos realizar
pinchamos en el símbolo de la hoja en blanco en la parte superior de la pantalla o accedemos
al menú file y después marcamos new. Nos aparecerá la siguiente figura:
Página 98
ROBOTS LEGO MINDSTORMS
Una vez realizado un montaje sencillo del robot nos dispondremos a realizar un
programa en la herramienta RCX COMMAND CENTER. Para ello ejecutamos el programa y
abrimos una ventana nueva como ya se ha descrito en el capitulo anterior.
Página 99
ROBOTS LEGO MINDSTORMS
Cada programa en NQC está compuesto por tareas. Todo programa ha de tener
como mínimo una tarea denominada main . la estructura básica del programa es la siguiente:
//declaración de constantes
//declaración de variables
//órdenes
Definiremos por tanto las que creamos necesarias. Estas constantes pueden ser
usadas a lo largo del programa y son buenas ya que hacen que el programa sea más legible y
más fácil de cambiar los valores correspondientes a cada una de ellas. Como podemos
observar al definir una constante con la sintaxis adecuada, aparece con un color rojizo con el
fin de distinguir los distintos comandos.
Variables
Todas las variables en NQC son del mismo tipo, es decir enteros de 16 bits con signo.
Las variables las podemos diferenciar entre globales y locales. Las variables globales se
declaran en el ámbito del programa, es decir fuera de las tareas. Estas variables pueden ser
utilizadas por cualquier tarea, subrutina o función.
Página 100
ROBOTS LEGO MINDSTORMS
Las variables locales en cambio, se declaran dentro de la función, tarea, subrutina o función, y
sólo se pueden utilizar dentro de las mismas.
Para definir variables en el espacio reservado para ello, se debe poner primero la
palabra reservada int seguida del nombre que elijamos para la misma y finalizando siempre
con “;”:
int variable;
task main()
{
Variable = 5;
........
.......
......
}
6.5.4. Instrucciones
El cuerpo de un bloque de código se compone de instrucciones. Todas las
instrucciones siempre terminan con “;” La declaración de variables, como se ha descrito en la
sección anterior, es un tipo de instrucción. Una variable se declara como local (con
inicialización opcional) cuando ha de ser utilizada dentro de un bloque de código. Una vez
declarada se le asigna un valor con el operador “=”, además de éste podemos utilizar otros
operadores que admitidos por NQC estos son:
Página 101
ROBOTS LEGO MINDSTORMS
#define TIEMPO_GIRO 85
task main()
{
tiempo_de_avance = 20; //inicializacion variable
repeat(50) //instrucciones
{
OnFwd(OUT_A+OUT_C);
Wait(tiempo_de_avance);
OnRev(OUT_C);
Wait(TIEMPO_GIRO);
tiempo_de_avance +=5;
}
Off(OUT_A+OUT_B);
}
Sentencia if
if (condicion)
{
....//instrucciones
....
}
Else
{
...
}
Sentencia repeat
repeat (expresion)
{
Página 102
ROBOTS LEGO MINDSTORMS
....//instrucciones
....
}
Sentencia while
while (condicion)
{
.... //instrucciones
....
}
Esta sentencia ejecuta las instrucciones contenidas en ella tantas veces como se cumpla la
condición.
Sentencia switch
switch (x)
{
case 1 : // se ejecuta cuando x es 1
break;
case 2 :
case 3 : // se ejecuta cuando x es 2 ó 3
break;
default : // se ejecuta cuando x no es 1,2 ni 3
break;
}
Funciones:
A la hora de crear un programa para un robot de lego, puede ser útil agrupar un
conjunto de instrucciones que utilizamos en una sola función, para posteriormente llamar a
Página 103
ROBOTS LEGO MINDSTORMS
dicha función cuando la necesitemos y evitar así la repetición de código. Para declarar una
función recurriremos a la siguiente expresión:
void nombre(argumentos)
{
.......//instrucciones
}
Subrutinas:
Por otro lado tenemos la subrutinas, que a diferencia de las funciones permiten que
se comparta una única copia del fragmento de código ahorrando así espacio en la memoria
del RCX. Una desventaja de las subrutinas es que posee diversas limitaciones debido al
intérprete del código de bytes LEGO. Las dos desventajas más importantes de las subrutinas
son:
Página 104
ROBOTS LEGO MINDSTORMS
6.5.7. Tareas
Un programa en NQC nos permite declarar como máximo diez tareas. Siempre como
mínimo debe haber una tarea que es la principal: main. Las demás tareas se ejecutarán
cuando la función principal las llame utilizando la orden start. Una vez que se llama a otra
tarea, se ejecuta simultáneamente con la primera. Una tarea en marcha puede detener a otra
tarea utilizando la orden stop. Al reiniciar la tarea que se ha parado, comienza siempre desde
el principio y no desde donde estaba cuando habíamos parado dicha tarea.
.......
.......
}
.......
.......
6.5.8. Sensores
Hay tres sensores, que se numeran internamente 0, 1 y 2, aunque externamente se numeran
como 1,2 y 3. Los nombres definidos para referirnos a un sensor determinado son:
Página 105
ROBOTS LEGO MINDSTORMS
Los puertos de sensor en el RCX tienen capacidad de soportar una gran variedad de
sensores. Es función del programa decirle al RCX qué clase de sensor está conectado en
cada puerto. Se puede configurar el tipo de sensor por medio de SetSensorType. Si un puerto
de sensor se configura con el tipo incorrecto, el RCX puede no ser capaz de leerlo
correctamente.
El modo de sensor determina cómo se procesa el valor puro de un sensor. Algunos modos
sólo tienen sentido para cierto tipo de sensores, por ejemplo SENSOR_MODE_ROTATION
sólo es útil con sensores de rotación. El modo de sensor se puede establecer por medio de
SetSensorMode.
Para configurar a la vez el tipo de sensor y el modo existe la orden SetSensor (parámetros),
que es la que utilizaremos en los ejemplos para configurar los sensores.
Página 106
ROBOTS LEGO MINDSTORMS
Establece un tipo de sensor, que debe ser una de las de las constantes de tipo de
sensor predefinidos.
SetSensorType(SENSOR_1, SENSOR_TYPE_TOUCH);
Establece un modo de sensor, que debe ser una de las de las constantes de modo
de sensor predefinidos. Se puede añadir, si se desea un argumento
de umbral para conversión booleana.
ClearSensor(sensor)
Borra el valor de un sensor –sólo afecta a los sensores que se configuran para
medir una cantidad acumulativa tal como la rotación o un recuento de pulso.
ClearSensor(SENSOR_1);
SensorValue(n)
Devuelve la lectura procesada del sensor para el sensor n, donde n es 0, 1 ó 2.
Este es el mismo valor que devuelven los nombres de sensor (ej. SENSOR_1).
SensorType(n)
Devuelve el tipo configurado del sensor n, que debe ser 0, 1 ó 2. Sólo tiene tipos
configurables de sensor RCX, otros soportes devuelven el tipo el tipo pre-configurado
de sensor.
x = SensorType(0);
SensorMode(n)
Devuelve el modo de sensor en uso para el sensor n, que debe ser 0, 1 ó 2.
x = SensorMode(0);
Página 107
ROBOTS LEGO MINDSTORMS
task main()
{
SetSensor(SENSOR_1,SENSOR_TOUCH);
OnFwd(OUT_A+OUT_C);
until (SENSOR_1 == 1) ;
Off(OUT_A+OUT_C) ;
}
6.5.9. Salidas
Todas las funciones que utilizan las salidas se las nombra como grupo. Cada valor
tiene que ser una constante OUT_A, OUT_B, OUT_C. también cabe la posibilidad de nombrar
dos salidas, por ejemplo (OUT_A+OUT_B) se refiere a las salidas A y B, sin necesidad de
repetir la orden.
Cada salida tiene tres atributos: modo, dirección y potencia. El modo se configura a
través de la orden SetOutput (salida, modo). Modo admite las siguientes constantes:
Los demás atributos se pueden configurar con la orden SetDirection (salida, dirección).
Dirección puede adquirir los siguientes valores:
SetOutput(salidas, modo)
SetDirection(salidas, dirección)
Establece la salida en la dirección especificada. Salida es uno o más de los
valores OUT_A, OUT_B, y OUT_C. Dirección tiene que ser OUT_FWD, OUT_REV, o
OUT_TOGGLE.
SetPower(salidas , potencia)
Página 108
ROBOTS LEGO MINDSTORMS
Establece la potencia del motor especificado. Potencia puede ser una expresión,
cuyo resultado debe ser un valor entre 0 y 7. Las constantes OUT_LOW, OUT_HALF, o
OUT_FULL también pueden ser usadas.
OutputStatus(n)
Devuelve el estado del motor n. Tener en cuenta que n debe ser 0, 1 o 2 – no
OUT_A, OUT_B, o OUT_C.
On(salidas)
Establece las salidas especificadas como encendidas. Salida es uno o más de los
valores OUT_A, OUT_B, y OUT_C.
Off(salidas)
Establece las salidas especificadas como apagadas. Salida es uno o más de los
valores OUT_A, OUT_B, y OUT_C.
Float(salidas)
Establece las salidas especificadas como float. Salida es uno o más de los
valores OUT_A, OUT_B, y OUT_C.
Fwd(salidas)
Establece el sentido de giro de las salidas especificadas como avance. Salida es
uno o más de los valores OUT_A, OUT_B, y OUT_C.
Fwd(OUT_A);
Rev(salidas)
Establece el sentido de giro de las salidas especificadas como retroceso. Salida
es uno o más de los valores OUT_A, OUT_B, y OUT_C.
Rev(OUT_A);
Toggle(salidas)
Invierte el sentido de giro de las salidas especificadas. Salida es uno o más de los
valores OUT_A, OUT_B, y OUT_C.
Toggle(OUT_A);
OnFwd(salidas)
Establece el sentido de giro de las salidas especificadas como avance y las pone
en marcha. Salida es uno o más de los valores OUT_A, OUT_B, y OUT_C.
OnFwd(OUT_A);
OnRev(salidas)
Establece el sentido de giro de las salidas especificadas como retroceso y las
pone en marcha. Salida es uno o más de los valores OUT_A, OUT_B, y OUT_C.
OnRev(OUT_A);
OnFor(salidas, tiempo)
Pone en marcha las salidas especificadas por un determinado tiempo y a
Página 109
ROBOTS LEGO MINDSTORMS
continuación las detiene. Salida es uno o más de los valores OUT_A, OUT_B, y OUT_C.
Tiempo se mide en incrementos de 10ms (one second = 100) y puede ser una expresión.
OnFor(OUT_A, x);
Ejemplo:
task main()
{
OnFwd(OUT_A+OUT_C); //establece el sentido de giro y lo pone en marcha
Wait(100); //espera 1 segundo
Off(OUT_A+OUT_C); //desactiva las salidas
}
6.5.10. Sonidos
El RCX posee un altavoz que nos permite generar diversos sonidos. Esto es útil para
avisarnos de que algo sucede. Por defecto existen 6 sonidos diferentes en el RCX
numerados:
0 Click de tecla
1 Pitido
2 Barrido de frecuencia decreciente
3 Barrido de frecuencia creciente
4 Sonido de error
5 Barrido de rápido crecimiento
Ejemplo:
task main()
{
PlaySound(1);
DISPLAY LCD
Página 110
ROBOTS LEGO MINDSTORMS
http://www.isaatc.ull.es/portal/doctorado/robotica/nqc_guia_sp.pdf
http://www.isaatc.ull.es/portal/doctorado/robotica/nqcovsp.pdf
http://www.donosgune.net/2000/gazteler/prg_leng/NQCgaz.htm
http://bricxcc.sourceforge.net/nqc/doc/NQC_Guide.pdf
INICIO
Para poder realizar las aplicaciones, debemos instalar la versión visual basic 5.0 o
superior. Visual basic es un entorno de programación orientado a objetos que nos permite
realizar diversas aplicaciones gráficas. Una vez instalado, nos dispondremos a ejecutarlo
mostrándonos la siguiente pantalla:
Página 111
ROBOTS LEGO MINDSTORMS
En esta pantalla seleccionaremos el icono EXE estándar para poder realizar una aplicación y
hacemos click en abrir.
Página 112
ROBOTS LEGO MINDSTORMS
Barra de herramientas:
Página 113
ROBOTS LEGO MINDSTORMS
Página 114
ROBOTS LEGO MINDSTORMS
Seguidamente nos dispondremos a preparar una aplicación para lego. Para ello hacemos
doble click en el icono correspondiente al nuevo componente que hemos agregado y nos
aparecerá lo siguiente:
Página 115
ROBOTS LEGO MINDSTORMS
Podemos observar diversas propiedades como (Name) que nos indica el nombre del
componente, siendo en este caso Spirit1, el cual es importante ya que nos referiremos a ese
componente mediante su nombre a la hora de realizar el código del programa. Otra propiedad
a destacar es ComPortNo en la cuál elegimos el puerto de comunicaciones donde
conectaremos el RCX. Por último en la propiedad LinkType elegimos el modo de transmisión
de datos: 0 infrarrojos; 1 cable; 2 radio. Dejaremos la opción que viene marcada por defecto.
Página 116
ROBOTS LEGO MINDSTORMS
Observamos que el nombre por defecto del botón es Command1 por lo que podemos
señalando el botón y situándonos en la ventana de propiedades para cambiar el nombre.
Página 117
ROBOTS LEGO MINDSTORMS
(Name): nombre a través del cual nos referiremos al botón en la hoja de código.
Una vez que tenemos los objetos dispuestos en el formulario, nos dispondremos a
escribir el código de cada objeto. Para ello podemos comenzar por el botón “parada”.
Página 118
ROBOTS LEGO MINDSTORMS
A través de “spirit1” nos referimos al componente para manejar lego que hemos visto
anteriormente, seguido del “.” Y después nos referimos a la propiedad “CloseComm” , la cuál
se encarga de cerrar el puerto de comunicaciones.
A continuación hacemos doble click en el formulario, para que nos aparezca el código
correspondiente al iniciar nuestro programa:
Página 119
ROBOTS LEGO MINDSTORMS
Nos mostrará el código asociado al objeto del botón “parada” y un nuevo código en la parte
superior, dentro del cual podemos escribir las instrucciones que queremos ejecutar al iniciar el
programa. A continuación introduciremos lo siguiente:
Posteriormente hacemos doble click en el botón inicio para incluir el código asociado
a ese botón cuando pinchemos sobre él. En el espacio correspondiente al código del objeto
“inicio” escribiremos lo que queremos que realice el robot mediante órdenes secuenciales.
Veamos un ejemplo con el siguiente código:
En el código anterior se aprecia el manejo de las propiedades “SetFwd”, “on”, “wait” y “off”,
dentro del objeto “Spirit1”
Página 120
ROBOTS LEGO MINDSTORMS
En el siguiente capítulo explicaremos la función de cada una de las funciones que puede
realizar el objeto de lego “spirit1” para manejar tanto las salidas (motores) , como las entradas
(sensores).
Con esta función configuramos los motores para que giren hacia atrás.
Página 121
ROBOTS LEGO MINDSTORMS
Esta función establece la potencia de los motores que pasemos como argumento. La
potencia puede tomar un valor de 0 a 7, siendo 7 el valor de la máxima potencia. Esto no
tiene efecto apreciable en la velocidad, pero si en la fuerza.
Con esta función configuramos el número y el tipo de sensor que es. El valor SENSOR puede
adquirir los siguientes valores: SENSOR_1, SENSOR_2 ó SENSOR_3.
A través de esta orden configuramos el modo a través del cual recibimos los datos de un
sensor determinado. El argumento NUMERO corresponde al número de sensor. El modo
puede tomar los siguientes valores:
Página 122
ROBOTS LEGO MINDSTORMS
El argumento SLOPE sólo se usa si hemos elegido el modo booleano, para cualquier otro
modo marcaremos 0 en el argumento SLOPE.
Devuelve a la variable el valor que proporciona el sensor. Para crear una variable en
el entorno visual basic seguiremos la siguiente orden:
Sentencia if:
Página 123
ROBOTS LEGO MINDSTORMS
Sentencia while:
A continuación modificaremos el código del objeto “inicio” con el fin de utilizar tanto los
sensores como los motores. Para ello incluiremos el siguiente código en el botón:
Con esta aplicación el robot se moverá hacia delante hasta que choque.
http://netwinder.osuosl.org/pub/misc/docs/mindstorms/pbrick.pdf
http://mindstorms.lego.com/sdk/default.asp
http://www.donosgune.net/2000/dokumen/VB_cast.zip
Página 124
ROBOTS LEGO MINDSTORMS
6.7. BrickOS
http://www.cygwin.com
gcc-2.95.2.tar.gz
binutils-2.10.1.tar.gz
legos-buildgcc.zip (un script de configuración)
Es conveniente dejarlos en un subdirectorio. Una vez terminada la instalación, se debe
correr cygwin, se abrirá una ventana bash shell. Luego se debe descomprimir legos-
buildgcc.zip y correr el script. Este script instalara las herramientas gcc y binutils.
Luego debemos instalar BrickOS. El paquete debe ser descomprimido, lo cual creara un
directorio brickOS. Se debe entrar en este subdirectorio y escribir. /congure, esto buscara el
compilador Hitachi del lego. Luego se debe escribir make, con esto se configura toda la
herramienta, y se generan los binarios correspondientes. Si todo llega a buen termino, es
decir, sin errores, brickOS ya esta instalado. Por defecto BrickOS trabaja con el puerto serie,
en el caso se quiera trabajar con el puerto USB, deberemos realizar un par de pasos
adicionales. Primeramente debemos entrar al directorio útil escribir make strip, luego
debemos señalar que la vía de comunicación debe ser por el puerto USB, y esto se hace
configurando la variable RCXTTY, y se hace de la escribiendo export RCXTTY=USB, por
defecto tiene el valor COM1. De esta manera la configuración de BrickOS ha concluido, solo
resta transferir el firmware y transferir programas a los slot.
Cuando fue instalado brickOS, se generaron todos los binarios, y además se compilo el
archivo firmware que se encuentra en el directorio /boot tiene el nombre de “brickOS.srec”, y
unos programas de ejemplos que se encuentran en el directorio /demo, los cuales han sido
compilados para brickOS.
Página 125
ROBOTS LEGO MINDSTORMS
Lo que se debe hacer ahora es reemplazar el firmware estándar por el firmware BrickOS y
ello se lleva cabo escribiendo “./rmdl3../boot/brickOS.srec”, comenzara de esta manera el
puerto infrarrojo a transmitir los datos y la pantalla ira mostrando su porcentaje de
transferencia hasta llegar al 100%, esto tomara unos 3 o 4 minutos.
1. Motores
2. Sonido
3. Protocolo Comunicación IR
4. Botones
5. Indicador de Batera
6. Actualización del LCD
Página 126
ROBOTS LEGO MINDSTORMS
Entre las funciones básicas de BrickOS podemos destacar las de las de salida (output) y
las de lectura (input), que serán explicadas a continuación.
Funciones de Output, Motores y LCD: Para trabajar con el robot lego es necesario
controlar ciertos dispositivos para poder accionar y llevar a cabo operaciones sobre el
medio externo en que se desenvuelve el robot. Estos dispositivos son los Motores y el LCD.
Los Motores, son parte esencial en la construcción de un robot movil. Son los
dispositivos que proveen de cinemática al robot. El RCX posee 3 puertos de salida, los
puertos A, B, C, es decir, un robot construido con un RCX podrá tener el control de hasta 3
motores. Para el manejo de los motores brickOS puede controlar la Dirección y la
Velocidad. Para ello provee las funciones motorXdir y motorXspeed.
void manejo_de_motor() {
int velocidad;
velocidad=0;
while (velocidad<MAX_SPEED) {
motor_a_speed(velocidad);
motor_c_speed(velocidad);
lcd_int (velocidad);
lcd_refresh();
motor_a_dir (fwd);
motor_c_dir (fwd);
Página 127
ROBOTS LEGO MINDSTORMS
msleep(500);
velocidad +=20;
int main() {
cputs("brake");
lcd_refresh();
motor_a_speed(brake);
motor_c_speed(brake);
sleep(3);
manejo_de_motor();
cputs("off");
lcd_refesh();
motor_a_speed(off);
motor_c_speed(off);
sleep(3);
return 0;
El LCD es la pequeña pantalla que posee el RCX la cual puede mostrar hasta 5 caracteres
y símbolos de conexión para cada uno de los puertos. BrickOS permite trabajar directamente
con el LCD, por esto dispone de variadas funciones para mostrar diversos tipos de datos, las
más comunes son:
lcdint(int X), para mostrar el valor entero X, valores entre -9999 y 9999.
cputw(unsigned int X), para mostrar valores hexadecimal entre el rango 0 y 65535.
dlcdshow() y dlcdhide(), función de bajo nivel para mostrar u ocultar los brazos de la
figura humana que aparece en el LCD al encenderlo.
Por otra parte también debe ser mencionada la LegoLamp, o lámpara de luz, la cual es
manejada de la misma manera que los motores, pero ahora la velocidad toma el sentido
como el valor de la intensidad de la luz que emite la legoLamp.
Página 128
ROBOTS LEGO MINDSTORMS
if (TOUCH_1) {
dlcd_show (LCD_ARMS); }
El Sensor de Luz, es un dispositivo capaz de emitir y recibir luz. Sus valores procesados
se acceden por medio de la macro LIGHT_X, donde X pueden ser cualquiera de los puertos
de lectura. Los valores brutos son escalados a un rango de enteros más pequeños para luego
normalizarlos a porcentajes. Este sensor además, posee dos modo de trabajo: modo pasivo
(para detectar luz) y modo activo (emite y recibe luz). En modo activo los valores brutos van
desde 50 a 300, se debe inicializar con la función ds_active(&SENSOR_X). En modo pasivo,
los valores brutos van desde 220 a 280, se debe inicializar con la función
ds_pasive(&SENSOR_X).
Página 129
ROBOTS LEGO MINDSTORMS
Ejemplo de uso:
int main(){
while(1) {
http://pantuflo.escet.urjc.es/faqs/faq-de-robotica
http://bulunga.dat.escet.urjc.es/~acmlux/documentacion/x258.html
http://www.euskalnet.net/kolaskoaga/programz/bricko_c.htm
Página 130
ROBOTS LEGO MINDSTORMS
6.8. Interactive C
Se puede utilizar tanto con el RCX de LEGO como con el Handy Board del MIT (hay algunas
diferencias en las funciones a utilizar en uno u otro).
Hay versiones para trabajar sobre Linux, MacOS y Windows. La versión 4 de este programa
es de libre uso.
Para su explicación nos remitimos al “The Interactive C Manual for the Handy Borrad”
http://www.euskalnet.net/kolaskoaga/programz/ic_c.htm
http://www.newtonlabs.com/ic/ic_toc.html
http://www.botball.org/educational-resources/ic.php
Página 131
ROBOTS LEGO MINDSTORMS
6.9. LegOs
6.9.1. INTRODUCCIÓN
LegOS es un sistema operativo libre diseñado para el LEGO Mindstorms, diseñado e
implementado fundamentalmente por Markus Noga. Comparado con el sistema operativo
original de LEGO, ofrece muchas ventajas además de mejores prestaciones y mayor
flexibilidad.
Semáforos POSIX.
Permitir el uso completo del lenguaje de programación elegido, como por ejemplo C.
Lo cual implica que se pueden usar punteros, estructuras de datos, etc.
Página 132
ROBOTS LEGO MINDSTORMS
Ejemplo 1.
#include <conio.h>
#include <unistd.h>
#include <dsensor.h>
#include <dmotor.h>
while(1) {
/* arranco
- Fijo velocidad*/
motor_a_speed(MAX_SPEED);
motor_c_speed(MAX_SPEED);
/* - Avanzo*/
motor_a_dir(fwd);
motor_c_dir(fwd);
/* Espero */
wait_event(&colision,0);
/* Me apunto en que lado fue la colisión*/
if(SENSOR_1<0xf000)
dir=0;
else
dir=1;
/* reculo */
motor_a_dir(rev);
motor_c_dir(rev);
motor_a_speed(MAX_SPEED);
motor_c_speed(MAX_SPEED);
Página 133
ROBOTS LEGO MINDSTORMS
lcd_refresh();
/* Los sensores están conectados a los puertos 1 y 2 */
return SENSOR_1<0xf000 || SENSOR_2<0xf000;
}
Ejemplo 2.
#include <conio.h>
#include <unistd.h>
#include <dsensor.h>
#include <dmotor.h>
lcd_refresh();
motor_a_speed(MAX_SPEED);
while(1) {
motor_a_speed(MAX_SPEED);
motor_c_speed(MAX_SPEED);
motor_c_dir(fwd);
motor_a_dir(fwd);
wait_event(&colision,0);
if(SENSOR_1<0xf000)
dir = 0;
else
dir = 1;
motor_a_dir(rev);
motor_c_dir(rev);
Página 134
ROBOTS LEGO MINDSTORMS
msleep(500);
motor_a_speed(MAX_SPEED);
motor_c_speed(MAX_SPEED);
if(dir==1)
motor_c_dir(fwd); cputs("Izqda");
else
motor_a_dir(fwd); cputs("Drcha");
msleep(500); } }
La estructura del programa es equivalente al del NQC, pero en este caso sólo se utiliza una
tarea que espera en un bucle infinito a que se produzca un evento, la pulsación del sensor,
para realizar el giro. Se han añadido suficientes comentarios al código como para que no
merezca la pena entrar en más detalles de su descripción.
Además, alrededor del sistema operativo LegOS se han desarrollado múltiples herramientas
auxiliares, como por ejemplo simuladores que hacen más fácil la depuración al permitir
ejecutar programas en la propia plataforma de desarrollo usando un depurador tradicional de
Página 135
ROBOTS LEGO MINDSTORMS
GNU/Linux como por ejemplo gdb. Algunas de estas herramientas se analizan en la próxima
sección.
LegoSim
LegoSim es un simulador para legOS cuya principal virtud, que le diferencia de Emulegos
(descrito en la siguiente sección), es que el interfaz gráfico de usuario (GUI) se puede separar
del simulador propiamente dicho. Esta separación permite utilizar el GUI como unidad de
control no sólo como simulador, permitiendo por ejemplo, conectarlo a otros RCX vía infra-
rojos. Por supuesto, también permite ejecutar el GUI en una máquina distinta de la del
simulador.
El GUI es un applet de Java que se parece realmente al RCX. El simulador es sólo una
biblioteca (librería). Ambos componentes se relacionan mediante un conjunto de scripts en
Perl. El simulador es una biblioteca que reemplaza la parte de legOS que se enlaza con
cualquier aplicación en el proceso de compilación, generando una aplicación completa y
ejecutable en la máquina de desarrollo. En la simulación, las tareas (tasks) de legOS se
traducen en threads POSIX. Las entradas y salidas, que resultan vitales, se simulan mediante
cadenas de texto sobre stdin y stdout siguiendo una sintaxis particular.
LegoSim se distribuye bajo licencia MPL, es decir, es software libre. Sus diseñadores e
implementadores principales han sido Frank Mueller, Thomas Röblitz, y Oliver Bühn.
6.10. EmuLegOS
EmuLegOS es otro simulador de legOS. Su objetivo de diseño fue proporcionar un entorno
más confortable para probar y depurar programas. EmuLegOS es, en esencia, un conjunto de
código escrito en C++ que se puede compilar y enlazar junto con cualquier aplicación para
legOS, generando como resultado de ese proceso una aplicación que emula el
comportamiento de ese código al que tuviese si estuviese ejecutándose en un RCX real. El
nivel de programación o API (Application Program Interface) emula las rutinas de legOS. La
mayoría de legOS está implementado en EmuLegOS, incluyendo por ejemplo el soporte de
tareas, o la comunicación por infra-rojos.
Página 136
ROBOTS LEGO MINDSTORMS
EmuLegOS también permite que se emule el mundo real, proporcionando un lugar donde
insertar código que imite algunas de las características físicas del robot. Por ejemplo, se
puede incorporar un sensor de rotación que gire mientras un determinado motor virtual está
en marcha, o hacer que un sensor de colisión se active pasada una cantidad de tiempo desde
que se arrancó el motor.
Otra categoría de herramientas relacionadas con legOS son las que se pueden catalogar
como herramientas de terceras partes. Así por ejemplo, existen compiladores para legOS
accesibles vía Web, como el que se analiza en la siguiente sección.
Página 137
ROBOTS LEGO MINDSTORMS
6.11. WebLegos
Web-LegOS es un interfaz escrito en HTML para compilar programas escritos para el sistema
operativo legOS del LEGO Mindstorms RCX.
El uso de Web-LegOS es sencillo bastando con cortar y pegar un fichero fuente en una caja
de una página web, elegir el lenguaje de programación y seleccionar la forma en que se
quiere recibir el fichero que se genera. A continuación, con pulsar el botón de ``compilar'' se
produce el envío del fichero fuente y su compilación cruzada remota a legOS. El fichero
obtenido está en formato S-record (un formato diseñado para permitir la descarga de datos
desde un ordenador a otro diferente). Una vez que el fichero S-record se ha obtenido a
través del compilador web es posible descargarlo en el RCX utilizando el canal de infra-rojos
habitual.
6.12.1. Introducción
LeJOS es un sistema operativo basado en la TinyVM desarrollado por José Solorzano.
Actualmente leJOS está mantenido por Paul Andrews Jürgen Stuber. El lenguaje de
programación que utiliza es Java. Puedes descargarlo directamente desde su página oficial
http://lejos.sourceforge.net/
Con este API se puede desarrollar programas para el RCX bajo Java. Hay que instalar el JDK
(Java Development Kit) p.ej. de Sun y ya se puede utilizar las clases ofrecidos por lejOS.
Herramientas adicionales muy prácticas para programar bajo Java son el RCXDownload y el
RCXDirectMode.
firmdl: para descarga el sistema operativo al RCX del robot. Recuerda que es el primer paso
que debes hacer antes de ponerte a programar ya que por defecto el fabricante lo suministra
Página 138
ROBOTS LEGO MINDSTORMS
con su propio sistema operativo. (NOTA: si quitas las pilas durante un periodo de tiempo
largo, deberás volver a cargarlo con firmdl)
Recuerda que puedes automatizar el progreso mediante un archivo Makefile. Revisa los
ejemplos que trae el paquete leJOS, copia cualquier Makefile y ajústalo a tus necesidades.
Instalar el firmware
OJO: Esto sólo lo tendrás que hacer si el RCX no tenía pilas o se han quitado durante más de
1 minuto, con lo que el firmware se habrá borrado.
Para poder ejecutar programas leJOS en el RCX, primero hay que reemplazar el sistema
operativo LEGO© original con leJOS. Para ello:
Enciende el RCX
Ejecuta lejosfirmdl
El estado de la descarga se mostrará en la consola del sistema y en la pantalla del RCX; al
acabar, el RCX pitará dos veces y mostrará el nivel de voltaje de la batería
El puerto de infrarrojos del RCX (el panel oscuro frontal) está situado apuntando hacia la torre
USB.
Página 139
ROBOTS LEGO MINDSTORMS
import josx.platform.rcx.*;
/* Este programa, tras descargarlo, espera que pulses el botón RUN, tras lo
* muestra "world" (Por último, una breve espera y vuelve al sistema operativo).
*/
LCD.clear();
TextLCD.print ("hello");
Thread.sleep(2000);
TextLCD.print ("world");
Thread.sleep(2000);
Abre una consola, crea un directorio donde almacenar tus programas, y crea un fichero
HelloWorld.java copiando el texto mostrado anteriormente
Si los comandos lejosc o lejos no se encuentran, asegúrate de que la variable PATH está
correctamente configurada. Si las clases leJOS no se encuentran, revisa el valor de la
variable CLASSPATH.
Página 140
ROBOTS LEGO MINDSTORMS
En esta sección echaremos un vistazo más detallado a otra aplicación de ejemplo de leJOS
para discutir ciertos conceptos fundamentales. En este ejemplo se asume que el RCX tiene
conectado un motor en el puerto A, como en la figura:
import josx.platform.rcx.*;
// drive forward
Motor.A.forward();
import josx.platform.rcx.*;
Como con la mayoría de los programa Java (¡menos los applets!), el punto de arranque es el
método main(). In este caso, se declara la excepción InterruptedException porque el
método Button.RUN.waitForPressAndRelease() puede lanzarla. Al lanzar una
excepción, el RCX detiene la ejecución del programa y muestra un mensaje (bastante
críptico) en la pantalla.
Página 141
ROBOTS LEGO MINDSTORMS
TextLCD.print("DRIVE");
Muestra la cadena DRIVE en la pantalla del RCX, que, como habrás visto, es muy limitada (...
esto hace difícil la depuración de los programas en algunos casos...).
Motor.A.forward();
Este código pone en marcha el motor conectado al puerto A del RCX, hacia adelante
("forward" en inglés).
De nuevo, fíjate en que se está empleando una instancia estática de la clase Motor - para ser
más preciso, un miembro estático (llamado A) de la clase, que se refiere al "motor conectado
al puerto A". Como es lógico, los otros motores serían el B y el C.
Button.RUN.waitForPressAndRelease();
¿Para qué se usa esto? ¿Es que no está funcionando todavía el robot? La respuesta es: sí y
no. Si esta línea no estuviera:
Página 142
ROBOTS LEGO MINDSTORMS
6.12.4. Motores
La clase estática Motor representa a los actuadores, es decir, los dispositivos conectados a
alguno de los tres puertos de salida de color negro, situados debajo de la pantalla del RCX:
Motor.A
Motor.B
Motor.C
Así, una llamada típica para arrancar el motor A (hacia adelante) sería:
Motor.A.forward();
para mover el motor hacia adelante o hacia atrás, cambiar la dirección, hacerlo "flotar" (es
decir, dejarlo libre) o pararlo.
ajusta la potencia del motor, de 0 a 7 (esto no afecta mucho a la velocidad, a no ser que el
motor tenga carga).
Página 143
ROBOTS LEGO MINDSTORMS
Fíjate en que la dirección de giro real del motor (en sentido de las agujas del reloj, o al revés)
depende de cómo esté conectado al puerto: como se trata de motores de corriente continua,
cambiar la polaridad significa cambiar el sentido de giro.
6.12.5. Sensores
Los sensores son los sentidos del robot, que le permiten obtener un modelo perceptivo del
entorno y reaccionar a los eventos y situaciones según esté programado. Existen un montón
de sensores hardware disponibles para el RCX, todos los cuales se conectan a uno de los
tres puertos grises que hay sobre la pantalla del RCX:
De forma parecida a los motores, los tres puertos de los sensores se implementan como
atributos estáticos de la clase Sensor:
Sensor.S1
Sensor.S2
Sensor.S3
Así pues, una llamada típica para leer el valor del sensor sería:
Sensor.S1.readValue();
Otra posibilidad sería acceder a los puertos mediante el array estático Sensor[] que
contiene los tres sensores.
Configurar un sensor
Antes de leer datos de un sensor, primero hay que configurarlo, es decir, hay que indicar:
Página 144
ROBOTS LEGO MINDSTORMS
El modo edge tiene la peculiaridad de que mantiene los valores aunque se apague el RCX,
así que hay que recordar llamar a Sensor.setPreviousValue(0) para reiniciar la cuenta.
Al configurar el sensor, asegúrate de utilizar una combinación lógica del modo y tipo, o si no,
el valor no tendrá sentido.
Activar un sensor
Algunos sensores, como los de luminosidad, necesitan corriente para funcionar. La llamada al
método Sensor.activate() hace que el puerto en cuestión se "encienda", es decir, que
reciba corriente. La llamada opuesta para "apagar" el sensor es Sensor.passivate().
Página 145
ROBOTS LEGO MINDSTORMS
Leer un sensor
La forma más sencilla y directa de leer el valor de un sensor es usar uno de los métodos
read...():
que devuelven el estado del sensor o el valor que están midiendo, en el momento de llamar al
método. Recuerda que este valor depende del tipo y modo de sensor que se haya
configurado, según se vio anteriormente.
Sin embargo, en la mayoría de los casos, lo que interesa es recibir una notificación de cuando
un motor ea activado (de contacto, por ejemplo), o bien mida un cierto valor (en el caso, por
ejemplo, de sensores de luz). Para este propósito se emplean los manejadores de eventos:
Para escuchar un evento, la clase tiene que implementar el método public void
stateChanged(Sensor aSource, int aOldValue, int aNewValue) de la interfaz
josx.platform.rcx.SensorListener, donde los dos parámetros indican el valor antes y
después del cambio en la medida:
} // stateChanged()
} // class MySensorListener
Con esto, es posible añadir esta clase como un escuchador del sensor en cuestión:
Sensor.S1.addSensorListener(mySensorListener);
Así, cada vez que el sensor detecte un cambio en la medida, se ejecutará el método
stateChanged() de la clase MySensorListener.
Desde las primeras versiones de la plataforma leJOS, se vio que un sensor de proximidad
sería muy útil: así, el robot no tendría que chocar contra los objetos para detectar su
Página 146
ROBOTS LEGO MINDSTORMS
existencia con un sensor de contacto, sino que podría evitarlos usando un sensor de luz para
percibirlos.
Para ello surgió el sensor ProximitySensor, que no es una subclase de la clase Sensor
sino que se construye con uno de ellos. En el constructor del sensor de proximidad se indica
un umbral, un valor entero que define la separación con el objeto que hace que se active el
sensor: cuanto mayor es el valor, más se acerca el robot al objeto.
6.12.6. LCD
La pantalla de la parte superior del RCX es la única manera de mostrar mensajes
directamente al usuario, y es capaz de mostrar hasta 5 números o letras.
Página 147
ROBOTS LEGO MINDSTORMS
Existe una versión simplificada: la clase MinLCD, que contiene sólo public static void
setNumber(int aCode,int aValue,int aPoint) y refresh(), que ocupa menos
memoria.
Otra clase disponible es TextLCD, que ofrece métodos para escribir caracteres o cadenas de
hasta 5 letras:
6.12.7. Botones
El RCX tiene 4 botones:
Excepto el botón On/Off, los demás son accesibles con la API de leJOS. Como con el resto
de clases relacionadas con el hardware, los botones se implementan como métodos estáticos
de la clase Button:
Button.RUN
Button.PRGM
Button.VIEW
Otra posibilidad es acceder mediante el array Button[], que contiene VIEW, PRGM y RUN,
en este orden.
The main (and eventually the single) interaction the developer of leJOS programs is interested
in when referring to buttons is the event, when a user presses the button and - maybe even
more important - when he releases it.
Página 148
ROBOTS LEGO MINDSTORMS
try {
Button.RUN.waitForPressAndRelease();
} catch(InterruptedException e) {
Otra manera es emplear un evento para recibir una notificación de cuándo un usuario pulsa o
suelta un botón mientras que el programa está en ejecución. La clase manejadora tiene que
implementar los dos métodos:
de la interfaz josx.platform.rcx.ButtonListener.
} // buttonPressed()
} // buttonReleased()
} // class MyButtonListener
Así, cada vez que se apriete o suelte el botón RUN, se ejecutarán los métodos
correspondientes de la clase MyButtonListener.
Sonido
El RCX contiene un pequeño altavoz que puede generar sonidos simples, que se accede
mediante la clase estática Sound con la típica llamada:
Sound.beep();
Página 149
ROBOTS LEGO MINDSTORMS
OJO: Los sonidos se pueden usar como depuración de los programas, para controlar el punto
de ejecución, por ejemplo.
Timer (temporizador)
La clase Timer se utiliza para ejecutar tareas que dependan del tiempo, está contenida en el
paquete josx.util y funciona de forma similar a la clase javax.swing.Timer:
y llama a su método
Página 150
ROBOTS LEGO MINDSTORMS
import josx.platform.rcx.*;
import josx.util.*;
timer.start();
Button.RUN.waitForPressAndRelease();
// detener el temporizador
timer.stop();
} // main()
// sólo pitar
Sound.beep();
} // timedOut()
} // class TimerSample
Página 151
ROBOTS LEGO MINDSTORMS
- Paul Andrews Jürgen Stuber, José Solórzano, LejOs, W22 agosto del 2006, 7 de noviembre
de 2006, http://lejos.sourceforge.net.
Página 152
ROBOTS LEGO MINDSTORMS
Una herramienta muy útil a tal efecto es Lego Mindstorms, que desde su primera versión,
RCX, se ha consolidado como un medio efectivo para cubrir áreas de la enseñanza tales
como ciencia, tecnología, ingeniería o matemáticas; todo ello sin olvidar su evidente uso en el
mundo extra-académico como mero entretenimiento.
Actualmente con la nueva versión NXT, ayuda a alumnos desde 5 a 8 años a descubrir que la
ciencia también pude ser entretenida; desarrollando progresivamente sus habilidades
construyendo y programando simpáticos robots y motivándolos a investigar por sí mismos
poniendo en práctica lo aprendido en desarrollos anteriores. Para ello se ha dotado a Lego
Mindstorms de entornos de programación gráficos muy intuitivos y de gran cantidad de
modelos con ayuda paso a paso.
Sin embargo Lego Mindstorms también tiene salida fuera del entorno escolar (primaria y
secundaria) donde se emplean con diversos fines empleando entornos de programación más
sofisticados que potencian las capacidades de los robots.
No obstante en este caso nos centraremos en la vertiente educativa de los robots de Lego.
• Comprometer a los estudiantes con un problema relacionado con sus intereses y que se
abordará tecnológicamente.
Página 153
ROBOTS LEGO MINDSTORMS
recreaban combates o personajes del mismo. Se pudo observar como rápidamente los niños
se involucraron con el problema.
En otras ocasiones, con alumnos más mayores, se pudo comprobar lo contrario. Se hizo
construir a los alumnos un robot capaz de competir en dos pruebas simultáneamente: sumo y
seguimiento de una línea; se debía buscar un compromiso en las características del robot de
forma que, cumpliendo con las especificaciones dadas, el robot se comportase
correctamente en ambas pruebas. La complejidad de compaginar todos los requerimientos
hizo que gran parte del alumnado dejara de lado la prueba de seguimiento de la línea,
haciendo un robot mediocre en este sentido; y se dedicara a la prueba de sumo con un mayor
carácter competitivo.
• Habrá que cerciorarse que se entiende correctamente el problema. ¿Qué problema tratamos
de resolver? Sin embargo no se deberá desvelar al alumno todo aquello que deberá
descubrirse con su trabajo, tan sólo se les deberá guiar.
Para ello el profesor habrá de hacer preguntas que ayuden a los grupos a progresar y a que
exploren distintos caminos.
Del mismo modo el profesor deberá hacer notar de forma expresa que el diseño está abierto,
y por tanto hay múltiples soluciones "correctas" al problema, si bien habrán de ponerse de
manifiesto desde un principio las limitaciones que debemos tener en cuenta y no crear falsas
expectativas.
En cuanto al género de los grupos, cabe descacar algunos aspectos importantes referidos a
la enseñanza a niños de poca edad:
Los chicos tienen generalmente más experiencia construyendo cosas con Lego que las chicas
y a diferencia de estas, tienden a ponerse a construir antes de pensar qué es lo que
realmente están haciendo; ellas por su parte tienden a elegir cuidadosamente las piezas a
usar y se muestran más dispuestas a compartir sus ideas.
Un buen método para vencer estas diferencias se ha visto que es la elaboración de un plano
previo, aunque no termine siguiéndose, habrá servido para promover la organización dentro
del grupo.
Otra forma de trabajo que se ha empleado ha sido la de hacer inicialmente grupo de sólo
chicas y de sólo chicos. Se ha visto que esto da confianza a las chicas para que empiecen a
trabajar con Lego. Una vez que se conozca el estilo de trabajo de cada uno, los grupos
podrán hacerse mixtos.
En cuanto al trabajo cooperativo, como método de aprendizaje informal, podemos afirmar que
es algo fundamental, no sólo en el trabajo con robots o en la enseñanza; sino en el desarrollo
como persona de cara a un futuro, puesto que fomenta las capacidades de trabajo en equipo,
Página 154
ROBOTS LEGO MINDSTORMS
• Por último, y no menos importante habrá que hacer explícita, las matemáticas, la ciencia, u
otras ideas implícitas en el juego.
• Hacer que el alumno ponga de manifiesto sus conocimientos en un sistema real, observe su
comportamiento y busque alternativas para solucionar posibles eventualidades.
• Hacer que los alumnos se conviertan en sus propios maestros a través de la prueba y el
error.
El pasado 14 de Noviembre nos visitaron unos chicos del colegio Miguel Hernández y nos
hablaron, de su experiencia con Lego Mindstorms. Al día siguiente nos acercamos nosotros
los a fin de ver su trabajo más de cerca.
Según llegamos pudimos ver cómo un padre intentaba apuntar a su hijo en la actividad,
desafortunadamente, la demanda de las clases y la escasez de medios hacía imposible
que este nuevo alumno se pudiese integrar. Primera lección aprendida, en España
estamos a años luz de otros mucho países y lamentablemente si alguien quiere trabajar
con en estos temas (robótica etc), muy probablemente deba hacerlo en casa ante la falta
de organismos que fomenten ésta actividad. De hecho como comentó el grupo en su
visita a la universidad de Alcalá su centro es el único de toda España que imparte una
asignatura de este tipo, aun con carácter extraescolar.
Por esto mismo, ser los primeros, han tenido que empezar desde muy abajo.
Página 155
ROBOTS LEGO MINDSTORMS
Al parecer todo comenzó gracias a la afición a estos temas del por entonces miembro del
APA Fernando Gallego. En un viaje al extranjero comprobó lo integrado que estaba la
robótica en la enseñanza de otros países y desde entonces se propuso crear una
actividad extraescolar que fuese más allá del típico curso de ofimática que se imparte a
los alumnos.
Con un presupuesto inicial que no dio más que para comprar dos robots RCX, iniciaron
sus andaduras; y desde entonces gracias al esfuerzo de todos fueron ganando
competiciones, y empleando los premios en la compra de nuevo material de LEGO.
Actualmente, cuentan con un total de unos 20 kits que prueban en el aula en circuitos
construidos por ellos: laberintos, rampas, obstáculos de distinta índole que
identificar/esquivar etc
Actualmente están en la transición de los módulos RCX a NXT y el mayor problema para
los alumnos es el cambio de filosofía en la construcción de robots con NXT: mientras en
RCX todas las piezas eran bloques que encajaban perfectamente entre si, en NXT todo
funciona a base de elementos entrecruzados a modo de travesaños. Tardarán todavía
algún tiempo en acostumbrarse sobre todo teniendo en cuenta la forma de trabajo que
siguen: antes de nada se acostumbran a las piezas de los kits para saber todos sus
posibles usos, a continuación las organizan perfectamente en cajas según sus
funcionalidades.
- ¿A quienes va dirigida la actividad extraescolar? Actualmente hay dos grupos con niños
de niños de 6º, 1º y 2º de la ESO por un lado; y un poco más mayores por otro; para el
próximo año se pretende abrir un nuevo grupo para niños aún más pequeños.
Página 156
ROBOTS LEGO MINDSTORMS
- ¿Se limitan al uso de Lego? Lego les ofrece la posibilidad de montar y desmontar los
robots mil veces hasta que les quedan las cosas como ellos quieren (su forma de trabajar
es esa más que ponerse a pensar antes de hacer las cosas), esa es la gran ventaja. Sin
embargo para los alumnos más 'mayores' ya se les está quedando pequeño el mundo de
Lego puesto que, aunque hacen grandes diseños con Lego capaces de competir y ganar
a todo tipo de contrincantes de Lego; en otro tipo de competiciones los Lego no son
capaces de competir con los otros robots: No ofrece una relación resistencia-peso
suficiente entre otros actores. Esto hace que se estén moviendo al uso de DSPs y
estructuras más complejas de contrachapado para poder competir en certámenes
internacionales.
- ¿Con qué material cuentan? Aparte de los robots y sus cajas de piezas, y los circuitos,
cuentan con ordenadores conectados en red y un servidor de documentos. Para la parte
de montajes, disponen de soldador, taladro y sierra de calar.
- ¿Qué tal las competiciones a las que han ido? En España son el único grupo que se
dedique al trabajo con robots, sin embargo en todo tipo de países esto esta muy
avanzado. De sus experiencias nos cuentan que es muy divertido y gratificante el
contacto con otros grupos de desarrollo, especialmente con países occidentales, otro tipo
de países menos desarrollados como Irán etc al parecer hacen de su reconocimiento en
el campo de la robótica una forma de darse a conocer y por tanto imponen un secretismo
que les impide intercambiar conocimientos con ellos.
- El 82 % de estudiantes opina que construir un robot con Lego cumple con la labor de
diseño y construcción que se espera del uso de esta herramienta.
- Más del 77 % de los estudiantes está de acuerdo en que el trabajo con robots de
Lego les ayuda a pensar de forma crítica y a cooperar con sus compañeros para el
logro de los objetivos
[1] Peer Learning with Lego Mindstorms Ciarán Mc Goldrick, Meriel Huggard.
[2] The Qualitative Impact of Using LEGO MINDSTORMS Robots to Teach Computer Engineering Andrew B. Williams
Página 157
ROBOTS LEGO MINDSTORMS
- El 44% de los estudiantes que declaró que el proyecto de laboratorio de Robot LEGO
era eficaz en la enseñanza de ellos el programa de C. Otro el 44 % dijo que el
laboratorio de Robot LEGOabirmo que su eficacia era media.
- El 76% de los estudiantes dijo que los Robots LEGO eran eficaces o muy eficaces en
la enseñanza de sistemas integrados.
En España la primera diferencia puede ser la siguiente: mientras que la versión educativa
estará disponible en breve en castellano, la versión comercial no saldrá a la venta al no estar
prevista su traducción al Catalán, Gallego y Vasco.
Por otro lado, algo que parece que en un corto plazo de tiempo se resolverá es la
imposibilidad de utilizar con la versión comercial los sensores y motores del RCX, mientras
que con la educativa ya se puede hacer.
Página 158
ROBOTS LEGO MINDSTORMS
En las siguientes figuras se puede observar la evolución prevista del software de Lego.
En 2010, ‘LEGO Education’ ofrecerá su línea de productos que irán desde la escuela
elemental y primaria hasta el mundo real.
Página 159
ROBOTS LEGO MINDSTORMS
Básicamente los cambios consisten en que han desaparecido los modos de programación
Piloto e Investigador. Ahora sólo se dispone de un modo de programación que se
corresponde con el antiguo modo Programador .
El modo Piloto, era un modo dirigido al inicio en la programación con niños y niñas que se
inician en la programación. Era un modo en el que se iban ofreciendo nuevas instrucciones
con cuentagotas y en el que no se podían cometer errores. Era muy limitado pero facilitaba
una introducción a la programación muy amigable.
Página 160
ROBOTS LEGO MINDSTORMS
Todo ello redunda en una mayor velocidad a la hora de programar, ya que con un único
bloque podemos poner en movimiento un robot durante un tiempo determinado, cuando en
Robolab eran necesarios dos además del cableado. Por otra parte también resulta más fácil
desarrollar programas sin errores. En lo que sería la programación básica todos los
programas funcionan, hagan o no lo que deseábamos.
Este software nos permite saber en todo momento cuál es la posición de los motores y las
lecturas de los sensores mientras tengamos conectado el robot al ordenador ya sea por
Bluetooth o por USB. Ello es una gran ayuda en la programación ya que permite hacer
pruebas previas.
Ahora bien, si lo que tenemos en mente es el modo Programador de Robolab hay ciertas
pérdidas de funcionalidad, sobre todo para los usuarios avanzados. Quizá las más evidentes
son el uso de la cámara y tratamiento de imagen, el piano para composiciones musicales y el
control remoto vía Internet. Tampoco se pueden programar eventos ni establecer prioridades
entre tareas. Por otra parte el nuevo software no admite sensores genéricos como lo hacía
Robolab.
Teaching (with) robots in secondary schools some new and not-so-new pedagogical problems
Vassilios Dagdilelis, Maya Sartatzemi & Katerina Kagani
Página 161
ROBOTS LEGO MINDSTORMS
The qualitative impact of using LEGO MINDSTORMS robots to teach computer engineering.
Andrew B. Williams
http://www.lego.com/education/
Aula Robótica del APA del C.P. Miguel Hernández, 24 de septiembre 2006
http://complubot.educa.madrid.org/inicio.php?seccion=principal
Página 162
ROBOTS LEGO MINDSTORMS
8. Competiciones LEGO
El diseño, la construcción y la programación de los robots son una actividad perfecta para la
competición. ¿Se comportará el robot como esto debería? ¿Cómo puede esto funcionar más
con exactitud, rápidamente, y más sofisticadamente? A los niños les gusta éste tipo de
desafíos y sobretodo si les lleva a competir contra otros.
Las competiciones son organizadas por organizaciones no lucrativas y financiadas por los
patrocinadores que desean promover la participación de niños en la ciencia y la tecnología.
Uno de los precursores es la PRIMERA Liga LEGO, FLL, en 1998. Otras competiciones,
como la Olimpíada de Robot Mundial, WRO, han atestiguado un aumento dramático de la
participación de forma que en 2005, tan sólo un año después de su creación, ya había
inscritos más de 3700 equipos.
Hoy en día existen centros de LEGO MINDSTORMS en países como los EE.UU., Singapur,
Japón, Noruega, Suecia, Dinamarca, Irlanda, Alemania y el Reino Unido encargados de dirigir
jóvenes en distintos temas del campo de la robótica.
www.firstlegoleague.com
La FIRST Lego League (conocida por su acrónimo FLL) es una competición dirigida a
estudiantes entre 9 y 14 años, organizada por la FIRST (r For Inspiration and Recognition of
Science and Technology, también organiza la competición de robótica FRC). Cada año se
centra en un tema relacionado con la ciencia, y cada equipo debe presentar diseños acorde a
el. Por ejemplo, en el año 2006, el tema era la nanotecnología, y debían de construir robots
relacionados con situaciones tan dispares como la informática a la medicina. Deberán pasar
diferentes clasificaciones, donde podrán entrar en contacto con los otros equipos, y compartir
conocimientos e ideas.
Página 163
ROBOTS LEGO MINDSTORMS
Los equipos participantes en la FLL usan Lego Mindstorms kits para construirse pequeños
robots autónomos para construir su proyecto. La organización de la competición tiene un
acuerdo con la compañía de LEGO.
Hay cuatro fases en la competición. En la primera, los participantes deben pasar por un
jurado, demostrando su trabajo en equipo. En la segunda deben demostrar que el robot que
han construido está diseñado adecuadamente a las restricciones impuestas. En la tercera
parte los estudiantes deben desarrollar un proyecto sobre un tema concreto, y deben
presentarlo a un jurado. Finalmente, los estudiantes deben usar los robots diseñado para
competir en la cancha.
Los estudiantes tienen ocho semanas para trabajar en su robot. Una vez construido deberán
presentarlo a las competiciones locales, de dónde se podrán clasificar a las regionales,
estatales y a la final mundial. El año pasado, de los 80.000 estudiantes que se presentaron de
todo el mundo organizados en 7000 equipos llegaron a la final 82 equipos, que se celebró en
Atlanta.
Éste año también se va a celebrar una prueba clasificatoria en España, el día 17 de diciembre
de 2006 en CosmoCaixa en Barcelona.
Página 164
ROBOTS LEGO MINDSTORMS
8.2. Robocampeones
www.robocampeones.com
Robocampeones sin embargo, presenta la tecnología como algo vistoso y divertido. Además,
al plantearse en formato concurso, el aliciente de la competición lo hace más emocionante y
atractivo.
En la prueba sólo se pueden usar exclusivamente robots construido con LEGO, aunque
excepcionalmente se permite el uso de algún sensor o adorno casero.
El propósito de esta prueba es construir un robot capaz de seguir una línea de forma que
pueda coger y transportar dos latas de refresco de un extremo a otro de la línea. Gana aquel
robot que lo haga en el menor tiempo posible.
El propósito de esta prueba es realizar un pequeño partido de fútbol entre dos equipos
formados por dos robots móviles cada uno, mediante el uso de un campo y pelota de juego
especiales que permitan la orientación de los robots y la localización de la pelota en todo
momento.
Página 165
ROBOTS LEGO MINDSTORMS
9. ROBOTS Lego
Una vez estudiados los robots LEGO, tanto su mecánica cómo su programación, veremos
ejemplos prácticos de robots construidos con LEGO, dónde se puede ver toda su potencia.
http://www.telepresence.strath.ac.uk/jen/lego/demag_crane.htm
¿Cuál es el modelo real y cuál es el modelo LEGO? Tal es la potencia de Mindstorms, que
cualquier diseño que uno se proponga es posible.
En éste ejemplo se ha construido con LEGO una fiel reproducción de la grúa modelo Demag
AC535.El modelo en Lego pesa 3,6kg. Sólo nos centraremos en cómo se han construido los
elementos mecánicos más importantes con LEGO.
La dirección:
Página 166
ROBOTS LEGO MINDSTORMS
La suspensión:
La configuración del eje delantero permite hasta una inclinación de 18º sin que el vehículo se
incline.
Apoyos
Se usan para estabilizar a la grúa cuando levanta grandes cargas, pues se aumenta la
distancia entre los puntos de apoyo y el centro de masas, aliviando el peso sobre las ruedas,
y nivelando la grúa
Página 167
ROBOTS LEGO MINDSTORMS
Ruedas motrices:
Para mover la grúa, se utilizan dos motores de LEGO, a la salida de los dos motores se
conecta una reductora con una relación 9:1 lo que permite una gran tracción a baja velocidad.
El movimiento se transmite a las dos ruedas trasera, para tener mayor agarre y poder circular
por los terrenos más difíciles.
Brazo grúa
En éste caso se puede ver un ejemplo de cómo se pueden modificar los componentes de
LEGO, para adecuarlos a las necesidades del robot.
Piezas de LEGO a las que se las han añadido roscas para poder controlar el tornillo.
Página 168
ROBOTS LEGO MINDSTORMS
Para construir el brazo de la grúa, se ha utilizado un tornillo sinfín. El movimiento del motor
hace girar el tornillo, que con su movimiento hace que se eleve el brazo de la grúa.
Página 169
ROBOTS LEGO MINDSTORMS
Partes de la fotografía:
-Pinza azul: Se encargará de rotar el cubo, con giros 90º, tanto a izquierda como a derecha.
Además, deberá sujetar firmemente la fila central del cubo para evitar giros. Para ello lleva
motores LEGO, uno para la pinza, y otro para la rotación.
-Pinza amarilla y verde: Encargas del giro de las piezas del cubo.
-Cámara de vídeo: Cámara Logitech (muy similar a la que viene con LEGO).Conectada al PC
para el procesado de imágenes.
-Una vez posicionado el cubo, el RCX deberá conocer el estado inicial del cubo. Para ello,
mandará órdenes a las tres pinzas para que vayan girando al cubo, de forma que sus seis
caras puedan ser escaneadas por la cámara.
Página 170
ROBOTS LEGO MINDSTORMS
-Se posiciona una cara delante de la cámara, la cámara la graba, y manda la información a un
PC. El ordenador se encarga de procesar la imagen y de detectar los colores, mediante el
siguiente programa (escrito por el diseñador del robot)
Una vez que el programa ha detectado correctamente el color de cada ficha, envía la
información, guardad en una matriz, al RCX, vía transmisor de infrarrojos.
-Una vez que el RCX ha obtenido la información, y sabe que color hay en cada cara, aplica el
algoritmo de Herbert Kociemba (que resuelve el cubo en menos de 40 rotaciones).
-Para conseguir el giro de una cara. La pinza azul atrapa fuertemente el cubo, y las pinzas
amarillas y verdes se encargan del giro de las caras.
Página 171
ROBOTS LEGO MINDSTORMS
http://electricbricks.com/
http://www.juguetronica.com
Página 172
ROBOTS LEGO MINDSTORMS
Página 173