はじめに
この記事は「Applibot Advent Calendar 2023」の5日目の記事になります。
概要
ArduinoでLEDの輝度をPWM制御する方法と,その動作原理を簡単に解説します.
目次
動作環境
- ELEGOO UNO R3 (Arduino UNO R3互換)
輝度を調節するコード
出力50%で9番ピンを光らせるコードです.
dutyRatio
の値を0〜100の間で変化させることで,LEDの輝度を調節できます.
const int pinNum = 9;
const int analogWriteStep = 255;
int dutyRatio = 50; //duty比[%]
void setup() {
pinMode( pinNum, OUTPUT );
}
void loop() {
int ledBrightness = analogWriteStep * dutyRatio / 100.0f;
analogWrite( pinNum, ledBrightness );
}
PWM制御とは
PWMはPulse Width Modulation
の略で,日本語ではパルス幅変調と言います.
その名の通り,パルスの幅を調節する制御方法です.
Arduinoに搭載されているような,ONとOFFでしか出力を制御できないデジタル出力ポートであっても,ON時間とOFF時間の幅を変更することによって制御対象の出力を滑らかに制御することができます.従って,LEDの輝度調節以外ではモーターの出力制御などに使われたりします.
↓イメージ
全体のうちON時間が占める割合をDuty比といいます.上記コードはこのDutyを指定できるように書いています.
ArduinoにおけるPWM制御とLEDの輝度調節
上記コードでLEDの輝度調節をした際,人間の目には一定の明るさに見えますが,実際にはLEDは点滅しています.9番ピンから出力される電圧はON→OFF→ON...と高速で切り替わっていて,ArduinoではデフォルトでONとONの間が1ms(周波数が1kHz)に決められています.人間の目では1kHzの点滅を知覚することができないため一定の明るさで点灯しているように見えます.
まとめ
PWM制御を使うことで,ONとOFFのデジタル出力だけで任意の出力を得られる理由と,Arduinoでのプログラムの解説をしました.Duty比を自由に変更して,滑らかにLEDの明るさを変更できます.
「以上、Applibot Advent Calendar 2023 5日目の記事でした。」