Charlieplexing là một kỹ thuật điều khiển nhiều đèn LED bằng cách sử dụng một vài chân I / O. Charlieplexing cũng giống như ghép kênh, nhưng nó sử dụng logic ba trạng thái (đầu vào cao, thấp) để giảm số lượng chân một cách đáng kể và để đạt được hiệu quả khi ghép kênh. Kỹ thuật Charlieplexing được đặt theo tên người phát minh ra nó, Charlie Allen, người đã phát minh ra kỹ thuật này vào năm 1995. Trước đây, chúng tôi đã sử dụng kỹ thuật ghép kênh trong Arduino để giao diện hiển thị 4 chữ số 7 đoạn và điều khiển ma trận LED 8x8.
Charlieplexing cho phép bạn điều khiển N * (N - 1) đèn LED, trong đó N là không có chân. Ví dụ: bạn có thể điều khiển 12 đèn LED bằng 4 chân Arduino 4 * (4-1) = 12. Đèn LED là điốt, và trong điốt, dòng điện chỉ chạy theo một hướng. Vì vậy, trong Charlieplexing, chúng tôi kết nối hai đèn LED song song với nhau nhưng có phân cực ngược nhau để chỉ có một đèn LED bật tại một thời điểm. Khi nói đến Arduino hoặc các bảng vi điều khiển khác, bạn không bao giờ có đủ chân đầu vào / đầu ra. Nếu bạn đang làm việc trên một dự án mà bạn cần giao diện màn hình LCD, một loạt đèn LED và một số cảm biến, thì bạn đã hết chân. Trong tình huống đó, bạn có thể sử dụng đèn LED Charlieplex để giảm số lượng chân cắm.
Trong hướng dẫn này, chúng ta sẽ sử dụng kỹ thuật Charlieplexing để điều khiển 12 đèn LED bằng 4 chân Arduino.
Thành phần bắt buộc
- Arduino UNO
- LED (12)
- 4 Điện trở (330 ohms)
- Dây nhảy
- Breadboard
Sơ đồ mạch
Về cơ bản, trong sơ đồ mạch này, 12 đèn LED được kết nối với 4 chân Arduino thông qua điện trở. Mỗi chân của Arduino được kết nối với ba đèn LED. Có sáu nhóm đèn LED và trong mỗi nhóm, 2 đèn LED được kết nối và cả hai đèn LED song song với nhau nhưng có phân cực ngược nhau để chỉ có một đèn LED bật tại một thời điểm. Như vậy theo sơ đồ mạch để bật led 1 cần phải có tín hiệu CAO trên chân A và tín hiệu THẤP trên chân B, đồng thời ngắt chân C và D. Quy trình tương tự sẽ được thực hiện cho các đèn LED khác. Bảng đầy đủ cài đặt pin cho mỗi đèn LED được đưa ra dưới đây:
Đèn LED | Pin 8 | Pin 9 | Pin 10 | Pin 11 |
1 | CAO | THẤP | ĐẦU VÀO | ĐẦU VÀO |
2 | THẤP | CAO | ĐẦU VÀO | ĐẦU VÀO |
3 | ĐẦU VÀO | CAO | THẤP | ĐẦU VÀO |
4 | ĐẦU VÀO | THẤP | CAO | ĐẦU VÀO |
5 | ĐẦU VÀO | ĐẦU VÀO | CAO | THẤP |
6 | ĐẦU VÀO | ĐẦU VÀO | THẤP | CAO |
7 | CAO | ĐẦU VÀO | THẤP | ĐẦU VÀO |
số 8 | THẤP | ĐẦU VÀO | CAO | ĐẦU VÀO |
9 | ĐẦU VÀO | CAO | ĐẦU VÀO | THẤP |
10 | ĐẦU VÀO | THẤP | ĐẦU VÀO | CAO |
11 | CAO | ĐẦU VÀO | ĐẦU VÀO | THẤP |
12 | THẤP | ĐẦU VÀO | ĐẦU VÀO | CAO |
Sau khi kết nối phần cứng của tôi trông giống như hình dưới đây. Như bạn có thể thấy từ hình ảnh, có sáu nhóm đèn LED và trong mỗi nhóm có 2 đèn LED được kết nối đối diện với nhau. Mô-đun Arduino UNO được cấp nguồn bằng cổng USB.
Giải thích mã
Mã hoàn chỉnh với video hoạt động được đưa ra ở cuối hướng dẫn này, ở đây chúng tôi sẽ giải thích chương trình hoàn chỉnh để hiểu hoạt động của dự án.
Khi bắt đầu mã Arduino, hãy xác định tất cả các chân mà các đèn LED được kết nối. Sau đó, xác định tổng số đèn LED và trạng thái đèn 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
Bây giờ hãy tạo một ma trận để bật và tắt đèn LED theo một trình tự, bạn có thể thay đổi trình tự bằng cách thay đổi trạng thái chân và cấu hình chân. Theo ma trận này, LED1 sẽ được bật trước rồi đến LED2, v.v.
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}}, ……………………………. ……………………………..
Bây giờ bên trong vòng lặp void , chương trình sẽ thực thi ma trận LED_COUNT để bật và tắt các đèn LED theo trình tự đã cho.
void loop () { for (int l = 0; l <LED_Num; l ++) { lightOn (l); độ trễ (1000 / LED_Num); }
Bây giờ kết nối Arduino với máy tính xách tay và chọn bo mạch và cổng chính xác, sau đó nhấp vào nút Tải lên. Sau khi tải mã lên, đèn LED của bạn sẽ bắt đầu nhấp nháy.
Vì vậy, đây là cách kỹ thuật Charlieplexing có thể được sử dụng để điều khiển nhiều đèn LED sử dụng ít chân Arduino hơn. Bạn có thể sử dụng phương pháp này để kiểm soát số lượng đèn LED nhiều hơn. Ví dụ, nếu bạn muốn điều khiển 20 đèn LED, chỉ cần chỉnh sửa ma trận và thêm các điều kiện cho các đèn LED còn lại.
Tìm mã hoàn chỉnh và video làm việc bên dưới.