むささびPのblog

理系大学生が役に立つ情報を発信します!

LEDの明るさを変化させて電子工作の楽しみをArduinoで体験しよう!

このブログでは定期的にArduinoでの様々な電子工作について紹介やオススメをしています。Arduinoが初めての方にも丁寧で分かりやすいブログになるように頑張っています!

今回は新たに「Arduinoで楽しく開発」と題して、初心者コース⑤~LEDを様々なパターンで光らせる~と言うことで、パルス(PWM)信号やif文などを扱います!Arduinoの始め方どうやって楽しむの、と言った人はぜひ過去の記事と合わせて読んでみてください!


Arduinoをお持ちでない方は、こちらの入出力モジュールがセットのものがオススメです。基本的にこのセットがあれば様々なプログラムを実際に動かして楽しめます。これらはArduinoUno互換品となっています。

 

 

私が使用している純正品のArduinoUnoはこちらです。

 

 

実は23年の6月ごろにR3の性能を大幅にアップしたArduino Uno R4もほぼ同価格でリリースされていて、今後はこちらもおすすめです。

 

 

ArduinoC言語C++と呼ばれるプログラミング言語を使用してプログラムを書いていきます。ArduinoC言語の基礎的な学習やArduino特有の関数などをより勉強したい方はこちらの本が非常に役立つのでオススメです。私も、日ごろこちらの本で大変勉強になっていす。

 

 

LED点灯のより基本から確認したい方こちらの記事を参考にしてください!

 

physiaki.hatenablog.com

physiaki.hatenablog.com

1. パルス信号(PWM)でLEDをフェードで光らせる

A. パルス信号(PWM)について

 Arduinoにはパルス信号(PWM)を出力できるピンがあります。デジタルピン(D)の3,5,6,9,10,11のピンがそれにあたります。パルス信号とは図の様に矩形波(デジタル信号)のことで、OnとOffのデータのみが乗っています

PWM信号イメージ図

 

 この波形の1周期の時間内のOnの時間のパーセンテージ(%)をデューティーなどと呼ぶこともあります。この信号の周期は非常に短いため周期の平均電圧値が出力される値としてLEDに出力されると考えてよいでしょう。Arudino R3においてはピンからの出力値は0~255という値で制御され255を指定すると100%128という値にすると50%のデューティー比であるPWM波形を生成できることとなります。

B. プログラム作成

 先ほど説明したパルス信号をLEDへの出力電源としてLEDをコントロールします。まずはプログラム例を以下に示します。

const int LED = 3;  //LEDの接続ピン設定
int i; //信号の0=255の値をこの変数で調節

void setup() {
  pinMode(LED,OUTPUT); //LEDのピンはアウトプットであると指定
}

void loop() {
  for(i=0; i<255; i++)  //LEDのフェードイン効果(0~255までiを1ずつ増加)
  {
    analogWrite(LED,i); //iの値でLEDピンに出力信号を生成
    delay(30);  //30ミリ秒の遅延(早すぎてはフェード効果が視認できない)
    }

  for(i=255; i>0; i--) //LEDのフェードアウト効果(255~0までiを1ずつ減少)
  {
    analogWrite(LED,i); 
    delay(30);
    }
}
    

 今回新たにanalogWrite()という関数を使用しています。この関数では先ほど説明した0~255の値の出力信号をWrite(書く)することができます。今回はLEDへ出力するため1行目で定義した3ピンへ出力することを指定しています。また、loop関数内でiの値を断続的に変化させることでLEDの明るさを調節しています。

 

C. 回路の作成

 今回の回路図はこのようになります。

 

       

 

 3ピンからの信号はLEDの足が長い方脚が短い方は抵抗を介してGND(グラウンド)に接地します。抵抗は220KΩでなくても問題ないです光らなかった場合はLEDの向きの間違い、もしくは抵抗が大きすぎる可能性があります。抵抗は最悪無くても問題ないですが、LEDが破損(焼き切れ)する可能性が高まります。

 

D. 実際の点灯実演

       
 www.youtube.com


 このように、LEDの明るさを時間変化でコントロールすることが可能です。delay()の時間を変更することでフェードにかかる時間を調節することができます。(delay(10)未満ではフェードを視認できない速さになる可能性があります。)簡単な電飾などに応用すると非常に綺麗な装飾をできる可能性もありますね!

 

2. 今回の内容を発展することできること(番外編)

A. LEDの色を自由に変更できる

 今回LEDのフェード効果を付けた点灯の方法を理解できたかと思います。今回の内容が理解できれば実際自分が点灯させたい色を、光の3原色を使うことで自由に操ることができます。赤、緑、青色を用意し、今回学んだLEDの明るさを調節する方法を使えば自由自裁にライトの色を変更することができます。

 

B. PWMでモーターの制御

 DCモーターサーボモータなどといった駆動関係のモジュールは、今回使用したパルス信号によって回転速度や角度がコントロールできます。先ほども説明した信号の1周期の平均電圧値が実行される電圧となるため、モーターの速さもこれに比例して早くなります。モーターを使った基本的な回路についてはまた後程記事にしたいと思います。

 

 

 

今回はここまで!次回はシリアル通信やサーボモーターなどの内容をまとめようと思います!ぜひブックマークやほかの記事も見ていってください!