Comenzamos el taller proponiendo un problema… Imagina que tienes solo 4 pines libres disponibles en tu arduino y necesitas conectar 8 leds, no hay que ser un genio de las matemáticas para comprender que necesitas 4 pines mas que no tienes, pero, ¿hay otra solución? En efecto si, el uso de un multiplexor!

Multiplexor 74HC595N

El multiplexor 74HC595N o shift register funciona mediante la comunicación serie síncrona. Es decir que usamos un pin para enviar los bits en serie (el Data pin) y usamos un segundo pin (el Clock pin) para indicar cuando hay que leer el bit.

Cuando los 8 bits se han leído en el registro un tercer pin (Latch pin) escribe estos bits en los pines de salida del chip y los mantiene hasta que se reciban nuevos datos.

Nuestro Arduino envía la señal de Clock Pin de modo regular para indicar cuando hay que leer (Se lee en el flanco de subida, cuando Clock sube de 0 a 1).

A medida que Arduino va poniendo valores en el Data Pin(DS), el chip los va leyendo en el flanco de subida del Clock pin y por eso va a ir leyendo 1 1 1 0 0 0 1 1 sucesivamente.

Cada uno de estos valores se van pasando en orden a los pines de salida de Q0 hasta Q7, pero aún no se activan. Cuando el Latch Pin se activa (también por flanco de subida) los valores pasan a los pines de salida y se memorizan.

Su pinout es el siguiente:

Los pines del 1 al 7 y el pin 15 son salidas..

Los pines 16 y 10 se conectan a 5V

Los pines 8 y 13 se conectan a tierra.

Los pines 14,12 y 11 son de datos. Los pines ST_CP y DS son los usados por Arduino para pasar datos al multiplexor.

Para el taller propusimos realizar un montaje con 8 leds, un potenciómetro y el shift register. Mediante código el sistema deberá ser capaz de variar la velocidad con la que parpadea un pulso de leds que va de lado a lado.

El montaje corresponde al siguiente:

y su código es el siguiente:

La pregunta radica en, ¿se puede hacer algo parecido pero sin un multiplexor?

Y la respuesta es…. SI! Pero con ciertas trabas, como por ejemplo solo poder hacerlo para entradas. Vamos a ver como hacerlo con botones, pudiendo llegar a tener hasta 1024 botones en un único pin de nuestro Arduino, teóricamente claro.

Realizaremos el siguiente esquema con 5 pulsadores:

Observamos que estos están conectados entre si mediante resistencias y al final a un único pin analógico. Básicamente el funcionamiento consiste en, cuando pulsas el primer botón la corriente pasa entera por el, cuando pulsas el segundo, la corriente pasa entera menos lo que se come la resistencia. Cuando el tercero es pulsado, la corriente pasa entera menos lo que se comen las dos resistencias, y así hasta el ultimo botón.

En el código mediante el uso de unos if colocaremos el rango de corriente en el que actuara cada botón activando en cada rango un led.

El código es el siguiente:

Recursos: Presentación Meetup 121