PWMを使ってLEDの明るさと出力を制御する ~ Arduino LV5 ~
先の記事で行った事をもう少し簡単なスケッチで書いてみる。
今度は、digitalWrite(LED_PIN1, HIGH)ではなく、analogWrite(LED1_PIN, 255)を用いてスケッチしている。
#define LED_PIN1 9 #define LED_PIN2 10 // 初期化 void setup(){ // LEDのピンを出力に pinMode(LED_PIN1, OUTPUT); pinMode(LED_PIN2, OUTPUT); } // メインループ void loop() { // LED1を最大値で点灯 analogWrite(LED_PIN1, 255); // LED2を減光して点灯 analogWrite(LED_PIN2, 10); }
これはPWMが使えるピン(Arduino Unoでは3、5、6、9、10、11)を使用してPWM(Plus Width Modulation:パルス幅変調)出力を行っている。analogWriteを使うと値を0から255まで設定可能だ。
この数値でLEDの光の強さを制御している。0を指定すると、0Vの電圧が出力、255を指定すると5Vが出力される。(ただし、これは電源電圧が5ボルトの場合で、3.3Vの電源を使用するボードでは3.3Vが出力される)
また上記例ではLEDを使用しているが、実際にはモータの速度等も制御出来るのだ。
詳細は以下のArduinoリファレンスマニュアルを参照されたし
スケッチを変更して動きを見てみる
LEDをゆっくり明るくして、急に暗くなる。そしてまた段々と明るくなる。その動作を繰り返すスケッチ。
#define LED_PIN1 9 #define LED_PIN2 10 // 初期化 void setup(){ // LEDのピンを出力に pinMode(LED_PIN1, OUTPUT); pinMode(LED_PIN2, OUTPUT); } // メインループ void loop() { int i; // iの値を0~255で変化させる for (i=0; i<256; i++){ // iの値でLEDを点灯させる analogWrite(LED_PIN1, i); analogWrite(LED_PIN2, i); delay(20); } }
今度はLEDがゆっくり明るくなり、ゆっくり暗くなるようにする。
#define LED_PIN1 9 #define LED_PIN2 10 // 初期化 void setup(){ // LEDのピンを出力に pinMode(LED_PIN1, OUTPUT); pinMode(LED_PIN2, OUTPUT); } // メインループ void loop() { int i; // iの値を0~255で変化させる for (i=0; i<256; i++){ // iの値でLEDを点灯させる analogWrite(LED_PIN1, i); analogWrite(LED_PIN2, i); delay(10); } // iの値を255~0で変化させる for (i=255; i>-1; i--){ // iの値でLEDを点灯させる analogWrite(LED_PIN1, i); analogWrite(LED_PIN2, i); delay(10); } }
LED1、LED2が交互に暗くなったり明るくなったりすスケッチ
#define LED_PIN1 9 #define LED_PIN2 10 // 初期化 void setup(){ // LEDのピンを出力に pinMode(LED_PIN1, OUTPUT); pinMode(LED_PIN2, OUTPUT); } // メインループ void loop() { int i,j; // iの値を0~255で変化させる for (i=0; i<256; i=i+2){ // iの値でLEDを点灯させる analogWrite(LED_PIN1, i); j = 255 - i; analogWrite(LED_PIN2, j); delay(10); } // iの値を255~0で変化させる for (i=255; i>-1; i=i-2){ // iの値でLEDを点灯させる analogWrite(LED_PIN1, i); j = 255 -i; analogWrite(LED_PIN2, j); delay(10); } }
一通り動きを確認したのならLV6へアップだ!
もっとPWMについて知りたい片はこちらのサイトが解りやすいです ⇒ PWM制御を行う
Leave a comment