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

Your email address will not be published.

*



(Spamcheck Enabled)