MONOGRÁFICO: Controlabot Imprimir
EQUIPAMIENTO TECNOLÓGICO - Didáctica de la tecnología
Domingo, 01 de Noviembre de 2009 00:00

En los nuevos currículos de Tecnología se incorporan contenidos relativos a el control y la robótica, sin tener en cuenta el elevado coste que supone, para los Centros o departamentos, la adquisición de nuevos equipos que permitan poder experimentar en el taller dichos contenidos con los alumnos .

CONTROLABOT (1)

Metodología clásica de la robótica en el taller de Tecnología.

En los nuevos currículos de Tecnología se incorporan contenidos relativos a el control y la robótica, sin tener en cuenta el elevado coste que supone, para los Centros o departamentos, la adquisición de nuevos equipos que permitan poder experimentar en el taller dichos contenidos con los alumnos .

La solución típica por parte del profesorado, consiste en aprovechar las dotaciones de tarjetas controladoras (tipo Inves, Enconor, CNICE) que se recibieron en los Institutos en los años 90 o quizás posteriores dotaciones de ladrillos Lego (adquiridas por las Consejerías de Educación de algunas Comunidades); el problema surge cuando existen insuficientes unidades de los equipos citados (con un precio mínimo de alrededor de 100 euros por unidad), de modo que es complicado que cada uno de los seis grupos de trabajo (compuesto de 4 ó 5 alumnos) con los que se organiza normalmente una clase en el taller de Tecnología, pueda disponer de su propia tarjeta o ladrillo.

Aunque cualquiera de estas circunstancias pueda solventarse por parte del profesor, con estrategias metodológicas diversas e imaginativas que aprovechen nuestros siempre escasos recursos, creo que todos estamos de acuerdo en que son contenidos que deben ser tratados dignamente, ya que además suponen para muchos chicos y chicas, el punto de partida para ser atraídos hacia estudios tecnológicos posteriores.

Las tarjetas controladoras a las que me he referido anteriormente, utilizan el lenguaje LOGO para su programación, y para funcionar, se conectan con el ordenador a través del puerto serie (Enconor) o paralelo (Inves, CNICE); además se necesita cargar un programa de cierta complejidad que las permita entenderse con el ordenador y con el software de programación correspondiente.

En este punto es, en mi opinión, donde los alumnos (y sobre todo las chicas) se asustan con la robótica, perdiendo muchos el interés hacia los conocimientos relativos al ámbito de la Tecnología, la cual se muestra conceptualmente inabordable. Pasan de un modo súbito, dsde montar sencillos circuito eléctricos (por ejemplo, un mando con pulsadores conectado mediante un cable a un dispositivo móvil) o electrónicos (tipo sensores de luz con transistor y relé para activar un motor incidiendo en una LDR con una linterna) que pueden llegar a comprender, hasta trabajar con una tarjeta comercial llena de elementos electrónicos, componentes integrados y relés, es decir, de circuitería excesivamente compleja.

No cabe duda del potencial que tienen estas tarjetas para automatizar todo tipo de proyectos utilizando sus entradas y salidas digitales o analógicas, pero creo que es de sumo interés que además los alumnos comprendan qué está pasando en cada dispositivo utilizado (así como a través de los cables con los que se conectan al ordenador) cada vez que se ejecuta una instrucción de programación.

Aprovechando los ordenadores antiguos.

En los ordenadores o portátiles de última generación prácticamente han desaparecido los puertos de conexión con periféricos de tipo paralelo o serie, siendo sustituidos por el puerto USB. Entender el funcionamiento de los dos últimos citados resulta difícil incluso para cualquier profesor del área, sin embargo ocurre justo lo contrario con el puerto paralelo que, a grandes rasgos, puede ser explicado a los alumnos y ser utilizado por ellos con soltura, tanto para establecer su cableado, como para programar a través de él.

Cualquier ordenador antiguo (incluso con procesador Pentium I) que disponga de puerto paralelo, puede ser utilizado para el desarrollo de las prácticas y circuitos que pasaré a describir a lo largo de este monográfico; no se necesitan tampoco requerimientos especiales de memoria Ram, excepto la que permita poner a funcionar el sistema operativo (desde Windows 95). Es importante saber que si nuestro sistema operativo va a ser el 2000 ó el XP, debemos instalar un fichero especial en el sistema, tal y como se explica al descargar la aplicación gratuita “UserPort” (existen otras, pero esta es la más recomendable).

Dicho de otro modo, podemos aprovechar un montón de ordenadores desechados del aula de informática de nuestro Instituto o inutilizados por los profesores y por los mismos alumnos debido, sobre todo, a su incapacidad de conectarse en buenas condiciones a Internet; además existen en el mercado virtual muchos sitios donde adquirir equipos de segunda mano a muy bajo coste, y con garantía de al menos un año.

Breve introducción al puerto paralelo.

Al ser un puerto inventado por los ingenieros de IBM para conectar una impresora a los primeros ordenadores allá por 1981, tiene desde mi punto de vista, un carácter tecnológico muy primitivo que le proporciona un gran atractivo hoy día. Durante su funcionamiento se transmite un byte de información digital en cada instrucción efectuada desde el ordenador y los 8 bits que lo componen se transmiten a la vez (en paralelo) y desde su correspondiente pin numerado del puerto; en cada uno de ellos se podrá conectar un cable que nos lleve una señal digital desde el ordenadorhasta el dispositivo exterior que queramos controlar.

El puerto tiene 25 pines clasificados en cuatro grupos: ocho pines de salida o de Datos (del número 2 al 9), ocho de puesta a tierra (del número 18 al 25), cinco de entrada o de Estado (del 10 al 13 y el 15) y cuatro pines de Control (que no usaremos). Como consecuencia tenemos la posibilidad de enviar 8 señales electrónicas desde el ordenador y de detectar fácilmente hasta 5 señales desde el exterior; para ello bastará utilizar un cable para cada uno de estos pines, junto con uno más, conectado a los pines de masa (GND).


Los diodos led que voy a montar en mi placa electrónica, a modo de display, se van a alimentar únicamente con la corriente proporcionada por las propias salidas del puerto, es decir, sin necesidad de baterías externas: en la mayoría de los PC el puerto paralelo proporciona corriente suficiente (unos 20 mA) para una clara indicación visual de los diodos.

Como primer ejemplo, la programación del encendido de un diodo led sólo necesitaría de dos cables, lo que configura un circuito electrónico elemental (y conocido por los alumnos) compuesto por el ordenador (que hace de fuente de alimentación), cable de salida, resistencia de protección (que puede ser de valor 220 ohmios), diodo led y cable de puesta a tierra. Si queremos programar tres leds de distintos colores a modo de semáforo, sólo necesitaremos tres cables de salida más uno común de puesta a tierra, pasando el circuito a tener una configuración en paralelo: enlazamos así el mundo del control con los conceptos más básicos del estudio de la electricidad. Finalmente, si conectamos 8 diodos leds (con su resistencia de protección) tendremos que utilizar 9 cables para programar sus secuencias de encendido desde el puerto.

En las tiendas de electrónica pueden adquirirse conectores macho de 25 pines con los que fabricarse un cable que sirva para unir nuestros dispositivos con el puerto hembra del ordenador: es una opción que considero mucho más didáctica que el utilizar cables de tipo paralelo con su cableado completo y oculto; otra alternativa interesante puede ser pelar la funda exterior de algún cable paralelo standard antiguo y dejar sólo los cables del interior correspondientes a los pines que se vayan a utilizar.

Para programar con los alumnos recomiendo utilizar el lenguaje LOGO a través del programa de distribución gratuita MSWLogo en su versión 6.3c (anterior y distinta de la última desarrollada por el CNICE, que es la 6.5 y que sirve para las controladoras comerciales). Las ventajas frente a otros lenguajes de programación son la sencillez de su sintaxis, su vocabulario en castellano y , por supuesto, la facilidad que tiene el usuario para comunicarse con el puerto paralelo.

Construcción de una mini-tarjeta con 8 leds.

Para elaborar una pequeña tarjeta con 8 diodos led (cada bit de información va ha ser visualizado en un led de salida) basta con conectar cada uno de ellos en serie con una resistencia de unos 300 ohmios sobre un pletina de pruebas de fibra de vidrio con topos de soldadura (de venta en cualquier tienda de componentes electrónicos). Los tamaños standard de una pletina pequeña suelen ser de 77 x 90 mm ó de 100 x 80 mm, pero para esta experiencia bastará con utilizar una mitad (puede cortarse fácilmente con una sierra de metal).

Lo más correcto, dado que así aparecen en las tarjetas comerciales, sería utilizar diodos leds del mismo color ordenados en línea y con la salida correspondiente al pin 2 del puerto conectado al led situado más a la derecha; esta disposición tiene la ventaja de permitir que los alumnos entiendan fácilmente el paso de la numeración en código decimal a código binario, lo cual supone su iniciación en el mundo digital.


En mi caso he decidido realizar la tarjeta en un cuadrado de 5 x 5 cm (que descubrí que me cabía en un envase de plástico de los utilizados en los bricolajes para clasificar tornillos) y disponiendo los leds en dos líneas, ligeramente desplazadas, con una secuencia de colores rojo – verde – amarillo; además he utilizado una pletina con tiras de cobre cada 5 mm para así reducir el número de soldaduras; por contra, hay que eliminar algunas partes de la tira de cobre (utilizando la punta de una tijera o un cutter) para evitar cortocircuitar los diodos o las resistencias. Al colocar los componentes, he tratado de crear dos líneas transversales de eliminación del cobre en cada tira (como puede observarse en la foto).


El circuito tiene un esquema simbólico sencillo, repitiéndose ocho veces la conexión: cable del pin de un dato, diodo led (polarizado correctamente), resistencia de protección (que puede también situarse antes del led) y conexión común al cable de puesta a tierra, realizada en mi caso con grapas soldadas a las pistas, de modo que unen las ocho líneas transversalmente para terminar en una novena pista en el extremo de la placa donde conectar el cable de masa que vuelve al pin 18.


Para conectarme con el ordenador he utilizado un cable paralelo antiguo que he dejado con una longitud de más o menos 1 m; después de quitar su vaina exterior y su empantallado de aluminio, he cortado todos los cables sobrantes conectados a los pines que no voy a utilizar y sólo he dejado los que van del pin 2 al 9 más el de masa (aunque no se si es del todo necesario, yo he unido con un cable todos los pines de puesta a tierra, del 18 al 25). El último paso ha sido soldar cada cable a su pista correspondiente, aunque previamente, para asegurar su resistencia a más que posibles tirones, he anudado los hilos de cada cable tras hacerlos pasar por dos orificios contiguos de la placa.



Conclusión

Hasta aquí queda descrito el modo de construcción de la tarjeta, dejando para los próximos capítulos de este monográfico la parte de su puesta en funcionamiento, con ejemplos de programación, así como el conexionado de sensores a los denominados pines de entrada o Estado.

 


CONTROLABOT (2)

Introducción

Una 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-tarjeta

Los 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 condicional

Cualquier 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ón

En 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.

 


CONTROLABOT (3)

Introducción

En los dos capítulos anteriores de este monográfico, hemos aprovechado la facilidad de programar salidas desde el puerto paralelo para encender los leds de una mini-tarjeta diseñada para tal efecto, pero cabe recordar que disponemos de 5 pines donde conectar señales de entrada digitales para crear variaciones en nuestros programas cuando dichas entradas se accionen, es decir, cuando por ejemplo se cierre un pulsador al presionarlo.

Conexión a los pines de Entrada del puerto paralelo

Ya sabemos que el puerto paralelo proporciona 5 voltios de tensión en sus pines de salida, y también podemos decir que los pines de entrada son como un borne eléctrico que tuviera por defecto dicho potencial, con lo que al cerrar un circuito entre dos pines del puerto provocamos que una pequeña corriente recorra un cable fino (en el que intercalaríamos una resistencia) que una el pin de entrada (que hace las veces de un polo positivo) con el pin de masa (polo negativo). Al no existir alimentación externa, los riesgos de dañar el ordenador son mínimos, ya que en mi opinión, es como si estuviera el puerto paralelo autodetectándose.

El circuito de un sensor digital más sencillo, estará constituido por un pulsador (yo he escogido para mi montaje uno de tipo fin de carrera) en serie con una resistencia de 100 ohmios; desde la patilla libre de ésta saldrá un cable que se conecte al pin 25 (de puesta a tierra) del conector macho del puerto paralelo que he utilizado en la mini-tarjeta, y desde la patilla libre del pulsador saldrá otro cable que me lleve hasta el pin 13, que es el que detectará cuando, el circuito que acabo de configurar, está abierto o cerrado.



He repetido el montaje con otro fin de carrera conectando su cableado correspondiente a los pines 12 (entrada) y 24 (masa), disponiendo así de dos entradas que, contando con la posibilidad de pulsar los dos a la vez, me permitan tener al menos tres combinaciones de detección. Una vez terminemos de soldar los elementos y los cables, tendremos la posibilidad de interactuar con la mini-tarjeta durante la ejecución de nuestros programas; el circuito electrónico completo tendría la siguiente representación simbólica:


Escritura de programas que interpreten las señales de entrada

La primitiva de LOGO con la que podemos conocer el estado de las entradas del puerto paralelo es LEEPUERTO 889, de tal modo que si lo escribimos en la barra de ejecución, el programa MSWLogo nos devuelve una respuesta, que queda registrada en su ventana de Trabajo, y que en el caso de no estemos accionando ningún pulsador de entrada, dice literalmente: “No me has dicho que hacer con 120” ; éste valor numérico en código decimal, es la traducción de la información en forma de byte “01111000” código máquina que entiende el ordenador y que, en este caso, significa que no detecta nada en el puerto en entrada;con dos pulsadores conectados, podremos leer los siguientes mensajes numéricos en la ventana de Trabajo:

Entrada pulsada

Mensaje decimal

Byte en el puerto

Pin 13

104

“01101000”

Pin 12

88

“01011000”

Pines 12 + 13

74

“01001000”

Se observa como al ser presionado cada pulsador o ambos, el bit en el puerto pasa del estado en código binario “1” al valor cero“0”, es decir, según una lógica negativa, justo al contrario de la lógica positiva con la que se programan los pines de salida. Conociendo los valores de la tabla y recordando la expresión condicional utilizada en el lenguaje LOGO que ya utilicé en el capítulo anterior de este monográfico, escribiremos programas con la siguiente sintaxis:

PARA PULSADORES :SEG

SI ((LEEPUERTO 889) =”120) [ESCRIBEPUERTO 888 0]

SI ((LEEPUERTO 889) =”104) [ESCRIBEPUERTO 888 (128+16+2) ESPERA :SEG]

SI ((LEEPUERTO 889) =”88) [ESCRIBEPUERTO 888 (64+8+1) ESPERA :SEG/2]

SI ((LEEPUERTO 889) =”74) [ESCRIBEPUERTO 888 (32+4) ESPERA :SEG*2]

PULSADORES :SEG

FIN

En este programa sencillo visualizaremos en la tarjeta el encendido, durante tiempos cambiantes con la variable, de los leds agrupados por colores (para el caso de esta mini-tarjeta): los verdes si pulsamos el pin 13, los rojos con el pin 12 y los amarillos si pulsamos 12 y 13 a la vez. La primera línea del procedimiento sirve para apagar los leds hasta la siguiente pulsación, pero como existe recursividad, el procedimiento permanece activo hasta que hagamos click en el botón Alto de la pantalla de MSWLogo.


Dentro de los corchetes de la expresión condicional de PULSADORES, podremos incluir cualquiera de los programas que probé en la segunda entrega de este monográfico, ya que todos procedimientos que realicemos para la mini-tarjeta se pueden guardar agrupados en un solo fichero en el disco duro del ordenador, lo que permite aprovechar las variables :LED y :SEG (u otras con el nombre que se quiera, pero siempre indicadas con los dos puntos antes de la primera letra), que ya utilizamos anteriormente:

PARA SECUENCIANDO

SI ((LEEPUERTO 889) =”120) [ESCRIBEPUERTO 888 0]

SI ((LEEPUERTO 889) =”104) [SEMAFORO]

SI ((LEEPUERTO 889) =”88) [LUCES]

SI ((LEEPUERTO 889) =”74) [NUMERO 129]

SECUENCIANDO

FIN

Conviene que los procedimientos entre corchetes no dispongan de su propia recursividad, ya que no se observarían cambios en el funcionamiento de la mini-tarjeta mientras el procedimiento SECUENCIANDO continúe activo, a pesar de que pulsemos en las entradas.

Nueva propuesta de mini-tarjeta controladora

Dado lo económico (menos de 6 euros) que va ha suponer elaborar este tipo de placa electrónica, podemos proponer a los alumnos que realicen su propia mini-tarjeta y que dispongan los diodos de manera lógica (sin desordenar la numeración de las salidas), pero con un cierto grado de libertad en su colocación (delimitando un cuadrado, en diagonal, haciendo una línea quebrada, combinando colores, etc.). El inconveniente principal de este proyecto sería el de un consumo excesivo de cables paralelos pelados (en función del número de grupos de alumnos del Centro), lo que se soluciona utilizando un conector de 25 pines acodado para pinchar en la placa (lo he escogido de tipo macho, pues voy a utilizar los cables paralelos de las controladoras del taller).

Aunque tenemos dos líneas en dicho conector con trece y doce pines, nos basta con utilizar la línea de trece pines completa (que consta de 8 pines de salida y 4 de entrada) junto con el pin 25 (de la otra línea) para la puesta a tierra, el cual ligeramente doblado, lo podremos alinear con los anteriores; todos los demás pines (incluido el 1) pueden ser recortados ya que no vamos a utilizarlos y además, nos impedirían pinchar nuestro nuevo conector en las placas estándar.



Como ejemplo, he realizado una mini-tarjeta sobre una placa recortada de 4,5 x 7 cm, sobre la que he dispuesto los diodos leds configurando tres líneas diagonales paralelas de dos, cuatro y dos diodos, que me permitirán realizar distintas figuras luminosas; además, sus colores se ordenan agrupados (tres rojos, dos amarillos y dos verdes) en orden creciente al valor del bit de salida. Cada uno de los diodos led se conecta en serie con una resistencia de 220 ohmios, las cuales deben conectarse al pin 25 de masa, tal como ya se explicó en el primer capítulo de este monográfico.


Si bien la placa sobre la que se realiza el montaje dispone de una trama de topos de cobre cada 2,5 mm donde se supone que se pueden soldar los componentes, yo he optado por doblar las patillas de diodos y resistencias sin recortar, aprovechando su rigidez, para soldarlas alineadas directamente entre sí bajo la placa, incluso para llegar hasta cada pin correspondiente del conector. La conexión a masa de las patillas de las resistencias que cierran cada circuito las he soldado entre sí, volviendo por la superficie de la placa con un cable de cobre negro hasta el pin 25 del conector.

He querido completar la mini-tarjeta aprovechando al menos dos de las entradas digitales de las cuatro posibles que me posibilitan los pines 10 al 13, eligiendo precisamente estas dos extremas; para su activación utilizaré dos mini pulsadores de cuatro patillas, conectados en serie con resistencias de 220 ohmios. El circuito simbólico completo vuelve a ser el mostrado justo antes del inicio del apartado b) de este capítulo, cambiando el pin 12 por el 10, por lo que las posibilidades de programación ahora quedarían así:

Entrada pulsada

Mensaje decimal

Byte en el puerto

Pin 13

104

“01101000”

Pin 10

56

“00111000”

Pines 10 + 13

40

“00101000”


Podemos probar esta nueva mini-tarjeta con distintos programas como, por ejemplo, el de simulación de un carrusel de luces de tiempo variable, el encendido de una “flecha” o el parpadeo de dos “comillas”:

PARA FLECHA :SEG

ESCRIBEPUERTO 888 (1+2+8+32+64+128) ESPERA :SEG

ESCRIBEPUERTO 888 0 ESPERA :SEG

FIN


PARA COMILLAS :SEG

ESCRIBEPUERTO 888 (4+32+128) ESPERA :SEG

ESCRIBEPUERTO 888 0 ESPERA :SEG

ESCRIBEPUERTO 888 (2+16+64) ESPERA :SEG

ESCRIBEPUERTO 888 0 ESPERA :SEG

ESCRIBEPUERTO 888 (4+32+128+2+16+64) ESPERA :SEG

ESCRIBEPUERTO 888 0 ESPERA :SEG

FIN


PARA CARRUSEL :SEG

ESCRIBEPUERTO 888 1 ESPERA :SEG

ESCRIBEPUERTO 888 2 ESPERA :SEG

ESCRIBEPUERTO 888 16 ESPERA :SEG

ESCRIBEPUERTO 888 64 ESPERA :SEG

ESCRIBEPUERTO 888 32 ESPERA :SEG

ESCRIBEPUERTO 888 4 ESPERA :SEG

ESCRIBEPUERTO 888 0

FIN

PARA BOTONES

SI ((LEEPUERTO 889) =”120) [ESCRIBEPUERTO 888 0]

SI ((LEEPUERTO 889) =”104) [CARRUSEL 50]

SI ((LEEPUERTO 889) =”56) [FLECHA 100]

SI ((LEEPUERTO 889) =”40) [COMILLAS 30]

BOTONES

FIN

El último programa integra los tres primeros posibilitando, a través de los pulsadores, que se ponga en marcha uno u otro, convirtiendo a la mini-tarjeta en un moderno panel de leds a escala reducida.

Conclusión

La posibilidad de que cada grupo de alumnos diseñe su propia placa, va a provocar que disfruten de su propia y original lista de programas consecuencia de la experimentación con distintas combinaciones luminosas, y como consecuencia, la motivación o curiosidad por estos contenidos de la Tecnología irán en aumento. Una vez dominada la programación de figuras luminosas, será el momento de pasar a escribir procedimientos menos caprichosos en los que se busquen combinaciones matemáticas, como los propuestos en el capítulo anterior.

 

 


CONTROLABOT (4)

Introducción

Hasta el momento hemos programado con una mini-tarjeta añadiendo pulsadores para aprovechar la capacidad de detección de entradas digitales que posee el puerto paralelo; las posibilidades de crear programas combinando estas señales se podría aprovechar en algún dispositivo de salida más completo, de mayor robustez, y donde aparezcan los pulsadores ordenados y sujetos a la base de una pequeña tarrina de plástico (de las utilizadas para la conservación de alimentos).

Propuesta de construcción de un display de 7 segmentos

Si duplico el número de leds (conectados en paralelo) en cada circuito de salida, manteniendo una sola resistencia de protección para ambos, puedo imitar a un display de siete segmentos y diseñar un “contador luminoso” (imitando a los displays de 7 segmentos comerciales) en el que se puedan representar los números del 9 negativo al 9 positivo: las salidas 1 a 7 del puerto paralelo configuran los segmentos del display y la salida 0 la utilizo para representar el signo negativo. Esta disposición de los leds no sólo me sirve para representar números (o secuencias programadas de operaciones matemáticas sencillas), sino que también puedo mostrar algunas letras en mayúscula del alfabeto (A, C, E, H, etc.) con las que visualizaré palabras o mensajes, una vez que se escriban los programas correspondientes.


Aunque en un primer vistazo el esquema electrónico parezca complicado, realmente la dificultad del montaje consiste en la diferenciación, para cada par de diodos led, entre las uniones en paralelo de ánodos y cátodos, y sobre todo, las conexiones entre todos éstos para formar un único camino que cierre el circuito en el pin 25 del conector paralelo (que hace de polo negativo del conjunto); en resumen, lo que tenemos es un conjunto de 8 circuitos independientes con “pin datos + resistencia + 2 leds en paralelo + conexión a masa”.


He recortado una placa de fibra de vidrio estandar (con topos para la soldadura cada 2,54 mm), con unas dimensiones de 6,5 x 8,5 cm, y sobre la que he ido colocando ordenadamente los leds (observando la polaridad que corresponda a cada par, según el esquema electrónico); las distancias en vertical y horizontal son de unos 0,5 cm, tal como puede apreciarse en la fotografía. A continuación he colocado las resistencias (de 220 ohmios) sin recortar sus patillas, pues las aprovecho como camino eléctrico hasta el ánodo del diodo led al que deba conectarse cada pin del conector para cable paralelo.

Las primeras soldaduras que voy a acometer cuando le de la vuelta a la placa, tienen que ser, como he subrayado antes, las de ánodos y cátodos de cada par de leds; después conecto las resistencias, por un lado,a cada pin del conector paralelo (soldado en la cara inferior de la placa) y por otro, al ánodo de los diodos correspondientes. Pintado con rotulador negro puede apreciarse en la fotografía el camino de unión de los cátodos con el pin 25 del conector: lo he realizado doblando y soldando entre sí las patillas de aluminio de los diodos y aprovechando las zonas de holgura entre componentes para evitar contactos indeseados.


Los cables de colores que se aprecian en la imagen anterior me conectarán la placa con los pulsadores. Para la construcción propiamente dicha del contador, se necesita tener acabada la placa de leds y así poder marcar con precisión en la base de la tarrina, la posición de los agujeros donde se alojan los diodos, los pulsadores y los tornillos que servirán para fijar la placa; en la cara lateral se recortará un hueco por el que asome su conector paralelo (elegido de tipo macho como en las controladoras comerciales).


Ejemplos de programas con el display

Aunque la construcción de esta nueva tarjeta resulta más laboriosa, una vez puesta a funcionar va a ser menos compleja en su programación, ya que basta con plantear, para cualquier dígito o letra que se desee representar en ella, una simple suma de números correspondientes a las salidas. La siguiente tabla resume esta idea, indicando por separado pero dentro de una suma (que a su vez estará en los procedimientos dentro de un paréntesis tras la primitiva ESCRIBEPUERTO 888), el número en decimal que enciende cada led con el que se compone un número, una letra mayúscula o un signo:

Número

Salidas en decimal

Letra

Salidas en decimal

0

2+4+8+32+64+128

A

2+4+8+16+32+64

1

4+64

C

2+8+32+128

2

2+4+16+32+128

E

2+8+16+32+128

3

2+4+16+64+128

F

2+8+16+32

4

4+8+16+64

H

4+8+16+32+64

5

2+8+16+64+128

J

4+32+64+128

6

2+8+16+32+64+128

L

8+32+128

7

2+4+64

P

2+4+8+16+32

8

2+4+8+16+32+64+128

U

4+8+32+64+128

9

2+4+8+16+64

+

1+8+16+32

Para conectarme al ordenador voy a buscar un cable paralelo comercial, aunque sólo utilice en el conector la línea de los trece primeros pines junto con la número 25 del pin de masa, como ya sabemos. Un ejemplo de programa sencillo y original, que nos permita comprobar el perfecto funcionamiento de la tarjeta, podría ser un contador de potencias de dos, la secuencia de la resta ( 9 – 6 = 3) o una intermitencia:

PARA DECIMALBITS :SEG

ESCRIBEPUERTO 888 (4+64) ESPERA :SEG

ESCRIBEPUERTO 888 (2+4+16+32+128) ESPERA :SEG

ESCRIBEPUERTO 888 (4+8+16+64) ESPERA :SEG

ESCRIBEPUERTO 888 (2+4+8+16+32+64+128) ESPERA :SEG

ESCRIBEPUERTO 888 0

FIN

PARA RESTA

ESCRIBEPUERTO 888 (2+4+8+16+64) ESPERA 100

ESCRIBEPUERTO 888 1 ESPERA 100

ESCRIBEPUERTO 888 (2+8+16+32+64+128) ESPERA 100

ESCRIBEPUERTO 888 (16+128) ESPERA 100

ESCRIBEPUERTO 888 (2+4+16+64+128) ESPERA 100

ESCRIBEPUERTO 888 0

FIN

PARA AROS :SEG

ESCRIBEPUERTO 888 30 ESPERA :SEG

ESCRIBEPUERTO 888 0 ESPERA :SEG/2

ESCRIBEPUERTO 888 240 ESPERA :SEG

ESCRIBEPUERTO 888 0 ESPERA :SEG/2

AROS :SEG+10

FIN


La riqueza o el nivel de complicación de los programas aumenta enormemente al terminar de conectar los cuatro pulsadores a la tarjeta de leds y resistencias, según el esquema electrónico representado en el inicio de este capítulo. Puedo utilizar un número mayor de mensajes en la entrada de la tarjeta y las nuevas combinaciones de pines (no recogidas en el capítulo anterior) quedan resumidas en el cuadro:

Entradas pulsadas

Mensaje decimal

Byte en el puerto

Pin 11

248

“11111000”

Pines 11+10

184

“10111000”

Pines 11+12

216

“11011000”

Pines 11+ 13

232

“11101000”

Pines 10+12

24

“00011000”

Pines 10+12+13

8

“00001000”

Pines 11+10+12

152

“10011000”

Pines 11+10+13

168

“10101000”

Pines 11+12+13

200

“11001000”

Pines 11+10+12+13

136

“10001000”

Como puede observarse en la tabla, al utilizar el Pin 11 se produce una cierta novedad en los mensajes decimales de entrada que a los que estábamos acostumbrados, ya que es la única entrada que tiene lógica positiva, produciendo su pulsado las combinaciones numéricas más elevadas. He destacado en negrita como varían los bits, teniendo en cuenta la posición desordenada y decreciente que tiene la numeración de los pines con respecto a la expresión binaria que define el mensaje decimal. (en el primer capítulo de este monográfico puede verse un diagrama acerca de la función de cada uno de los 25 pines del cable paralelo y su nomenclatura).


Una vez finalizada la construcción del contador, y tras descubrir cuáles son las posibles combinaciones numéricas de entrada, puede proponerse a los alumnos que escriban sus propios programas (interactuando o no con los pulsadores): contadores crecientes y decrecientes, palabras (secuenciando la iluminación de sus letras), restas o sumas sencillas, intermitencias de símbolos, etc.

PARA HOLA

SI (LEEPUERTO 889) = “120) [ESCRIBEPUERTO 888 0]

SI (LEEPUERTO 889) = “248) [ESCRIBEPUERTO 888 (4+8+16+32+64) ESPERA 100]

SI (LEEPUERTO 889) = “184) [ESCRIBEPUERTO 888 (2+4+8+32+64+128) ESPERA 100]

SI (LEEPUERTO 889) = “152) [ESCRIBEPUERTO 888 (8+32+128) ESPERA 100]

SI (LEEPUERTO 889) = “136) [ESCRIBEPUERTO 888 (2+4+8+16+32+64) ESPERA 100]

HOLA

FIN

El objetivo de este ejemplo es mezclar la información aportada en los dos cuadros anteriores ( y reflejar así las múltiples ideas que pueden surgir de programación del display) para iluminar secuencialmente la palabra HOLA presionando los botones de las entradas con uno, dos, tres o cuatro dedos a la vez.

Conclusión

Los ejemplos de uso display que se ha descrito en este capítulo, nos muestra desde otro punto de vista, las posibilidades de programación del lenguaje LOGO, en mi opinión, con un enfoque posiblemente más adaptado a lo que la mayoría de los alumnos de hasta 3º ESO son capaces de descubrir por sí mismos, es decir, sin que el profesor tenga que estar constantemente explicando o supervisando sus programas.

 


CONTROLABOT (5)

Introducción

El objetivo final de este monográfico es la construcción de un dispositivo móvil, dotado de sensores y reprogramable a través del puerto paralelo. Con el desarrollo de estos primeros capítulos adquirimos los conocimientos técnicos y teóricos que nos permitirán lograr dicho objetivo, si bien nos interesa además experimentar con una serie de dispositivos típicamente utilizados en las aulas de Tecnología y de fácil adquisición en las tiendas de electrónica, incluyendo el control de pequeños motores.

Los drivers en robótica

La corriente suministrada por el puerto, que hasta ahora utilizábamos para encender leds, es insuficiente para accionar un pequeño motor; la solución para que funcionen es añadir una alimentación de voltaje externa, pero a través de un nuevo componente electrónico denominado genéricamente en robótica como “driver”.

En un monográfico anterior denominado “Robot-bichos digitales” explicaba como crear una tarjeta de control con transistores darlington TIP 120 y TIP 125 combinados formando un esquema electrónico de “puente en H”. Sin embargo, existen circuitos integrados comerciales que incorporan esta disposición en H, ya que es muy utilizada en robótica; de entre los más comunes yo he escogido el TC-4424. Se trata de un driver de rápida respuesta, económico, que incorpora diodos de protección (necesarios en nuestro caso para no dañar el puerto paralelo del ordenador) y sólo 8 patillas, con lo que se facilita enormemente su conexionado y la explicación de su funcionamiento a los alumnos; como cada motor necesita un integrado para su control, también se detectan rápidamente los posibles fallos en el accionamiento del móvil.


En el esquema de conexionado del driver se observa que a un lado se disponen las patillas donde se soldarían los cables de salida provenientes de los pines del puerto paralelo, y del otro, las patillas que deben unirse a los cables del motor; las dos patillas, una a cada lado, que se alternan con las anteriores son para la conexión con el portapilas (teniendo en cuenta la polaridad) y quedan dos últimas patillas extremas sin utilidad, ya que están desconectadas del circuito interno de las anteriores.

Diseño de una tarjeta para robótica de reducidas dimensiones

Como ya planteé en las propuestas de mini-tarjetas controladoras de los capítulos anteriores, podemos conectarnos al puerto paralelo de ordenador con un cable standar grueso, o podemos pelarlo y eliminar todos los cables correspondientes a los pines que no vayamos a utilizar; en mi primera propuesta de tarjeta con drivers utilizaré la segunda opción ya que es más fácil de entender y confeccionar.

La tarjeta que he diseñado tiene de dimensiones cuadradas de 4,5 cm, y pistas de cobre en su cara inferior cada 5 mm (cada dos perforaciones). Para su elaboración situaré los dos drivers en la zona central (pinchados sobre un zócalo), haciendo coincidir las patillas de datos con las pistas de cobre, con una separación entre ellos de 1,5 cm y dejando a ambos lados al menos 3 pistas libres (a través de las que posteriormente ampliaré las posibilidades de funcionamiento con la incorporación de sensores).


Con el cable paralelo ya pelado, dejaré solamente los cables correspondientes a los cuatro primeros pines de datos de salida, los pines 12 y 13 de entrada y el pin 25 de masa (cortocircuitado con el resto de los de puesta a tierra del conector); en total 7 cables que en su otro extremo soldaré (con una disposición simétrica) al mismo número de pistas de cobre en la tarjeta, haciendo coincidir cada par de cables de datos con las patillas de su driver.

En el siguiente paso uniré, con un cable fino rígido, las patillas de idéntica polaridad a ambos lados de los drivers, para después pelarles en una zona intermedia, en la que soldaré un trozo de cable que atraviese por un agujero de la placa coincidente con una pista de cobre de las situadas en el espacio entre los drivers: de este modo he definido cuáles serán las pistas a las que conectaré la alimentación de las pilas.


Para poder enlazar los cables de los motores y el portapilas con la pistas correspondientes de la placa voy a utilizar tres regletas dobles de circuito impreso (cuya distancia de separación entre patillas coincide con la distancia entre pistas de cobre) que situaré por delante de los drivers (coincidiendo con las patillas de salida a los motores), y también entre ellos (sobre las pistas citadas en el párrafo anterior).

El penúltimo paso será resolver el conexionado de sensores a la placa, para lo que he optado por utilizar tres pines metálicos alineados donde podré pinchar los cables que se conectan a los sensores; uno de los pines metálicos de cada lado (el más extremo) se debe conectar a la pista correspondiente al cable del puerto paralelo de cada entrada (número 12 a un lado y 13 al otro), mientras que las otras dos se unen, mediante cables en superficie, con las pistas de los polos positivo y negativo de la alimentación.

Antes de dar la placa por finalizada debo cortar las pistas de cobre justo debajo de cada driver (ya que sino entradas y salidas estarían conectadas, inutilizando el dispositivo) y también delante de las regletas de los motores (por precaución).



Construcción de un robot-explorador

Antes de comprobar la tarjeta para el control de pequeños motores diseñada en el capítulo anterior, voy a construirme un sencillo robot-explorador con una pieza de tablero perforado de 8 x 10 cm, una rueda loca, un portapilas de 6V y dos motores con mecanismo de gran reducción (con carcasa de plástico) y dos ruedas pequeñas. La rueda loca la sujetaré al tablero con dos tornillos con tuercas (de métrica 4 mm), mientras que los motores (una vez dispuestas las ruedas en su eje de salida) los encolaré al tablero con pistola termofusible, dejando los cables soldados a sus bornes con una longitud suficiente. En la parte superior del tablero será donde se sitúe la tarjeta de control de los motores (unida a un ordenador mediante los cables de salidas hacia el puerto), junto con el portapilas.

Para verificar la tarjeta con los drivers podemos sujetarla sobre el tablero de nuestro móvil (con una simple goma elástica), conectando a continuación los cables de ambos motores y del portapilas en las regletas azules y gris, respectivamente; enviando el mensaje ESCRIBEPUERTO 888 seguido del número 1 ó 2 (motor derecho) y 4 u 8 (motor izquierdo), comprobaremos si los ejes giran en los dos sentidos.


Primeros programas de exploración

Nuestro pequeño robot móvil ya puede ser programado para hacer movimientos temporizados, es decir, mediante un control en bucle abierto, sin la intervención de sensores; podemos escribir procedimientos con los que el móvil realice un sencillo “baile”, un movimiento de zig-zag, una maniobra de aparcamiento o sencillamente trace un recorrido. Para cualquiera de estos ejemplos necesitamos conocer que combinación de salidas (suma de dos números decimales, uno para cada motor) deben ser enviadas desde el puerto paralelo para producir el movimiento de nuestro móvil en sentido de avance, de retroceso y de giro a la derecha o a la izquierda; en el siguiente procedimiento se alternarían, en ese mismo orden, estas cuatro posibilidades, variando su duración mediante una variable con operadores matemáticos:

PARA BAILECITO :SEG

ESCRIBEPUERTO 888 (1+4) ESPERA :SEG*2

ESCRIBEPUERTO 888 (2+8) ESPERA :SEG

ESCRIBEPUERTO 888 (1+8) ESPERA :SEG/2

ESCRIBEPUERTO 888 (2+4) ESPERA :SEG/2

ESCRIBEPUERTO 888 0

FIN

Para lograr que nuestro robot reaccione a variables física externas (contacto, luz, magnetismo,etc..), además de incluir la primitiva LEEPUERTO 889 en nuestros programas, debemos utilizar las conexiones de entrada que hemos previsto en nuestra tarjeta. He recuperado los cables que se incluyen (pero no se usan) al adquirir un lector de CDRom para los ordenadores , ya que disponen de un conector con tres cables para insertar en pines metálicos como los que he soldado en mi tarjeta. Soldando dos de estos cables en las patillas de un pulsador de tipo final de carrera (con una resistencia de 100 ohmios en serie con una de sus patillas) y fijando éste sobre la plataforma del móvil con cola termofusible, dispondremos de un sensor de contacto o detector de choques, elemento que duplicaremos a ambos lados del extremo frontal del móvil.


La programación de su funcionamiento esquivando obstáculos puede escribirse así:

PARA SALVAOBSTACULO

SI ((LEEPUERTO 889) = “120) [ESCRIBEPUERTO 888 5]

SI ((LEEPUERTO 889) = “104) [ESCRIBEPUERTO 888 10 ESPERA 50 ESCRIBEPUERTO 888 9 ESPERA 50]

SI ((LEEPUERTO 889) = “88) [ESCRIBEPUERTO 888 10 ESPERA 50 ESCRIBEPUERTO 888 6 ESPERA 50]

SI ((LEEPUERTO 889) = “72) [ESCRIBEPUERTO 888 10 ESPERA 50]

SALVAOBSTACULO

FIN

Cuando se ejecuta el programa el robot avanza recto, pero si detecta un obstáculo con su pulsador izquierdo, retrocederá medio segundo y girará otro tanto a la derecha, reiniciándose el programa; si detecta el obstáculo por la derecha, retrocederá y después girará a la izquierda y, por último, en el caso de sean presionados los dos detectores la vez, el robot antes de continuar su avance de modo indefinido, retrocederá durante medio segundo. Para detener el programa pulsaremos ALTO en la pantalla de MSWLogo 6.3c.

Conclusión

Puede proponerse a los alumnos que escriban programas que nos permitan salir de un laberinto o efectuar otros movimientos más caprichosos cuando se presionen los finales de carrera, en lo que constituirá, sin duda, su experiencia más auténtica en el mundo de la robótica.

 


CONTROLABOT (6)

Introducción

En este capítulo del monográfico pondremos en funcionamiento un dispositivo móvil y se demostrará que, con una sencilla programación y los sensores correspondientes podrá seguir una trayectoria de líneas negras sobre fondo blanco (o viceversa).

Programación de un siguelíneas

Un dispositivo muy utilizado en robótica es el denominado CNY70. Se trata de un sensor óptico reflexivo, de construcción compacta, donde un emisor de infrarrojos y un receptor (fototransistor) se colocan en paralelo; se emplea comúnmente para detectar la presencia de una línea negra utilizando la reflexión de la luz infrarroja sobre la superficie (normalmente blanca) en que se sitúe dicha línea. El CNY70 tiene cuatro pines de conexión que se corresponden, por un lado, con el emisor y colector del transistor y, por otro, con el ánodo y el cátodo del diodo emisor; visto el componente desde su cara útil y con el texto a la izquierda, los pines se ordenarían como se ve en la imagen inferior:



El circuito que debe configurarse es el de la derecha: colector y ánodo se conectan a un borne positivo (de 6V en nuestro caso), mientras que emisor y cátodo lo harían al borne negativo, pero no sin antes soldar una resistencia de 220 ohmios al cátodo y un pequeño potenciómetro de 1 K al emisor (regulando su valor podré ajustar la sensibilidad del dispositivo en función de la luz ambiente). Por último, debe soldarse directamente a la patilla del emisor, el cable que envía al puerto paralelo la señal de entrada que se crea al pasar de blanco a negro (o viceversa) frente al sensor óptico: el circuito entrega al puerto un nivel de voltaje bajo cuando no refleja el haz infrarrojo y un nivel alto cuando encuentra un material sobre el que lo refleja.



Si escogemos un CNY70 y le damos la vuelta, doblaremos con cuidado la patilla del colector (C) hasta unirla con la del ánodo (A) y después separaremos un poco las tres patillas; por otro lado, soldaremos una resistencia de 220 ohm al común del potenciómetro. Antes de soldar los tres cables que vienen del conector, similar al utilizado para el sensor con finales de carrera, uniremos la resistencia a la patilla del cátodo (K) y el potenciómetro a la del emisor (E) (en la imagen el blanco va a masa, el rojo al borne positivo de la pila y el amarillo al pin de entrada del conector paralelo).

Utilizaré para sujetar el sensor completo un perfil de aluminio perforado de 4 cm de largo, en el que doblaré, con un ángulo de 90º, medio centímetro de longitud en uno de sus extremos; éste lo apoyaré y pegaré con la pistola termofusible sobre la tabla del robot, en su parte frontal. El CNY70 lo sujetaré al otro extremo del perfil pegándolo de modo que se distancie apenas 1 mm de la superficie lisa sobre la que se apoyarán las ruedas del móvil, ya que de no ser así,el dispositivo perderá efectividad.


La separación recomendable entre los dos perfiles de aluminio será de dos centímetros y en la programación tendremos 4 combinaciones: el sensor derecho sobre negro y el otro sobre blanco, el derecho sobre blanco y el otro sobre negro, los dos sobre blanco y los dos sobre negro. En los dos primeros casos, el vehículo reaccionará girando al lado contrario, mientras que si son iguales las lecturas, se decidirá si avanza recto o se detiene.

PARA LINEANEGRA

SI ((LEEPUERTO 889) = “72) [ESCRIBEPUERTO 888 5]

SI ((LEEPUERTO 889) = “104) [ ESCRIBEPUERTO 888 9]

SI ((LEEPUERTO 889) = “88) [ ESCRIBEPUERTO 888 6 ]

SI ((LEEPUERTO 889) = “120) [ESCRIBEPUERTO 888 0 ]

LINEANEGRA

FIN

A partir de este procedimiento básico podremos crear programas más largos en los que, por ejemplo, el móvil llegue a un punto final en su recorrido, se detenga, gire media vuelta y realice la trayectoria en sentido inverso, etc.

Proyecto final de tarjeta ControlaBot

Antes de terminar este monográfico quiero mostrar la posibilidad de trabajar con una tarjeta que puede servir para programar aplicaciones robóticas más completas, ya que permiten simultanear el uso de varios sensores a la vez, utilizando regletas para conectar los cables a la placa utilizando un destornillador. Además, utiliza un conector hembra para cable paralelo estándar, por lo que una vez construida, puede ser usada más cómodamente por distintos usuarios y con cables antiguos para impresoras; por último, incorpora dos diodos led que pueden ser utilizados para indicar la activación de los motores, la detección por parte de los sensores o simplemente para crear intermitencias luminosas.

Como ya expliqué en el capítulo 3, sólo necesito una de las líneas (pin 2 al 13) del conector junto con el pin 25 de masa y el pin 15 de la línea inferior (ligeramente doblados para que al pincharlos sobre la placa perforada no se alineen con los anteriores); utilizaré como base una placa para prototipos de fibra de vidrio, con topos distanciados 2,54 mm, y de dimensiones 6 x 5 cm.


Una vez recortada la placa con sus medidas, soldaré el conector acodado en un extremo, dejando al menos dos pistas libres a un lado y una pista libre al otro, ya que las utilizaremos posteriormente. Para entender mejor esta idea ,y visualizar la placa en su conjunto, debe observarse el esquema.

Entre el conector paralelo y los drivers hay que dejar un espacio de 0,5 cm, ya que lo necesitamos para realizar las conexiones en la superficie de la placa que nos permitirán utilizar los pines de datos 5 y 6 para encender el par de leds (con una resistencia intercalada en su circuito) trasladando la señal del puerto a dos pistas del exterior de la placa (también se podrían obviar y simplificar así el esquema). A continuación de dichos cables, situaremos dos regletas dobles para circuito impreso alineadas con los pines extremos del conector (el superior con el 25 y el inferior con el 15); el resultado nos proporciona dos entradas para sensores completas, pues ambas incorporan la conexión a masa en la patilla superior.


A una distancia mínima horizontal de un centímetro, estarán situados los drivers y su regleta de alimentación (donde se introducirán después los cables del portapilas). Como se observa en la imagen, el driver superior alineará su patilla deshabilitada con el pin 10 del conector, por lo que será controlado en su funcionamiento por los pines de datos 9 y 7; justo debajo, con la mínima separación, se colocará el segundo driver, de modo que será controlado desde el puerto paralelo a través de los pines de datos 2 y 4. Otra regleta de circuito impreso se situará con su patilla inferior alineada con el pin 25 del conector, quedando la patilla superior de éste convertida (una vez conectada la pila) en el punto de referencia de tensión 6 V.


En el hueco de pistas que ha quedado a la izquierda, entre los conectores de las entradas y los drivers, situaremos tres cables en superficie que unan las patillas de los elementos del circuito que deben conectarse a masa (pin 25 del conector, patillas GND a la izquierda de los drivers y posible polo negativo para el diodo led inferior); del mismo modo procederemos en el lado derecho de los drivers para alimentar sus patillas de polaridad positiva. Todos los cables superficiales se indican en color verde en el esquema y los he realizado con hilo fino y rígido de cobre, extraído de un cable de red de ordenador.

A continuación alinearemos tres regletas de conexiones: dos para los motores (en línea con las patillas de salida de cada driver) y una para conectar dos entradas a los pines 13 y 11 (y que necesitarán del conector del portapilas para su uso con determinados sensores, como ya explicaré en el capítulo 7).


Las conexiones en la parte inferior de la placa (líneas en rojo del esquema), las he resuelto también con hilo de cobre de cable de red pelado y soldado en sus extremos, coincidiendo con las patillas verticales de los elementos del anverso de la placa; cuando la pista de conexión es muy alargada, he soldado el cable en alguno de los topos intermedios, y cuando era muy corta, sencillamente he creado una pista con el estaño de soldar, intentando no acumularlo.

Conclusión

Dado que en esta tarjeta ControlaBot la disposición de los pines del conector, con respecto a los drivers y las regletas de entrada, es distinta a la que habíamos determinado con la primera tarjeta diseñada en el capítulo anterior, deberemos adaptar la programación hasta ahora conocida (cambiando sus números decimales de entradas y salidas), pero no sin antes probarla con nuevos dispositivos sensores.

 


CONTROLABOT (7)

Introducción

En este último capítulo centrado en la robótica, utilizaré la tarjeta ControlaBot (diseñada en el capítulo anterior) para crear programas que puedan crear una reacción en el móvil, simultaneando cuatro posibles detecciones a la vez a través de sus entradas: pueden estar relacionadas con la presencia o no de luz directa sobre él, con el color de la superficie sobre la que se desplace, con el contacto o la cercanía a una superficie vertical, etc.

Experimentando con sensores

Existen disponibles en la red de forma gratuita una serie de programas desarrollados con el objetivo de mostrarnos en pantalla el estado en el que se encuentran cada uno de los pines del puerto paralelo, como son el “Parallel Monitor” o “Port Viewer”. La ventaja que nos proporcionan, es la de poder activar o desactivar los 8 bits de salida directamente con el ratón, sin necesidad de escribir instrucciones, pero lo más importante es que nos permiten visualizar rápidamente cuando las entradas del puerto cambian de estado, indicándonos además el número decimal que debe acompañar a la primitiva LEEPUERTO en la programación, números que ya conocemos de capítulos anteriores, a excepción del pin de entrada número 15 cuya identificación es:

Entrada pulsada

Mensaje decimal

Byte en el puerto

Pin 15

112

“01110000”

Un sensor digital de fácil creación, consiste en un relé reed de accionamiento magnético: este dispositivo tiene un fino encapsulado de cristal que aloja dos laminillas metálicas separadas medio milímetro, de modo que al aproximar un imán se doblan lo justo para contactar entre sí, cerrando un supuesto camino eléctrico. De los extremos del encapsulado surgen las dos patillas del relé, en una de las cuales soldaríamos una resistencia de valor 100 ohmios y en la otra un cable de masa; en la patilla libre de la resistencia soldaríamos el correspondiente cable del pin de entrada.


He experimentado con la conexión de un potenciómetro de 10 Kohmios en un circuito conectado al pin de entrada, por un lado, y a un pin de masa, por otro; al girar su eje, se observa en la pantalla del programa Parallel Monitor cómo, aproximadamente en el valor de 660 ohmios, se produce la activación (pin en verde) o desactivación (pin en rojo) de la correspondiente entrada; la conclusión es que podemos crear interruptores analógicos utilizando resistencias variables.

Un dispositivo muy utilizado en electrónica con los alumnos son las resistencias variables con la luz (comúnmente conocidas como L.D.R.), cuyo valor resistivo oscila entre los 20 Kohmios (en la oscuridad) y los 500 ohmios (con la luz incidente de una linterna normal o de un led de alta luminosidad). Si queremos que el puerto paralelo detecte cambios bruscos de luminosidad, sólo tenemos que intercalarlas, sin ningún otro elemento, entre los cables del pin de entrada y el de masa: proyectando a poca distancia de la resistencia la luz de una linterna, su valor óhmico disminuirá hasta valores los inferiores a 660 ohmios, permitiendo la detección de la luminosidad como señal de entrada; su transición a valores óhmicos elevados se produce de forma inmediata una vez desaparece la luz, conmutando la señal en el puerto (he probado LDR de distintos proveedores y han funcionado todas).

Programación de un robot sigueluces

Aprovechando la estructura de móvil descrita en el capítulo 5, voy a ubicar sobre su plataforma de tablero de fibras perforado, la tarjeta ControlaBot en la que conectaré los cables de los motores a las regletas de salida de los drivers, los cables del portapilas a la regleta de alimentación (con su polaridad correspondiente), y dos L.D.R a las regletas de entradas próximas al conector paralelo. El programa que escribiré servirá para guiar el móvil con una linterna dirigiendo su luz hacia las LDR, de tal modo que cuando incida en ambas a la vez, el móvil avance recto, cuando incida en la resistencia variable de la izquierda gire para ese lado y cuando lo haga en la derecha gire en esa dirección; por último, el móvil retrocederá en línea recta en el caso de no ser enfocado con la luz: asignando un tiempo de funcionamiento para cada uno de los movimientos anteriores, podremos lograr un desplazamiento ordenado.

Recordemos que el motor derecho se conectaría a los pines 2 y 4 del conector paralelo, y el motor izquierdo a los pines 7 y 9, generándose las siguientes combinaciones, respectivamente, para el avance, el giro a la derecha, el giro a la izquierda y el retroceso:

PARA PRUEBA

ESCRIBEPUERTO 888 (1+32) ESPERA 100

ESCRIBEPUERTO 888 (4+32) ESPERA 100

ESCRIBEPUERTO 888 (1+128) ESPERA 100

ESCRIBEPUERTO 888 (4+128) ESPERA 100

ESCRIBEPUERTO 888 0

FIN


Verificado el correcto funcionamiento de los drivers y una vez conectadas las dos resistencias variables con la luz a cada regleta doble de entrada (pines 12 y 15) con puesta a tierra anexa (insertando ellas directamente las patillas de cada LDR y doblándolas después ligeramente hacia arriba), el procedimiento en LOGO podría resolverse del siguiente modo con una variable de tiempo :SEG, ajustable al ejecutar el programa (funciona razonablemente bien escribiendo SIGUELUCES 200 en la barra de ejecución)

PARA SIGUELUCES :SEG

SI ((LEEPUERTO 889) = “120) [ESCRIBEPUERTO 888 132 ESPERA :SEG]

SI ((LEEPUERTO 889) = “112) [ESCRIBEPUERTO 888 36 ESPERA :SEG/2]

SI ((LEEPUERTO 889) = “88) [ESCRIBEPUERTO 888 129 ESPERA :SEG/2]

SI ((LEEPUERTO 889) = “80) [ESCRIBEPUERTO 888 33 ESPERA :SEG*2]

SIGUELUCES :SEG

FIN

Como el móvil dispone de motores con una gran reducción mecánica de su velocidad, disponemos de mucho par de fuerza en sus ruedas, lo que le permite desplazarse sin problemas aunque conectemos placa y ordenador con un cable paralelo estándar, relativamente pesado y rígido. De todos modos, yo me he construido un cable aligerado tras pelar uno comercial, eliminando su vaina exterior de plástico, su apantallamiento de aluminio trenzado, así como todos los cables excepto los correspondientes a los pines que he utilizado para el programa anterior: 2, 4, 7, 9, 12, 15 y 25.


Construcción de un detector de superficies blancas

Demostradas las posibilidades de uso de las LDR conectadas a las entradas del puerto paralelo, surge la idea de que reciban la luz producida por un diodo led blanco de alta luminosidad, pero reflejada en la superficie sobre la que se desplace el móvil. Como sabemos, la corriente proporcionada por el puerto paralelo es muy baja, por lo que los leds conectados directamente a sus salidas de datos emiten una luz débil, es decir, que para lograr una luz blanca con la intensidad suficiente como para que, reflejada en una superficie blanca, sea detectada por la LDR, debemos conectar directamente el diodo de alta luminosidad a la regleta del portapilas, y polarizándolo correctamente para probarle.


En un trozo cuadrado de cartón fino de unos dos centímetros de lado y doblado por la mitad en ángulo recto, pegaremos con una gota de cola termofusible la LDR y el led blanco, por separado, en ambas caras de uno de los lados de la escuadra, quedando la otra como elemento para la fijación del conjunto en un perfil de aluminio situado en el frontal del móvil. Los dos elementos deberán enfocarse hacia el suelo, del que se distanciarán en aproximadamente medio centímetro: puede comprobarse con la utilidad “Parallel Port “que la entrada del puerto paralelo distingue la presencia de una superficie blanca (cuya luz reflejada hará disminuir el valor óhmico de la LDR por debajo de 700 ohmios) o una línea negra.


Si disponemos de dos perfiles (separados 2 cm) en el frontal del móvil, pegando en ellos dos sensores como los descritos anteriormente (con los diodos conectados en paralelo para reducir el número de cables), aquel podría seguir la trayectoria de una línea negra, para lo cual bastaría con adaptar la programación mostrada en el anterior capítulo, a la nueva tarjeta,además de aprovechar que también disponemos de dos diodos led rojos con los que crear efectos luminosos (en este caso se enciende el diodo del mismo lado hacia donde gira el móvil):

PARA LINEANEGRA2

SI ((LEEPUERTO 889) = “80) [ESCRIBEPUERTO 888 33]

SI ((LEEPUERTO 889) = “88) [ ESCRIBEPUERTO 888 36 ESCRIBEPUERTO 888 8]

SI ((LEEPUERTO 889) = “112) [ ESCRIBEPUERTO 888 129 ESCRIBEPUERTO 888 16]

SI ((LEEPUERTO 889) = “120) [ESCRIBEPUERTO 888 0 ]

LINEANEGRA2

FIN

Nuestros nuevos sensores también podría ser colocados en posición horizontal para detectar posibles obstáculos verticales blancos, es decir, que podemos aprovechar nuestra experiencia con los finales de carrera del capítulo 5 para, como hemos hecho antes, adaptar el procedimiento:

PARA SALVAPAREDES

SI ((LEEPUERTO 889) = “80) [ESCRIBEPUERTO 888 33]

SI ((LEEPUERTO 889) = “88) [ESCRIBEPUERTO 888 132 ESPERA 50 ESCRIBEPUERTO 888 36 ESPERA 50]

SI ((LEEPUERTO 889) = “112) [ESCRIBEPUERTO 888 132 ESPERA 50 ESCRIBEPUERTO 888 129 ESPERA 50]

SI ((LEEPUERTO 889) = “120) [ESCRIBEPUERTO 888 132 ESPERA 50]

SALVAPAREDES

FIN

Una última idea que me sugiere el sensor, es la de poder programar el dispositivo móvil para que no se caiga de una mesa blanca o de color claro, ya que al asomarse uno de los leds blancos más allá del borde de la mesa, deja lógicamente de reflejarse su luz, pudiendo indicar en la programación la necesidad de que, en esa circunstancia, giren los motores en retroceso para evitar que el robot explorador vuelque.

PARA ANTIVUELCO

SI ((LEEPUERTO 889) = “80) [ESCRIBEPUERTO 888 33]

SI ((LEEPUERTO 889) = “112) [ ESCRIBEPUERTO 888 36 ESPERA 50]

SI ((LEEPUERTO 889) = “88) [ ESCRIBEPUERTO 888 129 ESPERA 50]

ANTIVUELCO

FIN

Finalmente, como disponemos de 4 entradas de detección en la tarjeta multitarea, podemos combinar varios de los procedimientos anteriores en un solo programa, por ejemplo, SIGUELUCES y ANTIVUELCO; para ello he conectado una patilla de cada LDR a cada una de las entradas, aún sin utilizar, de la regleta adyacente a las de los motores, y las otras patillas a la masa de la pila (de modo que hago útiles los pines 11 y 13 del conector paralelo), creándose las combinaciones decimales que se observan en el programa:

PARA MULTITAREA :SEG

SI ((LEEPUERTO 889) = “120) [ESCRIBEPUERTO 888 132 ESPERA :SEG]

SI ((LEEPUERTO 889) = “104) [ESCRIBEPUERTO 888 36 ESPERA :SEG/2]

SI ((LEEPUERTO 889) = “248) [ESCRIBEPUERTO 888 129 ESPERA :SEG/2]

SI ((LEEPUERTO 889) = “232) [ESCRIBEPUERTO 888 33 ESPERA :SEG*2]

SI ((LEEPUERTO 889) = “112) [ ESCRIBEPUERTO 888 36 ESPERA :SEG/2]

SI ((LEEPUERTO 889) = “88) [ ESCRIBEPUERTO 888 129 ESPERA :SEG/2]

MULTITAREA :SEG

FIN

Conclusión final

Creo que han quedado sobradamente demostradas las posibilidades que, para el desarrollo de una robótica de muy bajo coste con nuestros alumnos, proporciona el acceso al puerto paralelo de los viejos ordenadores, utilizando además, un lenguaje de programación sencillo y en castellano.