一定間隔でLチカさせてみる【マイコンLチカ道場 Arduino編 0-1】

LED1個をチカチカさせた写真 Arduino
当サイトのリンクにはアフィリエイト広告が含まれています。
スポンサーリンク

はじめに

このページは「マイコンLチカ道場 Arduino編」の「0-1:定間隔でLチカ」に対応するページです。
一番簡単なLチカとしてまずは動作させてみます。

スポンサーリンク

回路図・接続図

ボードはArduino Uno Rev.3、LEDは今回青色のものを使います。LEDの向きがわからなくなった場合は、テスターのダイオードチェック機能を使いましょう。回路図とブレッドボードに組んだ状態のイメージは下記のようになります。
※Fritzingというソフトを使用させてもらいました。まだ使い慣れてないですが、便利そうですね。

回路図
回路図
ブレッドボード接続イメージ
ブレッドボード接続イメージ

LEDの電流制限用の抵抗値の決め方

Lチカする際にはArduinoボードやLEDの保護のため、電流を制限する抵抗を介して接続しましょう。
今回は220Ωを使いました。LEDに流れる電流は、オームの法則「V=IR」より、「I=V/R」で計算できます。
ここで、Vは抵抗に掛かる電圧なので、Aruduinoの電圧5V、青色LEDの電圧を2.9Vとすれば、5-2.9=2.1Vとなります。
よってI=(5-2.9)/220≒0.0095A、mAに直せば約9.5mAです。

LEDの電圧VFは物にもよりますが、だいたい青色・白色:3.4V@20mA、赤色:2.1V@20mAなどです。実際には20mAも流すと眩しいので、半分くらいにしています。その時のVFはデータシートのIF-VF特性というグラフを参考にしましょう。ただ、秋月で売っているLEDのデータシートを確認してみたら、意外とIF-VF特性を載せてくれているものが少ないですね・・・
そこで、参考までに今回使う青色LEDの特性を測ってみたものを載せておきます。これにより、IF=10mA時はVFは約2.9Vなことがわかりますね。

IF(mA)VF(V)
No.1
VF(V)
No.2
VF(V)
No.3
VF(V)
AVE
0.12.4152.4592.4152.430
12.5772.6102.5752.587
22.6402.6842.6392.654
32.6862.7392.6882.704
52.7602.8252.7612.782
102.9022.9902.9042.932
153.0163.1173.0213.051
203.1203.2193.1253.155
青色LEDのIF-VF特性

今回のLEDは5mAも流せば十分眩しいことと、LEDのVFやArduinoの電源5V、抵抗自体にも誤差がありますので、電流値はギリギリ20mAを狙わずに10mAとしています。

Lチカのプログラムを書いてみる

ボード上のLEDのLチカ

やっとですが、Lチカのプログラムを書いてみましょう。といっても、ここでは、Arduino IDEで「ファイル⇒スケッチ例⇒01.Basics⇒Blink」を選択して、サンプルプログラムを呼び出します。簡単にスケッチ例が見れるのが素晴らしいですね。これを、自分用に名前を付けて保存して、編集していきます。

void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN, OUTPUT);
}

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
}

このままでも、もちろん動きますが、標準で書いてある「LED_BUILTIN」はボード上のLEDを指定しています。なので、このまま動かすと、ボード上のLEDがLチカします。
Arduino Uno ではLED_BUILTINは13番ピンのことを示しているようです。ボードが変わってもそのままのプログラムでLチカ出来るような配慮でしょうか。「LED_BUILTIN」を「13」に書き換えても同様に動くはずなので、試してみましょう。(3箇所あります)

外付けLEDのLチカ

本題の外付けLEDをLチカさせるプログラムに変更してみましょう。といっても、このLED_BUILTINのピン番号をLEDを接続したピン番号に変更するだけです。(ここでは、12)
変更してみたら、実際に動作させてみましょう。

void setup() {
  pinMode(12, OUTPUT);
}

void loop() {
  digitalWrite(12, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);                       // wait for a second
  digitalWrite(12, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);                       // wait for a second
}
LED点滅動作時の写真
動作時の写真

ちゃんと一秒間隔でLチカすることが確認できました!
この時のLED両端の電圧波形をオシロスコープで見てみました。一秒間隔で、波形が動いていることが確認できます。この時のONになっている部分の電圧が、LEDのVFになります。予め測定したとおり、ちゃんと2.9ボルトあたりですね。

LED両端の電圧波形
LED両端の電圧波形

点滅間隔の変更・パルス駆動について

プログラム中のdelay(1000)は、1000ms(1秒)ウェイトを掛けるという意味です。
ここを(100)など、好きな数字に変えるとLチカの周期を変えられるので試してみましょう。

LEDのパルス駆動について:LEDのデータシートをみると、せん頭順電流(Pulse Forward Current)という項目で、通常より大きな電流値を流しても良いように書いてあります。
※パルス幅10ms、Duty比1/10などの注記があると思います。10ms周期に対してのON時間が1msという意味なのか、ON時間が10ms(100ms周期)なのかは正確な解釈がわかりませんが・・・
また、絶対最大定格(Absolute Maximum Rating)はこれを超えて使ったらいつ壊れても知らねーぞ、という値なので注意しましょう。
これを守れば、通常よりも大きめに電流を流しても壊れないってこと?そして省エネで明るく見える?ということで、試してみました。

結果は、ON時間が10ms(100ms周期)では点滅が明らかに目で分かります。ON時間を1ms(10ms周期)にすると、流石に連続して点灯しているように見えます。抵抗を220Ωから100Ωに変えて約20mAに変えてみましたが、10mA連続点灯よりは少しだけ暗いかな?って感じです。
その時のプログラムを下記に載せておきます。

void setup() {
  pinMode(12, OUTPUT);
}

void loop() {
  digitalWrite(12, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1);                       // wait for a second
  digitalWrite(12, LOW);    // turn the LED off by making the voltage LOW
  delay(9);                       // wait for a second
}

20mAのDuty比1/10なので、平均2mAで10mAとほぼ同等の明るさということになります。省エネですね。

まとめ

初歩の単純なLチカですが、Arduinoだとサンプルスケッチの助けもあり、かなり簡単にLチカさせることが出来ました。引き続き難しいLチカに挑戦していきましょう。

このページの実験は下記の製品で試すことが出来ます。
タイトルとURLをコピーしました