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