MONOGRÁFICO: Controlabot - Controlabot (2) |
EQUIPAMIENTO TECNOLÓGICO - Didáctica de la tecnología | |||||||||
Domingo, 01 Novembro 2009 00:00 | |||||||||
Páxina 2 de 7
CONTROLABOT (2)IntroducciónUna vez esté terminada la placa electrónica con su cableado, antes de conectarla al puerto del ordenador, podemos verificar visualmente, o mejor con un polímetro, que no existe ninguna soldadura defectuosa y que los cables están ordenados y relacionados con el pin del conector macho del puerto paralelo, según la numeración prevista. Probando la mini-tarjeta.Ya he comentado en el artículo anterior que voy a utilizar MSWLogo 6.3 (sin olvidarme instalar el fichero UserPort.sys en mi Sistema Operativo si éste es Windows 2000 ó XP) para realizar los programas que enciendan los leds de la mini-tarjeta. Aparte de conocer la sintaxis de un procedimiento en el lenguaje LOGO, es obligado utilizar la primitiva ESCRIBEPUERTO 888 dato, que sirve para enviar una salida desde el puerto paralelo del ordenador a la tarjeta, indicando el número correspondiente al led que quiere encenderse. Con un byte de información podemos enviar números decimales del 1 al 255, que aparecerán convertidos al código binario con el encendido en el display de unos u otros leds. La numeración en binario se ordena de derecha a izquierda con las potencias del número dos: el dato = 1 (salida 0 en la tarjeta, cable conectado al pin 2 del puerto) se corresponderá a 20, el dato = 2 (salida 1, cable en el pin 3) se refiere a 21,después vendrían sucesivamente los datos 4, 8, 16, 32, 64 y finalmente el dato = 128 (salida 7, cable en el pin 9) que significa 27. Cualquier número en decimal puede ser traducido a binario (e indicado en nuestra tarjeta) sumando los valores de datos anteriores: por ejemplo, 219 será la suma de 128 + 64 + 16 + 8 + 2 + 1, encendiéndose simultáneamente los leds numerados en mi tarjeta como 7, 6, 4, 3, 1 y 0. Una vez esté terminada la tarjeta con su cable conectado al puerto, en la barra inferior del programa MSWLogo teclearíamos ESCRIBEPUERTO 888 219, y después pulsaríamos el botón de ejecutar; para apagar los leds, tenemos que teclear ESCRIBEPUERTO 888 0 y si queremos que el encendido dure un tiempo concreto (por ejemplo, 5 segundos) intercalamos ESPERA 500 entre las dos instrucciones anteriores. Siempre es más correcto en LOGO crear procedimientos y almacenarlos en el Editor (botón Archivo Editar en la barra del menú), ya que aquí son más fáciles de probar y depurar; un ejemplo de procedimiento para realizar una secuencia luminosa sería: PARA LUCES ESCRIBEPUERTO 888 1 ESPERA 100 ESCRIBEPUERTO 888 128 ESPERA 100 ESCRIBEPUERTO 888 2 ESPERA 100 ESCRIBEPUERTO 888 64 ESPERA 100 ESCRIBEPUERTO 888 4 ESPERA 100 ESCRIBEPUERTO 888 32 ESPERA 100 ESCRIBEPUERTO 888 8 ESPERA 100 ESCRIBEPUERTO 888 16 ESPERA 100 ESCRIBEPUERTO 888 0 FIN Tecleando LUCES en la barra de ejecución, en la tarjeta observaríamos la secuencia de encendido de los leds 0, 7, 1, 6, 2, 5, 3, 4 durante un segundo cada uno, apagándose todos al final. Si queremos que la secuencia se repita una y otra vez, modificaríamos el procedimiento intercalando la palabra LUCES antes de FIN; ahora, dada la recursividad introducida en el programa, tendremos que pulsar sobre el botón Alto de la parte inferior derecha de la pantalla para poder detenerlo. (Nota: estoy utilizando las mayúsculas para la programación con la intención de facilitar la lectura del documento, ya que MSWLogo admite mejor la escritura en minúsculas). Los alumnos se sienten cómodos y se familiarizan rápidamente con el lenguaje LOGO, escribiendo al principio una serie de programas que definan con exactitud el número decimal que quieren que se exprese en binario en los leds correspondientes; así pueden crear simulaciones de estribillos musicales sencillos, intermitencias que imiten las luces de los establecimientos, de las atracciones de feria, de supuestas naves espaciales, de coches fantásticos, y por supuesto, de semáforos: PARA SEMAFORO ESCRIBEPUERTO 888 146 ESPERA 200 ESCRIBEPUERTO 888 36 ESPERA 50 ESCRIBEPUERTO 888 73 ESPERA 200 ESCRIBEPUERTO 888 0 ESPERA 10 FIN Escribiendo en la ventana de ejecución REPITE 5 [SEMAFORO] se creará una secuencia de cinco encendidos completos de nuestro particular semáforo. La primitiva REPITE he comprobado que es una de las favoritas de los alumnos y que la usan añadiendo números de repetición elevados en cuanto tienen definido algún procedimiento para su comprobación. Programación con variables de la mini-tarjetaLos procedimientos pueden ser mejorados, haciéndolos más flexibles, utilizando variables que modifiquen a nuestro antojo el tiempo de encendido o la salida que debe iluminarse. Si al procedimiento anterior lo denominamos LUCES :SEG y después en cada instrucción escribimos ESPERA :SEG, a partir de ahora el tiempo de encendido deja de tener un valor fijo de un segundo y se puede variar indicándolo al escribir en la barra de ejecución: por ejemplo, con LUCES 50 se encenderían los leds medio segundo. Un procedimiento de pocas líneas para la traducción de números decimales a binario podría ser: PARA NUMERO :LED ESCRIBEPUERTO 888 :LED ESPERA 500 ESCRIBEPUERTO 888 0 FIN Si tecleamos NUMERO 219 en la barra de ejecución, conseguiremos el mismo resultado en la tarjeta que con nuestro primer programa, pero con la ventaja de que ahora podemos expresar fácilmente en código binario, a través del encendido de los leds, cualquier número inferior a 256. Para utilizar dos variables a la vez bastaría con indicarlas en el título del procedimiento y después asignarle su valor al llamar al procedimiento en la barra de ejecución; en el siguiente ejemplo (que incorpora una recursividad) se encenderían unos leds cualesquiera, estableciéndose un parpadeo de tiempo a decidir por el programador: PARA PARPADEO :LED :SEG ESCRIBEPUERTO 888 :LED ESPERA :SEG ESCRIBEPUERTO 888 0 ESPERA :SEG PARPADEO :LED :SEG FIN Ahora hay que teclear dos números acompañando al título (como PARPADEO 36 50, que crea en mi tarjeta una luz intermitente amarilla de medio segundo de duración). A partir de este momento se abre un enorme abanico de posibilidades de programación, ya que además podemos añadir operaciones matemáticas que modifiquen los valores asignados de inicio a las variables. Un procedimiento a proponer a los alumnos sería el que enciende de uno en uno los leds de tarjeta, en este caso durante 20 centésimas de segundo : PARA SECUENCIA :LED ESCRIBEPUERTO 888 :LED ESPERA 20 SECUENCIA :LED*2 FIN El programa se iniciaría escribiendo en la barra de ejecución SECUENCIA 1 y no termina, debido a la recursividad, hasta que pulsemos el botón Alto. El valor 1 (que enciende el led 0) asignado a la variable en el inicio, se multiplica por 2 (led 1 encendido) en el primer ciclo recursivo, y este nuevo resultado vuelve a multiplicarse por 2 en la segunda recursividad, y así sucesivamente hasta que la variable valga 128 y se encienda el led 7. El recorrido del encendido de leds puede invertir su sentido utilizando en la división por la mitad de la variable (:LED/2), a la que de inicio asignaríamos el valor 128. Programación de la mini-tarjeta incluyendo el condicionalCualquier enunciado que se proponga en el taller para crear combinaciones matemáticas en el encendido de los leds, predispone a los alumnos a ejercitar el cálculo mental: se convierten así en sujetos activos de su aprendizaje al diseñar combinaciones originales de ráfagas luminosas que aumenten su tiempo de encendido en un sentido creciente, decreciente o integrando en un sólo procedimiento varios subprocedimientos que se sucedan uno tras otro (lo que más propiamente dicho se define como modularidad). A medida que las combinaciones se van haciendo más complejas, es necesario poner unos límites a los valores numéricos que alcanzan las variables tras sucesivos ciclos recursivos, ya que es la única manera de que la mini-tarjeta no se quede colgada y podamos continuar ejecutando instrucciones con ella. Podemos marcar un límite a la variable :LED escribiendo una línea en el programa que diga que SI (:LED >256) [ALTO], que ejemplifica la sintaxis de una instrucción condicional, en la que si se cumple el paréntesis, se ejecuta el procedimiento entre corchetes (en este caso se detiene la recursividad cuando en el display se supere la indicación en binario del número 256, tal como si pulsáramos el botón de la pantalla). Con el siguiente programa activaremos los leds de salidas de número par con RAFAGA 1, y las de número impar con RAFAGA 2 , con una duración de 30 centésimas para el encendido de los leds: PARA RAFAGA :LED SI (:LED >128) [ALTO] ESCRIBEPUERTO 888 :LED ESPERA 30 RAFAGA :LED*4 FIN Si nuestro propósito fuese alternar ambas posibilidades, teniendo en cuenta que todos los procedimientos y la denominación de sus variables queda almacenada en el Editor de MSWLogo, escribiríamos simplemente: PARA DOBLERAFAGA RAFAGA 1 RAFAGA 2 DOBLERAFAGA FIN También es interesante observar el resultado de operar con la suma o la resta para modificar la variable de tiempo en sucesivos ciclos recursivos, configurando aceleraciones o deceleraciones en el parpadeo de la mini-tarjeta, como el siguiente ejemplo, donde aprovecho la situación alternativa de mis leds por COLORES, para después ir aumentando los tiempos de activación en 10 centésimas: PARA COLOR :LED :SEG SI (:LED >128) [ALTO] ESCRIBEPUERTO 888 :LED ESPERA :SEG COLOR :LED*8 :SEG+10 FIN PARA COLORES COLOR 1 10 COLOR 2 40 COLOR 4 70 COLORES FIN ConclusiónEn esta segunda entrega del monográfico hemos podido comprobar la mini-tarjeta y practicar con la programación en lenguaje LOGO, automatizando su funcionamiento según lo que se denomina control en lazo abierto de un dispositivo, ya que sólo se modifican las variables de los programas sin tener en cuenta posibles perturbaciones externas o señales de entrada a través de los correspondientes pines de Estado del puerto paralelo. Todo el capítulo no deja de ser un paso previo, aunque necesario, para acercarnos a la robótica propiamente dicha, en la que se da por supuesto que deben detectarse señales desde sensores diseñados al efecto, que sean activados por contacto, variación de la luminosidad, etc.
|