40

Juego de memoria con LEGO MINDSTORMS

Embed Size (px)

DESCRIPTION

Manual para montar y programar un juego de memoria con LEGO MINDSTORMS programado con NXT-G

Citation preview

En este cuadernillo se presenta un reto a resolver con un robot LEGO MINDSTORMS programado

con NXT-G, así como los pasos necesarios para llegar a una de las posibles soluciones. Y digo una

de ellas porque del mismo modo que sucede con cualquier problema en ingeniería siempre hay

más de una solución, algunas más eficientes que otras.

La descripción del proceso incluye algunos de los errores que he cometido y cómo los he

solucionado.

Atribuciones

LEGO y MINDSTORMS son marcas registradas de LEGO Group.

Las instrucciones de montaje las he dibujado con MLCad para a continuación generar las

instrucciones con LPub.

Este documento se publica bajo licencia de Creative Commons (Reconocimiento-No comercial-

Compartir bajo la misma licencia 3.0 Unported). Para cualquier duda respecto a la licencia contactar

con el autor en http://lrobotikas.net/.

Contacto

Si deseas ponerte en contacto con su autor (sugerencias, propuestas de mejora…) lo

encontrarás en http://lrobotikas.net.tienes dudas sobre el reto puedes compartirlas en el foro

de la misma web.

2

Este proyecto es fruto de una de las tareas propuestas en el curso “Caring robots” organizado por las

universidades Windesheim Flevoland de Almere (Holanda) y La Salle - Universitat Ramon Llull de

Barcelona. En dicho curso, entre otras cosas, se habló de lo que pueden aportar las actividades con

robots en la rehabilitación de niños con daño cerebral y en la mejora de las habilidades sociales de

los niños autistas. La Salle - Universitat Ramon Llull está colaborando con Tufts University,

Massachusetts (USA), Deusto y Comillas en una investigación que trata de determinar si el uso de

robots en la rehabilitación de niños con daño cerebral ofrece una ventaja respecto a los métodos

convencionales.

La propuesta fue crear una actividad que posteriormente sería testada con niños que padecen daño

cerebral en el hospital Sant Joan de Deu de Barcelona, principal colaborador en los proyectos

anteriormente comentados de La Salle. En nuestro caso se trataba de una actividad para mejorar la

memoria.

Esta actividad fue el resultado de un trabajo en equipo en el que participamos Chang Long Zhu,

Juan Pablo Forero, Louellen Palm y yo mismo. Los modelos y programas aquí utilizados son de

creación propia basados en las ideas que se generaron en el equipo.

A continuación se presenta la actividad, con el programa completo desarrollado en NXT-G y todas

las explicaciones necesarias para su comprensión.

1. La actividad Una de las ideas propuestas era hacer un juego que ayude a ejercitar la memorización. Tras

reflexionar sobre ello y analizar las posibilidades que ofrece LEGO MINDSTORMS Educación,

que era el material del que disponíamos, se decidió crear un juego que requiriese recordar

secuencias de sonidos. El robot debía de reproducir secuencias de hasta 4 notas (debido a que el

NXT dispone de 4 entradas de sensor), y el niño debía de repetirlas a continuación vía el teclado

creado al efecto.

Se valoró que el recordar secuencias de notas podía ser complicado para algunos niños, por el hecho

de ser solo sonidos, así que se pensó que sería interesante combinarlos con otro tipo de estímulo,

por ejemplo colores. En la caja de LEGO MINDSTORMS Educación se pueden encontrar tres

lámparas con tres piezas transparentes (roja, verde y amarilla) que pueden combinarse con ellas.

Dado que lo que íbamos a montar era un teclado de juegos, teníamos a nuestra disposición los tres

puertos de salida (no se utilizaba ningún motor), así que para que el resultado fuera más redondo se

redujo el teclado a tres teclas.

¿Qué pasaba si acertaban la secuencia? Además de los aplausos y cara sonriente en el display del

NXT se pensó que sería interesante incorporar algún tipo de recompensa que agregase diversión.

Así que se montó un robot móvil con un sensor de luz que avanzaba o retrocedía sobre un fondo

blanco con líneas negras transversales, si acertaba avanzaba, si fallaba retrocedía. El objetivo del

juego era llegar hasta la última línea. La consola y el vehículo se comunicaban vía bluetooth.

2. La consola de juegos A la hora de montar la consola de juegos los requerimientos eran los siguientes:

• Tres sensores de contacto con teclas con suficiente tamaño y separación para ser utilizadas

por niños.

• Tres lámparas con filtro de color alineadas con las teclas

• Una estructura que permita mantener la consola erguida sobre una mesa con un fácil acceso

a la pantalla y teclas del NXT.

3

Al no disponer de piecerío de los tres colores, se puso una pegatina de color en cada tecla para

facilitar su identificación. El de la imagen es el modelo creado durante el curso. Al final de este

documento se ofrecen las instrucciones para montar uno muy similar que utiliza piezas de diferentes

colores para las teclas..

3. El programa de la consola Antes de empezar a programa conviene reflexionar sobre las partes la tarea a realizar y los pasos

que hay que dar para resolverla. En este caso, el programa de la consola consta de las siguientes

partes:

1. Presentar las instrucciones de uso

2. Establecer la conexión vía bluetooth: es opcional, ya que la conexión puede hacerse de

modo manual o por medio del programa al inicio.

3. Practicar con el teclado: su función es conocer la dinámica del juego y practicar con el

teclado. Al pulsar una tecla reproduce un sonido y enciende la lámpara del color

correspondiente. Al pulsar el botón naranja el programa sigue adelante.

4. El juego

a) Selección de nivel: Entrenamiento (secuencia de 3 notas/colores), Básico (4), Medio

(5) y Avanzado (6)

b) El juego propiamente dicho: genera una secuencia aleatoria; la reproduce; espera al

usuario y registra sus pulsaciones; comprueba el resultado y da el feedback

El programa se ha creado de modo modular, de tal modo que es posible testear cada parte antes de

pasar a la siguiente. Se han creado nuevos bloques en t odos los casos en que ha sido posible,

generando un programa estructurado que permite una lectura relativamente sencilla.

Al abrir el programa lo que se encuentra es lo siguiente:

4

Veámoslo paso a paso.

3.1.-Presentación El programa se inicia con la presentación en la pantalla del juego. Para ello se utiliza el bloque

Display, una vez por cada línea de texto. Tras el nombre del programa se muestran las instrucciones

básicas de navegación.

Es una sencilla secuencia en la que lo único con lo que hay que tener cuidado es con la casilla de

verificación Borrar. Solo deberá estar marcada en el primer y cuarto bloques (los que separan una

pantalla de información de otra), en caso contrario cada bloque borrará lo que el anterior escribe.

3.2.-Conectar bluetooth Los dos NXT se pueden conectar vía bluetooth de modo manual utilizando sus propias teclas. Sin

embargo, para facilitar ese paso se ha incluido en el programa la activación del bluetooth y la

conexión con el esclavo. Para que la conexión se realice el NXT esclavo deberá estar encendido.

El programa es el siguiente:

Se puede observar que el bloque Espera Sensor Botones NXT (véase el icono que aparece en la

esquina inferior izquierda del bloque) está configurado para que se espere hasta pulsar y soltar. De

este modo se cierra este Mi bloque con el botón soltado, y no hay ningún riesgo de que interfiera

con otra parte del programa.

5

Para poder conectar con el NXT esclavo desde el programa, los dos NXT han tenido que ser

emparejados previamente (conectados de modo manual). De ese modo, si programamos con el NXT

maestro conectado al ordenador, veremos el panel de configuración del bloque Conexión

Bluetooth de la siguiente manera:

Se puede observar que podremos elegir en el panel el NXT con el que lo queremos conectar.

3.3.-Practicando con el teclado Antes de empezar con el juego, conviene que el usuario se familiarice con el uso del juego. En esta

sección del programa, se ofrece practicar con las teclas y conocer las notas que reproduce cada una

de ellas.

Comienza esta sección con unas indicaciones, tal y como puede verse en la siguiente imagen.

El primero de los bloques Visualizar tendrá seleccionada la casilla de verificación Borrar al

contrario de los tres restantes. De este modo será posible escribir las cuatro líneas. Tras una espera

de dos segundos se abre un bucle que no se cerrará hasta que el usuario lo desee.

Practicar con el teclado requiere leer de modo continuo los tres sensores y el botón naranja del

NXT. El usuario probará las teclas para conocer el efecto que se produce al pulsarlas y utilizará la

tecla naranja para seguir adelante y comenzar a jugar.

Para ello, el programa lee los tres sensores y el botón naranja de modo secuencial hasta que uno de

ellos es pulsado. Utiliza la operación booleana OR que determina si alguno de los sensores ha sido

pulsado. Si ha sido así, la operación booleana dará como resultado Verdadero, y saldrá del bucle.

Una vez cerrado el bucle reproducirá el sonido (y encenderá la luz) o continuará con el programa.

6

Ahora se trata de reproducir uno u otro sonido en función del sensor pulsado. Esto se podría hacer

con un Condicional (Si.. Sino...), pero para evitar anidar uno dentro de otro convertimos la

pulsación en un número: 1, 2 o 3 en función de la tecla pulsada. Lo haremos por medio del siguiente

fragmento de programa:

Utilizamos una de las salidas del bloque Leer Sensor de Contacto que da un valor 1 si hay contacto

y 0 si no lo hay. Dejando el valor del primero en 0 o 1, multiplicando el segundo por 2 y el tercero

por 3 y haciendo la suma de todos estos valores sabremos qué tecla se ha pulsado. En caso que haya

sido pulsado el botón Naranja, el resultado será 0, y este fragmento de código no producirá ningún

efecto. Al final de puede ver el bloque que reproduce el sonido y enciende la lámpara. Dado que se

va a utilizar en diferentes partes del programa se ha convertido en un nuevo bloque. Su contenido es

el siguiente:

Se ha utilizado el bloque Bifurcación configurándolo para Control por valor. Para poder hacerlo,

es necesario que esta estructura no tenga seleccionada la casilla de verificación Vista plana (por

defecto siempre está seleccionada) y que el control sea por valor. De este modo, es posible crear un

condicional que elija entre varias secuencias de código en función de una serie de valores de tipo

numérico o texto. En este caso en función del valor de entrada Tecla (valores de 0 a 3) enciende una

lámpara, reproduce una nota (con una duración de 0,5s y esperar finalización), la apaga y espera

0,5s para asegurar un silencio de 0,5s entre notas.

El bucle finalizará cuando se pulse el botón Naranja del NXT. Para no dar lugar a que esa

pulsación tenga influencia en la siguiente parte del programa, tras el bucle se espera a que el botón

sea liberado.

7

3.4.-A jugar Una vez que se ha practicado, llega el momento de jugar.

3.4.1.-Seleccionar nivel Lo primero que hay que hacer es seleccionar el nivel en el que se desea jugar. Para ello se utiliza un

nuevo bloque con el código necesario para seleccionar el nivel deseado. Este bloque que da como

salida el nivel con valores entre 1 y 4.

El nivel se selecciona utilizando las flechas grises del NXT, mientras que con el naranja se confirma

la elección y comienza el juego. Para ello hay que seguir los siguientes pasos:

1. Mostrar las opciones

2. Crear y dar un valor inicial a una variable que almacenará el nivel elegido.

3. Mostrar el nivel correspondiente a dicho valor

4. Iniciar un bucle que no finalizará hasta que se pulse el botón naranja:

a) Esperar a que se pulse uno de los tres botones (naranja o flechas grises)

b) Si es una de las flechas sumar o restar una unidad a la variable y representar la nueva

selección (tener en cuenta que hay cuatro niveles y el valor deberá estar comprendido

entre 1 y 4. Hay que tener cuidado de que al restar o sumar no nos salgamos del rango y

el resultado no sea ni 0 ni 5.

En la imagen pueden verse los tres primeros pasos. Dado que el nivel se habrá de mostrar cada vez

que se cambie la elección la secuencia de bloques necesaria para mostrarlo se han agrupado en un

nuevo Mi bloque.

En este nuevo bloque, para visualizar el nivel podría utilizarse un condicional, pero puede hacerse

de un modo más directo utilizando los bloques que permiten operar con texto. Convierte el valor

numérico en texto, para a continuación añadir por delante y por detrás un guión (es una cuestión de

simple estética). La cadena de texto resultante se escribe en la línea 8 sobre la elección anterior (es

importante tomar que la casilla Borrar no esté seleccionada).

8

Tras mostrar la selección por defecto (la 1), se abre un bucle que permite seleccionar el nivel

deseado. Este bucle se inicia esperando a que una tecla se pulse, con un código similar al utilizado

anteriormente en el punto 3.3.

En caso que se pulse el botón gris izquierdo ejecutará el código de la siguiente imagen:

La flecha izquierda es para pasar de un nivel a otro más fácil (un valor inferior). Hay que tener

previsto que el usuario puede pulsar la flecha gris izquierda aunque esté en el nivel 1. Por ello,

primero comprueba si el valor de la variable Selection es mayor que 1, en cuyo caso le resta una

unidad antes de mostrarlo en pantalla. Si no es así, la se deja tal y como estaba.

Si no ha sido la flecha izquierda la pulsada, comprobará si ha sido la derecha. En dicho caso se

ejecuta el código siguiente:

9

Ahora hay que sumarle una unidad excepto si el valor de la variable Selection es 4.

Antes de cerrar cada bucle de selección de nivel se comprueba que los botones flecha izquierda y

derecha están liberados, obligando a presionar otra vez si se quiere cambiar otra vez el nivel

seleccionado. Sin esta comprobación, podría suceder que al pulsar una de las flechas, la selección

cambiase de modo continuo hasta que se soltase.

Si ha sido pulsado el botón Naranja finaliza la selección de nivel. Se cierra el bucle y se espera a

que se libere el botón Naranja para ofrecer como salida de este nuevo bloque el nivel y asignarlo a

la variable nLevel.

3.4.2.-Empezar a jugar El objetivo se consigue cuando se consigue el vehículo alcanzar la tercera línea negra. Si se acierta

una secuencia, el robot avanzará hasta la siguiente, pero si falla retrocederá a la anterior, a no ser

que estuviese en el inicio. Para conseguirlo dispondrá de un máximo de 6 intentos.

Teniendo en cuenta lo anterior, se define un bucle que no finalizará hasta que se consiga el objetivo

o se hayan realizado 6 intentos. Para controlar el avance del robot se define una variable (Counter1)

que se utilizará como contador. La variable se inicializa antes del bucle con el valor cero y se

actualiza en cada intento.

Los pasos que se repetirán serán los siguientes:

a) Esperar confirmación de inicio

b) Generar y reproducir la secuencia

c) El usuario introduce su secuencia y se compara con la muestra

d) Envía mensaje bluetooth al vehículo:Ha acertado o no

e) Actualiza el contador de éxito: Counter1

f) Comprueba si Counter1 ha llegado a 3 o se han realizado los seis intentos en cuyo caso

envía un mensaje al vehículo para comunicárselo.

g) Dar un feedback al usuario

10

a.-Confirmar inicio Antes de que genere y reproduzca la secuencia a repetir, espera a que el usuario pulse el botón

naranja para arrancar. De este modo se facilita que sea mismo usuario quien controle el flujo del

juego.

Para ello utiliza la secuencia que engloba el nuevo bloque g_ready, que puede verse en la siguiente

imagen. Dada que es muy similar a las anteriores no requiere explicación.

b.-Generar y reproducir la secuencia Hay que generar una secuencia de sonidos más o menos larga en función del nivel elegido. Los

pasos necesarios para generarla se encuentran contenidos en el nuevo bloque g_generateSound.

Este bloque utiliza como entrada el nivel seleccionado previamente almacenado en la variable

nLevel.

Si lo abrimos, la secuencia de instrucciones que contiene es la siguiente:

En ella podemos ver dos nuevos bloques, uno que ya se ha utilizado anteriormente, g_playSound, y

uno nuevo, g_sensorNum, cuya utilidad ahora veremos.

El número de notas de las que constará la secuencia será el nivel más dos. Ese será el número de

veces que habrá de repetirse el bucle que genera, reproduce y almacena las notas.

Antes de comentar la secuencia vamos a ver cuál ha sido la solución seleccionada para almacenar la

secuencia. Quizás el modo más directo de almacenar una secuencia de notas sea una matriz, pero

dado que NXT-G no las soporta de modo estándar se ha optado por otro modo de almacenarlas. El

11

programa utiliza una única variable numérica en la que la nota (un valor de 1 a 3) se almacena en la

posición de unidades, decenas, centenas... Para ello una vez generada la nota por medio del bloque

Aleatorio (con un valor de 1 a 3) se realiza el siguiente cálculo para almacenarla:

Nuevo valor = Nota*10 + Valor anterior

Para esta operación se utiliza el nuevo bloque g_sensorNum que genera el nuevo valor a almacenar

partiendo del valor anterior y la nueva nota.

Así que tras inicializar la variable Result que almacenará la secuencia comienza el bucle con los

siguientes bloques:

Cuando el usuario introduce una secuencia vía teclado se realiza la misma operación, de tal modo

que al final se puede comparar con el valor que representa la secuencia a reproducir.

Una vez almacenado el nuevo valor hay que comprobar si se ha completado la secuencia o no. Para

ello ha de comparar dos valores: el número de notas que corresponde al nivel (el nivel más 2) y el

número de bucles realizado. Para el primero de los valores a comparar se suman dos unidades a la

variable nLevel, mientras que para el segundo utilizaremos el contador del bloque Bucle. En la

siguiente imagen se puede ver la configuración del bloque Bucle con el contador visible.

12

Para mostrar la toma hay que seleccionar la casilla de verificación Mostrar Contador. Cuando se

usa el contador del bloque Bucle, hay que tener en cuenta que el valor que se obtiene de la toma de

datos de este bucle representa el número de bucles finalizados. Así que a esta lectura habrá que

sumar una unidad para saber cuántos bucles se han completado cuando se llega al final del bucle.

Cuando los dos valores sean iguales el bucle finalizará.

c.-Introducir secuencia por el teclado y comparar r esultado Llega el momento de que el usuario trate de adivinar la secuencia previamente reproducida. En este

paso el usuario introduce la secuencia tal y como la recuerda, y una vez que la completa el sistema

la compara con la secuencia almacenada para establecer si es la correcta.

Este paso se ejecuta con el nuevo bloque g_Play cuyos valores de entrada son el nivel elegido y la

secuencia generada previamente, y la salida, un Verdadero o Falso en función del éxito del intento.

Si abrimos este nuevo bloque nos encontramos que comienza de la siguiente manera:

13

Tras inicializar una variable en la que se va a almacenar la secuencia introducida por el usuario, se

inicia el bucle que se ejecutará tantas veces como notas tiene la secuencia en el nivel elegido.

Se puede observar que este bloque comienza de un modo muy similar al bloque g_generateSound,

creado para generar la secuencia de sonidos, solo que en este caso en lugar del bloque aleatorio se

utiliza el bloque g_sensorNum. En el interior del bucle encontramos los siguientes pasos:

1. Esperar y leer la pulsación de una tecla (g_sensorNum)

2. Reproducir el sonido (g_playsound)

3. Procesar y almacenar la lectura (g_convertNum)

4. Comprobar si se ha finalizado la secuencia

El bloque g_SensorNum comienza con un bucle que espera a que se pulse alguna de las teclas.

Para continuar procesando los valores lógicos de los sensores, obteniendo así el número de la tecla

pulsada (algo visto anteriormente). El número de la tecla pulsada será la salida de este bloque.

Una vez que se ha introducido la secuencia por el teclado y almacenado en la variable PlayedSound

se cierra el bucle y toca compararla con la secuencia propuesta.

14

Puede observarse que antes de hacer la comparación se ha introducido una espera. Su función es

separar la última pulsación del mensaje gráfico y sonoro, que comunica si se ha acertado o no.

d.-Env ía un mensaje al veh ículo Hay que comunicar al vehículo si el usuario ha acertado o no. Esto se hará vía un mensaje

bluetooth. Para los mensajes es necesario establecer un protocolo para que los dos NXT se

entiendan. Los mensajes posibles van a ser tres y se enviarán en formato numérico (también podrían

enviarse en formato texto):

• 1: ha acertado (el vehículo avanzará hasta la línea siguiente)

• 2: no ha acertado (el vehículo retrocederá hasta la línea anterior, a no ser que esté en la

salida)

• 3: ha llegado al objetivo o ha gastado sus oportunidades (el vehículo volverá a la salida)

La salida del bloque g_Play es un Verdadero o Falso que habrá que convertir en un 1 o 2. Para ello

se utiliza un bloque Bifurcación. Desde el mismo bloque Bifurcación se envía el mensaje con el

bloque Enviar mensaje, configurado para que envíe un mensaje numérico al buzón 1 vía la

conexión 1.

e.-Actualiza el contador El usuario tiene 6 oportunidades para llegar hasta el objetivo. Sin embargo, el usuario puede

conseguir el objetivo sin necesidad de utilizar las seis oportunidades, por lo que tras cada intento

habrá que comprobar si se ha llegado al objetivo o si se han consumido las 6 oportunidades.

15

Para el recuento de oportunidades consumidas se utiliza el contador del bloque Bucle mientras que

para la posición en la que se encuentra el vehículo se utilizará un contador (Counter1) al que se

sumará o restará una unidad cuando acierte o falle.

En la imagen anterior se ve el código que se ejecuta cuando se acierta la secuencia a reproducir.

En caso contrario (imagen siguiente), se resta una unidad, siempre y cuando el valor de la variable

no sea cero, en cuyo caso no se modifica su valor.

f.-Comprueba si ha finalizado Una vez actualizado el contador hay que comprobar si se ha logrado el objetivo o se han consumido

los intentos. Para ello, tras compararlos con los valores 3 y 6, se utiliza el operador lógico OR para

saber si se hacumplido alguna de las dos condiciones que da final a la partida.

g.-Dar un feedback al usuario Una vez que se ha acabado la partida hay que pedir al vehículo que vuelva a la salida y dar un

feedback al usuario. Para lo primero se envía un mensaje con el valor numérico 3, mientras que para

lo segundo se muestra una imagen en pantalla y se reproduce un sonido cuyo carácter dependerá de

si se ha conseguido el objetivo o no.

16

A partir de aquí el bucle correspondiente al juego se inicia otra vez, con una nueva selección de

nivel.

17

4.-El vehículo El vehículo es un robot móvil muy sencillo, ya que lo único que se le pide es la capacidad de

avanzar y retroceder hasta la siguiente línea. Si bien se le han montado dos motores, podría haberse

hecho con uno solo. Utiliza un sensor de luz para localizar la línea.

En la siguiente imagen se puede ver el que se montó en el curso, algo diferente al que se ha

utilizado para esta guía y cuyas instrucciones de montaje pueden encontrarse más adelante.

5.-El programa del vehículo El programa es relativamente sencillo, el vehículo se mantiene en espera para avanzar o retroceder

en función de lo que se le ordene desde la consola de juegos. Si recibe un 1 avanza hasta la

siguiente línea, si es un 2 retrocede a la anterior y si es un tres vuelve a la salida. Así que lo que se

necesite es un programa que esté en espera de recibir instrucciones vía bluetooth y realice una u otra

tarea en función de las instrucciones recibidas.

El programa se puede resumir en los siguientes pasos:

1. Inicializar una variable para almacenar la posición en la que se encuentra el vehículo

2. Repetir una y otra vez los siguientes pasos

a. Esperar a recibir un mensaje

b. Si el mensaje es 1 avanza y suma una unidad a la variable

c. Si el mensaje es 2 retrocede y resta una unidad a la variable a no ser que esté en la

salida (variable = 0)

d. Si el mensaje es 3 retrocede hasta la salida

El programa empieza con la inicialización de la variable posición previamente definida vía la

opción Definir variable del menú Edición. Para inicializarla se utiliza el bloque Variable

configurado en modo Escribir con un valor inicial 0.

18

A continuación se abre el bucle que permitirá que se repitan una y otra vez los pasos anteriormente

descritos. El primer paso a repetir es la espera a un mensaje. Para ello se ha utilizado un Bucle con

un bloque Recibir mensaje en su interior configurado para recibir mensajes con valores numéricos.

El bucle finalizará cuando se reciba un mensaje. Esto también podría haberse hecho utilizando el

bloque Espera Recibir mensaje.

Una vez leído el mensaje el vehículo ha de hacer una u otra cosa dependiendo del valor del

mensaje, así que se utilizará el bloque bifurcación. Dado que son tres valores, se elimina la

selección de vista plana para no necesitar anidar más bifurcaciones y se configura en el modo de

control por valor, tipo numéricos. Esto último es importante, ya que el mensaje recibido tiene un

formato numérico.

En la imagen pueden verse las pestañas correspondientes a los tres valores y el código

correspondiente al primer valor, al 1. En este caso ha de avanzar hasta la siguiente línea y sumar

una unidad a la variable posición. El nuevo bloque que lleva el robot hasta la siguiente línea

contiene el siguiente código:

Para llegar a la siguiente línea, primero tiene que salir de la línea y una vez en la zona blanca,

avanzar hasta encontrar la siguiente línea negra. Esto es algo que suele generar muchos despistes.

La segunda opción es para un valor del mensaje igual a 2.

19

Aquí la acción a realizar dependerá de si el robot se encuentra en la salida o no, ya que en el caso en

que así sea, no habrá de retroceder. Por eso primero se compara el valor de la variable posición con

0, si el resultado es verdadero, no se hace nada, pero si es falso se retrocede y se resta una unidad a

la variable posición.

Aquí también se utiliza un nuevo bloque para retroceder, muy similar al anterior.

Es importante que tanto en este caso como en el bloque utilizado para avanzar, el bloque que

detiene el vehículo esté configurado en modo Freno. En caso contrario el robot se pasará de la

línea, algo que generará problemas.

Veamos ahora la tercera y última opción, la correspondiente al mensaje de valor 3. En este caso el

robot ha de volver a la salida para lo que tendrá que retroceder tantas líneas como la variable

posición indique. Si el valor es 0 no tendrá que hacer nada.

Si el valor de la variable posición no es cero, se inicia un bucle que se repite mientras el valor de la

variable posición no sea 0. Primero retrocede, para lo que utiliza el bloque el bloque creado

anteriormente para retroceder hasta la línea anterior. Resta una unidad a la variable posición y

comprueba si su valor es 0. Si no lo es repetirá la operación.

6.-Puesta en práctica La actividad se testeó en el Hospital de San Juan de Deu de Barcelona con varios niños con daño

cerebral. Si bien las condiciones del test no fueron las necesarias para sacar conclusiones, se

observó que los niños pequeños se centraban totalmente en el vehículo olvidándose de la otra parte

del juego. Por otra parte, en algunos casos tres notas/colores resultaban excesivos para empezar, con

dos teclas y secuencias de dos notas/colores hubiese sido suficiente.

Desde el punto de vista humano fue una experiencia muy enriquecedora, gracias a la colaboración

del hospital y las familias implicadas.

7.-Posible mejoras • Posibilidad de usar las teclas para el control de menús para niños y niñas a los que el teclado

del NXT genere problemas.

• Si bien fue algo que no se planteó siquiera, el robot móvil al llegar a la meta podría coger

algo y traérselo al usuario como recompensa.

• El feedback sonoro que da la consola al usuario podría ser una sintonía que utilice las tres

notas y las luces.

20

8.-Instrucciones de montaje

8.2-La consola de juegos

21

22

23

24

25

26

27

28

29

30

31

32

8.2.-El vehículo

33

34

35

36

37

38

39