2-1.LED点滅《Remo》
電気回路と電子工作
LEDを点滅させる電子工作を「Lチカ」とか「Blink」という言い方もします。最も簡単な電子工作で多くの教材でも一番最初に学習する内容です。一番基礎を理解できる工作ですので学習していきます。
今回利用するLEDの外観と仕様は以下となります。
LEDは電流を流す向きがありますので、接続する電極に気をつけて配線する必要があります。リード線の長い方をアノードと呼びプラス極を接続します。また短い方をカソードと言いマイナス極を接続します。
【LED仕様】
LED電流(順電流IF):30 mA
LED電圧(順電圧VF):2.0 V
上記の仕様をもとにLEDと接続する抵抗はこちらの通り以下で計算できます。
(3.3V – 2.0V)÷ 0.03A = 43.33オーム
上記で計算した抵抗値を参考にして、43Ωより大きな抵抗で無駄な電流を流さず、ESP32の最大端子電流12mAを超えない十分な明るさが取れる200オーム(赤黒茶金)としました。
【LEDに流れる電流 I = V/R = 2V/200Ω = 10mA】
ブレッドボードに回路を配線した図を示します。
【ESP32-DevKitCの入出力端子はこちらを参照下さい】
LEDのリード線は長く、長さも一定でないので、適切な長さにニッパーで切り揃えて配線してください。
スケッチ(制御ソフトウェア)
Arduinoでは制御ソフトウェアのことをスケッチと読んでいます。LEDを点滅させるスケッチはArduinoIDEに標準で付いていますので、そちらを利用する方法を紹介します。
下図のようにメニュー「ファイル」→「スケッチ例」→「01.Basic」→「Blink」を選択して下さい。
自動で以下のようなプログラムが表示されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
// the setup function runs once when you press reset or power the board void setup() { // initialize digital pin LED_BUILTIN as an output. pinMode(LED_BUILTIN, OUTPUT); } // the loop function runs over and over again forever void loop() { digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level) delay(1000); // wait for a second digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW delay(1000); // wait for a second } |
上記のようにArduino制御プログラムには、setup関数とloop関数が必ずあります。一連の{}内で括られたプログラム処理のことを「関数」と言います。この2つの関数は以下のように動作します。
setup関数:起動時の最初に一度のみ実行される
loop関数:setup処理完了後に無制限に繰り返し実行されます。
このようにArduinoは起動時にsetup関数に記載されているプログラムを実行し完了すると起動中はloop関数を無制限に繰り返し実行されます。
このため、無線接続などの最初に一度のみ処理する場合はsetup関数内で処理し、データ通信を行う処理など起動中に実施する処理はloop関数内に記載します。
今回は、LEDを点滅させる制御ソフトウェアについて先ほどのBlinkプログラムを以下のように修正しコメントも日本語に変更しました。以下のプログラムで説明していきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
// IoT電子工作キット // 2-1.LED点滅 const byte LED_PIN = 25; // ①利用ピンの設定(IO25にLED接続) // ②起動時、最初に実行される処理 void setup() { Serial.begin(115200); // ③シリアルモニタ設定(115200bps) Serial.println(); // (見やすくするために改行) Serial.println("BlinkStart"); // ④シリアルモニタに開始を表示 pinMode(LED_PIN, OUTPUT); // ⑤IO25に出力設定 } // ⑥setup完了後、電源OFFまで繰り返し処理 void loop() { digitalWrite(LED_PIN, HIGH); // ⑦LEDを点灯する Serial.println("LED ON"); // ⑧シリアルモニタに表示 delay(1000); // ⑨1秒間そのまま(点灯状態のまま) digitalWrite(LED_PIN, LOW); // ⑩LEDを消灯する Serial.println("LED OFF"); // ⑪シリアルモニタに表示 delay(1000); // ⑫1秒間そのまま(消灯状態のまま) } |
プログラムの①はLEDのPin番号を定義しています。Byte型は0から255までの数値を定義できます。どの関数の{}にも入らない場所に記載していますので、これはグローバル変数でどの関数でも利用できる変数として宣言しています。逆に関数内に記載するのはローカル変数となり、宣言した関数内でのみ利用できます。
グローバル変数でLED_PINの宣言にconstをつけているのは宣言した値を誤って変更しないように固定値ですと宣言しています。
setup関数内の③はシリアルモニタを利用するための設定です。シリアルモニタはArduinoIDEのモニタでデバッグ用にソフトが動作していることを確認するための画面となります。プログラム上でSerial.printlnで文字や値を表示させることでソフトの正常性の動作確認が可能です。
④でシリアルモニタに「BlinkStart」を表示させています。この表示させることでソフト起動が正常に行われていることをシリアルモニタで確認できます。
⑤はIO25端子のモードを設定しています。各端子はOUTPUT(出力)かINPUT(入力)かを設定できますので、今回はLED点灯に利用するため電気出力ですのでOUTPUT(出力)を設定しています。
loop関数内は⑦でLEDを点灯するために出力をHIGHにして3.3Vを出力しています。
⑧でシリアルモニタに状態を表示しています。「LED ON」がシリアルモニタに表示されることでこの制御を実施していることを確認できます。
⑨で1秒間そのまま電気を出力し⑩でLOWにして0Vにして出力を停止しています。そのまま⑫で1秒間停止のままにします。Loop関数内は起動中無限に繰り返されますので再度⑦の処理でLEDを点灯します。この処理を繰り返すために1秒毎に点灯と消灯が繰り返され点滅します。
スケッチの書き込みを行いLED点滅動作の確認をして下さい。
【スケッチの検証と書込方法はこちらを参照ください】
必ずステータスエリアに「ボードへの書き込みが完了しました」と表示され書き込みが完了していることを確認してください。
書き込みが完了すると直ぐに自動でスケッチ(ソフト)が動作します。スケッチ(ソフト)の動作は、シリアルモニタの表示で確認できます(以下参照)。
シリアルモニタ表示確認
シリアルモニタの表示は以下のどちらかの表示方法から行います。
(1)ArduinoIDEメニューの「ツール」から「シリアルモニタ」を選択して表示
(2)ArduinoIDEの右上のプラスボタン(こちらの⑥)をクリックして表示
ソフトの動作に成功していると以下のように「LED ON」、「LED OFF」が1秒毎に表示されていきます。
【シリアルモニタの右下の通信速度を合わせて「115200 bps」(下図参照)にしてください。】