0% encontró este documento útil (0 votos)
113 vistas15 páginas

Controlar Matriz de LEDs Con Arduino

Este documento describe cómo controlar una matriz de LED con Arduino utilizando la técnica de Charlieplexing. Charlieplexing permite controlar múltiples LED con pocos pines digitales colocando los pines en tres estados: alto, bajo e input. Al poner un pin en modo input actúa como una alta resistencia, permitiendo seleccionar qué LED se enciende. El documento explica cómo calcular los valores de resistencia necesarios y montar el circuito básico para probar la técnica con una matriz de 6 LED controlados por 3 pines digitales

Cargado por

Alexis Guido
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
113 vistas15 páginas

Controlar Matriz de LEDs Con Arduino

Este documento describe cómo controlar una matriz de LED con Arduino utilizando la técnica de Charlieplexing. Charlieplexing permite controlar múltiples LED con pocos pines digitales colocando los pines en tres estados: alto, bajo e input. Al poner un pin en modo input actúa como una alta resistencia, permitiendo seleccionar qué LED se enciende. El documento explica cómo calcular los valores de resistencia necesarios y montar el circuito básico para probar la técnica con una matriz de 6 LED controlados por 3 pines digitales

Cargado por

Alexis Guido
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

Controlar matriz de LEDs con Arduino

Comentarios(12)
Luis del Valle Hernández
En este artículo vamos a ver una técnica que nos puede resolver, en
muchas ocasiones, la escasez de puertos de entrada y salida (I/O). Esta
técnica se llama Charlieplexing y nos permite por ejemplo controlar una
matriz de LEDs con Arduino. Ahora veremos un poco cuales son sus
ventajas y como no, sus inconvenientes.

Indice de contenidos
 1 Técnica Charlieplexing para controlar matriz de LEDs
 2 Multiplexación ¿qué es?
 3 Matriz de LEDs con Arduino
 4 Cómo funciona un LED de una matriz de LEDs
 5 Montando el circuito básico con un LED y Arduino
 6 Montando el circuito de la Matriz de LEDs con Arduino
 7 Funcionamiento de la matriz de LEDs con Charlieplexing
 8 Matriz de LEDs, la programación
 9 Resumen de la técnica Charlieplexing

Técnica Charlieplexing para controlar


matriz de LEDs
La técnica del Charlieplexing fue propuesta por Charlie Allen en el año
1995 y permite controlar una matriz de LEDs con muy pocos pines I/O.

Voy a poner un ejemplo, imagínate una matriz de LEDs, donde tienes que
controlar que se encienda un único LED a la vez. Si trabajamos con la
versión UNO de Arduino, esto sería sencillo si solo queremos controlar
hasta un máximo de 14 LEDs (o 20 si utilizamos las entradas analógicas).

¿Qué ocurre si tenemos más LEDs? Tenemos dos opciones en este caso,
utilizar un chip, un shift register o utilizar la técnica de Charlieplexing.

Multiplexación ¿qué es?


Antes de continuar veamos un poco que es la multiplexación. Multiplexar
consiste en compartir un mismo canal para el envío de datos a diferentes
receptores. Un ejemplo lo encontramos en la telefonía, ya sea móvil o fija.
En este caso no tenemos un canal para cada número de teléfono, esto
sería prácticamente inviable, existe un único canal donde se transmiten
todos los datos desde los emisores hasta los receptores por lo tanto, los
emisores necesitan multiplexar la información y los receptores necesitan
demultiplexar dicha información para redirigir al receptor al que van
dirigidos los datos.

Te acuerdas de la típica operadora que aparece en las películas antiguas,


la telefonista cambia los cables para pasar una llamada al receptor. Estas
operadoras hacían la función de un demultiplexor. Por supuesto en la
actualidad la tecnología nos permite hacer esto de manera automática.

Este tipo de multiplexación se hace en telecomunicaciones pero, en el


ejemplo que estamos tratando en este artículo también se puede aplicar
un tipo de multiplexación parecido.

Matriz de LEDs con Arduino


Pongámonos en situación, tenemos una matriz de LEDs que no es más
que un montón de LEDs que queremos controlar. El objetivo es poder decir
que LED se enciende usando el mínimo de entradas posibles. Para este
cometido no vamos a inventar la rueda, ya hubo una mente privilegiada
que resolvió el problema y del cual ya te he hablado, Charlie Allen.
En los pines digitales de Arduino, solo podemos tener dos estados alto
(HIGH) o bajo (LOW). La técnica del Charlieplexing consiste en utilizar un
tercer estado que nos permita seleccionar un LED concreto. Esto lo
podemos hacer gracias a la naturaleza de los LEDs.

LED, es el acrónimo de Light-Emitting Diode (diodo emisor de luz) y por lo


tanto se comporta como lo que es, un diodo.

Cómo funciona un LED de una matriz de


LEDs
Veamos un poco más en profundidad como funciona un LED. La corriente
siempre va en un sentido, de mayor potencial a menor potencial, eso
quiere decir que si conectamos nuestro circuito a 5V y el otro extremo lo
conectamos a tierra 0V, la corriente fluirá desde los 5V a los 0V. Si en
nuestro circuito introducimos un LED deberemos llevar cuidado como lo
insertamos y ahora veremos porqué.

Si miramos un LED detenidamente, podemos ver dos patillas. Una de ellas


es más larga que la otra, a esta patilla se le llama ánodo, irá conectada a
la fuente de tensión, y a la patilla más corta cátodo, irá conectada a tierra.

Un diodo es un componente eléctrico que permite la circulación de corriente


a través de el en un solo sentido. Por lo tanto un LED se comportará igual,
debemos saber en que sentido nos va a permitir que circule la corriente
para que así pueda emitir luz. El sentido es de ánodo a cátodo como ya he
comentado. Vamos a verlo con dos gráficos que ilustran cada situación.
LED mal conectado
Puedes hacer el experimento en tu casa con tu Arduino y comprobar que
si lo pones al revés, no permitirá circular la corriente. Antes de hacer el
experimento deja que te explique algo muy práctico y que te introduzca en
la electrónica básica con la famosa Ley de Ohm y las Leyes de Kirchhoff.

Analizando la información del datasheet de un LED


Esto ya lo vimos en el artículo Introducción a la electrónica. Si miras
las características técnicas de un LED común, como los que tienes en tu
kit de Arduino, encontrarás los siguientes datos que pueden ser muy útiles
y válidos para el 99% de los LEDs que se incluyen en los kits de Arduino.

Vamos a obtener la siguiente información, te lo pongo en inglés ya que


será complicado que encuentres alguna hoja técnica en español y es mejor
que te acostumbres a su significado en inglés.

Forward Voltage: entre 1.8 y 2.2


El Foward Voltaje, dependerá de cada LED y de cada fabricante, es el
voltaje que va a consumir el LED cuando está encendido. Nos indica los
valores recomendados para su buen funcionamiento.

Si conectamos un LED a una fuente de alimentación que nos de 5V, esto


quiere decir que nuestro LED está usando 5V para iluminar, estaría fuera
del rango que nos aconseja el Forward Voltage de las características
técnicas. Según la Ley del Voltaje de Kirchhoff, «En un circuito los voltajes
se deben equilibrar, la cantidad generada debe ser igual a la cantidad
consumida», por lo tanto nuestro LED debe consumir los 5V que nos está
generando nuestra placa de Arduino, por ejemplo.

Calculando la resistencia de un LED


Así que debemos hacer algo con esos 5V para que cuando llegue al LED
ya no sean 5V, que sea entre los 1.8V y los 2.2V recomendados por
el Forward Voltage de la hoja de características técnicas. En este
momento entra en juego la Ley de Ohm. Esta ley nos dice que

(1)

Donde V es el voltaje, R la resistencia e I la intensidad o corriente .


Las variantes para calcular la resistencia y la intensidad son

(2)

(3)

Lo que nos interesa ahora mismo es saber que resistencia tenemos que
poner para que consuma el exceso de voltaje, así podremos trabajar con
el recomendado. Por lo tanto nos vamos a centrar en la fórmula (2)
. Solo nos faltaría saber que intensidad nos está dando la placa de
Arduino. Este dato lo podemos ver en las características técnicas de
nuestro producto, en nuestro caso el modelo Arduino UNO rev3.
Como nuestro LED va a estar conectado a un pin digital, si miramos en
las características técnicas del Arduino UNO, la corriente (DC Current per
I/O Pin) será de 20mA (0.02 Amperios). Este valor es el recomendado
pero hay que ser conscientes de que estos pines nos pueden suministrar
hasta 40mA (0.004 Amperios).

Por lo tanto, debemos calcular el voltaje que queremos que esa


resistencia use, si tenemos 5V y nuestro LED va a consumir de media
2V, la resistencia debería consumir los 3V que nos sobran para que se
cumpla la Ley del Voltaje de Kirchhoff. Con los datos que tenemos ya
podemos aplicar la Ley de Ohm y obtener el valor de la resistencia.
Montando el circuito básico con un LED
y Arduino
Con una resistencia de 150Ω estaríamos dentro del
margen recomendado por el Forward Voltage de la hoja técnica. Si
queremos que nuestro LED brille más, podemos cambiar el valor de esta
resistencia, podríamos por ejemplo llegar hasta 3V (es lo máximo
recomendado para los LEDs), lo que implica que la resistencia deberá
usar menos voltaje y por lo tanto será más pequeña. Debemos ser
conscientes que saliendo de los márgenes indicados podemos dañar el
LED o acortar su vida útil.

Teniendo claro esto podemos seguir avanzando en nuestro objetivo,


utilizar Charlieplexing para poder manejar un volumen grande de LEDs
con el mínimo de entradas. Como ya había dicho, vamos a utilizar los
pines digitales y vamos a incorporar un nuevo estado que nos permita
multiplexar, ahora nuestros pines van a poder estar en 3 estados HIGH,
LOW e INPUT.

Para poder utilizar el estado INPUT de un pin digital, hay que entender el
funcionamiento de dichos pines. Un pin digital de Arduino puede estar en
modo salida (OUTPUT) lo que indica que podemos poner en estado alto
(HIGH), que suministra 5V, o en estado bajo (LOW), que suministra 0V.

Pero también puede estar en modo entrada (INPUT) lo que indica que
podrá leer en que estado está el elemento conectado, alto (HIGH) o bajo
(LOW). Esto es importante ya que dependiendo del modo (OUTPUT o
INPUT) la corriente fluirá en un sentido u otro. Vamos a verlo con un
gráfico.
Cuando ponemos un pin en modo INPUT, este se encuentra en estado de
alta impedancia. La impedancia es una medida de resistencia en circuitos
de corriente alterna, en circuitos de corriente continua podemos decir que
la impedancia es la resistencia de ese circuito. Cuando hablamos de alta
impedancia podemos decir que es de alta resistencia. Para que te hagas
una idea, la entrada digital que esté en modo INPUT se comporta como una
resistencia de más o menos . Si ahora aplicas la Ley de
Ohm para calcular la intensidad que circula por esta entrada, podrás
comprobar que es prácticamente despreciable, es como tener un cable
desconectado, no circula intensidad.

Montando el circuito de la Matriz de


LEDs con Arduino
Con todos estos conceptos claros podemos preparar el circuito. Vamos a
trabajar con 6 LEDs y los controlaremos solo con 3 pines digitales. El
esquema del circuito es el siguiente.
Como ves tenemos 6 LEDs y 3 pines digitales. Veamos como funcionaría
este circuito trabajando a través de la programación, estableciendo los
modos y estados correctos para poder encender un único LED a la vez.
En este caso queremos encender el LED 1.

1. Lo primero es que el PIN 3 debería estar en modo OUTPUT y en un


estado HIGH.
2. El PIN 2 lo pondremos en modo OUTPUT y en un estado LOW.

¿Qué pasa con el PIN 4? en principio lo tendríamos todo correcto ya que


por defecto, el modo de los pines es INPUT. Al estar en este modo el PIN
4, se produce una alta impedancia, una enorme resistencia que impide que
la corriente circule por esa rama y esto anula todos los componentes que
se encuentren en su camino sin que, en este caso, el LED 4 se ilumine. Si
ponemos el PIN 4 a en modo OUTPUT con estado LOW, podrás
comprobar como en este caso el LED 4 se ilumina.

El resto de LEDs no se van a iluminar debido a que o el anodo está


conectado a un estado LOW (LED 6 y 2) o el cátodo está conectado a un
nivel alto y no permite circular la corriente en ese sentido (LED 3 Y 2).

Para que puedas probar y seguir la explicación, te voy a dejar el esquema


de conexionado con la placa de Arduino, en cuanto lo tengas montado
podemos seguir con la explicación.
Antes de entrar en la programación, lleva cuidado en conectar los cables,
si hay una mala conexión no funcionará esta técnica. También ten en
cuenta el valor de las resistencias, para este ejemplo he utilizado 3 de
330Ω.

Funcionamiento de la matriz de LEDs


con Charlieplexing
Entremos entonces en materia de programación. Lo primero es hacernos
una tabla de estados que deben estar los pines para encender los 6 LEDs.

LED PIN 2 PIN 3 PIN 4

1 LOW HIGH INPUT

2 HIGH LOW INPUT

3 INPUT LOW HIGH


4 INPUT HIGH LOW

5 LOW INPUT HIGH

6 HIGH INPUT LOW

Matriz de LEDs, la programación


De esta tabla podemos sacar la lógica para poder encender un único LED
de los 6. Te dejo aquí el código y ahora lo veremos más detenidamente.

1 /*

2 Creado: Luis del Valle (ldelvalleh@[Link])

3 [Link]

4 Ejemplo de Charlieplexing, luces del coche fantástico

5 */

7 // Definimos los pines a utilizar

8 #define PIN_A 2

9 #define PIN_B 3

10 #define PIN_C 4

11

12 void setup() {

13 }

14
15 void loop() {

16 // Bucle para encender los LEDs de menor a mayor

17 for(int i=1; i<=6; i++)

18 {

19 encenderLed(i);

20 delay(100);

21 }

22

23 // Bucle para encender los LEDs de mayor a menor eliminando lo extremos

24 for(int i=5; i>1; i--)

25 {

26 encenderLed(i);

27 delay(100);

28 }

29 }

30

31 // Función que pondrá en los estados correctos para encender un LED (HIGH, LOW e INPUT)

32 void ponerEstados(int pinHigh, int pinLow, int pinInput)

33 {

34 pinMode(pinHigh,OUTPUT);

35 digitalWrite(pinHigh,HIGH);

36 pinMode(pinLow,OUTPUT);

37 digitalWrite(pinLow,LOW);

38 pinMode(pinInput,INPUT);

39 }

40

41 // Esta función se va a encargar de aplicar la lógica dependiendo del LED que queramos encender

42 void encenderLed(int led_num)

43 {

44 switch(led_num)

45 {
46 case 1:

47 ponerEstados(PIN_B,PIN_A,PIN_C);

48 break;

49 case 2:

50 ponerEstados(PIN_A,PIN_B,PIN_C);

51 break;

52 case 3:

53 ponerEstados(PIN_C,PIN_B,PIN_A);

54 break;

55 case 4:

56 ponerEstados(PIN_B,PIN_C,PIN_A);

57 break;

58 case 5:

59 ponerEstados(PIN_C,PIN_A,PIN_B);

60 break;

61 case 6:

62 ponerEstados(PIN_A,PIN_C,PIN_B);

63 break;

64 }

65

66 }

Utilizando técnicas de programación, se puede reducir mucho el código.


En este caso sabemos que para encender cualquier LED de nuestra
matriz, debemos de tener un PIN en estado HIGH, otro PIN en estado LOW
y el último PIN en modo INPUT así que, esto lo podemos sacar a una
función donde le digamos el número de pin en cada caso.

Esta función es ponerEstados y admite 3 parámetros, pinHigh (el pin que


debemos poner a HIGH), pinLow (el pin que debemos poner a LOW)
y pinInput (el pin que debemos poner en modo INPUT). La
función encenderLed admite como parámetro el LED que queremos
encender y, a través de un switch (no es más que una cadena
de if anidados), decidiremos que pines tienen que estar en estado HIGH,
LOW o en modo INPUT.
Te dejo a continuación un vídeo del circuito funcionando.

Resumen de la técnica Charlieplexing


Por último te dejo una tabla a continuación de cuantos LEDs podemos
controlar dependiendo el número de entradas. La técnica de Charlieplexing
nos dice que si tenemos n pins podremos controlar por lo tanto,
con 3 pines como en el ejemplo podremos controlar .

Nº PINS LEDS CHARLIEPLEXING

1 0

2 2

3 6

4 12

5 20

6 30
7 42

8 56

9 72

10 90

11 110

12 132

13 156

14 182

Pues esto es todo, espero haber aclaro conceptos sobre electrónica,


cualquier duda la puedes dejar en los comentarios de este artículo,
muchas gracias.

También podría gustarte