今回はPWM制御を使ってArduinoでLEDをふんわり点滅させましょう。ふんわりというのは、ON /OFFを一瞬で切り替えるのではなく、ジワジワと明るくなって暗くなる。という光り方のことです。
通常、digitalWriteのコマンドを使うと、ほぼ肉眼ではわからないスピードでLEDのONOFFが実行されます。ですから、切り替わっている途中のLEDの様子などは捉えられないため、昔ながらの豆電球のような温かみがなく、ちょっと味気ない感じになっているんですね。※味気ないと感じているのは私個人の感想です。
豆電球の話が出てきたので、ここで一つ動画をご紹介します。豆電球のON /OFFとLEDのON /OFFの切り替わりのスピードに注目してください。
私は豆電球のふわっと光る方が好みです。あなたはどっち派ですか??
LEDをArduinoでふわっと点滅させる方法が理解できる。
Youtubeチャンネルにさまざまな動画を上げています。
↓↓↓こちらからYoutubeチャンネルにアクセス!! ↓↓↓
本ブログはアフィリエイトを用いた広告を掲載しています。
今回使用するもの:ArduinoとLEDと抵抗
今回使用するのは、ArduinoとLEDと抵抗。それから、配線するためのブレッドボードやジャンパーワイヤーです。すでに電子工作キットを1つでもお持ちなら、これらの部品はすでにお持ちのはずです。
ただ、Arduino本体だけを購入しただけで、他にまだ電子工作キットをもっていないよ!という場合には、こちらのような便利なキットがありますので、こちらを1つ持っておくと良いかもしれません。
一旦基本的なパーツはこれくらいにしておいて、他にやりたいことができたらそれらを追加で購入していくのがおすすめです。
例えばLCDのような、好きな文字を表示させる液晶モニタが操作したければそちらを追加で購入すればいいですし、モーターで何かを動かしたいならそちらを購入すればいいので追加費用が明確ですよね。
配線方法と接続するべきピンはどこなのか?PWMがポイント
配線方法は、LEDをチカチカさせるいわゆる【Lチカ】と同じです。ただし、今回注意すべきなのは、ふんわり点灯が目的だということです。
ふんわり点灯を実現するためには、analogWrite()という指令が使えるピンにLEDを接続する必要があります。このピンは、Arduinoシリーズのどれを使うかによって異なります。
具体的にはこの表のように記載されているピンを使用する必要があります。
この表だけではイメージが沸かないかもしれないので、こちらのArduinoのピンの割り当ても見たほうがいいですね。Arduino UNO R3を例にします。
先ほどanalogWrite()に対応した表をご覧いただきましたが、Arduino UNO R3は、[3,5,6,9,10,11]番のピンが対応しています。それをこのピン配置の図で見てみると、例えばD3を見ると、このように、~マークが入っていることがわかります。
このマークがanalogWrite()が使えるピンということです。ここで補足ですが、analogWriteとは、PWM制御によって、疑似的に電圧を上下させることができる機能のことです。
これだけ聞いても???となるかもしれません。そもそもPWM制御ってなんだ?という場合には、こちらに記事を書いていますので、こちらをご覧ください。
簡単に言ってしまうと、ArduinoのPWM制御の機能を使うことで、電圧を疑似的に上下させることでLEDにかける電圧を上下させる。つまりLEDの明るさが制御できる。ということです。
PWM制御できるピンを選択して配線した例
それでは具体的にArduino UNO R3を例にして、LEDをふんわり点灯させるための配線方法をこちらに示します。
ポイントは、さきほどもお伝えしたように、PWM制御ができるピンとLEDをつなぐことです。今回はD3ピンを使っています。~3となっているので、PWM制御ができますね。
スケッチ(ソースコード)
それでは配線ができたところで、Arduinoに書き込むスケッチ(ソースコード)を書いてみましょう。ここでのポイントはdigitalWriteではなく、analogWriteを使用するところです。
通常のLEDをON/OFFするだけであれば、digitalWriteを使いますが、今回はふんわり点灯が目的ですから、analogWriteを使います。
int i = 0; // LEDの点灯パワー
bool inc = true; // 点灯なのか消灯なのかのフラグ
void setup()
{
pinMode(3, OUTPUT); // D3ピンを出力に設定
}
void loop()
{
analogWrite(3, i); // ここで指定したパワーでLEDを光らせる
delay(10); // 少し待ちを入れたほうがゆっくり点滅になる。※好みで変更してください
if(i <255 && inc) // Maxパワー未満かつ点灯フラグがTrueの時は電圧を上げる
{
i++;
}
else if(!inc) // 点灯フラグがFalseの時は電圧を下げる
{
i--;
}
if(i == 255) // Maxパワーまで上がったら、点灯フラグをFalseにして消灯モードへ切り替える
{
inc = false;
}
else if (i == 0) // 電圧がミニマムまで行ったら点灯フラグをTrueにする
{
inc = true;
}
}
コメントの通りですが、このスケッチでは、ふんわり点灯とふんわり消灯を実現しています。ふんわり点灯だけだと、Max輝度になった後に急に明るさが0になってしまいます。
なので、bool incでフラグを用意して、Max輝度になったのを検知してinc = falseとしてふんわり消灯するように切り替えています。同様に、Min輝度になったのを検知して今度はふんわり点灯するように切り替えています。
今回のまとめ
今回は単純にON/OFFするだけのLチカからの卒業ということで、ふんわり点灯・消灯する方法についてご紹介しました。
ポイントとして押さえておきたいのは以下の3点です。
特に注意なのが、PWM制御可能なピンが決まっているところです。スケッチをコピペしたのにうまくいかないな…と思ったら、接続しているピンがPWM制御に対応しているか確認しましょう。
今回の例ではArduino UNO R3で解説しましたが、他のArduinoシリーズでもやることは一緒です。~が付いているピンを探して、そこにLEDと抵抗をつなげてあげればOKです。もちろんスケッチもそのピンの番号に変更してあげるのもお忘れなく。
コメント