Ang Charlieplexing ay isang pamamaraan ng pagkontrol sa maraming mga LED gamit ang ilang mga I / O na pin. Ang Charlieplexing ay kapareho ng multiplexing, ngunit gumagamit ito ng tri-state na lohika (mataas, mababang input) upang mabawasan nang malaki ang bilang ng mga pin at upang makakuha ng kahusayan sa multiplexing. Ang diskarteng Charlieplexing ay ipinangalan sa imbentor nito, si Charlie Allen, na naimbento ng diskarte noong 1995. Dati ay ginamit namin ang multiplexing na diskarte sa Arduino upang i-interface ang 4-digit na 7-segment na display at pagmamaneho ng 8x8 LED matrix.
Pinapayagan ka ng Charlieplexing na kontrolin ang mga N * (N - 1) LEDs, kung saan ang N ay ang no ng mga pin. Halimbawa, maaari mong makontrol ang 12 LEDs gamit ang 4 Arduino pin 4 * (4-1) = 12. Ang mga LED ay diode, at sa mga diode, ang kasalukuyang daloy sa isang direksyon lamang. Kaya't sa Charlieplexing, kumokonekta kami ng dalawang mga LED na kahanay sa bawat isa ngunit may kabaligtaran na polarity upang ang isang LED lamang ang magsara sa bawat oras. Pagdating sa Arduino o iba pang mga board ng microcontroller, hindi ka magkakaroon ng sapat na mga input / output pin. Kung nagtatrabaho ka sa isang proyekto kung saan kailangan mong i-interface ang LCD display, isang grupo ng mga LED, at ilang mga sensor, wala ka na sa mga pin. Sa sitwasyong iyon, maaari kang charlieplex LEDs upang mabawasan ang bilang ng mga pin.
Sa tutorial na ito, gagamitin namin ang diskarteng Charlieplexing upang makontrol ang 12 LEDs gamit ang 4 Arduino pin.
Kinakailangan ang Mga Bahagi
- Arduino UNO
- LED (12)
- 4 Resistor (330 ohms)
- Jumper Wires
- Breadboard
Diagram ng Circuit
Talaga, sa circuit diagram na ito, 12 LEDs ay konektado sa 4 Arduino pin sa pamamagitan ng resistors. Ang bawat pin ng Arduino ay konektado sa tatlong LEDs. Mayroong anim na pangkat ng mga LEDs, at sa bawat pangkat, 2 mga LED ang nakakonekta, at ang parehong mga LED ay magkatugma sa bawat isa ngunit may kabaligtaran na polarity upang ang isang LED lamang ang magsara sa bawat oras. Kaya ayon sa circuit diagram upang i-on ang humantong 1, kailangang mayroong isang mataas na signal sa pin A at isang LOW signal sa pin B, at ang pin C at D ay kailangang idiskonekta. Ang parehong pamamaraan ay susundan para sa iba pang mga LEDs. Ang buong talahanayan ng mga setting ng pin para sa bawat LED ay ibinibigay sa ibaba:
LED | Pin 8 | Pin 9 | Pin 10 | Pin 11 |
1 | TAAS | MABABA | INPUT | INPUT |
2 | MABABA | TAAS | INPUT | INPUT |
3 | INPUT | TAAS | MABABA | INPUT |
4 | INPUT | MABABA | TAAS | INPUT |
5 | INPUT | INPUT | TAAS | MABABA |
6 | INPUT | INPUT | MABABA | TAAS |
7 | TAAS | INPUT | MABABA | INPUT |
8 | MABABA | INPUT | TAAS | INPUT |
9 | INPUT | TAAS | INPUT | MABABA |
10 | INPUT | MABABA | INPUT | TAAS |
11 | TAAS | INPUT | INPUT | MABABA |
12 | MABABA | INPUT | INPUT | TAAS |
Matapos ang mga koneksyon ang aking hardware ay mukhang imahe sa ibaba. Tulad ng nakikita mo mula sa imahe mayroong anim na pangkat ng mga LED at sa bawat pangkat na 2 LED ay konektado sa tapat ng bawat isa. Ang Arduino UNO module ay pinalakas ng USB port.
Paliwanag sa Code
Ang kumpletong code na may isang gumaganang video ay ibinibigay sa pagtatapos ng tutorial na ito, narito ipinapaliwanag namin ang kumpletong programa upang maunawaan ang pagtatrabaho ng proyekto.
Sa pagsisimula ng Arduino code tukuyin ang lahat ng mga pin kung saan nakakonekta ang mga LED. Pagkatapos nito, tukuyin ang kabuuang bilang ng mga LED at humantong estado.
#define A 8 #define B 9 #define C 10 #define D 11 #define PIN_CONFIG 0 #define PIN_STATE 1 #define LED_Num 12
Lumikha ngayon ng isang matrix para sa pag-on at pag-off ng mga LED sa isang pagkakasunud-sunod, maaari mong baguhin ang pagkakasunud-sunod sa pamamagitan ng pagbabago ng estado ng pin at pagsasaayos ng pin. Ayon sa matrix na ito, ang LED1 ay bubuksan muna pagkatapos LED2 at iba pa.
int matrix = { // PIN_CONFIG PIN_STATE // ABCDABCD {{OUTPUT, OUTPUT, INPUT, INPUT}, {HIGH, LOW, LOW, LOW}}, {{OUTPUT, OUTPUT, INPUT, INPUT}, {LOW, HIGHT, LOW, LOW}}, {{INPUT, OUTPUT, OUTPUT, INPUT}, {LOW, HIGH, LOW, LOW}}, ……………………………. ……………………………..
Ngayon sa loob ng void loop , isasagawa ng programa ang LED_COUNT matrix upang i-on at i-off ang mga LED sa ibinigay na pagkakasunud-sunod.
void loop () { para sa (int l = 0; l <LED_Num; l ++) { lightOn (l); pagkaantala (1000 / LED_Num); }
Ngayon ikonekta ang Arduino gamit ang laptop at piliin ang board at port nang tama at pagkatapos ay i-click ang pindutang Mag-upload. Matapos i-upload ang code, dapat magsimulang magpikit ang iyong mga LED.
Kaya't ito ay kung paano magagamit ang diskarteng Charlieplexing upang makontrol ang maraming mga LED gamit ang mas kaunting mga pin ng Arduino. Maaari mong gamitin ang pamamaraang ito upang makontrol ang mas maraming bilang ng mga LED. Halimbawa, kung nais mong kontrolin ang 20 LEDs, i-edit lamang ang matrix at idagdag ang mga kundisyon para sa natitirang mga LED.
Hanapin ang kumpletong code at gumaganang video sa ibaba.