domingo, 5 de julio de 2015

Sesión 4: Haciéndonos con la Programación en Mindstorm.

El aspecto más novedoso de nuestro robot, además del hecho de ser acometido por alumnado de Secundaria, es que se va a programar en lenguaje NXT 2.1 Programming (o en EV3 Programming en el prototipo para EV3). Se trata de un lenguaje asociado a eventos donde los comandos son bloques que se insertan en un circuito (que imita las barras Technics de Lego) de manera que se asemejen a la típica representación gráfica de los algoritmos. Los prototipos de los que partimos y lo demás que se ven en internet están programados en NXC, que es una versión del lenguaje de alto nivel C adaptada para programar el "brick" del Mindstorm. Es impensable enseñar a programar en C al alumnado de ESO en 24 horas de Andalucía Profundiza; y es más impensable que al alumnado le dé tiempo además a escribir el programa que resuelva el cubo: los códigos fuente utilizados en los prototipos originales tenían una extensión de 20 folios. No obstante, el programa en lenguaje Mindstorm sí tiene una dificultad y extensión apropiadas para el alumnado de Secundaria. Es frecuente que el alumnado de 4º de ESO haya trabajado con estos robotos en el área de Tecnología.

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:
  1. Negro
  2. Azul
  3. Verde
  4. Amarillo
  5. Rojo
  6. Blanco 
 Para ello hay que llevar un hilo (cuando es de datos numéricos, este hilo es de color amarillo) a la entrada de la bifurcación que se muestra. Las bifurcaciones suelen ser dobles: son el equivalente del comando "If...then...else" de cualquier lenguaje de programación. Estas bifurcaciones ofrecen dos "caminos" u opciones en función un dato o resultado recabado por el programa. Pero, si le conectamos un hilo de datos numérico, puede abandonar la vista plana y adoptar tantos "caminos" como queramos. Para ello, asignamos un valor numérico a cada "camino", del 1 al 6 en el ejemplo que se muestra a continuación, y dentro de ellos (a los que accedemos mediante la pestañita que se ve en la bifurcación) colocar la secuencia de bloques que queremos que ejecute en función del color que haya leído.


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.

No hay comentarios:

Publicar un comentario