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 comercialCompartir 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.
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.
2
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:
3
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.
4
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.
5
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.
6
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).
7
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:
8
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) b) c) d) e) f)
Esperar confirmación de inicio Generar y reproducir la secuencia El usuario introduce su secuencia y se compara con la muestra Envía mensaje bluetooth al vehículo:Ha acertado o no Actualiza el contador de éxito: Counter1 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 9
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
10
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.
11
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 resultado 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:
12
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. 2. 3. 4.
Esperar y leer la pulsación de una tecla (g_sensorNum) Reproducir el sonido (g_playsound) Procesar y almacenar la lectura (g_convertNum) 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.
13
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.
14
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.
15
A partir de aqu铆 el bucle correspondiente al juego se inicia otra vez, con una nueva selecci贸n de nivel.
16
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.
17
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.
18
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. 19
8.-Instrucciones de montaje 8.2-La consola de juegos
20
21
22
23
24
25
26
27
28
29
30
31
8.2.-El vehĂculo
32
33
34
35
36
37
38
39