Charlieplexing è una tecnica per controllare molti LED utilizzando pochi pin I / O. Il charlieplexing è uguale al multiplexing, ma utilizza la logica a tre stati (ingresso alto, basso) per ridurre drasticamente il numero di pin e aumentare l'efficienza rispetto al multiplexing. La tecnica Charlieplexing prende il nome dal suo inventore, Charlie Allen, che ha inventato la tecnica nel 1995. In precedenza abbiamo utilizzato la tecnica multiplexing in Arduino per interfacciare un display a 7 segmenti a 4 cifre e pilotare una matrice LED 8x8.
Charlieplexing consente di controllare N * (N - 1) LED, dove N è il numero di pin. Ad esempio, puoi controllare 12 LED utilizzando 4 pin Arduino 4 * (4-1) = 12. I LED sono diodi e nei diodi la corrente scorre in una sola direzione. Quindi in Charlieplexing, colleghiamo due LED in parallelo tra loro ma con polarità opposta in modo che si accenda solo un LED alla volta. Quando si tratta di Arduino o di altre schede microcontrollore, non hai mai abbastanza pin di input / output. Se stai lavorando a un progetto in cui devi interfacciare il display LCD, un gruppo di LED e alcuni sensori, allora sei già senza pin. In quella situazione, puoi charlieplex LED per ridurre il numero di pin.
In questo tutorial, utilizzeremo la tecnica Charlieplexing per controllare i 12 LED utilizzando 4 pin Arduino.
Componenti richiesti
- Arduino UNO
- LED (12)
- 4 resistore (330 ohm)
- Cavi per ponticelli
- Breadboard
Schema elettrico
Fondamentalmente, in questo schema circuitale, 12 LED sono collegati con 4 pin Arduino tramite resistori. Ogni pin di Arduino è collegato con tre LED. Ci sono sei gruppi di LED e in ogni gruppo sono collegati 2 LED ed entrambi i LED sono paralleli tra loro ma con polarità opposta in modo che si accenda solo un LED alla volta. Quindi, secondo lo schema del circuito per accendere il led 1, ci deve essere un segnale HIGH sul pin A e un segnale LOW sul pin B, e i pin C e D devono essere scollegati. La stessa procedura verrà seguita per gli altri LED. Di seguito viene fornita la tabella completa delle impostazioni dei pin per ciascun LED:
GUIDATO | Pin 8 | Pin 9 | Pin 10 | Pin 11 |
1 | ALTA | BASSO | INGRESSO | INGRESSO |
2 | BASSO | ALTA | INGRESSO | INGRESSO |
3 | INGRESSO | ALTA | BASSO | INGRESSO |
4 | INGRESSO | BASSO | ALTA | INGRESSO |
5 | INGRESSO | INGRESSO | ALTA | BASSO |
6 | INGRESSO | INGRESSO | BASSO | ALTA |
7 | ALTA | INGRESSO | BASSO | INGRESSO |
8 | BASSO | INGRESSO | ALTA | INGRESSO |
9 | INGRESSO | ALTA | INGRESSO | BASSO |
10 | INGRESSO | BASSO | INGRESSO | ALTA |
11 | ALTA | INGRESSO | INGRESSO | BASSO |
12 | BASSO | INGRESSO | INGRESSO | ALTA |
Dopo i collegamenti il mio hardware appare come l'immagine qui sotto. Come puoi vedere dall'immagine ci sono sei gruppi di LED e in ogni gruppo 2 LED sono collegati uno di fronte all'altro. Il modulo Arduino UNO è alimentato dalla porta USB.
Spiegazione del codice
Il codice completo con un video funzionante viene fornito alla fine di questo tutorial, qui spieghiamo il programma completo per comprendere il funzionamento del progetto.
Nell'avvio del codice Arduino definire tutti i pin a cui sono collegati i LED. Successivamente, definire il numero totale di LED e lo stato dei 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
Ora crea una matrice per accendere e spegnere i LED in sequenza, puoi cambiare la sequenza cambiando lo stato dei pin e la configurazione dei pin. Secondo questa matrice, il LED1 verrà acceso prima, poi il LED2 e così via.
int matrix = { // PIN_CONFIG PIN_STATE // ABCDABCD {{OUTPUT, OUTPUT, INPUT, INPUT}, {HIGH, LOW, LOW, LOW}}, {{OUTPUT, OUTPUT, INPUT, INPUT}, {LOW, HIGH, LOW, LOW}}, {{INPUT, OUTPUT, OUTPUT, INPUT}, {LOW, HIGH, LOW, LOW}}, ……………………………. ……………………………..
Ora all'interno del loop void , il programma eseguirà la matrice LED_COUNT per accendere e spegnere i LED nella sequenza data.
void loop () { for (int l = 0; l <LED_Num; l ++) { lightOn (l); ritardo (1000 / LED_Num); }
Ora collega Arduino al laptop e scegli correttamente la scheda e la porta, quindi fai clic sul pulsante Carica. Dopo aver caricato il codice, i LED dovrebbero iniziare a lampeggiare.
Quindi è così che la tecnica di Charlieplexing può essere utilizzata per controllare molti LED utilizzando meno pin Arduino. È possibile utilizzare questo metodo per controllare un numero maggiore di LED. Ad esempio, se si desidera controllare 20 LED, è sufficiente modificare la matrice e aggiungere le condizioni per i LED rimanenti.
Trova il codice completo e il video funzionante di seguito.