5 Arduino RGB LED をPWM で制御
赤色LED、緑色LED、青色LED の3つのLEDが一つのパッケージに入った RGB LED を使い、赤色 → 緑色 → 青色 → 赤色に連続的に変化する回路を作成します。
例えば中間色の黄色を発光させるためには、赤色 50%、緑色 50% の発光量にする必要があります。発光量を調整する目的で、PWM出力を使い、出力方形はのデュティサイクルをプログラムで連続的に変化させます。
回路図
PWM 波形
各 LED の輝度を制御するためにパルス幅変調(PWM)を使用 します。 PWM 出力のパルス幅は、 analogWrite(pin, value) 関数で操作します。
引数の pin: は、出力に使うピンの番号、
value: は、デューティ比(0から255)を指定します。
UnoのようにATmega328Pを搭載しているArduinoボードでは、デジタルピン3、5、6、9、10、11でこの機能が使えます。下の図は、UNO の PWM ピンのからの信号を測定したものです。
- Ch. 1 : analogWrite(3, 13) --> デューティ比は、13/255=5%
- Ch. 2 : analogWrite(5, 128) --> デューティ比は、128/255=50%
- Ch. 3 : analogWrite(6, 230) --> デューティ比は、230/255=90%
パルスの繰り返し周波数は、ピン5、6 が約980Hzで、他のピンは約980Hzです。
スケッチ内容
スケッチ内容を示します。
// RGB LED を使用し色を赤>緑>青連続的に変化させる //2021-5-30 // 出力ピンの指定 #define BLUE 3 #define GREEN 5 #define RED 6 void setup(){ } // main loop void loop(){ #define delayTime 10 // 変化の速度 changeColor(RED,GREEN); changeColor(GREEN,BLUE); changeColor(BLUE,RED); } void changeColor(int decColor,int incColor){ int i = 256; while(i--){ analogWrite(decColor, i); analogWrite(incColor, 255-i); delay(delayTime); } }
初期化関数 setup()が空なのは
analogWrite関数は、pinMode()で使用するピンを初期化する必要がないため、関数 setup()は空で不都合がありません。
changeColor()関数
decColor,から incColor に連続して色を変化させる関数です。
decColor を1/256 ずつ暗くし、同時に、 incColor を1/256 ずつ明るくします。
使用した Arduino命令
今回使用したArduino関連の命令の簡単な説明とその日本語レファレンスの掲載されているリンクを紹介します。
- analogWrite(pin, value)
指定したピンからアナログ値(PWM波)を出力します。
pin: 出力に使うピンの番号
value: デューティ比(0から255)
次回は、デジタル入力 を学習します。