0
0

More than 5 years have passed since last update.

03ArduinoでLEDのPWMを用いて輝度を変えてみる LEDの制御

Last updated at Posted at 2019-04-16

LED輝度の調整方法

LEDの輝度(明るさ)調整するためには、どうすればよいか。
①印加する電圧を変える
②IFを少なくする
③光っている時間と消えている時間に差をつける

などの方法があります。

マイコンなどで手軽に行える制御が、③の方式が簡単にできます

まず、プログラム

robot19_base
  PORTD = 0x01; delay(10);
  PORTD = 0x00; delay(100);

と記述してみました。

LEDは点滅するが、光っている時間も10msあるので、目が痛い・・

この動作をもっと高速で行うとどうなるか、delay関数の時間を短くしてみよう
ただし、1ms以下にはできないので、注意

この時間差のことをDuty比と呼ぶらしい。

次にこのDuty比を連続的に変えてもみる、

robot19_base
int i,j;
for(j=0;j<10;j++){
  for(i=0;i<100;i++){
    PORTD = 0x01; delay(j);
    PORTD = 0x00; delay(10-j);
  }
}

<結果>段階的に輝度が変わりました。

連続して輝度を変えるためには・・・
ソフト的に制御するにも無理がある

PWM信号とanalogWrite()

ArduinoにはanalogWrite()という関数があるこれを使うとLEDの輝度が変えられます。

analogWrite(6,i)  //第1引数 6・・・出力ポート 第2引数 i・・・値0~255 

この関数を使うとPWMと呼ばれる機能を簡単に使うことが出来るますが、ハードウェア的に信号を生成するので、どのピンでも使えるわけではないようです。
Arduino Unoではデジタル出力の 3, 5, 6, 9, 10, 11 のピンが PWM に利用できます。

この機能を利用して、LEDの輝度を連続的に変えてみました。

Robot19_base
int i,j;
for(j=0;j<10;j++){
  for(i=0;i<255;i++){
    analogWrite(6,i);
    delay(100);
  }
}

LED6だけがじわじわと明るくなり、突然暗くなってまたじわじわと明るくなった。

PWMの仕組み

PWM (Pulse Width Modulation) は、電圧などを簡単に制御する方法の一つで、周期ごとに1(オン)と0(オフ)の時間を可変する技術、 パルス幅に比例した電圧を得ることがでる。

次の例では1周期ごとに1の時間と0の時間が変化している
第一周期では20%のオン時間となる

PWM.jpg

こうすることで平均的に ON の時の電圧の 20% の電圧 (すなわち、5[V]*20[%]=1.00[V]) を得ることができる。

尚、この場合 ON である時間をデューティー・サイクル (Duty Cycle) という。これが、最大電圧に対する出力電圧の割合となる。

<確認>
LEDの輝度を50%で発光させてみる
LEDを2つ20%と80%光らせる

参考サイト


参考にさせていただいたページは以下の通りです。
大変わかりやすくまとめられています。
ありがとうございます。
[PWMに関して]https://iot.keicode.com/arduino/arduino-analogwrite-pwm.php

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0