Quizá haya llegado el momento de hablar del "brick" de Lego Mindstorm. Se trata de un dispositivo electrónico digital que se puede programar desde el ordenador vía cable USB para, luego, funcionar independientemente. El ladrillo (o "brick") tiene cuatro puertos de entrada (1, 2, 3 y 4) a los que conectar los sensores del robot (de contacto, de sonido, de ultrasonido, de luz, de color, de temperatura, de infrarrojos...) y de tres puertos de salida (A, B y C, más un cuarto puerto D en el EV3) a los que se conectan los servomotores. El ladrillo incluye también varias teclas para su manejo y una pantalla y un altavoz para mandar información al exterior de acuerdo al programa en ejecución. En la foto que sigue se muestra a la izquierda el ladrillo EV3 (más moderno) y a la derecha el ladrillo NXT.
El primer paso en nuestra programación es conocer el bloque "motor". Permite manejar los tres servomotores que se encargan de mover el brazo volteador/bloqueador, rotar la bandeja giratoria y acercar/alejar la articulación del triple sensor de color. Los alumnos aprendieron cómo distinguirlos a partir del puerto al que están enchufados en el "brick" Mindstorm NXT. Y cómo hacerlos girar en un sentido u otro, con un ángulo de giro determinado y con una velocidad deseada. También era importante saber cómo hacerlos girar durante un tiempo o dándoles un giro sin frenazo final (con flotación).
Así, el bloque motor mostrado en la figura haría girar al motor que está en el puerto B 360º en sentido horario (según se mire), con una velocidad del 75% de la máxima y frenando al final del recorrido (ver la configuración del bloque en la parte inferior de la pantalla).
Comprobaron también en sus prototipos qué motores eran los que se encargaban de cada elemento funcional y de cómo tenían que configurar el bloque del servomotor correspondiente para girar la bandeja 90º a la derecha (motor A), acercar el triple sensor de colores a la esquina delantera superior derecha del cubo (motor B) o para bloquear la capa superior del cubo mientras se hacía girar la inferior hacia la izquierda (motor C).
A continuación aprendieron a manejar el sensor de color. Los que lo conocían de haber trabajado en la paleta común (bloques básicos del lenguaje Mindstorm) sabían que los bloques sensor (de color naranja) se podían utilizar a modo de barrera o espera: una acción se mantenía en el tiempo hasta que uno de los sensores recibían una información del exterior que permitían pasar al siguiente bloque en la secuencia. Pero los que nos interesan son los bloques sensor (de color amarillo) de la paleta completa (bloques avanzados del lenguaje Mindstorm). Éstos devuelven un valor numérico o lógico que puede ser útil para decidir la acción a tomar.
El sensor de color puede hacer muchas cosas, pero una de ellas es devolver un valor numérico dependiendo del color que esté leyendo. A continuación, las concordancias número-color del sensor:
- Negro
- Azul
- Verde
- Amarillo
- Rojo
- Blanco
En el ejemplo arriba mostrado, si el lector de colores (que está conectado al puerto 1) detecta un color verde, mandará un valor numérico "3" a la bifurcación que ejecutará la secuencia 3 (se ve la solapa seleccionada un poco más clara). Dentro de esta secuencia, emitirá un sonido, mostrará algo en la pantalla del ladrillo Mindstorm (el mensaje "verde" sería muy apropiado) y no hará nada más hasta pasados 5 segundos.
Otra bloque fundamental es el "bucle": en general, la ejecución de cualquier programa informático se basa en bifurcaciones y bucles. Estos últimos son repeticiones de una secuencia de bloques que se producen hasta que se cumple una condición. Así pues, necesitan de un valor lógico para salir de él.
En el ejemplo arriba mostrado, el sensor de color (que está conectado al puerto 3) hace una lectura y manda el valor numérico obtenido a ser comparado con un valor definido en una constante (la maleta con el candado). Si el valor y la constante son iguales, se sale del bucle y aparece un dibujo en la pantalla del ladrillo. Si no lo son, se repite la lectura una vez por segundo (bloque espera o "retardo" con el dibujo del temporizador y el reloj de arena) hasta que valor y constante coinciden. Fijémonos en que el hilo de datos es de color verde al transmitir datos lógicos (1-0, verdadero-falso, sí-no, ...). No obstante, hay un fallo en el programa mostrado: la comparación debería haberse configurado para la opción "A igual a B" en vez de "A menor que B".
La paleta personalizada reúne los bloques que hemos bajado de internet y, lo más interesante, bloques que hemos creado nosotros combinando otros bloques de la paleta. Es el equivalente de las "macros" o "rutinas" y "subrutinas" de otros lenguajes. Esta paleta es fundamental en nuestro proyecto. Permite que el programa en desarrollo no alcance un tamaño descomunal que haga lento y lleno de errores su manejo. Por otro lado, que haya rutinas a las que recurramos constantemente y no tengamos que programarlas bloque a bloque es muy útil: sobre todo porque, si hay que corregir algo en estas rutinas, al hacerlo dentro del bloque personalizado ya vale para todas las veces que este bloque personalizado aparezca. Como veremos más adelante, todo nuestro programa se basa en bloques personalizados.
En la imagen superior se ve la paleta personalizada desplegada y parte del programa (22jun) que resuelve el cubo. Observamos también cómo este programa se basa casi exclusivamente en bloques de creación propia.
Ha llegado el momento de acceder al programa creado para este prototipo. Debe estar trufado de errores; pero no se trata tanto de bajarlo y ejecutarlo como de verlo y ver cómo se ha acometido esta programación simultáneamente a lo aprendido en este blog. Se puede descargar en este enlace.
Un vez descomprimido el fichero Rubik Infante copiamos y pegamos el fichero 22jun.rbt en la carpeta
Mis documentos / LEGO Creations / MINDSTORM Projects / Profiles / Predeterminado
Y los demás ficheros correspondientes a bloques de creación propia en
Mis documentos / LEGO Creations / MINDSTORM Projects / Profiles / Predeterminado / Blocks /Mis bloques
Partimos del supuesto de que tenemos el programa NXT 2.1 Programming, claro. Si no, no tenemos la aplicación necesaria en nuestro ordenador.
Hay muchos otros bloques interesantes, pero ya hablaremos de ellos a medida que vayan apareciendo en próximas entradas.