(この内容は、アメブロの内容を一部訂正・移行したものです)
こんにちは。Yukiです。
今回は、ArduinoのPWMを使って、LEDを調光してみたいと思います。
LEDを調光する方法
LEDの明るさを変えるにはいろいろな方法があります。
- LEDに流れる電流を制限する -> 可変抵抗を使う
- LEDの電圧を変える -> レギュレータを使う
- LEDにPWMを使用して明るさを変える
しかし、抵抗は、電圧降下がおきた分、熱に変換してしまうため、エネルギー的にもったいないです。
実際、昔は鉄道などでも、モーターの速度制御を抵抗で行っていたらしいですが、もったいないです。
(実は現役(2024年現在)の国鉄211系などは抵抗制御だったりします。抵抗制御特有の、加速時にいきなり加速する衝撃のようなものを感じます)
そこで今回はArduinoの機能であるPWMを使用してLEDを調光します。
PWMとはPulse Width Modulationの略で、日本語だとパルス幅変調といいます。簡単に書くと、高速にON/OFFを繰り返しており、ONとOFFの比率を操作して、出力パワーを変更します。抵抗とは違い、OFF時には電流が流れないため、省電力になります。また、レギュレータで電圧変更するよりも簡単です。
PWMのデメリットとしては、マイコンによってはPWMを出力するハードウェアが搭載されていないことがあります。ただし、ソフトウェアでやる方法もあります。(ソフトウェア制御でPWMを制御するのは、CPUに負担がかかるので、オススメはしません) また、仕組み上、ONとOFFを繰り返すことから、PWMの基本周波数によっては、チカチカして見えることがあります。
さっそくやってみる
なおLEDはArduinoに直接つないではいけません。必ず抵抗を挟んでください。
今回は200Ωの抵抗を使用しました。
const int PWM_PIN = 3;
const int POWER = 5;
void setup() {
pinMode(PWM_PIN,OUTPUT);
}
void loop() {
analogWrite(PWM_PIN,POWER);
}ArduinoはPWM出力用にanalogWrite関数が用意されています。
上の見本はPWM_PINがPWMに対応しているを指定してください。
(マイコンは基本的に、一部のピンしかPWMを出力できません)
POWERは明るさです。0~255を指定してください。
なおArduino UNO / NANOのPWM対応ピンは3,5,6,9,11ピンです。
今回はPOWERを5・20・100・200にした画像として乗っけておこうと思います。

これがPOWERを5にセットした明るさです。
約2.2%位のパワーです。
結構暗いですね。

これがPOWERを20にセットした明るさです。
約8.9%位のパワーです。
明るさが変わって、明るくなりましたね。

これがPOWERを100にセットした明るさです。
約44.4%位のパワーです。
明るさは比例的に上がりませんが、確かに明るくなっています。

最後にPOWERを200にセットした明るさです。
約88.9%位のパワーです。
確かに明るくなっていますね。
最後にゆっくり点灯・消灯を繰り返すプログラムを貼っておきます。
本当はGIF画像を貼り付けたかったのですが、面倒になったため自分で確かめてください。
const int PWM_PIN = 3;
void setup() {
pinMode(PWM_PIN, OUTPUT);
}
void loop() {
int i;
for (i = 0; i <= 255 ; i++)
{
analogWrite(PWM_PIN, i);
delay(5);
}
for (i = 255; i >= 0; i--)
{
analogWrite(PWM_PIN, i);
delay(5);
}
delay(100);
}


コメント