###LED輝度の調整方法
LEDの輝度(明るさ)調整するためには、どうすればよいか。
①印加する電圧を変える
②IFを少なくする
③光っている時間と消えている時間に差をつける
などの方法があります。
マイコンなどで手軽に行える制御が、③の方式が簡単にできます
###まず、プログラム
PORTD = 0x01; delay(10);
PORTD = 0x00; delay(100);
と記述してみました。
LEDは点滅するが、光っている時間も10msあるので、目が痛い・・
この動作をもっと高速で行うとどうなるか、delay関数の時間を短くしてみよう
ただし、1ms以下にはできないので、注意
この時間差のことをDuty比と呼ぶらしい。
次にこのDuty比を連続的に変えてもみる、
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の輝度を連続的に変えてみました。
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%のオン時間となる
こうすることで平均的に 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