大好きArduino

Arduino総合情報サイト

Arduinoプログラミング基礎

7.LチカでPWMを知る(デジタルによる調光)

2016/08/16

PWMによって電圧の変化を作る

Arduinoのピンに接続したLEDは基本的には5Vか0Vしか出力をすることができません。
そのため、LEDの明るさを変えたくても、digitalWriteによLOW,HIGHの出力では、点灯か消灯しかできません。
このような場合、Arduino(マイコン一般のデジタルの世界)ではPWM=Pulse Width Modulationという制御方法を使います。
PWMは自分のプログラムでも作ることができますが、Arduinoにおいては、ハード的にそのまま使用できるピンも用意されています。
下のUNOの写真をよく見ると、DIGITALピンの数字の前に - が記されているピンがあります。(3,5,6,9,10,11)
このピンがPWM対応のピンなのです。
ですから、ここへLEDを接続してあげればPWM制御が使用できます。

Arduino uno

PWMの電圧変化の構造

まず、PWMとは....これは出力する電圧を一定周期の中でON/OFFうを繰り返すパルスで出力するということです。
digitalWriteとの違いをあえて示すなら下記のとおりです。
arduinopwm

つまり、PWMとはある一定周期の中で0Vと5Vをパルス的に出力します。
そして、この0Vと5Vの時間の幅を変化させることによって、出力電圧の変化を疑似的に得るのです。

つまり....5Vの時間が100%時間で0Vの時間が0%時間ならば、これは5Vが出力されたままとなるため、最高の電圧を得ていると同じになります。
また、5Vの電圧が80%時間で0Vの電圧が20%時間ならば、これは5Vの80%の電圧=4V出力と同じ効果を得ます。

Arduinoでは analogWriteを利用する

ArduinoではanalogWrite(pin番号,値)の命令を使いこれを実現します。
値は0から255の数値を使います。(255が5V100%時間を示す)
そして、このanalogWriteはpinModeであらかじめピンをセットする必要はありません。

試しに、LEDの明るさをボワンボワンと変化させるプログラムを作ってみましょう!
ハードの接続は前回のままでOKです。


#define pin  10

void setup() {

}

void loop() {
    for ( int led_value = 0; led_value < 256; led_value += 10 ) { analogWrite( pin, led_value ); delay( 100 ); } for ( int led_value = 255; led_value >= 0; led_value -= 10 ) {
        analogWrite( pin, led_value );
        delay( 100 );
     }
}


省エネ・地球温暖化に伴い、これまでの蛍光灯や電球はLEDに変わり始めています。
特に商業施設、ホテル、ホール、飲食店などにおいては電気代が相当異なるため積極的な交換が行われています。
しかし、こういった場所では、シーンに合わせて店内の明るさを調光器によって調節しています。
この場合、以前の電球とLEDとでは調光の仕方が全く異なります。
LEDの場合はここにも書きましたようにPWMでの制御が基本なので、以前の調光機では全く反応しないものが多いのです。
また、ほとんどのLED系の電気には、内部に100VからLED電圧(だいたい12Vか24V)へ変換する電源が内蔵されているため、調光器が効かないものが多いのです。
そのような場合は、「調光器対応」というLED電球を購入することになりますが、各社結構制御がことなったりしますので、購入時には相当神経を使わなくてはいけません。

-Arduinoプログラミング基礎