MONOGRÁFICO: Arduinoblocks |
EQUIPAMIENTO TECNOLÓGICO - Didáctica de la tecnología | ||||||||
Written by Leopoldo Mosquera | ||||||||
Wednesday, 29 December 2010 21:27 | ||||||||
There are no translations available. Descubre herramientas de trabajo con las que podremos iniciar a los alumnos en el campo denominado genéricamente de la “computación física”, es decir, el aprendizaje de la programación orientada a interactuar con dispositivos electrónicos sencillos. Capítulo11) IntroducciónEn mayo del 2006 participé en un taller en Madrid para profesores de Secundaria en el que David Cuartielles nos mostró las posibilidades de la tarjeta Arduino para el mundo de la educación. En aquel momento, Arduino era casi un prototipo de una gran idea: crear una plataforma de open-hardware de fácil programación y destinada a crear dispositivos electrónicos con los que interactuar. Dicho de otro modo, comprando o construyendo una tarjeta Arduino (ensamblando sus componentes), y descargando en el ordenador la última versión de su software de programación desde www.arduino.cc/es, cualquiera puede disponer en el taller de Tecnología de un dispositivo barato, de uso sencillo y rápidos resultados, con el que introducir a los alumnos de Secundaria en la electrónica, la automática o la robótica.
Sólo la excelente página web citada anteriormente, ya contiene una gran cantidad de información en castellano sobre la descripción de la tarjeta, su puesta en funcionamiento, dónde comprarla, cómo complementarla, así como tutoriales y recursos externos para iniciarse en su manejo. Los propios alumnos pueden ser convenientemente guiados a través de ella, de modo que desarrollen estrategias de autoaprendizaje para experimentar con la tarjeta. Si además tecleamos Arduino en cualquier buscador, comprobaremos que existe en la web una extensa y activa comunidad internacional de usuarios dispuestos a intercambiar experiencias y programas, de todos los niveles de complejidad, realizados con Arduino en cualquiera de sus versiones comerciales (también existen desarrollos libres del diagrama electrónico base) o artesanales (como “paperduino”). Casi podemos afirmar que estamos ante el standard de las tarjetas programables con microprocesadores AVR Atmega, ya que tradicionalmente en la experimentación educativa se utilizan los microprocesadores PIC, mucho más difíciles de programar y para los que apenas existen soluciones de hardware abierto. 2) ¿Cómo es la tarjeta Arduino?Al observar por primera vez una Arduino, posiblemente los elementos que más llaman la atención son los numerosos pines o agujeros de conexión hembra que tiene a ambos lados, además de la conexión USB (con la que podemos programar y activar la electrónica de la tarjeta), así como una entrada de alimentación (admite hasta 30V) con la que podemos independizar el microprocesador Atmega respecto del ordenador, una vez esté cargado nuestro programa. Volviendo a los pines hembra, hay que destacar que disponemos, a un lado, de 14 entradas o salidas digitales (se especificaría esta característica a través del software),así como la posibilidad de crear 6 salidas analógicas con los pines digitales 3, 5, 6, 9,10, 11, indicados como PWM (lo que hará Arduino es modular por pulsos),y al otro lado, de 6 entradas analógicas junto con pines de conexión a masa (GND) y a distintos valores de voltaje (necesarios para completar el circuito electrónico de los sensores externos con los que trabajemos). Los alumnos se sorprenden cuando les explicas que los microcontroladores están presentes en varios de los dispositivos electrónicos de nuestros hogares, como son la mayoría de los electrodomésticos o n también en los automatismos de los automóviles, y que como sus prestaciones son cada vez mejores en velocidad de procesamiento y fiabilidad, menor gasto de energía, tamaño más reducido y sobre todo, cada vez tienen menor coste, en el futuro más inmediato terminarán por digitalizar absolutamente nuestras vidas. La clave de su éxito de implantación masiva se debe a su especialización para ser útil en una una sola tarea y según un programa específico de unos pocos bits de información, frente a las múltiples tareas que pretenden abordar los microprocesadores . El microcontrolador de la tarjeta Arduino, a pesar de su reducido tamaño, integra en sus circuitos electrónicos los tres elementos necesarios en un pequeño ordenador para su funcionamiento: unidad central de procesamiento, memoria y conexiones de entrada y salida. Cuando lo conectamos a una fuente de alimentación (pila externa o mediante el cable USB) , lo primero que hace al arrancar es buscar el programa último que tiene almacenado, lo carga en memoria y lo ejecuta; después de acuerdo a la secuencia de dicho programa, lee datos por sus pines de entrada (donde se conectarían los sensores), los procesa y envía datos a través de sus pines de salida (provocando la activación de los distintos actuadores). Un elemento clave en Arduino es la consola de programación, con un sencillo interface de pestañas y botones para la compilación y descarga en la memoria del microprocesador, de los programas escritos en lenguaje C simplificado, es decir, que no se utilizan los áridos y complicados lenguajes ensamblador, típicos del trabajo con micros; un ejemplo de código para del parpadeo de un diodo led durante medio segundo es:
Desde hace unos años utilizo Arduino en el taller con alumnos de 4º ESO y Bachillerato, siendo la programación en inglés el aspecto que más dificultades crea para avanzar en las prácticas o proyectos que hemos realizado. Recientemente he descubierto que el desarrollo de la comunidad internacional Arduino ha originado varias propuestas de entornos visuales de programación con bloques, para facilitar a los alumnos más jóvenes elaborar sus programas y volcarlos en el Atmega. El trabajo con bloques visuales secuenciados en vertical, como en el software con el que trabajaremos, tiene la ventaja de estructurar los programas de un modo muy parecido al utilizado para crear organigramas, o mejor dicho, ordinogramas con los que analizar algoritmos, lo que supone una introducción para el alumno, en las estrategias gráficas utlizadas por los programadores. Este monográfico propone una metodología de trabajo para la experimentación electrónica utilizando la tarjeta Arduino Duemilanove y el software Amici (traducido al castellano), creado por el grupo de investigación Digital Media de la Universidad de Bremen a través del proyecto EduWear. El objetivo final será la construcción de un robot móvil con los medios y componentes disponibles en los talleres de Tecnología de casi cualquier centro de Secundaria de nuestro país. 3) Primeros pasosAunque desde septiembre está disponible una versión beta de Amici0019, voy a desarrollar mi exposición utilizando la versión 0017, traducida al castellano y con la que he experimentado con mis alumnos durante el curso pasado; dejo para próximos capítulos la experimentación con la versión más reciente, disponible por el momento, sólo en inglés o en alemán. Lo primero que debemos hacer es descargar Amici para Duemilanove en nuestro disco duro (http://dimeb.informatik.uni-bremen.de/eduwear/category/development-software/ ) y extraer la carpeta comprimida de nombre amici0017k_win_esp . Si es la primera vez que vamos a conectar al ordenador la tarjeta Duemilanove, se necesita cargar un driver para que sea reconocida como nuevo hardware, el cual se encuentra en la subcarpetas drivers/ FTDI USB Drivers de la carpeta amici0017k. Dentro de esta carpeta principal aparece un ejecutable con forma de icono verde, denominado amici ,sobre el que haremos doble click para abrir el programa, apareciendo una consola como la de la imagen inferior (sin las anotaciones). Antes de continuar, y pensando en lectores familiarizados con el editor de programas (IDE) de Arduino, observaremos que éste aparece en pantalla si después de abrir amici , pulsamos en un botón con el signo + que está en la parte superior. Es importante destacar que trabajando en este entorno de programación visual, no renunciamos a que los alumnos comprendan cómo se estructuran los programas, en modo texto, con el lenguaje basado en “ Wiring” que utiliza el software común de Arduino. Volviendo a la consola del programa Amici y con la tarjeta conectada al ordenador a través de un cable USB (de impresora), en el menú Herramientas debemos introducirnos en la pestaña Boards para seleccionar el tipo de tarjeta (por ejemplo Duemilanove) y microprocesador que estemos utilizando (ATmega328) . A continuación, en la pestaña SerialPorts seleccionaremos el número de puerto COM que el ordenador haya asignado para nuestra tarjeta (normalmente un número superior al 3). Una forma rápida de probar que la tarjeta funciona, es creando un sencillo programa con la intermitencia de un diodo led pinchado en el pin digital 13 (patilla larga) y en el pin GND adyacente; la supuesta resistencia de protección del led ya viene incorporada en la tarjeta, pero sólo para este pin 13. Si observamos la pantalla de Amici, veremos que el primer icono de la izquierda se denomina ON (donde seleccionaremos que vamos a utilizar el pin 13) y debe ser arrastrado debajo de el bloque LOOP, en el otro extremo de la pantalla; debajo situaremos un bloque de DEMORA y a su derecha pondremos un bloque de VARIABLE, al que asignaremos un valor teniendo en cuenta que el tiempo se mide en milisegundos: de modo similar se procede para el apagado con el bloque OFF. Para enviar nuestro programa a la memoria del microprocesador, debemos pulsar el icono de la parte superior con el símbolo -> y pasado un instante comprobaremos que el diodo parpadea intermitentemente (en las Arduino más antiguas, deberemos pulsar el botón de reseteo de la tarjeta un instante antes de enviar el programa a su memoria). 4. Conclusión y anexoEl desarrollo de este capítulo ha servido para conocer unas herramientas de trabajo con las que podremos iniciar a nuestros alumnos en el campo denominado genéricamente de la “computación física”, es decir, el aprendizaje de la programación orientada a interactuar con dispositivos electrónicos sencillos. En la página siguiente se anexa un cuadro resumen que explica las funciones incluidas en cada uno de los bloques visuales de programación. Capítulo 21) IntroducciónEn el primer capítulo de este monográfico hemos conocido el entorno Arduino, su hardware y software, de modo que hemos probado a crear intermitencias en un diodo led. A partir de ahora vamos a incluir en nuestros ejercicios de programación, secuencias luminosas combinadas con la creación de sonidos en un zumbador piezoeléctrico, siendo su bucle normal de funcionamiento interrumpido mediante sensores conectados en las entradas de la tarjeta Arduino. 2) Conexionado de entradas digitales.Para que un sensor digital o analógico pueda ser detectado en alguno de los pines correspondientes de la tarjeta, antes hay que establecer un circuito de alimentación desde 5V a GND (masa) que atraviese dicho sensor y que además produzca una caída de tensión o una débil corriente en una resistencia que se intercala entre el sensor y el pin de entrada de la tarjeta, formando todo ello un típico esquema electrónico denominado “pull-down”, necesario para proteger la tarjeta. En un ejemplo sencillo podemos hacer que el diodo led pinchado en el pin 13 y GND, se encienda durante un tiempo determinado una vez que hayamos presionado un pulsador de tipo fin de carrera, previamente construido del siguiente modo: en cada una de las patillas de nuestro pulsador enredaremos un cable fino de unos 12 cm de longitud, a ser posible de distinto color; además soldaremos en una sola de ellas, una resistencia de 10 Kohm y en el extremo libre de ésta, otro cable de 10 cm, similar a los anteriores pero de un tercer color. Una vez terminado, un cable se pincharía en el pin 5V de la tarjeta, otro (el que intercala la resistencia) en un pin GND y el tercero en el pin digital 8, que programaremos, en el menú de Amici, como una entrada cuyo estado de reposo es normalmente abierto (off). Existen dos estrategias de programación para resolver el programa detección de un sensor con Amici: de un modo sencillo, utilizando el bloque ESPERAR HASTA (while) o, quizás de un modo más correcto, utilizando el condicional IF: bastará con añadir a la derecha de un bloque IF, el correspondiente ON que determine el encendido que va a suceder tras pulsar el sensor, es decir, la condición para el cambio en la rutina del programa. Como comenté en el primer capítulo de este monográfico, es interesante ver el código escrito en el editor de Arduino, donde siempre se estructura un programa, al menos en tres apartados: en el primero, precedidos del término int ,se definen los datos (pines de la tarjeta que se van a conectar) y variables (tiempos); después en el apartado setup() se indica si los pines serán utilizados como entradas o como salidas, así como, si es necesario, su estado inicial; y finalmente, en el apartado loop() ,se explica lo que realmente va a suceder una y otra vez con los dispositivos conectados a entradas y salidas, es decir, incluye el núcleo principal del programa. La diferencia entre las dos estrategias de encendido del led queda clara al observar el apartado loop(), ya que el bloque ESPERAR HASTA (“… que el valor del sensor sea alto”) se traduce en el lenguaje habitual de programación como while, y el bloque IF (“si el valor del sensor es alto”) no cambia su denominación en el editor de Arduino. Los dos programas hacen lo mismo, pero los matices en la escritura de cada condicional es diferente, siendo difícil escoger entre una u otra a la hora de confeccionar una instrucción. Me parece reseñable el hecho de que ambas soluciones son complicadas de entender o memorizar por los alumnos de E.S.O., haciendo que la programación en modo texto se convierta en algo nada interesante o al alcance de muy pocos alumnos de cada clase, a los que seguro que además siempre habrá que corregirles la ausencia de algún signo sintáctico (llave, paréntesis o punto y coma). 3) Combinando dispositivos de luz y sonido en una placa.La forma más extendida de conectar con distintos dispositivos (leds, pulsadores, resistencias,...) simultáneamente a los diferentes pines de la tarjeta Arduino, es pinchando los componentes electrónicos y cables de colores en una placa de prototipos, creando los caminos eléctricos adecuados. Yo utilizo esta estrategia para hacer pruebas rápidas de programas, pero para evitar la confusión que a veces genera el exceso de cableado sobre la protoboard, con los alumnos prefiero que construyan pequeñas placas electrónicas (de gradual complejidad) soldadas, y que después las pinchen en los pines de alimentación, entradas o salidas de Arduino. El conjunto placa-tarjeta queda más sólido, se recoge mejor el material tras cada tiempo de taller (de modo que se pueden flexibilizar las sesiones de trabajo) y se combina la actividad manual con la de programación. Existen también en el mercado placas standard de prototipado para Arduino, pero su uso encarece la actividad y además su posible reciclado, en mi opinión, entretiene en exceso (la imagen siguiente es un posible ejemplo de utilización). Para el montaje de nuestras placas podemos utilizar pletinas de pistas de cobre paralelas distanciadas 2,54 mm, medida standard que también utiliza la tarjeta Arduino para la colocación de sus pines de entrada/ salida. Las longitud mínima de la placa será de unos 53 mm, ya que la distancia entre los pines a uno y otro lado en la tarjeta es de 19 x 2,54 mm = 48,26 mm. La idea es pinchar (utilizando dos porciones de 2 y 4 contactos macho) de un extremo, en los pines GND y 5V (para alimentar los sensores que interactúen con la placa), y del otro extremo, en los pines digitales que programaremos. En el ejemplo propuesto de la imagen, han bastado 6 pistas de cobre (una no se utiliza) para encajar todos los elementos, con lo que el ancho final de la placa se limita a unos 18 mm. En el diseño esquemático de la placa se representan las pistas de cobre con líneas rojas, los puntos de conexión (pines o clema) y de soldadura en azul (también los límites del borde de la placa), y las líneas transversales de interrupción de pistas (donde se elimina el cobre con la punta de una tijera o un destornillador) en verde. Como puede apreciarse en la fotografía del reverso de la placa, he recortado (con una segueta de metal o doblando la placa hasta su rotura con un alicate) dos esquinas de la placa para dejar a la vista los pines de la tarjeta Arduino que se sitúan justo debajo y así poder seguir utilizándolos. La propuesta de trabajo consiste en crear secuencias de luz y sonido utilizando tres diodos led de distintos colores y un zumbador piezo-eléctrico. Los diodos se han conectado en serie con una resistencia de protección de 220 ohmios, entre masa y los pines 10, 11 y 12, mientras que el zumbador lo hace entre masa y el pin 9, ya que éste viene preparado en Amici para permitir el sonido de las distintas notas musicales (con la posibilidad de crear distintas melodías). Las combinaciones de estos cuatro elementos pueden dejarse abiertas a decisión de los alumnos o puede proponerse, como en el siguiente ejemplo, crear un semáforo con sonido de aviso para el peatón. Tras crear en Amici en programa de la figura de la izquierda y al pulsar el icono + para visualizar el programa en la consola de Arduino, veremos que el resultado no se corresponde exactamente al de la imagen derecha, ya que por problemas de espacio, he depurado el código eliminando líneas innecesarias que crea Amici por defecto. Surge aquí la idea de proponer a los alumnos más avanzados o interesados en el mundo de la programación, la posibilidad de modificar los programas y comprobar su correcta compilaciòn en Arduino, además sin el riesgo de perder el programa realizado como bloques gráficos. En la fotografía del conjunto de la placa pinchada en la tarjeta Arduino, he incorporado también el pulsador que ya describiera al inicio de este capítulo, apreciándose su construcción y, sobre todo, su conexión a la placa, bien a través de la clema GND-5V (cables negro y azul), como directamente en el pin 8 (blanco). En el siguiente programa integraré el sensor digital con el objetivo de que, al ser pulsado, vuelva a repetirse una secuencia luminosa determinada (verde-amarillo-rojo), tras un tiempo de apagado. 4) ConclusiónLas ventajas de la programación con bloques gráficos en Amici evita las dificultades de la escritura en lenguaje C (o mejor dicho, en Processing) para usuarios inexpertos, pero sin renunciar a dar el paso de analizar como queda compilada la solución en la consola de Arduino, lo que facilita futuras experiencias más complejas que las mostradas en este monográfico, las cuales por otro lado, están disponibles en número casi ilimitado en la Red.
Capítulo 31) IntroducciónSuperada la experimentación con entradas digitales para crear programas en nuestra placa, ahora conviene conocer las posibilidades de la tarjeta Arduino para interpretar señales analógicas de entrada, utilizando los sensores electrónicos más utilizados con nuestros alumnos. 2) Conexionado de entradas analógicas.La ventaja que nos proporcionan los sensores analógicos frente a los digitales estriba en la posibilidad de regular su holgura de detección, evitando el "todo o nada" (0V ó 5V de tensión en el pin de entrada) característico de los sensores (y de las salidas) digitales. Con un sensor de luz resistivo, por ejemplo, podremos decidir a nuestro gusto cuál es el umbral de iluminación con el que actuarán los elementos conectados a las salidas de la tarjeta Arduino. Dicho de otro modo, un sensor analógico estará constantemente cambiando el valor de tensión entre sus terminales con el tiempo, por lo que necesitará un tratamiento diferente, en comparación con el sensor digital, por parte del microprocesador. Arduino incorpora 6 patillas o pines denominados Analog In. Mediante la configuración "pull-down" del sensor (ver capítulo anterior), las pequeñas variaciones de voltaje que se produzcan en el pin de entrada correspondiente de la tarjeta, serán traducidas por el software en un número comprendido entre 0 (= 0 voltios) y 1023 (= 5 voltios), es decir, el umbral de tensión que queramos que perciba la tarjeta como límite, se fijará escribiendo un número menor que 1024, junto con la función analogRead(). También es importante saber que la pantalla de Amici dispone de una pequeña ventana en su parte superior donde, tras pulsar el botón "Leer Valor", podremos monitorizar la lectura del sensor analógico. El programa de la imagen anterior serviría para apagar un diodo led previamente pinchado en el pin 13 y GND (patilla más corta), mediante un sensor analógico construido con una LDR, y cuyo cable de entrada se conecta en el pin 1 de las Analog In. En el bloque ESPERAR HASTA utilizado para establecer la condición de funcionamiento, queda indicado un umbral de señal intermedio de valor 512 (que corresponde a una división de tensión en cable de entrada de 2,5V), el cual debe rebasarse, en sentido descendente, con un valor inferior. Si se observa la ventana de “Leer Valor”, capturada con la pantalla en un momento cualquiera, veremos que aparecen dos valores numéricos: uno de 584 > 512 (instante con el led encendido y la LDR iluminada) y otro de 243 < 512 (instante con el led apagado y la LDR en sombra o parcialmente tapada). La ubicación del bloque LEER VALOR en la parte inferior del programa en la pantalla de Amici sirve para poder monitorizar qué está pasando en la entrada analógica de la tarjeta. Analizando el programa en el editor de texto de Arduino, veremos que este bloque genera la aparición de la función Serial.begin() en el apartado set up (el número entre paréntesis indica la velocidad en baudios de la comunicación entre la tarjeta y el ordenador), así como de la función Serial.println(analogValue) al final de apartado loop.
La resistencia variable con la luz es posiblemente el sensor analógico más conocido y utilizado por nuestros alumnos en el taller de Tecnología, pero existen otros que también pueden estar a nuestro alcance para crear programas con Amici, como por ejemplo, una resistencia variable con la temperatura (NTC), un potenciómetro, un sensor de infrarrojos de corto alcance (CNY70) o de medio alcance (Sharp GP2D12). Para realizar el siguiente ejemplo, he pinchado una resistencia variable con la temperatura de coeficiente negativo, es decir, que disminuya el valor de su resistencia conforme aumente la cantidad de calor que almacene. El inconveniente de estas resistencias es que, al contrario que el resto de los sensores analógicos que utilizaré, tienen una respuesta lenta, lo que debe aprovecharse con algunos alumnos para que tengan tiempo de analizar su funcionamiento, a través de una programación elemental. El esquema de cableado para conectarlo a la tarjeta Arduino es similar al caso de la LDR, aunque en este caso, voy a utilizar una resistencia de 4,7 Kohmios entre el terminal del sensor y masa (Gnd). El programa que desarrollo a continuación es muy sencillo e incorpora un ejemplo de cómo utilizar dos bloques IF para crear una doble condición, utilizando la entrada analógica: si la señal detectada en el pin es superior a un valor fijado en el programa, sucederá una acción, y si es inferior, sucederá la contraria. En mi caso, aprovecho la presencia del zumbador piezoeléctrico de mi tarjeta y hago que suene (con una breve intermitencia) tras calentar la resistencia variable poniéndola en contacto, durante algunos segundos, con la punta de mi soldador, previamente calentado. El sonido continuará durante el tiempo que, una vez retirado el calor, la resistencia se enfríe lo suficiente para que la señal en la entrada analógica (pin 1), disminuya en valor numérico por debajo del umbral indicado (en mi ejemplo vale 500), hecho que observaremos atentamente en la ventana de LEER VALOR. La siguiente experiencia consistirá en conectar un potenciómetro al conjunto tarjeta-placa con el objetivo de encender o apagar los diodos leds, al girar su eje con los dedos. Se trata de ir complicando los programas al agregar varios condicionales IF, en este caso tres, uno para cada diodo led. Al variar el valor óhmico en los terminales del potenciómetro, y escogiendo uno de suficiente calidad y tamaño como para lograr cierta precisión al fijarlo en una posición angular determinada, podremos encender de modo independiente cada uno de los diodos. La señal de entrada alcanzará unos valores exactos y fijados en el programa, ya que el texto del editor de Arduino indica que utilizamos la igualdad como condición a cumplir. La conexión de potenciómetro a Arduino es, otra vez, mediante tres cables que parten de dos de las tres patillas del potenciómetro (la central y una de los extremos) y terminan, atendiendo a la configuración “pull-down”, en los pines GND, +5V y Analog In 1. Tanto la resistencia a masa como el mismo potenciómetro son de valor 10 Kohmios, por lo que la señal “traducida” en la entrada (y recogida en el monitor a través del cable USB) oscila entre 512 y 1024; como consecuencia, se han determinado los encendidos para los valores 600, 800 y 1000 (aproximadamente con una diferencia de un voltio de caída entre los terminales). Un aspecto interesante que aún no había comentado es que la tarjeta Arduino tiene un conector tipo Power Jack en el que, una vez cargado el programa en la memoria del microprocesador, puedes desconectar el cable USB (que hasta ahora hacía la doble función de transmitir datos y alimentar con 5 voltios de tensión desde el ordenador) para, mediante un conector preparado al efecto, utilizar una batería externa. El valor máximo de ésta será 20 V (ya que la tarjeta consta de un regulador de tensión de 5V), si bien se recomienda un rango de alimentación externa de entre 7 y 12V, que evitarían inestabilidades o sobrecalentamientos; lo más cómodo es posiblemente utilizar una pila de 9V como la de la imagen. 4) Conexionado de sensores de infrarrojosLa utilización de este tipo de sensores analógicos supone un pequeño salto cualitativo en el taller de Tecnología, respecto al tipo de dispositivos que allí normalmente se emplean y que hemos descrito hasta ahora. Sin embargo el detector denominado CNY70 ya aparece en circuitos ejemplificados en distintos libros de texto de 4º ESO, no resulta caro (algo menos de un euro) y es de gran fiabilidad; quizás su mayor inconveniente resida en la conexión correcta de sus cuatro patillas (dos para el diodo emisor de infrarrojos y dos para el fototransistor que actúa como receptor) a los tres cables que deben pincharse en la tarjeta. Normalmente se utilizan pareados en pequeños robots rastreadores que distinguen entre una línea negra y un fondo blanco para variar su trayectoria, pero yo en mi ejemplo lo voy a utilizar además para detectar el color, entendido éste como una tonalidad intermedia entre negro y blanco; el encendido simultáneo de uno, dos o tres diodos leds en mi tarjeta, determinará en este mismo orden, cuál es el grado de reflexión de la luz (casi nula para el negro, media para el color y máxima para el blanco) en la superficie sobre la que aproximemos el sensor de infrarrojos. Para fabricar mi sensor de color, una vez identificados los cuatro terminales del dispositivo, he unido los correspondientes al ánodo y al colector (con cuidado de no romper la patilla de aluminio al doblarla) y las he soldado al cable que se pinchará en la alimentación de +5V. A continuación he soldado una resistencia de valor 220 ohmios, para la protección del diodo emisor, en la patilla del kátodo; lo mismo debe hacerse, pero con una resistencia de 10 Kohm, en la patilla del emisor, en la que también soldaremos un cable que nos envíe la señal de entrada al pin analógico 1. Finalmente uniremos los dos extremos libres de las resistencias entre sí y con un cable negro que conectaremos, en su otro extremo, en el pin de masa de la Duemilanove. En las fotos puede apreciarse el resultado del programa anterior, en el que el led rojo conectado como salida digital 10, está permanentemente encendido, mientras que amarillo y verde, en este orden, se activan a medida que se aclara la superficie analizada.
5) ConclusiónEn este capítulo se han ampliado las posibilidades de interacción de nuestra placa conectada en la tarjeta Arduino con el mundo exterior y sus variables físicas, si bien empieza a echarse en falta la posibilidad de conectar, además de una variedad de dispositivos de entrada, algún nuevo actuador en una salida, como puede ser un pequeño motor de los que se disponen habitualmente en el taller de Tecnología, experimentación que abordaré en los próximos capítulos. Capítulo 41) IntroducciónUna posibilidad que proporciona la tarjeta Arduino, como ya comenté en el primervcapítulo, es la de crear señales de salida analógicas, es decir, variables en el tiempo y en su valor de tensión, desde 0 a 5V. El programa Amici permite programar estas señales de tipo PWM (pulse width modulation) en los pines 9, 10 y 11, asignando su tensión de salida gradual con números del 0 al 255, lo que probaré a continuación.
2) Iluminación variable de un diodo ledLa utilización del bloque SONIDO para que suenen distintas notas musicales a través del piezoeléctrico conectado al pin digital 9 de nuestra placa, es una forma sofisticada de aprovechar una salida analógica de la tarjeta Arduino, en este caso, con una estrategia difícil de explicar a nuestros alumnos, ya que los tonos se calculan con el número inverso a la frecuencia de cada nota musical, y así aparece explicitado en el editor de texto de Arduino, a través de la librería denominada por el programa <Melody.h >.
Más comprensible para ellos puede ser la propuesta de crear un programa que realice una secuencia de cuatro intensidades de iluminación en el diodo led conectado al pin 11 de nuestra placa utilizando, por ejemplo, los valores 5, 50, 100 y 200 en la pestaña de cada bloque ON. La luminosidad puede graduarse de 0 a 255 mediante la función analogWrite(), de tal modo que si asignamos el valor 64 el diodo led brillará al 25% de su capacidad, con el valor 128 lo hará al 50%, y así sucesivamente: variamos, de forma imperceptible por nuestra vista, la relación entre el tiempo de encendido y apagado del led en un período de tiempo mínimo.
3) Creación de un detector de presencia utilizando el bloque METODOLas alarmas y detectores de presencia son dispositivos de control muy utilizados en nuestra vida cotidiana para crear sistemas antirrobo, la apertura automática de puertas de garaje o de comercios, activar escaleras mecánicas, barreras de paso de vehículos o la cinta corredera en la caja de un supermercado. Los sensores más utilizados en estos ejemplos son los detectores de presión (que actúan como un pulsador) y los conjuntos emisor-receptor de infrarrojos.
Voy a programar una alarma acústica-luminosa utilizando mi placa, para generar simultáneamente, una melodía y la variación de luz de un diodo led, cuando aproxime mi mano a un sensor de infrarrojos.
Si conecto un detector tipo Sharp GP2D12 en la entrada analógica 0, puedo asignar (con la pestaña “LEER VALOR” de Amici) un valor umbral de distancia que superado, produzca el sonido de alarma o, por contra, la variación de brillo en el led como señalización del sistema. Este sensor es más sofisticado y caro (unos 15 euros) que los que he utilizado hasta ahora, pero me parecía interesante mostrarlo en un ejemplo, ya que su conexionado es muy sencillo y funciona como un potenciómetro que varía su valor resistivo al situarse un elemento frente a él, a mayor o menor distancia (desde 10 a 80 cm); la luz infrarroja de medio alcance procedente del emisor rebotará en el objeto detectado y llegará una señal de luz al receptor (ambos formando una única pieza). Simplemente dispone de tres cables que conectar: negro en GND, rojo en + 5V y amarillo en al pin de entrada analógica elegido.
Para hacer más interesante la programación, voy a crear un MÉTODO con Amici, es decir, voy a incorporar dos subprogramas dentro del programa principal, que en mi caso he denominado SEÑAL (reduciendo el último ejemplo comentado) y SIRENA (compuesto de dos notas) .
Con esta estrategia no sólo evito el amontonamiento de bloques gráficos en la consola de Amici, sino que además ordeno el programa en el editor de texto, mejorando claramente su legibilidad. Al crear distintos MÉTODOS e incorporarlos al bloque LOOP, aplico el concepto de modularidad básico en la programación informática, el cual me parece una buena práctica que conviene forzar a los alumnos a utilizar en los ejercicios que les propongamos.
4) Arranque y cambio de velocidad de un pequeño motor Del mismo modo que se gradúa la luminosidad, podría modularse la velocidad de giro de un motor, pero antes de poder realizar esta experiencia, debemos saber cómo podemos activar este dispositivo con la tarjeta Arduino, ya que ésta no proporciona directamente desde sus pines digitales programados como salidas, la corriente necesaria (superior a 20 mA) para que un motor de 3 V, típico del taller de Tecnología, se ponga en funcionamiento. Tenemos que diseñar una nueva placa con un transistor que realice la función de interruptor del circuito de alimentación del motor desde la tarjeta Arduino. La señal de salida emitida desde un pin digital será recibida por la base del transistor, conectando colector y emisor; de este modo se cerrará el circuito del motor, establecido desde una de las tomas de tensión de Arduino , pasando por el motor, atravesando el transistor y terminando en la patilla del emisor conectada a masa (GND).
He decidido utilizar el transistor Mosfet denominado IRF520, ya que lo recomiendan en diversas publicaciones de iniciación al uso de Arduino. Se trata de una tecnología de fabricación de transistores que funciona al aplicar tensión en la patilla denominada “gate” (equivalente a la “base” de los transistores comunes) y que conmuta a velocidades similares a las de trabajo del microprocesador ATmega de la tarjeta.
Como ya expliqué al inicio de este monográfico, soy partidario de crear placas para pinchar en los pines de Arduino al trabajar con los alumnos, de modo que he diseñado una sencilla de 5 pistas de cobre que me permite conectar un motor (con la salida 10) y encender un diodo led (con la 11); ambos dispositivos son susceptibles de ser modulados por pulsos, y además no renunciamos a conectar un piezoelétrico en el pin 9 para crear sonidos. Las líneas azules del esquema son cables de conexión en superficie entre pistas, y las verdes líneas de corte de las pistas de cobre en el reverso de la placa.
Para alimentar el motor debe utilizarse el pin denominado Vin, que proporciona una tensión independiente (cuando se conecta en la entrada del jack una fuente de alimentación externa, por ejemplo, una pila de 9 V) de la utilizada por el microprocesador para su normal funcionamiento, evitándose así fluctuaciones o inestabilidad durante los tiempos de activación del motor. Además conviene añadir un diodo normal en paralelo con las dos patillas de conexión del motor (conectando el cátodo del diodo a la entrada de tensión) para, como se hace comúnmente en los circuitos electrónicos con salida a través de relés, evitar que las corrientes creadas por el motor al girar su bobina dentro de un campo imantado (efecto generador), atraviesen el transistor.
He probado a programar la variación de la velocidad del motor, del mismo modo que lo hice con la luminosidad del diodo led, y ha funcionado perfectamente, si bien se observan dos aspectos: por un lado, la inercia del eje del motor hace más difícil apreciar las transiciones entre las distintas velocidades, y por otro, con valores de energía (denominación utilizada por el programa en la ventana del actuador con posibilidad de PWM) inferiores a 128 (modulación on-off al 50%) al motor le cuesta arrancar por sí mismo.
5) Programación de un ventilador con termostatoEl dispositivo de control de mayor presencia actualmente en nuestras viviendas, tanto incorporado en distintos electrodomésticos (horno, frigorífico, radiadores, etc.) como presente en las modernas instalaciones de calefacción, es el termostato; de hecho, es el ejemplo que utiliza la mayoría de libros de texto de Secundaria para explicar el funcionamiento de un bucle de control en lazo cerrado o con realimentación.
Podemos nosotros construirnos un sensor de temperatura (ver capítulo 3) y conectarlo a nuestra placa para motor, ya que ésta incorpora una clema, aprovechando los pines de 5 V y GND de la tarjeta Arduino, que permite establecer una corriente a través de la resistencia variable NTC (o de cualquier otro sensor). Ahora la idea es enfrentar el pequeño motor con aspas al sensor, para provocar con su calentamiento (acercando el soldador o presionando con nuestros dedos la NTC) y refrescamiento (con el aire generado por las aspas), un encendido y apagado contínuo del motor, en un bucle sin fin.
El reto en la programación será, tras conectar el cable de datos amarillo en el pin analógico 0, determinar el valor umbral que, monitorizado a través del cable USB y mediante la pestaña “LEER VALOR” de la consola de Amici, provoque las transiciones de giro o parada en el motor, espaciando dichos estados en el tiempo según calentemos más o menos la resistencia.
6) ConclusiónLa placa que he utilizado para activar un motor con la tarjeta Arduino abre la posibilidad el control de los pequeños proyectos que construimos con nuestros alumnos en el taller y que programamos con tarjetas comerciales tipo Enconor. También podríamos modificar el funcionamiento de pequeños juguetes con motor, luz o sonido; por último, duplicando la presencia del transistor en una placa, tendremos la oportunidad programar un dispositivo móvil sencillo. Capítulo 51) IntroducciónEn este capítulo, la propuesta final consistirá en crear un dispositivo móvil sencillo dotado con dos pequeños motores, aunque sólo giren en un sentido; pero antes experimentaré a insertar Arduino en algún juguete baratos, con luz y movimiento, modificando su funcionamiento.
2) Diseño de una placa con dos transistores y programación de un jugueteVoy a comenzar diseñando una placa con dos transistores, basada en la ampliación de la que utilizamos en el capítulo anterior y con sus características: presencia del pin 9 para crear sonidos con Amici, posibilidad de activar dos diodos led (que se encenderán con los pines de salida 6 y 11) y presencia de una clema (pinchada sobre los pines Gnd y 5 V) para la alimentación de los sensores.
Como hice en la placa antes comentada, conectaremos (mediante las pistas de cobre) las patillas denominadas "gate" a dos pines de salida digital de la tarjeta (concretamente el 7 y el 10); el motor se situará (con un conector hembra doble) entre el pin Vin de Arduino y la patilla central del transistor "drain"; por último, el circuito de cada motor se cerrará en el pin GND, a través de la tercera patilla "source" del Mosfet IRF520. Basta una placa de 7 pistas de cobre, como la de la figura, para encajar todos los componentes citados; de nuevo las líneas azules representan cables en superficie para establecer distintos caminos eléctricos y las líneas verdes representan las interrupciones necesarias en las pistas de cobre.
Una de las primeras ideas de aplicación de Arduino propuesta por sus creadores, fue utilizarla para "hackear" dispositivos electrónicos existentes, como pueden ser los juguetes baratos dotados de luces y motores. En vez de asumir por obligación el funcionamiento del dispositivo según un bucle cerrado y repetitivo, decidido por su fabricante, nosotros podemos abrirlo, analizar y modificar su conexionado para, a continuación, reprogramar su funcionamiento, poniendo a prueba las posibilidades de la tarjeta Arduino.
En el ejemplo he utilizado un pequeño muñeco motorista (que encontré en una tienda de chinos por 4 euros), cuyo funcionamiento consistía en desplazarse mediante un único motor, a la vez que encendía unos leds bicolores y generaba un sonido de alarma. Mi primer objetivo ha sido abrir el juguete para, una vez inspeccionados sus circuitos, conectar dos cables independientes al motor y otros dos cables a los dos leds bicolor, que a su vez conectaré en paralelo y prestando atención a la polaridad de sus terminales. Cabe recordar que la placa diseñada anteriormente alimenta los mosfet con 9 V y como el móvil utilizaba tres pilas de 1,5 V conectadas en serie, para proteger sus actuadores, es necesario soldar una resistencia de 10 ohmios al cable del motor y de 50 ohmios al cable de los leds bicolor, ya que sino, el motor estaría demasiado revolucionado con dicha tensión y los leds también se podrían fundir.
Voy a fijar con un velcro (que también hace de aislante eléctrico) la pila de 9V a la cara inferior de la tarjeta Arduino, y el conjunto lo voy a adaptar al juguete para sujetarlos con una goma elástica; después pincharé la placa de transistores en los pines correspondientes y llevaré los cables del motor a las conexiones de uno de los mosfet, y los cables de los leds al otro (con el cable negativo pinchado en el pin de la patilla central del transistor). Voy a incorporar al conjunto el sensor de temperatura utilizado en el capítulo anterior (conectado en la entrada analógica 5, de tal modo que cuando se caliente (simplemente presionando con los dedos), el motor se ponga en funcionamiento hasta que se enfríe, momento en el que el móvil se detendrá y los leds parpadearán a modo de luz de emergencia. 3) Construcción de un robot-bicho programable Una vez he comprobado que la placa funciona correctamente, es el momento de construir un robot-bicho, que constará de los siguientes elementos: dos motores "planos" de 3 V, un perfil de aluminio perforado de 1,5 cm de ancho y 7 cm de largo, una pila de 9 V con cable de conexión soldado en su extremo a un conector jack macho, un pequeño interruptor y cinta de velcro negro de 1,5 cm de ancho.
El montaje del conjunto comienza con el doblado del perfil, dejando 4,5 cm en la zona central del mismo, para que los extremos formen un ángulo de unos 30º con la vertical, ya que sobre ambos irán pegados (con pistola termofusible) los motores, aprovechando su forma plana; en el eje de éstos, para lograr que el móvil traccione y no patine, se insertará un trozo de funda de plástico de un cable eléctrico doméstico. La zona central del perfil de recubrirá de velcro adhesivo ya que, por un lado, en su parte superior se apoyará la tarjeta Arduino, y por otro, en su parte inferior se sostendrá la pila de 9 V. Para que la tarjeta no se incline en exceso, conviene pensar en crear un apoyo trasero para el robot-bicho, que en mi caso he resuelto con una bola de ratón ligeramente cortada para aplanar su zona de contacto con la tarjeta.
Como los programas de Arduino se repiten en un bucle sin fin, mientras se prueban y optimizan con el robot-bicho en acción, resulta necesario hacer paradas apagando la tarjeta, por lo que he cortado el cable rojo de la conexión pila-tarjeta, para soldar luego un pequeño interruptor que me permita detener los motores sin necesidad de desconectarlos de la placa con transistores.
4) Primeros programas: robot-bicho sensible a la luz Lógicamente, una vez ensamblados y conectados todos los elementos de nuestro dispositivo móvil, es obligado probar que avanza y gira hacia ambos lados, programando instrucciones sencillas que incluyan una pauta de tiempos de funcionamiento; un ejemplo podría ser la secuencia (ordenada utilizando METODOS) "avance, giroderecha, giroizquierda, stop" propuesta en la imagen anterior. Una vez verificado que la pila de 9 V revoluciona en exceso los motores planos de 3 V (hasta el punto de que podría quemarlos), pero también que los transistores Mosfet funcionan correctamente con esta tensión a través de ellos, he decido soldar una resistencia de 10 ohmios en uno de los cables de cada motor, logrando que la caída de tensión en sus bornes se reduzca para evitar una velocidad de giro excesiva. El siguiente programa que he propuesto consiste en incorporar un sensor de luz, hecho con una resistencia de tipo LDR (tal como expliqué en el capítulo 2), para provocar que el móvil se detenga tras avanzar y situarse en una zona con más luz que el resto del espacio circundante. El sensor se conectará a la clema disponible en la placa (5V y Gnd) y a una de las entradas analógicas (0) de Arduino. Por último, he programado el avance con breves giros a izquierda y derecha, creando un sugestivo movimiento zizageante.
5) Robot-bicho al completoDuplicando la presencia del sensor de luz, puedo dotar al robot-bicho de un aspecto más atractivo, al mostrar las resistencias como si fuesen sus antenas. Ahora la idea es que pueda guiar su trayectoria con la mano: al separar suficientemente las LDR, puedo ampliar el programa del apartado anterior al tener en cuenta las dos entradas digitales. He decidido cambiar el condicional IF por el de ESPERAR HASTA, de modo que el móvil avanzará recto, hasta que con mi mano cree la suficiente sombra para detener el motor que está en el mismo lado que el sensor sombreado y el robot-bicho girará apenas unos segundos, precisamente, hacia ese lado. Repitiendo el proceso varias veces, en ambas antenas, se comprobará que la dirección marcada por la mano y su sombra sobre la LDR correspondiente, será la que determine la trayectoria del móvil.
El uso de un sensor de infrarrojos ya conocido, como es el Sharp GP2D12, dota también a nuestro robot-bicho del aspecto de un insectoide, ya que emisor y receptor de este dispositivo aparentan dos ojos incrustados en una mini-cabeza. Podemos utilizar la señal variable que el sensor recibe, para que el móvil no choque contra una pared o un obstáculo (que conviene que sea de color claro para reflejar mejor la señal infrarroja) y se detenga. En el programa se ha determinado un valor umbral de 500 para las resistencias variables con la luz (conectadas a las entradas analógicas 0 y 2) y un umbral de 600 (que supone una distancia de unos 8 cm) para el sensor infrarrojo, conectado en la entrada analógica 1. El inconveniente de no tener la posibilidad de que nuestro móvil retroceda después de detenerse, abre las opciones de ampliar el programa pensando en que nuestros alumnos serán capaces de crear distintas soluciones.
6) ConclusiónConstruir un "ardobicho" como el propuesto en este capítulo, es un proceso relativamente sencillo (a excepción quizás de la placa electrónica con los mosfet, donde se necesitan ciertas destrezas añadidas) y permite seguir proponiendo soluciones de programación con distintos sensores y activando simultáneamente los leds de la placa o el piezoeléctrico. |