Charlieplexing é uma técnica de controlar muitos LEDs usando alguns pinos de E / S. Charlieplexing é o mesmo que multiplexing, mas usa a lógica tri-state (entrada alta, baixa) para reduzir drasticamente o número de pinos e ganhar eficiência sobre a multiplexação. A técnica de Charlieplexing tem o nome de seu inventor, Charlie Allen, que inventou a técnica em 1995. Anteriormente, usamos a técnica de multiplexação no Arduino para fazer a interface do display de 7 segmentos de 4 dígitos e matriz de LED 8x8 de condução.
Charlieplexing permite que você controle N * (N - 1) LEDs, onde N é o número de pinos. Por exemplo, você pode controlar 12 LEDs usando 4 pinos Arduino 4 * (4-1) = 12. Os LEDs são diodos e, em diodos, a corrente flui em apenas uma direção. Portanto, no Charlieplexing, conectamos dois LEDs em paralelo, mas com polaridade oposta, de modo que apenas um LED acende por vez. Quando se trata de Arduino ou outras placas de microcontrolador, você nunca tem pinos de entrada / saída suficientes. Se você está trabalhando em um projeto no qual precisa fazer a interface de um display LCD, um monte de LEDs e alguns sensores, então você já está sem pinos. Nessa situação, você pode fazer o charlieplex dos LEDs para reduzir o número de pinos.
Neste tutorial, vamos usar a técnica Charlieplexing para controlar os 12 LEDs usando 4 pinos do Arduino.
Componentes necessários
- Arduino UNO
- LED (12)
- 4 resistores (330 ohms)
- Jumper Wires
- Tábua de pão
Diagrama de circuito
Basicamente, neste diagrama de circuito, 12 LEDs são conectados a 4 pinos do Arduino por meio de resistores. Cada pino do Arduino é conectado com três LEDs. Existem seis grupos de LEDs e, em cada grupo, 2 LEDs estão conectados e ambos os LEDs são paralelos entre si, mas com polaridade oposta, de forma que apenas um LED acende por vez. Portanto, de acordo com o diagrama de circuito para ligar o LED 1, é necessário haver um sinal HIGH no pino A e um sinal LOW no pino B, e os pinos C e D precisam ser desconectados. O mesmo procedimento será seguido para os outros LEDs. A tabela completa de configurações de pinos para cada LED é fornecida abaixo:
CONDUZIU | Pino 8 | Pino 9 | Pino 10 | Pino 11 |
1 | ALTO | BAIXO | ENTRADA | ENTRADA |
2 | BAIXO | ALTO | ENTRADA | ENTRADA |
3 | ENTRADA | ALTO | BAIXO | ENTRADA |
4 | ENTRADA | BAIXO | ALTO | ENTRADA |
5 | ENTRADA | ENTRADA | ALTO | BAIXO |
6 | ENTRADA | ENTRADA | BAIXO | ALTO |
7 | ALTO | ENTRADA | BAIXO | ENTRADA |
8 | BAIXO | ENTRADA | ALTO | ENTRADA |
9 | ENTRADA | ALTO | ENTRADA | BAIXO |
10 | ENTRADA | BAIXO | ENTRADA | ALTO |
11 | ALTO | ENTRADA | ENTRADA | BAIXO |
12 | BAIXO | ENTRADA | ENTRADA | ALTO |
Após as conexões meu hardware fica parecido com a imagem abaixo. Como você pode ver na imagem, existem seis grupos de LEDs e em cada grupo 2 LEDs são conectados um em frente ao outro. O módulo Arduino UNO é alimentado pela porta USB.
Explicação do código
O código completo com um vídeo de trabalho é fornecido no final deste tutorial, aqui estamos explicando o programa completo para entender o funcionamento do projeto.
No início do código do Arduino, defina todos os pinos nos quais os LEDs estão conectados. Depois disso, defina o número total de LEDs e o estado do led.
#define A 8 #define B 9 #define C 10 #define D 11 #define PIN_CONFIG 0 #define PIN_STATE 1 #define LED_Num 12
Agora crie uma matriz para ligar e desligar LEDs em uma sequência, você pode alterar a sequência alterando o estado do pino e a configuração do pino. De acordo com esta matriz, o LED1 será ligado primeiro, depois o LED2 e assim por diante.
matriz int = { // PIN_CONFIG PIN_STATE // ABCDABCD {{SAÍDA, SAÍDA, ENTRADA, ENTRADA}, {ALTO, BAIXO, BAIXO, BAIXO}}, {{SAÍDA, SAÍDA, ENTRADA, ENTRADA}, {BAIXO, ALTO, BAIXO, LOW}}, {{INPUT, OUTPUT, OUTPUT, INPUT}, {LOW, HIGH, LOW, LOW}}, ……………………………. ……………………………..
Agora dentro do loop vazio , o programa executará a matriz LED_COUNT para ligar e desligar os LEDs na sequência fornecida.
void loop () { para (int l = 0; l <LED_Num; l ++) { lightOn (l); atraso (1000 / LED_Num); }
Agora conecte o Arduino com o laptop e escolha a placa e a porta corretamente e clique no botão Upload. Depois de enviar o código, seus LEDs devem começar a piscar.
Portanto, é assim que a técnica de Charlieplexing pode ser usada para controlar muitos LEDs usando menos pinos do Arduino. Você pode usar este método para controlar mais número de LEDs. Por exemplo, se você deseja controlar 20 LEDs, basta editar a matriz e adicionar as condições para os LEDs restantes.
Encontre o código completo e o vídeo de trabalho abaixo.