Arduinoを使った出力というのが少し理解できて来たでしょうか?
今回は、そのままもう少し出力を応用して、LEDの明るさを調光するプログラムを作ってみます。
調光(明るさの調整)とは…
アナログな調光とデジタルな調光は少しやり方が異なります。
電気屋さんで売っているLED電球には<調光には対応していません>とよく書いてありますがどういったことなのでしょうか?
今までの電球での調光
豆電球のついた懐中電灯では、電池がなくなってくるとどんどん暗くなっていきました。
ラジコンカーのモーターもそうで、とにかく電池が減る(電圧が低くなる)とその電圧に合わせて出力が変わるので、明るさや回転する力が弱まっって行きました。
この機能を使って、部屋の明るさを変えるつまみでは、電球に与える電圧などを変化させていました。
LEDでの調光
ところがLEDの調光は方法が全く異なります。
それは、LEDが、一定の電圧を与えなくては動作しない仕組みになっているため、今までの電球のように電圧を絞ってしまうとLEDの機能が働かなくなるため、全く光らないという結果になるためです。
つまり、LEDは「光る」か「光らない」かどちらかしかない、実にデジタルなやつなのです。
LEDでの調光はどうするのか?
電圧の変化によって調光ができないのであればどうするのか?
答えは、”目に見えないほどの速さで光っている時間と消えている時間の点滅をさせる”ということです。そして、この点滅の”光っている時間”と”消えている時間”の長さを変えるのです。
つまり、”光っている時間”が長くて”消えている時間が短い”点滅(繰り返しは)は明るくって見え、逆だと暗く光って見えるのです。
とりあえずArduinoにLEDを接続
前回のコレで行きましょう!
もしLEDを手持ちではければ、13番の基板の上のLEDでも構いません。
Arduinoプログラミング基本
暗く光るLEDのプログラム
動作はコメント通りです。
このプログラムは光っている時間より消えている時間のほうが長いため暗くなります
void setup() { pinMode(12,OUTPUT); //12番を出力にします } void loop() { digitalWrite(12,HIGH); //HIGHを出力して光ります delayMicroseconds(10) ; //10マイクロ秒だけ光り続けます digitalWrite(12,LOW); //LOWを出力して消えます delayMicroseconds(3000) ;//3000マイクロ秒間消え続けます }
※基板の上のLEDで試す方は12番を13番に変えてください。
明るく光るプログラム
光っている時間と消えている時間を逆にしてみました!
void setup() { pinMode(12,OUTPUT); } void loop() { digitalWrite(12,HIGH); delayMicroseconds(3000) ; digitalWrite(12,LOW); delayMicroseconds(10) ; }
実はもっと簡単に実現できるArduinoの調光
仕組みは上記で理解できたと思います。
ただ、こんなプログラムをいちいいちい作っていたのではちょっと面倒で…実はArduinoにはもっと簡単な方法があります。
Arduinoのポートコネクタの番号に~をつけたポートがあります。
UNOでは2,5,6,9,10,11です。
実は、このポートは1つの命令で、この光る時間と消える時間の調整ができてしまうのです。
12番でやってみる
暗く光る
void setup() { pinMode(11,OUTPUT); } void loop() { analogWrite(11,1); }
明るく光る
void setup() { pinMode(11,OUTPUT); } void loop() { analogWrite(11,127); }
ぼわんぼわん光る
void setup() { pinMode(11,OUTPUT); } void loop() { for(int i=0;i<127;i++){ analogWrite(11,i); delay(10) ; } }