Grove Beginner KitでのArduino入門 その2 LED

概要

前回はキットの説明と環境構築まででした。今回は実際にLEDを操作してみたいと思います。

Arduino IDEの設定

「ツール」→「ボード」→「Arduino AVR Boards」→「Arduino UNO」を選択してください。

シリアルポートはボードにケーブルをつなげたり、外したりしたときに増減するものを選択します。

スケッチ例

int ledPin = 4;

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

void loop() {
  digitalWrite(ledPin, HIGH);
  delay(1000);
  digitalWrite(ledPin, LOW);
  delay(1000);
}

最初にまず動かしてみましょう。上記をコピーしてArduino IDEに貼り付けます。適当な名前で保存をして、その後にマイコンボードに書き込むボタンを押します。

上記の左上にある赤く囲った場所になります。

実行結果

左上にある赤色LEDがチカチカ点滅してれば実行が成功しています。すこし上にD4 LEDと書いてありますね。これが接続されている場所になります。

D4はどこかというと、本体の左下にある端子になります。

従来のキットでは付属のケーブルで、このように接続するのが一般的ですが、このキットは分解しない限り配線がすでに入っているのでケーブルが必要ありません。

よく見ると裏側に配線が走っています。点線のところでバキッと分解するとこの配線が使えなくなりますが、通常はケーブルを使う必要がありません。

スケッチ解説

int ledPin = 4;

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

void loop() {
  digitalWrite(ledPin, HIGH);
  delay(1000);
  digitalWrite(ledPin, LOW);
  delay(1000);
}

さて、スケッチの解説に戻ります。Arduinoの場合にはプログラムのことをスケッチと呼びます。スケッチをコンパイルしたものをファームウェアと呼んだりもします。ちょっと用語が特殊なんで気をつけてください。

int ledPin = 4;

まずはint型でLEDのピン番号を変数に入れています。4というのはPINの番号でD4端子の4になります。Dはデジタル(Digital)のDで、デジタル端子の4番目を使うという意味になります。

分解してケーブルで接続する場合には、D4以外でも接続した端子の番号に変更すれば動きます。

void setup() {

setup()関数は、起動して最初に一度だけ実行される関数です。この中にボードの初期化処理などを書きます。

  pinMode(ledPin, OUTPUT);

pinMode()関数は、ピンの状態を設定する関数です。1つ目が対象のピンで、今回はD4に接続しているので4に対して、OUTPUT(出力)を設定しています。次回に押しボタンでINPUT(入力)を利用しますので、そのときに詳しく解説したいと思います。

void loop() {

loop()関数は、繰り返し呼び出される関数です。この中に定期的に実行する内容を入れることで、プログラムを動かすことが可能です。

  digitalWrite(ledPin, HIGH);

digitalWrite()関数はデジタル出力をする関数になります。ピン番号とHIGH(1)かLOW(0)を指定します。HIGHを指定するとピンから電圧が出力されます。その結果LEDが光っていますね。

  delay(1000);

delay()関数は指定時間待機するウエイトに相当する関数です。ミリ秒単位で待機するので、この場合には1000ミリ秒=1秒待機しています。

  digitalWrite(ledPin, LOW);

LEDのピンをLOWにしていますので、出力を止めています。結果LEDが消灯します。

  delay(1000);

また、1000ミリ秒=1秒待機します。

再度確認

int ledPin = 4;               // D4に設定

void setup() {                // 最初に一度だけ呼び出される関数
  pinMode(ledPin, OUTPUT);    // ledPinをデジタル出力に設定
}

void loop() {                 // 繰り返し呼び出される関数
  digitalWrite(ledPin, HIGH); // ledPinを出力に設定
  delay(1000);                // 1000ミリ秒=1秒待機
  digitalWrite(ledPin, LOW);  // ledPinの出力を止める
  delay(1000);                // 1000ミリ秒=1秒待機
}

LEDピンをD4(4)に設定し、setup()関数の初期化処理で、pinMode()関数を使ってD4を出力モードに設定します。

その後loop()関数にてD4を出力にしてLEDを点灯して1秒待機、D4の出力を止めてLEDを消灯して1秒待機が定期的に何度も実行されます。

結果、1秒間隔で点滅する動作になっています。

明るさの調整

LEDユニットの下の方に黄色いボリュームがあり、プラスドライバーで回すことができます。ここで抵抗値が変わり、LEDの明るさが変更できます。あまり触る必要はありませんが、実際に利用した場合に明るすぎる場合に暗くするなど、細かい調整が可能なようです。

回路

余談ですが、個別に販売しているユニットのページでどのような回路になっているのかを調べることができます。

使うだけだと内容を理解する必要はありませんが、読めたほうが理解は早いとは思います。ただ、この回路はわりと複雑です(苦笑)

右上にVCC(5V)から1Kの可変抵抗で抵抗値を可変にして明るさを変えています。220Ω+(0~500Ω)なので220~720Ωまで抵抗値が変わる? ちょっと自信ないです。。。

D4の信号(SIG)は中央右にあるS9013トランジスタに接続されており、信号がHIGHの場合にはLEDに電流が流れ、LOWの場合には流れない回路になっていると思います。

これはD4の信号を直接LEDに接続して光らせることもできなくはないのですが、ボードから出力できる電流には制限があって、あまり大電流を流すことができません。そこで、ダイオードをスイッチのように利用して、VCCから直接電流を流しています。このVCCはUSBに接続されていますので、それなりの電流を流しても安定して動くことができます。

余談・VCC

VCCはVoltage Collectorの略で、回路が動作している電圧をあらわします。Arduino UNOは5Vで動いており、USBの電圧がそのまま利用できます。

一方ESP32やWio Terminalなどの、通信ができる最近のボードは3.3Vで動いています。ICが動作する電圧はどんどん低くても動くように進化しています。これは電圧が低いほど省電力で動くからです。

今は3.3Vが主流ですが、今後2.7Vなどともっと低電圧化していくと思われます。すでにセンサーなどはどんどん低電圧になっており、電圧を変換して接続しているケースも多いです。このとき注意しないといけないのは、お互いの電圧が違う場合に直接接続しないことです。

5Vと3.3Vのボードを直接接続してしまうと、5V側は受け取る電圧が低すぎて信号が不安定です。逆に3.3V側は高すぎるので壊れてしまうことがあります。Arduino UNOやESP32などは比較的頑丈で壊れにくいのですが、3.3V動作しているICに5Vの信号を入力すると基本は壊れると思ってください。

また電源の場合にはVCCと表記しますが、信号の場合にはロジックレベルと呼ぶことが多いです。電圧が違うボードを接続する場合には、ロジックレベル変換回路やICなどを利用し、双方向に変換をして接続をする必要があります。

余談・LEDのデータシート

調べる場合には、まずは秋月電子で検索してみます。上記にLEDがあったので中を見てみます。

データシートの中の表です。利用しているLEDが違うので、若干数値が違う可能性がありますがざっくりと読んでいきます。DC Forward Currentは直流での順方向電流で30mAと書いてあります。これは30mAが限界でそれ以下で利用する必要があります。

Pluse Forward Currentはパルスの場合の順方向電流の制限値で100mAとあります。これは表の下に10ミリ秒までと書いてありますので、10ミリ秒点灯し、90ミリ秒消灯をするようなパルス的な利用では100mAまで流してもよいと書いてあります。通常はこの値は使わずに30mAまでで使ったほうが安全です。

Reverse Voltageは逆方向の電圧限界です。LEDもダイオードなので基本は順方向にしか電圧を書けるべきではありませんが、逆方向でも5Vまでは壊れないことが書いてあります。

Power Dissipationは消費電力の最大値です。Valueの値で数値が違っていますね。W/M/PG/Bなどは色を表しています。

先程の表の下に色別の一覧がありました。今回は赤色なのでREDのRの欄をみますと78mWとあります。Arduino UNOは5Vで動いているので78mWだと15.6mAまでしか流せないことになります。逆算すると2.6Vで30mAのときに78mWになりました。(一般的には抵抗無しで利用しないので、この計算はしません)

Temperatureは動作する温度の範囲なので、その範囲で利用してください。LEDの場合には車内など高温になる場所以外では問題になることは少ないと思います。

また、色別の表でVFという項目があります。赤はMin.が1.8Vで、Typ.が2.1V、Max.が2.6Vです。これは順方向電圧がどれぐらいで点灯するかを表します。Typ.が標準値で2.1Vぐらいみたいですね。

さて、Arduino UNOのVCCは5Vですので、そのままこのLEDに接続すると壊れてしまいます。そこで抵抗を入れて流れる電流を制限する必要があります。

上記のようなサイトで抵抗値を計算することができます。また、LEDの資料にも計算方法のPDFがありましたので、中身を確認しておいてください。

  • 電源電圧 5V
  • 電流 30mA
  • VF 2.1V

上記の条件で計算すると96.7Ωになりました。実際にはこんな中途半端な抵抗は無いので100Ωの抵抗を入れると30mA弱流れることになります。気をつけないといけないことは、Iv(mcd)の欄です。これは明るさを表していますが、実はLEDは色によって明るさがかなり違います。同じ電流にしても色によって明るさが違うので、同じ明るさにしたい場合には抵抗値を変えて電流を調整する必要があります。

また、とりあえず1KΩを入れておくと数mA流れ、暗いですが光っているのが判別できる程度には明るくなります。抵抗値が低すぎるとLEDが壊れますが、ある程度高ければ暗くなるだけですので覚えておいてください。

まとめ

ベーシックなLEDの点滅でした。LEDをチカチカさせるという意味でLチカと表現されることが多いです。英語だとBlinkという名前になります。

LEDを直接Arduino Unoに接続すると、一瞬明るく光ってすぐにLEDが壊れてしまいます。そのため抵抗をいれる必要があったりして面倒なのですが、Groveモジュールだと抵抗もあらかじめ入っているので非常に単純に使うことができます。

データシートや回路は読める必要はないと思います。ただし読めたほうができる幅は広がると思います。とはいえ、GroveのモジュールやM5Stackのユニットなどを利用するだけであれば、それほど中身を理解しなくても使えると思います。

コメント

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