ARDUTOYS (Programación de proyectos con Scratch para Arduino) Imprimir
EQUIPAMIENTO TECNOLÓGICO - Robótica
Escrito por Leopoldo Mosquera   
Lunes, 14 de Enero de 2013 08:27

minirobotNuestros alumnos viven rodeados de objetos tecnológicos que manejan con una soltura endiablada; son dispositivos con los que interaccionan a través de botones y diferentes sensores de modo que generan efectos en forma de sonidos, luces o movimiento. Suponemos que cualquiera de estos gadgets tiene cierta inteligencia, capacidad de memorizar e incluso pueden detectar lo que sucede a su alrededor. Sin embargo, para la mayoría de nosotros se muestran como objetos dotados de cierta magia y muy pocas personas sabrían explicar de un modo sencillo cómo funcionan.

La interacción de estos dispositivos con variables físicas como luz, temperatura o movimiento sucede a través de sensores cuyas señales deben ser procesadas por nuestro protagonista principal, el microcontrolador: chip programable que contiene instrucciones precisas de cuál será la respuesta del dispositivo hacia el mundo físico exterior.

En la reciente edición de Ciencia en Acción 2012 que se celebró en el CosmoCaixa de Alcobendas (Madrid) mostré una serie de proyectos construidos por mis alumnos durante los últimos tres años en el aula-taller de Tecnología del IES donde actualmente trabajo. El común denominador de todos ellos era que utilizaban la tarjeta Arduino y su microcontrolador para programar su interacción con el medio a través de un sensor; creo que el público asistente a la feria científica se sorprendió al ver los resultados.

Feria

Hace dos años publiqué en esta misma plataforma un monográfico denominado “Arduinoblocks ” en el que presentaba el potencial del entorno de trabajo de esta tarjeta utilizando además un software de programación basado en un lenguaje visual de bloques denominado Amici. Como ha pasado un tiempo desde entonces, este software ha sido mejorado por sus desarrolladores y sigue siendo, en mi opinión, interesante para su uso en robótica educativa.

Sin embargo, han surgido otras opciones de programación de la tarjeta utilizando un  lenguaje de bloques gráficos, y entre todas ellas yo he escogido para algunos proyectos el software denominado S4A, que basado en el programa Scratch, tiene gran aceptación por mis alumnos más jóvenes. Existe además en esta misma plataforma un monográfico que nos introduce en su uso titulado “Desarrollos de Scratch para robótica, Enchanting y S4A “.

Diseño de un driver de conexión con la tarjeta

Quizás el modo más común de conectar dispositivos a la tarjeta Arduino es utilizando un placa protoboard, sin embargo yo prefiero soluciones más robustas y duraderas, de modo que mis alumnos fabrican sencillas placas electrónicas, con los componentes soldados, que después se pinchan en los pines correspondientes de la tarjeta. Para este monográfico voy a utilizar una Protoshield comercial (modelo “adafruit”) para Arduino, en la que iré incorporando los elementos según vaya creciendo la complejidad de conexiones o las posibilidades de programación de los proyectos que iré presentando.

La primera propuesta consiste en aprovechar un proyecto con un solo motor, el cual representa una especie de molino con aspas giratorias construido en contrachapado. Con un circuito integrado denominado TC4424 puedo amplificar la señal procedente de la tarjeta Arduino, incapaz de activar por sí sola (con una señal de salida de unos 20 mA) un pequeño motor de contínua o de encender una pequeña bombilla de 3V. Su funcionamiento está basado en un “puente en H” a base de transistores tipo Mosfet, y dispone de ocho patillas de las cuales sólo se utilizan seis, por lo que la comprensión de su conexionado no puede ser más fácil.

shield1HBridge tc4424

Como puede observarse en la imagen, he situado el integrado en el medio de la placa sobre un zócalo; el cable amarillo conecta el pin 5 con una entrada y el cable verde conecta el pin 6 con la otra entrada, y entre ambos se sitúa la patilla GND. Es importante destacar que ambas entradas deben activarse de modo no simultáneo, y que ambos pines pueden ser utilizados como salida analógica tanto en la programación con la consola de Arduino como en S4A.

Al otro lado del integrado y, en línea con sus dos patillas de salida, he situado una clema azul para sujetar los cables de un motor; por el medio de dicha clema discurre un cable marrón que une el pin Vin de la placa con la patilla de alimentación del chip.

En el proyecto he utilizado como motor un servo trucado (en internet se explica como hacerlo), es decir, sin potenciómetro y sin tope de giro a los 180º, pero aprovechando su mecanismo reductor y sobre todo, el piecerío de plástico que acoplado a su eje, hace que sea muy fácil hacer girar cualquier elemento en un proyecto; además estos motores consumen muy poca intensidad de corriente, son muy silenciosos y cada vez más baratos.

Por otro lado, la placa también incorpora una resistencia “pull-down” (ver capítulo 3 de “Arduinoblocks”) de 1 Kohmio para poder conectar un sensor de luz tipo LDR o de temperatura NTC directamente en una clema gris;un cable de este color, conecta el pin analógico A0 de la tarjeta con una de las patillas de dicha clema.

Primer programa de ejemplo

Una vez pinchado el driver en la tarjeta, debo conectarla al equipo via USB para cargar desde la consola de Arduino el firmware de S4A (ver monográfico “Desarrollos...”). Terminado este proceso, puedo abrir S4A y ver si detecta la tarjeta, lo cual se manifiesta al probar en la pantalla del ordenador, la variación numérica de la ventana correspondiente al sensor de temperatura que tengo conectado al pin analógico A0 a través de mi driver. Debemos fijarnos además en dicho valor ya que determinará el umbral numérico de funcionamiento que yo desee para el proyecto.

generador molinete
detalle NTC

Como puede observarse en la anterior imagen, el motor empezará a girar mediante una señal de salida procedente del pin 6 cuando, mediante el contacto de mis dedos con la NTC, se supere el valor que he marcado para el sensor; aprovecho también la programación para acelerar y decelerar la velocidad de giro del motor, ya que puedo modular la señal de salida del pin como si fuera analógica y variable desde 1 a 255, simplemente escribiéndolo en la pestaña correspondiente que me proporciona S4A.

Cambio de sentido de giro de un motor

El proyecto que he escogido para ejemplificar esta posibilidad es el de una puerta corredera hecha en contrachapado y en la que conecto dos sensores de contacto.

shield2puerta

Al pulsarlo el motor gira en un sentido para que la puerta se abra. Al completar su apertura, la puerta presiona sobre la patilla de un final de carrera y creando una señal que es enviada a una nueva entrada de sensor, es decir, a una clema gris que he conectado a la entrada analógica A1 de la tarjeta, con su resistencia “pull down”. Tras cinco segundos (durante los que se enciende un led verde pinchado en el pin 13 y su GND anexa) el motor cambiará de sentido para cerrar la puerta tras asignarle un tiempo de funcionamiento, después del cual se detendrá y esperará por si tiene que repetir el ciclo.

En este proyecto utilizo un motor con reductora de los habitualmente disponibles en el taller de Tecnología, lo que demuestra la capacidad del TC4424 de soportar hasta 3A de corriente.

puertecilla2 pulldown
placa puerta2

Iniciación a la robótica

Si al driver TC4424 del apartado anterior le añado detrás otro de modo similar (ahora con sus entradas conectadas a los pines 10 y 11), podremos mover dos motores, de tal modo que un cochecito o pequeño robot estaría dotado de la posibilidad de avanzar, retroceder y girar hacia ambos lados, bien según una trayectoria fija y predefinida, o bien en función de que detecte variables físicas a su alrededor; los ejemplos más comunes en robótica educativa son esquivar obstáculos, seguir cambios de luminosidad y la detección de líneas negras (u otros colores) sobre una superficie blanca.

Estamos, por lo tanto, en condiciones de que los alumnos de 3º ó 4º, puedan adquirir sus primeros conocimientos de robótica con la programación de un pequeño dispositivo móvil. He montado éste a partir de una tapa de plástico redonda transparente de un envase de 10 DVD, al que he pegado con la termofusible dos motores con reductora compactos (de los más utilizados en los talleres de Tecnología) además de una rueda loca pequeña de metal.

 shield3robotservos

Funciona de modo que normalmente avanzará recto, y después girará a uno y otro lado cuando los sensores de tipo LDR detecten cambios en la luz incidente al acercarnos a tapar con la mano cualquiera de ellos; del mismo modo, podemos provocar su retroceso tapando ambos sensores con la mano. Puede suceder que los motores no reciban suficiente tensión mediante el cable USB como para accionarlos, por lo que basta con conectar una pila de 9V a la alimentación de la tarjeta Arduino para conseguir su movimiento sin problemas. La secuencia de instrucciones en la pantalla de S4A explica cómo lograr nuestro objetivo utilizando condicionales.

 testdriver2

Ahora el inconveniente es que nuestro pequeño robot está unido por cable al PC, y se haría necesario el paso de las instrucciones en modo visual a la escritura en código-texto en la consola Arduino para volcarlo a la memoria de la tarjeta e independizar su movilidad respecto de la cercanía de un ordenador.

Para otro ejemplo más completo, he aprovechado una estructura de piezas Lego con dos motores y tracción tipo oruga, al que he añadido un pequeño sensor de infrarrojos CNY70 (su conexionado se muestra en el capítulo 3 de “Arduinoblocks”) con el que poder detectar cambios de color en una superficie plana (líneas o manchas); además al asomarse al borde final de una mesa, el sensor modifica igualmente su señal detectada y el móvil puede reacciona cambiando su trayectoria y evitando la caída. También incorpora dos diodos led de señalización conectados a los pines 9 y 13, que son los que quedan por utilizar en el programa S4A, ya que 4, 7, 8 y12 el programa los reserva para el uso de servomotores, como veremos en el siguiente apartado.

sensor legocarlegocar foto

legocarshield4

Otras alternativas de programación con S4A

Tras esta primera y sencilla incursión en la programación de proyectos de Tecnología cabe preguntarse acerca de las posibilidades que ofrece S4A, como es la utilización de un servomotor con 180º de giro utilizando el pin 12 , que viene (junto con el 8) ya preparados para este fin.

He ampliado la tarjeta-driver para poder conectar un servo soldando tres pines macho, en línea y en este orden, a tres puntos con GND, 5V y el pin 12 (a través de un cable azul) y he buscado el típico proyecto al que los alumnos trataron de dotar de un movimiento de vaivén con un mecanismo de biela-manivela pero que nunca terminó de funcionar bien.

Se trata de una reproducción del “toro mecánico” que puede verse en algunas ferias; se ha programado añadiéndole un sensor de proximidad, de tal modo que el móvil realiza un vaivén de atrás al medio que se repite, hasta que se coloca la mano a una determinada distancia del sensor (valor umbral) y se produce el movimiento de vaivén del medio hacia adelante. El sensor GP2D12 es muy fácil de conectar a la tarjeta, ya que su cable amarillo se soldaría en el pin analógico 5, el negro en cualquier GND de las que tiene preparada la tarjeta, igual que el cable rojo en uno de 5V.

Otra posibilidad que proporciona S4A es utilizar los pines 4 y 7 de Arduino, que están ya configurados para su conexión directa a servomotores de giro continuo de 360º; cabe reseñar que, aunque son fácilmente programables para que giren en uno y otro sentido, suponen una alternativa que encarece un tanto la construcción de pequeños robots.

torete2torito

He montado un prototipo del modo más sencillo que se me ha ocurrido, utilizando la pistola termofusible para pegar las partes y ha quedado como se observa en la imagen. Respecto de su posible programación, he ampliado las conexiones en la placa soldable preparando tres pines macho para cada servo, de modo parecido a como lo hice en el apartado cinco con el pin 12. y en paralelo a éste, quedando todas las conexiones en la parte inferior de la protoshield. El programa que he escogido como ejemplo incorpora en la clema de la entrada analógica A1 un detector de final de carrera en forma de antena de alambre que serviría para evitar los obstáculos.

 servobstaculossensor legocar

Conclusión

Utilizando la tarjeta Arduino y el software S4A de libre distribución, es posible enseñar a los alumnos de Secundaria cómo son capaces de crear y programar sencillos proyectos tecnológicos con los que será posible interactuar gracias a la presencia de un microcontrolador.