Charlieplexing is een techniek om veel LED's aan te sturen met een paar I / O-pinnen. Charlieplexing is hetzelfde als multiplexing, maar het maakt gebruik van de tri-state logica (hoge, lage input) om het aantal pinnen drastisch te verminderen en om efficiëntie te vergroten ten opzichte van multiplexen. De Charlieplexing-techniek is genoemd naar de uitvinder, Charlie Allen, die de techniek in 1995 heeft uitgevonden. We gebruikten eerder de multiplextechniek in Arduino om een 4-cijferig 7-segment display te koppelen aan een 8x8 LED-matrix.
Met Charlieplexing kun je N * (N - 1) LED's besturen, waarbij N het aantal pinnen is. U kunt bijvoorbeeld 12 LED's aansturen met behulp van 4 Arduino-pinnen 4 * (4-1) = 12. Leds zijn diodes, en in diodes vloeit de stroom slechts in één richting. Dus in Charlieplexing verbinden we twee LED's parallel met elkaar, maar met tegengestelde polariteit, zodat slechts één LED tegelijk aangaat. Als het gaat om Arduino of andere microcontroller-kaarten, heb je nooit genoeg input / output-pinnen. Als je aan een project werkt waarin je een LCD-scherm, een heleboel LED's en enkele sensoren moet koppelen, dan heb je al geen pinnen meer. In die situatie kun je charlieplex leds gebruiken om het aantal pinnen te verminderen.
In deze tutorial gaan we de Charlieplexing-techniek gebruiken om de 12 LED's aan te sturen met behulp van 4 Arduino-pinnen.
Componenten vereist
- Arduino UNO
- Leiden (12)
- 4 weerstand (330 ohm)
- Doorverbindingsdraden
- Breadboard
Schakelschema
Kortom, in dit schakelschema zijn 12 LED's verbonden met 4 Arduino-pinnen via weerstanden. Elke pin van Arduino is verbonden met drie LED's. Er zijn zes groepen LED's en in elke groep zijn 2 LED's aangesloten, en beide LED's zijn parallel aan elkaar maar met tegengestelde polariteit zodat er slechts één LED tegelijk aangaat. Dus volgens het schakelschema om led 1 in te schakelen, moet er een HOOG signaal op pin A en een LAAG signaal op pin B zijn, en moeten pin C en D worden losgekoppeld. Dezelfde procedure wordt gevolgd voor de andere leds. De volledige tabel met pin-instellingen voor elke LED wordt hieronder gegeven:
LED | Speld 8 | Speld 9 | Speld 10 | Speld 11 |
1 | HOOG | LAAG | INVOER | INVOER |
2 | LAAG | HOOG | INVOER | INVOER |
3 | INVOER | HOOG | LAAG | INVOER |
4 | INVOER | LAAG | HOOG | INVOER |
5 | INVOER | INVOER | HOOG | LAAG |
6 | INVOER | INVOER | LAAG | HOOG |
7 | HOOG | INVOER | LAAG | INVOER |
8 | LAAG | INVOER | HOOG | INVOER |
9 | INVOER | HOOG | INVOER | LAAG |
10 | INVOER | LAAG | INVOER | HOOG |
11 | HOOG | INVOER | INVOER | LAAG |
12 | LAAG | INVOER | INVOER | HOOG |
Na de aansluitingen ziet mijn hardware eruit zoals op de afbeelding hieronder. Zoals je op de afbeelding kunt zien zijn er zes groepen leds en in elke groep zijn 2 leds tegenover elkaar aangesloten. De Arduino UNO-module wordt aangedreven door een USB-poort.
Code Uitleg
Aan het einde van deze tutorial wordt de volledige code met een werkende video gegeven, hier leggen we het volledige programma uit om de werking van het project te begrijpen.
Definieer in het begin van de Arduino-code alle pin waarop LED's zijn aangesloten. Definieer daarna het totale aantal leds en ledstatus.
#define A 8 #define B 9 #define C 10 #define D 11 #define PIN_CONFIG 0 #define PIN_STATE 1 #define LED_Num 12
Maak nu een matrix voor het in- en uitschakelen van LED's in een reeks, u kunt de reeks wijzigen door de pinstatus en pinconfiguratie te wijzigen. Volgens deze matrix wordt eerst LED1 ingeschakeld, daarna LED2 enzovoort.
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}}, ……………………………. ……………………………..
Nu binnen de lege lus , zal het programma de LED_COUNT matrix uitvoeren om LED's in de gegeven volgorde aan en uit te zetten.
void loop () { for (int l = 0; l <LED_Num; l ++) { lightOn (l); vertraging (1000 / LED_Num); }
Verbind nu de Arduino met de laptop en kies het board en de poort correct en klik vervolgens op de Upload knop. Na het uploaden van de code, zouden uw LED's moeten gaan knipperen.
Dit is dus hoe de Charlieplexing-techniek kan worden gebruikt om veel LED's aan te sturen met minder Arduino-pinnen. U kunt deze methode gebruiken om meer LED's te bedienen. Als u bijvoorbeeld 20 LED's wilt besturen, bewerkt u de matrix en voegt u de voorwaarden voor de resterende LED's toe.
Vind de volledige code en werkvideo hieronder.