チャーリープレックスは、いくつかのI / Oピンを使用して多くのLEDを制御する手法です。チャーリープレックスは多重化と同じですが、トライステートロジック(ハイ、ロー入力)を使用してピン数を大幅に減らし、多重化よりも効率を高めます。Charlieplexing技術は、1995年にこの技術を発明した発明者であるCharlie Allenにちなんで名付けられました。以前はArduinoで多重化技術を使用して、4桁の7セグメントディスプレイと8x8LEDマトリックスの駆動をインターフェースしていました。
Charlieplexingを使用すると、N *(N – 1)LEDを制御できます。Nはピンの数です。たとえば、4つのArduinoピン4 *(4-1)= 12を使用して12個のLEDを制御できます。LEDはダイオードであり、ダイオードでは、電流は一方向にのみ流れます。そのため、Charlieplexingでは、2つのLEDを互いに並列に接続しますが、極性が逆になるため、一度に1つのLEDのみがオンになります。Arduinoやその他のマイクロコントローラーボードに関しては、十分な入力/出力ピンがありません。LCDディスプレイ、一連のLED、およびいくつかのセンサーをインターフェースする必要があるプロジェクトに取り組んでいる場合は、すでにピンが不足しています。そのような状況では、LEDをチャーリープレックスしてピンの数を減らすことができます。
このチュートリアルでは、Charlieplexing手法を使用して、4つのArduinoピンを使用して12個のLEDを制御します。
必要なコンポーネント
- Arduino UNO
- LED(12)
- 4抵抗器(330オーム)
- ジャンパー線
- ブレッドボード
回路図
基本的に、この回路図では、12個のLEDが抵抗を介して4個のArduinoピンに接続されています。Arduinoの各ピンは3つのLEDに接続されています。LEDには6つのグループがあり、各グループで2つのLEDが接続され、両方のLEDは互いに平行ですが、極性が逆であるため、一度に1つのLEDのみがオンになります。したがって、LED 1をオンにする回路図によれば、ピンAにHIGH信号、ピンBにLOW信号があり、ピンCとDを切断する必要があります。他のLEDについても同じ手順に従います。各LEDのピン設定の完全な表を以下に示します。
導いた | ピン8 | ピン9 | ピン10 | ピン11 |
1 | 高い | LOW | 入力 | 入力 |
2 | LOW | 高い | 入力 | 入力 |
3 | 入力 | 高い | LOW | 入力 |
4 | 入力 | LOW | 高い | 入力 |
5 | 入力 | 入力 | 高い | LOW |
6 | 入力 | 入力 | LOW | 高い |
7 | 高い | 入力 | LOW | 入力 |
8 | LOW | 入力 | 高い | 入力 |
9 | 入力 | 高い | 入力 | LOW |
10 | 入力 | LOW | 入力 | 高い |
11 | 高い | 入力 | 入力 | LOW |
12 | LOW | 入力 | 入力 | 高い |
接続後、私のハードウェアは下の画像のようになります。画像からわかるように、6つのグループのLEDがあり、各グループには2つのLEDが互いに反対側に接続されています。ArduinoUNOモジュールは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ループ内 で、プログラムはLED_COUNTマトリックスを実行して、指定された順序でLEDをオンまたはオフにします。
void loop(){ for(int l = 0; l <LED_Num; l ++){ lightOn(l); delay(1000 / LED_Num); }
次に、Arduinoをラップトップに接続し、ボードとポートを正しく選択して、[アップロード]ボタンをクリックします。コードをアップロードすると、LEDが点滅し始めます。
したがって、これは、Charlieplexing技術を使用して、より少ないArduinoピンを使用して多くのLEDを制御する方法です。この方法を使用して、より多くのLEDを制御できます。たとえば、20個のLEDを制御する場合は、マトリックスを編集して、残りのLEDの条件を追加するだけです。
以下の完全なコードと作業ビデオを見つけてください。