- Arduinoによる外付けLEDの制御回路
- 複数のLEDを制御する方法
- タイマーによる制御信号の作り方
クリスマスの時期にツリーを彩るイルミネーションはとてもキレイです。
ArduinoとLED(発光ダイオード)を使うことで、イルミネーションを作ることが出来ます。
以前の記事では、Arduino基板上のLEDを点滅させる方法を紹介しました。
今回の記事では、Arduinoによる外付けLEDを使ったイルミネーションの作り方を紹介します。
使用するArduinoと電子部品
今回の記事では、Arduino UnoとLED(発光ダイオード)、抵抗器を使用します。
Arduino Uno Rev3
上の写真をクリックするとリンク先(Amazon)に飛びます。
電子工作キット
今回の記事で使用するLEDを含めた電子工作キットはこちら。
ELEGOO Arduino UNO R3 スターターキット
このArduinoセットは、メインのArduino Uno基板の他に色々なセンサ等がセットになっています。
本記事で使用するLEDと抵抗器はもちろん、モータや赤外線通信関係まで色々と入ってお得です。
Arduinoイルミネーションの構成図
今回は、好きなタイミングで複数の外付け発光ダイオード(外付けLED)を点灯させるシステムを作成します。
システムの入力には、Arduinoの関数を用いたタイマー(カウンター)を用います。
タイマーで計測された時間から、LEDの点灯のタイミングを決めます。
そして、決められたタイミングでそれぞれのLEDにON/OFFの信号を送ります。
その結果、Arduinoから出力された信号により、Arduinoに接続された外付けLEDが点灯します。
このイルミネーションシステムを実現するため、電子回路をプログラムを作成します。
複数の外付けLED制御用の電子回路
今回の記事では、外付けLEDを8個用いてイルミネーションを作ります。
それぞれのLEDはArduinoのピンと抵抗を介してGNDに接続します。
LEDのアノード側をArduinoに、カソード側を抵抗器(GND)に接続しています。
そのため、Arduinoの出力ピンがHIGHの時はLEDがON、LOWの時はLEDはOFFとなります。
LEDイルミネーション用のプログラム
以前の記事で紹介したArduinoプログラムの基本構造を意識してLEDイルミネーションのプログラムを作成します。
本記事で紹介するLEDイルミネーションでは、接続した8個のLEDが順々に流れるように光るプログラムを作成します。
今回は内容を理解してもらうことに重点を置いたため、プログラムがかなり冗長(長々と)になりました。
const int LED1 = 2;
const int LED2 = 3;
const int LED3 = 4;
const int LED4 = 5;
const int LED5 = 6;
const int LED6 = 7;
const int LED7 = 8;
const int LED8 = 9;
const int LED_TIME = 100;
void setup() {
// put your setup code here, to run once:
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(LED4, OUTPUT);
pinMode(LED5, OUTPUT);
pinMode(LED6, OUTPUT);
pinMode(LED7, OUTPUT);
pinMode(LED8, OUTPUT);
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
digitalWrite(LED4, LOW);
digitalWrite(LED5, LOW);
digitalWrite(LED6, LOW);
digitalWrite(LED7, LOW);
digitalWrite(LED8, LOW);
}
void loop() {
// put your main code here, to run repeatedly:
digitalWrite(LED1, HIGH);
delay(LED_TIME);
digitalWrite(LED1, LOW);
digitalWrite(LED2, HIGH);
delay(LED_TIME);
digitalWrite(LED2, LOW);
digitalWrite(LED3, HIGH);
delay(LED_TIME);
digitalWrite(LED3, LOW);
digitalWrite(LED4, HIGH);
delay(LED_TIME);
digitalWrite(LED4, LOW);
digitalWrite(LED5, HIGH);
delay(LED_TIME);
digitalWrite(LED5, LOW);
digitalWrite(LED6, HIGH);
delay(LED_TIME);
digitalWrite(LED6, LOW);
digitalWrite(LED7, HIGH);
delay(LED_TIME);
digitalWrite(LED7, LOW);
digitalWrite(LED8, HIGH);
delay(LED_TIME);
digitalWrite(LED8, LOW);
}
もちろん、もっと短く(数行程度で)書くことは出来ますが、分かりやすさを優先しましたのでご容赦ください。
使用するグローバル変数の宣言
const int LED1 = 2;
const int LED2 = 3;
const int LED3 = 4;
const int LED4 = 5;
const int LED5 = 6;
const int LED6 = 7;
const int LED7 = 8;
const int LED8 = 9;
const int LED_TIME = 100;
変数の宣言として、LEDを接続するArduinoのピン番号を設定します。
今回は2番ピンから9番ピンまでの8個の出力ピンを使用します。
これらのピンを指定しやすくするため、それぞれのピン番号をLED1からLED8と定義します。
また、LEDが光る時間をLED_TIMEとして100と設定しています。
詳しくはメインのloop関数で使用する際に説明します。
初期条件をsetup関数で定義
void setup() {
// put your setup code here, to run once:
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(LED4, OUTPUT);
pinMode(LED5, OUTPUT);
pinMode(LED6, OUTPUT);
pinMode(LED7, OUTPUT);
pinMode(LED8, OUTPUT);
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
digitalWrite(LED4, LOW);
digitalWrite(LED5, LOW);
digitalWrite(LED6, LOW);
digitalWrite(LED7, LOW);
digitalWrite(LED8, LOW);
}
次にsetup関数にて、LEDの制御に使用するピンを出力ピンとして設定します。
今回は、ピン2番から9番まで(LED1からLED8まで)を出力(OUTPUT)として宣言を行います。
また、電源をいれた直後はすべてのLEDをOFFにしたいと考えています。
そのため、dijitalWrite関数を使ってすべてのピンにLOWを出力して、LEDをOFFにしています。
LEDイルミネーションをloop関数で実行
そしてloop関数の中でLEDの点灯タイミングを決め、LEDに信号を出力します。
今回は一定時間ごとにLEDが流れるように点灯するというパターンを作成します。
ここは、自由に決めてもらってオッケーです。
センスを爆発させてください!
void loop() {
// put your main code here, to run repeatedly:
digitalWrite(LED1, HIGH);
delay(LED_TIME);
digitalWrite(LED1, LOW);
digitalWrite(LED2, HIGH);
delay(LED_TIME);
digitalWrite(LED2, LOW);
digitalWrite(LED3, HIGH);
delay(LED_TIME);
digitalWrite(LED3, LOW);
digitalWrite(LED4, HIGH);
delay(LED_TIME);
digitalWrite(LED4, LOW);
digitalWrite(LED5, HIGH);
delay(LED_TIME);
digitalWrite(LED5, LOW);
digitalWrite(LED6, HIGH);
delay(LED_TIME);
digitalWrite(LED6, LOW);
digitalWrite(LED7, HIGH);
delay(LED_TIME);
digitalWrite(LED7, LOW);
digitalWrite(LED8, HIGH);
delay(LED_TIME);
digitalWrite(LED8, LOW);
}
LED1から順にLEDをONにして、一定時間(LED_TIME=100ミリ秒)待って、LEDをOFFにするという流れをLED8まで行っています。
このLoop関数で設定したパターンを繰り返すことでイルミネーションが出来上がります。
まとめ
今回の記事では、Arduinoで複数の外付けLED(発光ダイオード)を点滅させるシステムによるイルミネーションの作り方を紹介しました。
ArduinoによるLEDの点滅方法を理解することで、簡単に綺麗なイルミネーションを作ることが出来ます。