Charlieplexing은 몇 개의 I / O 핀을 사용하여 많은 LED를 제어하는 기술입니다. Charlieplexing은 멀티플렉싱과 동일하지만 3 상태 로직 (하이, 로우 입력)을 사용하여 핀 수를 극적으로 줄이고 멀티플렉싱에 비해 효율성을 얻습니다. Charlieplexing 기술은 1995 년에이 기술을 발명 한 발명가 Charlie Allen의 이름을 따서 명명되었습니다. 이전에 Arduino에서 멀티플렉싱 기술을 사용하여 4 자리 7 세그먼트 디스플레이를 인터페이스하고 8x8 LED 매트릭스를 구동했습니다.
Charlieplexing을 사용하면 N * (N – 1) LED를 제어 할 수 있습니다. 여기서 N은 핀 수입니다. 예를 들어 4 개의 Arduino 핀 4 * (4-1) = 12를 사용하여 12 개의 LED를 제어 할 수 있습니다. LED는 다이오드이고 다이오드에서는 전류가 한 방향으로 만 흐릅니다. 따라서 Charlieplexing에서는 두 개의 LED를 서로 병렬로 연결하지만 극성이 반대이므로 한 번에 하나의 LED 만 켜집니다. Arduino 또는 기타 마이크로 컨트롤러 보드의 경우 입력 / 출력 핀이 충분하지 않습니다. LCD 디스플레이, 여러 LED 및 일부 센서를 인터페이스해야하는 프로젝트에서 작업하는 경우 이미 핀이 부족한 것입니다. 이 경우 LED를 charlieplex하여 핀 수를 줄일 수 있습니다.
이 튜토리얼에서는 Charlieplexing 기술을 사용하여 4 개의 Arduino 핀을 사용하여 12 개의 LED를 제어 할 것 입니다.
필요한 구성 요소
- Arduino UNO
- LED (12)
- 4 저항기 (330 옴)
- 점퍼 와이어
- 브레드 보드
회로도
기본적으로이 회로도에서는 12 개의 LED가 저항을 통해 4 개의 Arduino 핀에 연결되어 있습니다. Arduino의 각 핀은 3 개의 LED로 연결됩니다. 6 개 그룹의 LED가 있으며 각 그룹에는 2 개의 LED가 연결되어 있으며 두 LED는 서로 평행하지만 극성이 반대이므로 한 번에 하나의 LED 만 켜집니다. 따라서 led 1을 켜는 회로도에 따르면 핀 A에 HIGH 신호가 있고 핀 B에 LOW 신호가 있어야하며 핀 C와 D는 분리되어야합니다. 다른 LED에 대해서도 동일한 절차를 따릅니다. 각 LED에 대한 전체 핀 설정 표는 다음과 같습니다.
LED | 핀 8 | 핀 9 | 핀 10 | 핀 11 |
1 | 높은 | 낮은 | 입력 | 입력 |
2 | 낮은 | 높은 | 입력 | 입력 |
삼 | 입력 | 높은 | 낮은 | 입력 |
4 | 입력 | 낮은 | 높은 | 입력 |
5 | 입력 | 입력 | 높은 | 낮은 |
6 | 입력 | 입력 | 낮은 | 높은 |
7 | 높은 | 입력 | 낮은 | 입력 |
8 | 낮은 | 입력 | 높은 | 입력 |
9 | 입력 | 높은 | 입력 | 낮은 |
10 | 입력 | 낮은 | 입력 | 높은 |
11 | 높은 | 입력 | 입력 | 낮은 |
12 | 낮은 | 입력 | 입력 | 높은 |
연결 후 내 하드웨어는 아래 이미지와 같습니다. 이미지에서 볼 수 있듯이 6 개의 LED 그룹이 있으며 각 그룹에는 2 개의 LED가 서로 반대쪽으로 연결되어 있습니다. Arduino UNO 모듈은 USB 포트로 전원이 공급됩니다.
코드 설명
이 튜토리얼의 끝에는 작동하는 비디오 가 포함 된 완전한 코드 가 제공됩니다. 여기서는 프로젝트 작동을 이해하기위한 완전한 프로그램을 설명합니다.
Arduino 코드 시작에서 LED가 연결된 모든 핀을 정의하십시오. 그 후 총 LED 수와 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
이제 순서대로 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를 켜고 끕니다.
void loop () { for (int l = 0; l <LED_Num; l ++) { lightOn (l); 지연 (1000 / LED_Num); }
이제 Arduino를 노트북과 연결하고 보드와 포트를 올바르게 선택한 다음 업로드 버튼을 클릭하십시오. 코드를 업로드하면 LED가 깜박이기 시작합니다.
이것이 Charlieplexing 기술을 사용하여 더 적은 수의 Arduino 핀을 사용하여 많은 LED를 제어 할 수있는 방법 입니다. 이 방법을 사용하여 더 많은 수의 LED를 제어 할 수 있습니다. 예를 들어 20 개의 LED를 제어하려면 매트릭스를 편집하고 나머지 LED에 대한 조건을 추가하기 만하면됩니다.
아래 에서 전체 코드와 작동하는 비디오를 찾으 십시오.