こんにちは、のすけです。
中華で始める Arduino入門日記の6回目です。
この連載は、爆安の中華製のArduino互換機を入手し、色々と苦しみながらも安い互換機でArduinoを学習してしまおうというものです。
入手の話はこちらから。
本題
前回はブレッドボードを利用して、LEDをチカチカさせました。
今回はなんと!チカチカではなくほわほわとロウソクのように瞬かせてみたいと思います。
できるんですねぇ、そんなことが。チュートリアルの5章 PWMになります。
では早速やってみましょう。
利用しているキットに近い奴は⇩
Arduinoをはじめよう 互換キット UNO R3対応互換ボード 初心者専用実験キット 基本部品セット20 in 1
- 出版社/メーカー: vership
- メディア: おもちゃ&ホビー
- この商品を含むブログを見る
アナログ値(PWM)を扱う
指定したピンからアナログ値(PWM波)を出力することができるようです。
何が嬉しいかと言うと、LEDの明るさや、モータの回転スピードなどを調整する時に利用できるとのこと
制御できる段階は256段階(0~255)で、かなり細かく制御できるようですね。
ただし、制御できるDigital I/Oピンは決まっているそうで、3,5,6,9,10,11ピンだけだそうです。
利用方法
analogWrite関数というものが用意されています
実行されるともう一度analogWrite
をしたりするまで、安定した矩形波が出力される模様。
周波数はだいたい500Hzだそうです。
ちょっとよくわからないので、ググりました。
矩形波(くけいは、Square wave)とは非正弦波形の基本的な一種であり、電子工学や信号処理の分野で広く使われている。 理想的な矩形波は2レベルの間を規則的かつ瞬間的に変化するが、その2レベルにはゼロが含まれることも含まれないこともある。 方形波とも呼ばれる。
by Wikipedia
うん。まだよくわからないけど。
電気を瞬間的にオンにしたりオフにしたりを規則的にすると矩形波になって
オンの時間とオフの時間を調整することで、電圧を擬似的に出力の最大値から256段階に分割していると
だから、抵抗とかを調整しなくても、LEDを明るくしたり暗くしたりができると。
そんな理解でいいのかな?
なるほど便利そうだ。
回路
実は前回と一緒です。9ピンを使います。
緑のジャンパーコードを差した状態を利用します。
サンプルプログラム
プログラムはこちら。
int led = 9; // LEDピンを設定 int brightness = 0; // LEDの明るさ int fadeAmount = 5; // LEDの調光段階値 void setup() { // 9ピンに設定 pinMode(led, OUTPUT); } void loop() { // 9ピンの明るさを設定 analogWrite(led, brightness); // 明るさを変更 brightness = brightness + fadeAmount; // 調光の方向を逆にする if (brightness == 0 || brightness == 255) { fadeAmount = -fadeAmount ; } // 調光のために30ミリ秒のwaitを追加 delay(30); }
analogWrite()というのが望む電圧を作るやつですな。
loopの度に設定し直していると。
0~255まで設定できるんだけど、1づつ調整してたら面倒だからfadeAmount
で5づつ調整する設定にしていると。
if (brightness == 0 || brightness == 255) {
fadeAmount = -fadeAmount ;
}
最初はどんどん増えていくんだけど、255まで来たらもう増やせないから、255の時は-5づつ調整するようにモードを変更していると。
逆に0になったらまた5づつ増えるようにもなっていますね。
最後に30ミリ秒の待ちを入れて、いい感じの調光速度にしていると。
やってみた
お分りいただけるだろうか。チカチカではなく、ほわほわ光っているのが。
ロウソクか?と言われると微妙ですが、もう少しチューニングすればイケそうなレベルですね。
delayとかを調整して遊んでみると良いかと思います。
お試しください。