viernes, 31 de enero de 2014

Arduino y Shift Register

Hoy voy a trastear un poco con el arduino y un shift register.

Este integrado, hablando muy por encima, nos transforma una entrada serie en una salida paralela. En este ejemplo concreto, a través de una patilla del integrado le pasamos en serie 8 bits, sincronizando con una patilla de reloj. Una vez que el integrado tiene estos ocho valores, le avisamos, por otra patilla, que saque estos bits, por las ocho salidas.

Es decir, si pasamos el siguiente byte, en bits: 01010000, la segunda y la cuatra patilla de salida del integrado tendrán un valor HIGH, mientras que el resto, estarán a LOW.

Estos integrados se usan para la mencionada conversión serie-paralelo, o en casos en el que número de patillas de salida de nuestro controlador, no es suficiente. En este caso concreto, con tres patillas (datos,reloj y "latch") tenemos ocho salidas. La mejora es evidente. También hay integrados de más salidas, con lo que ganancia es mayor.

Voy a mostrar el funcionamiento básico de este integrado con una tira de ocho leds haciendo el efecto "coche fántástico".

El esquema de conexión es el siguiente, y aunque quede bonito, es un poco engorroso de hacer, por todo lo que hay que conectar en tan poco espacio. Por alguna extraña razón, la salida del integrado tiene que ir la resistencia y luego el led. Si uso el led y luego la resistencia, no se iluminan. ¿Alguien me ilumina a mí y me explica porqué ?



El integrado elegido es el 74HC595, y podéis encontrar el datasheet aquí . Un tutorial de AdaFruit muy similar a este lo podéis encontrar aquí. . Que ellos han puesto un montón de dibujico y cosicas, y se entiende muy bien, sobre todo la parte del latch.


El código para el Arduino lo podéis encontrar aquí. Esta vez he intentado que esté un poco más comentado.

Y un pequeño vídeo, donde se puede ver todo en acción. 

sábado, 11 de enero de 2014

Sensor capacitivo y Arduino

Buscando por internet, uno a veces se encuentra algunos proyectos que nos hacen tilín.

Un instructable (http://www.instructables.com/id/Capacitive-Touch-Arduino-Keyboard-Piano/?ALLSTEPS), que me ha parecido genial. Son estas las cosas por las que pienso que Internet merece la pena.

Y un kickstarter, http://www.bareconductive.com/, que vendrá el próximo año con el sello Arduino at Heart, que tiene infinitas posibilidades en cuanto al diseño de interfaces.

¿Quién no ha oído alguna vez la expresión, si no lo tienes lo pintas? Pues eso es precisamente lo que voy a intentar empezar a esbozar hoy. Ya no hacen falta switch buttons, cuyas patillas nunca encajan o se te queda la marca del círculo en el dedo índice. Ahora podemos pintar, literalmente pintar, cualquier interfaz y configurar su comportamiento: contacto o proximidad.

Podemos pintar teclados en mesas en lugar de tener todo un dispositivo, pintar un despertador en la pared al lado de la cama y que al pasar la mano se apague (y tener una RaspberryPi que controle hora, música y altavoces en el otro extremo), pintar interruptores en cualquier lugar, detectores de proximidad, pistas de DDR, instrumentos electrónicos, baldosas ...

Una vez hecha la introducción hay que ver un poco en qué se basa todo esto. La primera vez que lo vi, me pareció brujería. La magia es en realidad es un sensor capacitivo. Una muy breve introducción al mismo la podéis encontrar aquí.

Un punto muy interesante es que para probar esto en un Arduino, no hace falta nada más que unos trozos de papel de aluminio. La documentación de la librería de Arduino está en esta dirección (http://playground.arduino.cc//Main/CapacitiveSensor), y da una muy buena introducción a la capacitividad.

Al final hay un ejemplo bastante sencillo de reproducir, que es lo que he hecho yo en el siguiente esquema.



Se detecta que se está tocando cada trozo de papel de aluminio y se ilumina su led correspondiente. No es tan espectacular como el piano, pero para la primera prueba es más que suficiente.

El código lo podéis descargar de aquí y he intentado que esté bien documentado. Lo más complicado es ajustar el número de mediciones y valor a partir del cual se detecta que se está pulsando algo. Con la salida por el puerto serie de los valores leídos.

En este ejemplo sólo voy a probar el contacto total entre sensor y cuerpo humano. Con resistencias de más valor, el próximo paso será la cercanía y no el contacto.

Y como siempre al final, un vídeo.



Ajustar los valores para que detecte varias pulsaciones a la vez ha sido un poco de prueba y error. Tal vez con otros valores de resistencias y/o añadiendo un condensador como indican en el playground, mejore/estabilice las lecturas.