アフィリエイト広告
アフィリエイト広告

Arduino Nano Every を使ってみる – L チカ (2)

前回は、Arduino Nano Every の内蔵 LED を点滅させてみました。

Arduino Nano Every を使ってみる - L チカ (1)
前回は、Arduino IDE の設定をしました。エラーに見舞われながらも、Arduino Nano Every を使う準備ができました。 今回は、スケッチ例から Blink などの、いわゆる L チカを試してみましょう。 Blink Ar...

今回は、Arduino Nano Every 自身の動作ではないのですが、ちょっと初心に返って、外につけた LED を点滅させるみることにします。

LED を点灯させる

L チカ 回路図
L チカ ブレッドボード

Arduino Nano Every の 13番ピンと GND との間に、抵抗器と LED をつなぎます。Arduino Nano Every は、Blink でも Flash でも、L チカのスケッチを動かします。
これで内蔵 LED と同期して、外付けの LED が点滅します。

俺が使っているのは、秋月電子通商で購入した赤色 LED OSDR3133A ってやつ。データシートによると、最大電流 IF = 30mA 、順方向電圧 VF = 2.0V 。

電流は 20mA ほど流すのが標準的のようですが、実験でそんなに流すと、眩しくてたまりません。1〜5mA も流せば、十分に光ります。

順方向電圧は、流す電流によって変化しますが、2V で計算すればいいです。
Arduino Nano Every のデジタルピンの出力電圧は 5V 、LED の両端の電圧は 2V 、なので抵抗器にかかる電圧は 3V です。
抵抗器を 1KΩ とすると、流れる電流は、

I = 3 / (1 × 103) = 3 × 10-3 [A] = 3 [mA]

となります。

青、緑、白色 LED の場合、順方向電圧が 3V ほどになるので、抵抗器を 470Ω にすれば 4mA 流れます。黄色 LED の順方向電圧は 2V ほどなので、赤色と同様にすればよいでしょう。

なお、ATMega4809 の入出力ピンの許容最大電流は 40mA ですが、Arduino Nano Every の技術仕様では 20mA (資料によっては 15mA) となっています。また、全体で 200mA を超えることはできません。 電流を流しすぎないように注意しましょう。

LED をトランジスタで点灯させる

さて、Arduino Nano Every の入出力ピンに流せる電流は 15〜20mA とのことでした。では、LED に 20mA 以上流して明るく点灯させたいときはどうすればよいでしょうか。

ATMega4809 の最大定格は 40mA ですから、20mA 流しても壊れることはないかもしれません。が、技術仕様の 20mA を超えると不具合が起きる可能性もあります。
そういうときは、トランジスタで駆動する、ですね。

トランジスタでLEDを点灯 回路図
トランジスタでLEDを点灯 ブレッドボード

13番ピンの出力をトランジスタのベースに入れて、コレクタ側につながれた LED をオンオフします。こうすることで、13番ピンから流れる電流を少なくすることができます。

Arduino Nano Every の 5V 出力を電源として利用します。LED にかかる電圧が 2V 、トランジスタのコレクタ-エミッタ間がオンのとき、電圧はほぼ 0V なので、抵抗 R3 の電圧は 3V です。
LED に 20mA 流すとすると、

R3 = 3 / (20 × 10-3) = 150 [Ω]

E6 系列に 150Ω がありますので、これを選択します。

トランジスタ 2SC1815 の増幅率は、スイッチングの場合 40 にしておきます。ベースに流す電流はコレクタ電流の 1/40 でよいので、

IB = (20 × 10-3) / 40 = 0.5 × 10-3 = 0.5 [mA]

R2 はおまじない、22KΩ としておきます。R2 に流れる電流は、ベース-エミッタ間電圧を 0.7V として、

IR2 = 0.7 / (22 × 103) = 0.03 × 10-3 = 0.03 [mA]

したがって、R1 に流れる電流は、

IR1 = 0.5 + 0.03 = 0.53 [mA]

ですので、R1 は、

R1 = (5 - 0.7) / (0.53 × 10-3) = 8.1 × 103 = 8.1 [KΩ]

となります。
抵抗器は、E6 系列であれば 6.8KΩ を選択します。今回は E3 系列から 4.7KΩ としました。逆算すると、ベース電流は 0.88mA になりますが、この程度の差は問題ないです。

ちなみに、Arduino Nano Every の 5V の出力は、最大 550mA (推奨最大 200mA) となっています。5V 出力を電源として利用する場合は、電流値に注意しましょう。

小さなイルミネーション

小さなイルミネーション 回路図

もう少し動きのあるものを作ったら、楽しいですよね。

入出力ピンに 8 個の LED をつなぎました。流れるように点滅するイルミネーションにしてみます。

LED 1 個には 3mA の電流が流れます。入出力ピンの電流は 20mA までですから、OK です。全体では 8 X 3mA = 24mA なので、これも 200mA 以内で OK ですね。

電流値は問題ありません。

スケッチ

いろんなやり方があると思いますが、こんなふうにしてみました。

  1. // LEDs - Small illumination 2022.06.23 meyon
  2. void setup() {
  3.   pinMode(2, OUTPUT);
  4.   pinMode(3, OUTPUT);
  5.   pinMode(4, OUTPUT);
  6.   pinMode(5, OUTPUT);
  7.   pinMode(6, OUTPUT);
  8.   pinMode(7, OUTPUT);
  9.   pinMode(8, OUTPUT);
  10.   pinMode(9, OUTPUT);
  11. }
  12. void loop() {
  13.   static const byte speedOfFlow = 50;
  14.   static byte ledState = HIGH;
  15.   static unsigned long previousMillis = 0;
  16.   unsigned long elapsedMillis = millis() - previousMillis;
  17.   if(speedOfFlow*8 < elapsedMillis) {
  18.     digitalWrite(9, ledState);
  19.     previousMillis = millis();
  20.     ledState ^= 1;
  21.   } else if(speedOfFlow*7 < elapsedMillis) {
  22.     digitalWrite(8, ledState);
  23.   } else if(speedOfFlow*6 < elapsedMillis) {
  24.     digitalWrite(7, ledState);
  25.   } else if(speedOfFlow*5 < elapsedMillis) {
  26.     digitalWrite(6, ledState);
  27.   } else if(speedOfFlow*4 < elapsedMillis) {
  28.     digitalWrite(5, ledState);
  29.   } else if(speedOfFlow*3 < elapsedMillis) {
  30.     digitalWrite(4, ledState);
  31.   } else if(speedOfFlow*2 < elapsedMillis) {
  32.     digitalWrite(3, ledState);
  33.   } else if(speedOfFlow < elapsedMillis) {
  34.     digitalWrite(2, ledState);
  35.   }
  36. }

15 行目、speedOfFlow は流れの速さです。大きくするとゆっくり流れます。

18 行目で経過時間を計測し、20行目からの分岐によって LED を順番に点灯していきます。

20〜23 行目、全ての LED が点灯したらその時刻を記憶し、ledState を反転、今度は順番に消灯していきます。

小さなイルミネーション

Arduino Nano Every には、入出力ピンが 20 個 (TX 、RX を除く) あります。つまり、LED を 20 個つなぐことができます。1 個あたり 3mA なら、全体でも 60mA ですから、電流的にも問題ありません。20 個あれば、なかなかなイルミネーションが作れると思いませんか (^_^;)

タイトルとURLをコピーしました