Charlieplexing เป็นเทคนิคการควบคุม LED จำนวนมากโดยใช้ขา I / O เพียงไม่กี่ตัว Charlieplexing เหมือนกับการมัลติเพล็กซ์ แต่ใช้ตรรกะไตรสถานะ (อินพุตสูงและต่ำ) เพื่อลดจำนวนพินลงอย่างมากและเพื่อเพิ่มประสิทธิภาพในการมัลติเพล็กซ์ เทคนิค Charlieplexing ตั้งชื่อตามนักประดิษฐ์ชาร์ลีอัลเลนผู้คิดค้นเทคนิคนี้ในปี 1995 ก่อนหน้านี้เราใช้เทคนิคมัลติเพล็กซิ่งใน Arduino เพื่อเชื่อมต่อจอแสดงผล 7 ส่วน 4 หลักและขับเคลื่อนเมทริกซ์ LED 8x8
Charlieplexingช่วยให้คุณควบคุมไฟ LED N * (N - 1) โดยที่ N คือจำนวนหมุด ตัวอย่างเช่นคุณสามารถควบคุมไฟ LED 12 ดวงโดยใช้หมุด Arduino 4 ตัว 4 * (4-1) = 12 LED เป็นไดโอดและในไดโอดกระแสจะไหลไปในทิศทางเดียวเท่านั้น ดังนั้นใน Charlieplexing เราเชื่อมต่อ LED สองดวงแบบขนานกัน แต่มีขั้วตรงข้ามกันเพื่อให้ LED เปิดทีละหนึ่งดวงเท่านั้น เมื่อพูดถึง Arduino หรือบอร์ดไมโครคอนโทรลเลอร์อื่น ๆ คุณจะมีพินอินพุต / เอาต์พุตไม่เพียงพอ หากคุณกำลังทำงานในโครงการที่คุณต้องเชื่อมต่อกับจอ LCD ไฟ LED จำนวนมากและเซ็นเซอร์บางตัวแสดงว่าคุณไม่ได้ใช้หมุดแล้ว ในสถานการณ์นั้นคุณสามารถใช้ไฟ LED แบบ charlieplex เพื่อลดจำนวนพินได้
ในการกวดวิชานี้เราจะใช้เทคนิค Charlieplexing ในการควบคุมไฟ LED 12 โดยใช้ 4 ขา
ส่วนประกอบที่จำเป็น
- Arduino UNO
- ไฟ LED (12)
- 4 ตัวต้านทาน (330 โอห์ม)
- สายจัมเปอร์
- เขียงหั่นขนม
แผนภูมิวงจรรวม
โดยทั่วไปในแผนภาพวงจรนี้ไฟ LED 12 ดวงเชื่อมต่อกับหมุด Arduino 4 ตัวผ่านตัวต้านทาน แต่ละพินของ Arduino เชื่อมต่อกับ LED สามดวง LED มีหกกลุ่มและในแต่ละกลุ่มจะมีการเชื่อมต่อ LED 2 ดวงและ LED ทั้งสองจะขนานกัน แต่มีขั้วตรงข้ามกันเพื่อให้ LED เปิดทีละหนึ่งครั้งเท่านั้น ดังนั้นตามแผนภาพวงจรในการเปิด led 1 จำเป็นต้องมีสัญญาณ HIGH ที่ขา A และสัญญาณ LOW ที่ขา B และต้องตัดการเชื่อมต่อขา C และ D จะมีการปฏิบัติตามขั้นตอนเดียวกันสำหรับ LED อื่น ๆ ตารางการตั้งค่าพินแบบเต็มสำหรับแต่ละ LED มีดังต่อไปนี้:
LED | พิน 8 | พิน 9 | พิน 10 | พิน 11 |
1 | สูง | ต่ำ | อินพุต | อินพุต |
2 | ต่ำ | สูง | อินพุต | อินพุต |
3 | อินพุต | สูง | ต่ำ | อินพุต |
4 | อินพุต | ต่ำ | สูง | อินพุต |
5 | อินพุต | อินพุต | สูง | ต่ำ |
6 | อินพุต | อินพุต | ต่ำ | สูง |
7 | สูง | อินพุต | ต่ำ | อินพุต |
8 | ต่ำ | อินพุต | สูง | อินพุต |
9 | อินพุต | สูง | อินพุต | ต่ำ |
10 | อินพุต | ต่ำ | อินพุต | สูง |
11 | สูง | อินพุต | อินพุต | ต่ำ |
12 | ต่ำ | อินพุต | อินพุต | สูง |
หลังจากการเชื่อมต่อฮาร์ดแวร์ของฉันดูเหมือนภาพด้านล่าง ดังที่คุณเห็นจากภาพมี LED หกกลุ่มและในแต่ละกลุ่ม LED 2 ดวงจะเชื่อมต่อกันตรงข้ามกัน โมดูล Arduino UNO ใช้พลังงานจากพอร์ต USB
คำอธิบายรหัส
โค้ดที่สมบูรณ์พร้อมวิดีโอที่ใช้งานได้จะได้รับในตอนท้ายของบทช่วยสอนนี้เรากำลังอธิบายโปรแกรมทั้งหมดเพื่อทำความเข้าใจการทำงานของโครงการ
ในการเริ่มต้นรหัส Arduino ให้กำหนดพินทั้งหมดที่ LED เชื่อมต่ออยู่ หลังจากนั้นกำหนดจำนวน LED ทั้งหมดและสถานะนำ
# กำหนด A 8 # กำหนด B 9 # กำหนด C 10 # กำหนด D 11 # กำหนด PIN_CONFIG 0 # กำหนด PIN_STATE 1 # กำหนด LED_Num 12
ตอนนี้สร้างเมทริกซ์สำหรับการเปิดและปิด LED ตามลำดับคุณสามารถเปลี่ยนลำดับได้โดยเปลี่ยนสถานะพินและการกำหนดค่าพิน ตามเมทริกซ์นี้ LED1 จะถูกเปิดก่อนจากนั้นจึงเป็น LED2 เป็นต้น
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}}, ……………………………. ……………………………..
ตอนนี้อยู่ใน void loop โปรแกรมจะเรียกใช้เมทริกซ์ LED_COUNT เพื่อเปิดและปิด LED ตามลำดับที่กำหนด
โมฆะ loop () { สำหรับ (int l = 0; l <LED_Num; l ++) { lightOn (l); ล่าช้า (1000 / LED_Num); }
ตอนนี้เชื่อมต่อ Arduino กับแล็ปท็อปแล้วเลือกบอร์ดและพอร์ตอย่างถูกต้องจากนั้นคลิกปุ่มอัปโหลด หลังจากอัปโหลดโค้ดแล้วไฟ LED ของคุณควรเริ่มกะพริบ
ดังนั้นนี้เป็นวิธีที่Charlieplexing เทคนิคสามารถนำมาใช้ในการควบคุมไฟ LED จำนวนมากใช้น้อยลงหมุด คุณสามารถใช้วิธีนี้เพื่อควบคุม LED จำนวนมากขึ้น ตัวอย่างเช่นหากคุณต้องการควบคุม LED 20 ดวงให้แก้ไขเมทริกซ์และเพิ่มเงื่อนไขสำหรับ LED ที่เหลือ
ค้นหาโค้ดทั้งหมดและวิดีโอการทำงานด้านล่าง