Manual de Usuario RCX
Manual de Usuario RCX
SISTEMAS ROBOTICOS
LABORATORIO DE MINI-ROBOTICA
ENR IQ UE DÍAZ DE LEÓN S/N C OL. PASEOS DE LA MONTAÑA, LAGOS DE MORE NO , J ALISCO .
TEL. Y F ax: +52 (474) 742 36 78, 742 43 14 F ax ext. 6527
[Link]
1
2
Contenido
I.- Introducción
II.- Generalidades
III.- Partes que lo componen
IV.- RCX
V.- Sensores
VI.- Estructuras Básicas
VII.- Lenguajes de Programación
VIII.-Uso de la Cámara Web
IX.- Prácticas Propuestas
Lenguaje ROBOLAB
1.- Movimiento hacia adelante
2.- Ajuste de posición
3.- Movimiento y paro mediante sensor de tacto
4.- Movimiento y paro mediante sensor de temperatura
5.- Movimiento y paro mediante sensor de luz
6.- Movimiento y paro mediante sensor giro
7.- Ciclos repetitivos
8.- Seguidor de línea
9.- Uso de la Cámara
10.- Esquivar obstáculo mediante el uso de la cámara
Lenguaje NQC
11.- Movimiento hacia adelante y atrás
12.- Ciclo repetitivo
13.- Haciendo espirales
14.- Control y Lógica
15.- Sensor de tacto
16.- Sensor de temperatura
17.- Sensor de proximidad
18.- Sensor de luz
19.- Rutinas y Subrutinas
20.- Seguidor de línea
X.- Referencias
3
Introducción
4
Generalidades
Cada kit trae consigo un listado de piezas, dentro de las cuales destacan, el
cerebro RCX, dos motores, sensor de contacto, sensor de luz, sensor de
temperatura, lámpara, cables, torre usb de conexión mediante infrarrojos y el resto
son piezas tales como engranes, ruedas, ejes, y coples.
5
RCX
El cerebro RCX es alimentado por 6 baterías AA de 1.5 v (no incluidas).
Tiene 3 puertos para conectar los motores (A, B y C) y 3 puertos para conectar los
sensores (1, 2, y 3). También tiene una ventana para conexión mediante IR, para
comunicarse con otro RCX o con la PC y descargar de esta manera los programas
generados.
El RCX tiene su pantalla display y además cuenta con 4 botones:
VIEW: negro
(Este botón sirve para tomar las lecturas
de los sensores)
ON OFF: rojo
(Este botón sirve para seleccionar y
también es para el encedido)
PRGM: gris
(Este botón permite seleccionar los
programas que se encuentran en la
memoria del RCX)
RUN: verde
(Este botón sirve para ejecutar los
programas seleccionados)
Sensores
Una de las partes fundamentales de la Robótica son los sensores ya que
es mediante estos elementos que el sistema entra en contacto con el mundo
exterior y permite al programador desarrollar respuestas a partir de las señales
adquiridas. A continuación se muestra imagen y breve descripción del
funcionamiento de cada uno de los sensores.
6
7
Estructuras Básicas
8
Es importante señalar que debes colocar las pilas (previamente cargadas)
antes de montar el RCX ya que se evitará el tener que desarmar y armar la
estructura.
9
10
11
Lenguajes de Programación
Para programar los RCX abordaremos dos tipos de lenguajes, el visual del
mismo nombre (ROBOLAB), basado en una plataforma LabVIEW, y el de código
con base en C++.
ROBOLAB:
El software LEGOMR RCX permite generar programas de una forma
bastante fácil y amigable, ya que mediante un entorno visual podemos establecer
una línea de comandos visuales (íconos) y definir especificaciones para cada uno
de ellos.
Cuenta con 2 clasificaciones Programador e Investigador. En Programador
se tienen dos niveles de avance, Piloto e Inventor, cada uno con 4 niveles internos
con ejemplos. En Investigador también se cuenta con 5 niveles de programción.
Además permite formar ciclos y condiciones a partir de las señales
obtenidas por los sensores, para así poder controlar el comportamiento de los
motores. Puedes manejar funciones lógicas.
Motor A, giro Dar vuelta al motor RCX puerto A, encendido en la dirección contraria
hacia atrás en poder máximo.
12
Salidas especificas
Lámpara Encender la lámpara, por defecto - todos los puertos, nivel 5 de la energía.
Giro hacia delante Girar el motor, por defecto - todos los puertos, nivel 5 de la energía.
de motor
Espera para el empuje Esperar hasta que sensor del tacto se empuja hacia adentro, por
defecto - entrar el puerto 1.
13
Esperar hasta que sensor del tacto sea lanzado, por defecto -
La espera para dejar ir entrar el puerto 1.
Esperar hasta que el sensor de luz lee un valor que sea más
Espera para la luz brillante que el número especificado, por defecto =55, puerto
entrada 1.
Esperar hasta que el sensor de luz lee un valor que sea más
Espera para la
oscuro que el número especificado, defecto =55, puerto de
obscuridad entrada 1.
Esperar el sensor de luz para leer un valor que sea mayor que el
Espera para más valor actual. Por defecto – entrada en el puerto 1,el aumento del
brillante valor de luz es de 5.
Esperar el sensor de luz para leer un valor que sea menos que
Espera para más oscuro valor actual. Por defecto – entrada en el puerto 1,la disminución
del valor de luz es de 5.
Esperar hasta que el valor del sensor del ángulo es mayor que
Espera para la rotación el número de las rotaciones especificadas (en 16ths de una
Sin reajuste rotación) en cualquier dirección. Este programa no pondrá a
cero el sensor cada vez.
Esperar hasta que el valor del sensor del ángulo es mayor que
Espera de RCX para el número de las rotaciones especificadas.
Por defecto - 16 (una rotación) encendido puerto 1 de la
Rotación
entrada.
14
Espera para el ángulo Esperar hasta que el valor del sensor del ángulo es mayor
que el ángulo especificado (en cualquier dirección).Por
defecto - 180 grados encendido motor 1 de la entrada.
Espera para el correo Esperar hasta que el correo recibido de otro RCX es igual
al número especificado. Por Defecto - cualquiera
número entero.
15
Valor del envase rojo El valor del envase rojo.
Música
Sub-menu de la música Los iconos en este sub-menu especifican cómo las notas
musicales deben ser escuchadas.
Nota C de la música Reproduce la nota musical en el RCX. Por defecto - cuarta nota
en la escala estándar.
Resto
Insertar pausa en la música.
Duración musical Especifica la duración de tiempo para reproducir una nota.
Carga el archivo de texto. Esta rutina agregará las notas musicales actualmente en un
archivo en tu programa de inventor.
16
Estructuras - lazos
Sub-menu de los lazos Los iconos en este sub-menu especifican donde los lazos del
programa comenzarán y terminarán.
Comienzo del lazo Comenzar una estructura del lazo. Por defecto - lazo dos veces.
Lazo del tacto Comenzar un lazo que se repita mientras que el sensor del tacto
sea empujado.
Colocar mientras que el Comienza un lazo que repita mientras que el valor del sensor de
sensor de la cámara la cámara fotográfica es mayor que
un número especificado.
fotográfica es
Mayor que
Colocar mientras que el Comienza un lazo que repita mientras que el valor del sensor de
sensor de la cámara la cámara fotográfica es menor que un número especificado.
fotográfica es
Menor que
Fractura de la tarea Comenzar una nueva tarea con este comando de funcionar
tareas de función múltiples simultáneamente.
Sub-menu de las
Los iconos en este sub-menu especifican donde el programa
bifurcaciones
elegirá entre dos trayectorias y donde se combinará otra vez.
Bifurcación del sensor de la Elegir una trayectoria dependiendo de si el valor del sensor de la
cámara fotográfica cámara fotográfica es mayor que o menor-que un número
especificado.
Si el sensor de la cámara fotográfica es mayor que el
valor especificado, el programa seguirá la secuencia
superior.
Si el sensor de la cámara fotográfica es menor que el
valor especificado, el programa seguirá la secuencia
inferior.
17
Bifurcación al azar Hacer que el programa elija entre una de dos
trayectorias aleatoriamente.
Estructuras – subrutinas
Crear la subrutina Crear una nueva subrutina. La subrutina no funcionará en este
punto del programa. Funcionará cuando el programa alcanza
el icono del funcionamiento de la subrutina.
Correr la subrutina
Especificar donde funciona la subrutina en el programa.
Envase
Los iconos en este sub-menu manipulan los envases (las
variables) y los valores dentro de ellos.
Sub-menu del envase
Agregar un número al envase. Por defecto - agregar 1 al
Agregar al envase envase rojo.
Envase del valor del contador de Fijar al envase el valor del contador de tiempo. Por
tiempo defecto-fijar el envase rojo al valor del contador de tiempo
rojo.
Envase del registro del Fijar el envase a una copia del registro del pedacito de los
acontecimiento acontecimientos acertados para la tarea actual.
18
Reajuste
Reajustar el Sub-menu Los iconos en este sub-menu reajustaron los envases, los
contadores de tiempo, y los sensores a cero.
Vaciar el envase Reajustar el valor del envase a cero. Por defecto - fijar el
envase rojo a cero.
Sensor del tacto Recoger una cuenta de presión del sensor del tacto.
Sensor de temperatura
Recoger los datos del sensor de temperatura.
Adaptador del sensor Recoger los datos del adaptador del sensor.
19
1 sec Fijar la tarifa del muestreo a 1 segundo entre cada punto de
referencias.
Intervalo de la registración
Fijar la tarifa del muestreo al intervalo usuario-especificando
de datos el tiempo entre cada punto de datos.
Intervalo basado en Recoger los datos cada vez que se lanza el sensor del tacto.
sensores del tacto
Muestreo del tacto Capturar los datos cada vez que se presiona el sensor del
tacto.
20
Registración de datos – investigador nivel 4
Sub-menu del investigador Los iconos en este sub-menu controlan la operación de las
funciones de la registración de datos del RCX.
Inicializar la registración del Inicializar la toma de datos del sensor de luz y configura
ajustes de la registración de datos. Por defecto
sensor de luz
ajustes: sensor en el puerto 1, datos del sistema rojo.
Inicializar la registración del Inicializar la toma de datos del sensor de tacto y configura
sensor de tacto ajustes de la registración de datos. Por defecto ajustes: sensor
en el puerto 1, datos del sistema rojo
Inicializar la registración del Inicializar la toma de datos del sensor de rotación y configura
sensor de rotación ajustes de la registración de datos. Por defecto ajustes: sensor
en el puerto 1, datos del sistema rojo
Inicializar la registración del Inicializar la toma de datos del numero de tecleos del sensor del
sensor de tecleo tacto y configura ajustes de la registración de datos. Por defecto
ajustes: sensor en el puerto 1, datos del sistema rojo
Comenzar la registración de
datos con Tecleos Comenzar a capturar o los datos y los tecleos de registración
cada vez que se toma un punto de referencia.
21
Programa Ejemplo:
Programa Ejemplo:
CAMBIO DE DIRECCIÓN
De esta forma pueden irse generando programas y tareas cada vez más
complejas.
22
NQC: Lenguaje en código basado en el NBC que corren sobre C++, será
necesario el software BricxCC para poder compilar y guardar con la extención
correspondiente (*.nqc)
En la ventana del BricxCC podremos generar el código y compilarlo para
ver que no tenga errores en la sintaxis, también podemos seleccionar el puerto en
el cual debe buscarse el cerebro RCX para cargarle el programa correspondiente.
task main()
{
OnFwd(OUT_A);
OnFwd(OUT_C);
Wait(400);
OnRev(OUT_A+OUT_C);
Wait(400);
Off(OUT_A+OUT_C);
}
23
Programa Ejemplo: Movimiento hacia adelante, y hacia atrás *
task main()
{
SetPower(OUT_A+OUT_C,2);
OnFwd(OUT_A+OUT_C);
Wait(400);
OnRev(OUT_A+OUT_C);
Wait(400);
Off(OUT_A+OUT_C);
}
24
En caso de generar algun error, se mostrará como en la siguiente pantalla:
Sensores.-
Hay tres sensores que internamente están numerados 0, 1 y 2. Puede crear
confusión ya que externamente son 1, 2 y 3. Por esto están definidos como
SENSOR_1, SENSOR_2 y SENSOR_3.
Tipos y Modos.-
Los puertos de los sensores son capaces de recibir diferentes tipos de sensores,
así que deberá indicarse en el programa el tipo de sensor que está conectado a
cada puerto.
25
SENSOR_TYPE_TEMPERATURE Sensor de Temperatura
SENSOR_TYPE_LIGHT Sensor de Luz
SENSOR_TYPE_ROTATION Sensor de Rotación
26
SensorType(n): indica el tipo de configuración del sensor n.
SensorMode(n): indica el modo actual del sensor.
SensorValueBool(n): indica el valor booleano del sensor nfija el tipo de sensor.
SensorValueRaw(n): indica el valor bruto del sensor n.
SetSensorLowerLimit(valor): fija el valor mínimo del sensor de luz. (El valor
puede ser una expresión)
SetSensorUpperLimit(valor): fija el valor máximo del sensor de luz. (El valor
puede ser una expresión)
SetSensorHysteresis(valor): fija el valor de histéresis del sensor de luz. (El valor
puede ser una expresión)
CalibrateSensor( ): lee el valor actual del sensor de luz.
Funciones básicas.-
Modo Significado
OUT_OFF La salida está apagada (el motor no puede girar)
OUT_ON La salida está encendida (el motor puede funcionar)
OUT_FLOAT El motor seguirá girando hasta detenerse por si solo
Dirección Significado
OUT_FWD El motor gira hacia adelante
OUT_REV El motor gira hacia atrás
OUT_TOGGLE El motor invierte el sentido de giro
Otras funciones.-
On(salidas): enciende la salida indicada.
Off(salidas): apaga la salida indicada.
Float(salidas): convierte las salidas en flotantes.
Fwd(salidas): activa las salidas hacia adelante.
27
Rev(salidas): activa las salidas hacia atrás.
Toggle(salidas): cambia la dirección de las salidas.
OnFwd(salidas): arranca las salidas.
OnRev(salidas): igual a OnFwd pero en la dirección opuesta
OnFor(salidas, tiempo): enciende las salidas durante un tiempo determinado.
Sonido.-
PlaySound(sonido): toca uno de los 6 sonidos preestablecidos para RCX. El
argumento sonido debe ser una constante. Las siguientes constantes son
pre-definidas para usarse con PlaySound: SOUND_CLICK,
SOUND_DOUBLE_BEEP, SOUND_DOWN, SOUND_UP,
SOUND_LOW_BEEP, SOUND_FAST_UP.
PlayTone(frecuencia, duración): toca un tono simple para la frecuencia y duración
indicada.
Display LCD.-
Modo Contenido del LCD
DISPLAY_WATCH Muestra el reloj del sistema
DISPLAY_SENSOR_1 Muestra el valor del sensor 1
DISPLAY_SENSOR_2 Muestra el valor del sensor 2
DISPLAY_SENSOR_3 Muestra el valor del sensor 3
DISPLAY_OUT_A Muestra la configuración de la salida A
DISPLAY_OUT_B Muestra la configuración de la salida B
DISPLAY_OUT_C Muestra la configuración de la salida C
28
SelectDisplay(modo) Selecciona un modo de display.
Comunicaciones.-
ClearMessage(valor,precisión) Borra el buffer de mensajes.
SendMessage(mensaje) Envía un mensaje por infrarrojos. Mensaje puede ser
una expresión, pero el RCX sólo puede enviar mensajes con un valor entre 0
y 255, por lo tanto sólo los 8 bits menores del argumento serán usados.
SetTxPower(potencia) Establece la potencia para la transmisión de infrarrojos.
Temporizadores.-
ClearTimer(n) Pone a cero el temporizador especificado.
Timer(n) Devuelve el valor actual del temporizador especificado (con una
resolución de 100 ms).
Contadores.-
ClearCounter(n) Pone a cero el contador n. n tiene que ser 0 ó 1 para el Scout, 0-
2 para el RCX2.
IncCounter(n) Incrementa el contador n en 1. n tiene que ser 0 ó 1 para el Scout,
0-2 para el RCX2.
DecCounter(n) Decrementa el contador n en 1. n tiene que ser 0 ó 1 para el
Scout, 0-2 para el RCX2.
Counter(n) Devuelve el valor del contador n. n tiene que ser 0 ó 1 para el Scout,
0-2 para el RCX2.
Registro de datos.-
CreateDatalog(tamaño) Crea un registro de datos del tamaño especificado (que
debe ser constante). Un tamaño de 0 elimina el anterior sin crear uno nuevo.
AddToDatalog(valor) Añade el valor, que puede ser una expresión, al registro de
datos. Si el registro de datos está lleno la llamada no tiene efecto.
UploadDatalog(comienzo, contador) Inicia y transmite un número de datos igual a
contador, comenzando por el valor de comienzo. Este comando no es muy útil ya
que el ordenador es el que normalmente comienza la transmisión.
Características generales.-
Wait(tiempo) Hace parar una tarea durante un tiempo especificado (en
centésimas de segundo). El argumento tiempo puede ser una expresión o una
constante.
StopAllTasks( ) Detiene todas las tareas que están ejecutándose. Esto hará parar
el programa completamente, por lo tanto, cualquier comando que siga a éste será
ignorado.
Random(n) Devuelve un número aleatorio entre 0 y n. n debe ser una constante.
SetSleepTime(minutos) Establece el numero de minutos (que debe ser constante)
que estará activo hasta que se duerma. Especificando 0 minutos deshabilita esta
29
opción.
SleepNow(n) Fuerza a que se duerma. Sólo funciona si el tiempo para que se
duerma no es cero.
Instrucción Descripción
while (cond) cuerpo Ejecuta el cuerpo cero o más veces mientras la condición
es verdadera
do (cuerpo) while (cond) Ejecuta el cuerpo cero o más veces mientras la condición
es verdadera
until (cond) cuerpo Ejecuta el cuerpo cero o más veces hasta que la condición
sea verdadera
break Salir dell cuerpo de un while/do/until
continue Saltarse la siguiente iteración del cuerpo de un
while/do/until
repeat (expresión) cuerpo Repetir el cuerpo un número determinado de veces
if (cond) acción1 Ejecuta acción1 si la condición es verdadera.
if (cond) acción1 else acción2 Ejecuta acción2 (si existe) si la condición no se cumple.
start nombre_de_tarea Inicia la tarea especificada
stop nombre_de_tarea Detiene la tarea especificada
function (argumentos) Llama una función utilizando los correspondientes
argumentos
var = expresión Evalúa una expresión y la asigna a una variable
var += expresión Evalúa una expresión y la suma a una variable
var -= expresión Evalúa una expresión y la resta de una variable
var *= expresión Evalúa una expresión y la multiplica por una variable
var /= expresión Evalúa una expresión y divide la variable por ella
var |= expresión Evalúa una expresión y realiza una comparación OR bit a
30
bit con la variable dejando el resultado en esta última
var &= expresión Evalúa una expresión y realiza una comparación AND bit
a bit con la variable dejando el resultado en esta última
return Devuelve el control de la función al llamador
expresión Expresión a evaluar
31
Operador Descripción Asociatividad Restricción Ejemplo
abs ( ) Valor absoluto n/a abs (x)
sign ( ) Signo de operando sign (x)
++ Incremento, Disminución Izquierda Sólo variables x++ o ++x
-- Izquierda Sólo variables x-- o --x
- Menos unario Derecha Sólo constantes -x
~ Negación bitwise Derecha ~123
! (unario) Derecha !x
Negación lógica
*, /, % Multiplicación, Izquierda x*y
división, modulo
+, - Suma, resta Izquierda x+y
<<, >> Desplazamiento a Izquierda La medida del x<<4
derecha e izquierda desplazamiento ha
de ser constante
<, > Operadores relacionales Izquierda x<y
<=, >=
= =, != Igual a, no igual a Izquierda x==1
& AND bit a bit Izquierda x&y
^ XOR bit a bit Izquierda x^y
| OR bit a bit Izquierda x|y
&& AND lógico Izquierda x && y
|| OR lógico Izquierda x || y
?: Valor condicional n/a x==1 ? y : z
Funciones
Función Descripción Ejemplo
SetSensor(sensor, config) Configura un sensor SetSensor(SENSOR_1,
SENSOR_TOUCH)
SetSensorMode(sensor, Modo de configuración de SetSensor(SENSOR_2,
modo) sensor SENSOR_MODE_PERCEN
T)
SetSensorType(sensor, tipo) Tipo de configuración de SetSensor(SENSOR_2,
sensor SENSOR_TYPE_LIGHT)
ClearSensor(sensor) Borra el valor de un sensor ClearSensor(SENSOR_3)
On(salidas) Conecta una o más salidas On(OUT_A + OUT_B)
Off(salidas) Desconecta una o más Off(OUT_C)
32
salidas
Float(salidas) Detiene las salidas sin freno Float(OUT_B)
Fwd(salidas) Establece las salidas para Fwd(OUT_A)
dirección de avance
Rev(salidas) Establece las salidas para Rev(OUT_B)
dirección de retroceso
Toggle(salidas) Invierte la dirección de las Toggle(OUT_C)
salidas
OnFwd(salidas) Arranca con dirección de OnFwd(OUT_A)
OnRev(salidas) Arranca con dirección de OnRev(OUT_B)
retroceso
OnFor(salidas, tiempo) Arranca por un determinado OnFor(OUT_A)
número de 1/100 de segundo.
El tiempo puede ser una
expresión.
SetOutput(salidas, modo) Configura el modo de salida. SetOutput(OUT_A,
OUT_ON)
SetDirection(salidas, dir) Configura la dirección de SetDirection(OUT_A,
salida OUT_FWD)
SetPower(salidas, potencia) Configura el nivel de SetPower(OUT_A, 6)
potencia de salida (0-7). La
potencia puede ser una
expresión.
Wait(time) Espera durante el tiempo Wait(x)
especificado en 1/100 de
segundo. El tiempo puede ser
una expresión.
PlaySound(sonido) Genera el sonido PlaySound(SOUND_CLICK
especificado (0-5). )
PlayTone(frec, duración) Toca un tono de una PlayTone(440, 5)
especificada frecuencia
durante el tiempo
especificado (en 1/10 de
segundo)
ClearTimer(temporizador) Reinicia el temporizador (0- ClearTimer(0)
3) al valor 0
StopAllTasks( ) Detiene todas las tareas que StopAllTasks( )
se estén ejecutando
SelectDisplay(modo) Selecciona uno de los 7 SelectDisplay(1)
modos de display: 0: reloj
33
del sistema, 1-3: valor del
sensor, 4-6: configuraciones
de salidas. Modo puede ser
una expresión.
SendMessage(mensaje) Envía un mensaje IR (1- On(OUT_A + OUT_B)
255). Mensaje puede ser una
expresión.
ClearMessage( ) Borra el buffer de mensajes ClearMessage( )
IR
CreateDatalog(tamaño) Crea un Nuevo registro de CreateDatalog(100)
datos del tamaño dado.
AddToDatalog(valor) Añade un valor al registro de AddToDatalog(Timer (0))
datos. El valor puede ser una
expresión.
SetWatch(horas, minutos) Establece el valor del reloj SetWathc(1, 30)
del sistema.
SetTxPower(hi_lo) Configura la potencia del SetTxPower(TX_POWER_L
transmisor de infrarrojos en O)
alta o baja potencia.
Constantes RCX
Configuraciones de sensor SENSOR_TOUCH, SENSOR_LIGHT, SENSOR
para SetSensor( ) ROTATION, SENSOR_CELSIUS,
SENSOR_FAHRENHEIT, SENSOR_PULSE,
SENSOR_EDGE
Modo para SENSOR_MODE_RAW, SENSOR_MODE_BOOL,
SetSensorMode( ) SENSOR_MODE_EDGE, SENSOR_MODE_PULSE,
SENSOR_MODE_ PERCENT,
SENSOR_MODE_CELSIUS, SENSOR_MODE
FAHRENHEIT, SENSOR_MODE_ROTATION
Tipo para SetSensorType( ) SENSOR_TYPE_TOUCH,
SENSOR_TYPE_TEMPERATURE_
SENSOR_TYPE_LIGHT, SENSOR_TYPE_ROTATION
Salidas para On( ), Off( ), etc OUT_A, OUT_B, OUT_C
Modos para SetOutput( ) OUT_ON, OUT_OFF, OUT_FLOAT
Direcciones para OUT_FWD, OUT_REV, OUT_TOGGLE
SetDirection( )
Potencia de salida para OUT_LOW, OUT_HALF, OUT_FULL
34
SetPower( )
Sonidos para PlaySound( ) SOUND_CLICK, SOUND_DOUBLE_BEEP,
SOUND_DOWN, SOUND_UP, SOUND_LOW_BEEP,
SOUND_FAST_UP
Modos para SelectDisplay( ) DISPLAY_WATCH, DISPLAY_SENSOR_1,
DISPLAY_SENSOR_2, DISPLAY_SENSOR_3,
DISPLAY_OUT_A, DISPLAY_OUT_B,
DISPLAY_OUT_C
Nivel de potencia Tx para TX_POWER_LO, TX_POWER_HI
SetTxPower( )
Palabras clave
Existen algunas palabras reservadas por el compilador de NQC para sí mismo. Es
un error utilizar cualquiera de estas como nombre de funciones, tareas o variables.
Las palabras reservadas son las siguientes;
_sensor, abs, asm, break, const,
continue, do, else, false, if,
inline, int, repeat, return, sign,
start, stop, sub, task, true,
void, while.
Nivel PILOTO.-
Seleccionar la Cámara
ROBOLAB recuerda el tipo de cámara que se ha seleccionado, y lo utiliza cada
vez que corre el programa.
35
Configuración de la Cámera
Es posible ajustar los valores tales como Hue(), Saturation(saturación), y
Brightness(brillo), así como el tipo de iluminación de fondo.
La ventana de configuración es diferente para cada tipo de cámara, pero cuentan
con caracterísitcas similares.
Pausa de la Cámara
Utilizando el botón de pause puede congelarse la imagen.
Esta imagen permanece hasta que el botón es deseleccionado, de otra forma la
imagen es actualizada constantemente por la cámara.
Guardar Imagen
Es posible capturar una imagen. Se abrirá una nueva ventana para definir el
nombre y elegir el destino. Se grabará como mapa de bits (bmp) tanto en PC
como en Mac.
Nivel INVENTOR.-
El nivel 4 de Inventor puede utilizar la cámara como sensor tanto como una
entrada visual.
Centro de Visión
La ventana centro de visión provee un formato para ver la imagen de la cámara y
para configurarla como un sensor que provee entrada al programa RCX. El centro
de visión tiene tres velocidades de comunicación: Sin Conexión con el RCX, Modo
de Conexión Lenta y Modo de Conexión Rápida.
Velocidad de Comunicación
36
La velocidad de Comunicación de datos entre el sensor de la cámara y la
computadora dependen de la complejidad del sensor de la cámara, la velocidad
del CPU, el número de ubicaciones del sensor de cámara, y la comunicación del
transmisor IR.
37
Prácticas Propuestas
A continuación se presentan ejemplos prácticos para utilizar lo explicado
anteriormente a fin de que el manejo y programación del kit LEGO MR 9794 se
domine. De esta forma se tiene la capacidad de realizar diversas tareas y
aplicaciones, que pueden surgir de un desafío o como solución a una problemática
en particular.
Las primeras diez están enfocadas al uso del lenguaje gráfico ROBOLAB y
las otras diez se adentrarán en la esctructura de programación y control del robot
mediante el lenguaje en código NQC.
Cabe mencionar que estas prácticas son ejemplos básicos los que
permitirán adquirir habilidades para posteriormente realizar construcciones,
programas y robots mucho más complejos.
38
Sistemas Robóticos Movimiento hacia adelante (ROBOLAB)
PRACTICA 1
Objetivo:
Teoría preliminar:
Equipo Requerido:
Procedimiento:
Problemas Propuestos:
Producto:
PRACTICA 2
Ajuste de Posición
Objetivo:
Teoría preliminar:
Equipo Requerido:
Procedimiento:
Fig. 2-2 Posición original (A) y Posición una vez que ha girado (B).
Problemas Propuestos:
Producto:
PRACTICA 3
Objetivo:
Teoría preliminar:
Equipo Requerido:
Procedimiento:
Fig. 3-1 Programa para detener los motores mediante sensor de tacto.
Problemas Propuestos:
Producto:
PRACTICA 4
Objetivo:
Teoría preliminar:
Equipo Requerido:
Procedimiento:
Fig. 4-1 Programa para detener los motores mediante sensor de temperatura.
Problemas Propuestos:
Producto:
PRACTICA 5
Objetivo:
Teoría preliminar:
Equipo Requerido:
Procedimiento:
Fig. 5-1 Programa para detener los motores mediante sensor de luz (modo Activo).
Fig. 5-2 Programa de movimiento y paro mediante sensor de luz (modo Pasivo).
Problemas Propuestos:
Producto:
PRACTICA 6
Objetivo:
Teoría preliminar:
Equipo Requerido:
Procedimiento:
Fig. 6-1 Programa para detener los motores mediante sensor de giro.
Problemas Propuestos:
Producto:
PRACTICA 7
Ciclos repetitivos
Objetivo:
Teoría preliminar:
Equipo Requerido:
Procedimiento:
Problemas Propuestos:
Producto:
PRACTICA 8
Seguidor de línea
Objetivo:
Teoría preliminar:
Equipo Requerido:
Procedimiento:
Problemas Propuestos:
Producto:
PRACTICA 9
Uso de la cámara
Objetivo:
Teoría preliminar:
Equipo Requerido:
Procedimiento:
Problemas Propuestos:
Producto:
PRACTICA 10
Esquivar obstáculos
Objetivo:
El alumno utilizará la cámara web con el RCX a través del ROBOLAB, para
determinar cual parte del camino esta bloqueado y hacer que el RCX logre
esquivarlos.
Teoría preliminar:
Equipo Requerido:
Procedimiento:
Problemas Propuestos:
Producto:
PRACTICA 11
Teoría preliminar:
Equipo Requerido:
Procedimiento:
Primer programa
task main()
{
OnFwd(OUT_A);
OnFwd(OUT_C);
Wait(400);
OnRev(OUT_A+OUT_C);
Wait(400);
Off(OUT_A+OUT_C);
}
Segundo programa
task main()
{
SetPower(OUT_A+OUT_C,2);
OnFwd(OUT_A+OUT_C);
Wait(400);
OnRev(OUT_A+OUT_C);
Wait(400);
Off(OUT_A+OUT_C);
}
Problemas Propuestos:
Producto:
PRACTICA 12
Ciclo repetitivo
Objetivo:
Teoría preliminar:
Equipo Requerido:
Procedimiento:
Primer programa
task main()
{
OnFwd(OUT_A+OUT_C);
Segundo programa
task main()
{
repeat(4) // comienza un ciclo que se repetiá 4
veces
{
OnFwd(OUT_A+OUT_C);
Wait(TIEMPO_AVANCE);
OnRev(OUT_C);
Wait(TIEMPO_GIRO);
}
Off(OUT_A+OUT_C);
}
Problemas Propuestos:
Producto:
PRACTICA 13
Haciendo espirales
Objetivo:
Teoría preliminar:
Equipo Requerido:
Procedimiento:
Primer programa
#define TIEMPO_GIRO 85
Wait(TIEMPO_GIRO);
move_time += 5; // incrementa la variable
}
Off(OUT_A+OUT_C);
}
Segundo programa
Problemas Propuestos:
Producto:
PRACTICA 14
Control y Lógica
Objetivo:
Teoría preliminar:
Equipo Requerido:
Procedimiento:
Primer programa
task main()
{
while(true)
{
OnFwd(OUT_A+OUT_C);
Wait(TIEMPO_AVANCE);
if (Random(1) >= 0)
{
OnRev(OUT_C);
}
else
{
OnRev(OUT_A);
}
Wait(TIEMPO_GIRO);
}
}
Segundo programa
Problemas Propuestos:
Producto:
PRACTICA 15
Sensor de Tacto
Objetivo:
Teoría preliminar:
Para el lenguaje código NQC se deben indicar los puertos donde están
conectados los sensores, se especifican como SENSOR_1, SENSOR_2 y
finalmente SENSOR_3. En este caso el sensor de tacto estará conectado en el
puerto 1.
Equipo Requerido:
Procedimiento:
Primer programa
task main()
{
SetSensor(SENSOR_1,SENSOR_TOUCH);
OnFwd(OUT_A+OUT_C);
until (SENSOR_1 == 1);
Off(OUT_A+OUT_C);
}
Segundo programa
task main()
{
SetSensorTouch(SENSOR_1);
OnFwd(OUT_A+OUT_C);
while (true)
{
if (SENSOR_1 == 1)
{
OnRev(OUT_A+OUT_C); Wait(30);
OnFwd(OUT_A); Wait(30);
OnFwd(OUT_A+OUT_C);
}
}
}
Problemas Propuestos:
Producto:
PRACTICA 16
Sensor de Temperatura
Objetivo:
Teoría preliminar:
El modelo RXC permite guardar datos en una lista, la que será accesible
desde la PC, en ella se pueden almacenar datos del sensor de temperatura o de
los temporizadores. Esto es posible creando el DATALOG, el cual podrá ser
alimentado en el transcurso de la ejecución del programa. Para accesar a los
datos almacenados debe abrirse el apartado TOOLS en BricxCC.
Equipo Requerido:
Procedimiento:
Primer programa
task main()
{
SetSensorType(SENSOR_2, SENSOR_TYPE_TEMPERATURE);
SetSensorMode(SENSOR_2, SENSOR_MODE_RAW);
CreateDatalog(600);
PlaySound(0);
repeat (EXP_TIME)
{
AddToDatalog(SENSOR_2);
Problemas propuestos:
Producto:
PRACTICA 17
Sensor Proximidad
Objetivo:
Teoría preliminar:
Equipo Requerido:
Procedimiento:
Primer programa
task revisa_senal()
{
while(true)
{
nivelanterior = SENSOR_2;
if(SENSOR_2 > nivelanteior+200)
{OnRev(OUT_C); Wait(85); OnFwd(OUT_A+OUT_C);}
}
}
task main(){
SetSensorType(SENSOR_2, SENSOR_TYPE_LIGHT);
SetSensorMode(SENSOR_2, SENSOR_MODE_RAW);
OnFwd(OUT_A+OUT_C);
start envia_senal;
start revisa_senal;
}
Problemas Propuestos:
Producto:
PRACTICA 18
Sensor de Luz
Objetivo:
Teoría preliminar:
Para el lenguaje código NQC se deben indicar los puertos donde están
conectados los sensores, se especifican como SENSOR_1, SENSOR_2 y
finalmente SENSOR_3.
En este caso el sensor de luz estará conectado en el puerto 2.
Equipo Requerido:
Procedimiento:
Primer programa
#define INTENSIDAD 40
task main()
{
SetSensor(SENSOR_2,SENSOR_LIGHT);
OnFwd(OUT_A+OUT_C);
while (true)
{
if (SENSOR_2 > INTENSIDAD)
{
OnRev(OUT_C);
Wait(10);
until(Sensor(SENSOR_2) <= INTENSIDAD);
OnFwd(OUT_A+OUT_C);
}
}
}
Problemas Propuestos:
Producto:
PRACTICA 19
Rutinas y Subrutinas
Objetivo:
Teoría preliminar:
Subrutinas: Algunas veces se requiere una parte del código varias veces
dentro de un programa, en este caso se coloca una subrutina y se le da un
nombre. Se podrá ejecutar esta parte de código con solo llamarla dentro de una
rutina, el RCX soporta 8 subrutinas.
Equipo Requerido:
Procedimiento:
Primer Programa
task main()
{
SetSensor(SENSOR_1,SENSOR_TOUCH);
start revisa_sensor;
start mover_en_cuadrado;
task mover_en_cuadrado()
{
while (true)
{
OnFwd(OUT_A+OUT_C); Wait(100);
OnRev(OUT_C); Wait(85);
}
}
task revisa_sensor()
{
while (true)
{
if (SENSOR_1 == 1)
{
OnRev(OUT_A+OUT_C); Wait(50);
OnFwd(OUT_A); Wait(85);
star mover_en_cuadrado
}
}
}
Segundo Programa
sub gira( )
{
OnRev(OUT_C); Wait(340);
OnFwd(OUT_A+OUT_C);
}
task main()
{
OnFwd(OUT_A+OUT_C);
Wait(100);
gira();
Wait(200);
gira();
Wait(100);
gira();
Off(OUT_A+OUT_C);
}
Problemas Propuestos:
Producto:
PRACTICA 20
Seguidor de línea
Objetivo:
Equipo Requerido:
Procedimiento:
Problemas Propuestos:
Producto:
Pista ejemplo 1
Referencias
Para mayor información respecto a los temas aquí mencionados:
Using ROBOLAB (LEGO - National Instruments 2002) Martha N. Cyr, Ph.D. Director of
Engineering Educational Outreach, Tufts University, Massachusetts, US
Programación de LEGO robots utilizando NQC (Version 3.03 Oct 2 de 1999) por Marc
Overmars
Guía del programador de NQC (Versión 2.5 a4) por Dave Baum
[Link]
[Link]
Para temas avanzados y diversas construcciones podrás encontrar varios sitios y foros
dedicados a proyectos de Mini-Robótica.
80