はじめに
このページは「マイコンLチカ道場 Arduino編」の「1-4:ふわっとLチカ」に対応するページです。LEDが繰り返しふわっと点滅するような動作をさせてみます。analogWrite関数を使用して、ArduinoのPWM出力を使う方法で試してみました。
回路図とブレッドボード接続図
今回の回路は一個の青色LEDと電流制限抵抗のみ使用します。さらに楽ちんですね。
ただし、PWM出力を使用するため、接続先を9ピンに変更しています。
Arduino UnoのPWM出力は、3,5,6,9,10,11ピンで使えます。出力ピンヘッダに「~」のシルク印字があるのでわかりやすいですね。
PWM信号の周波数はデフォルトで約490Hzです。ただし5,6番ピンは約980Hzとなるようです。(delay(), millis()関数がTimer0を使用している影響だそうです)
よって今回は先ずは9番ピンに接続してみました。
プログラムを書いてみる
今回のプログラム(スケッチ)は下記になります。前回deleyを使わない方法を試したばっかりですが、さっそくまた頼ってしまいました。便利ですよねdelay関数…
const int LED1 = 9; //LEDを接続するピン(PWM出力490Hz:3,9,10,11、980Hz:5,6)
const int wait = 2; // 点滅の速さを決めるウェイト時間(ms)
int led_width = 0; //ledのPWM幅用の変数
void setup() {
pinMode(LED1, OUTPUT); //LED1ピンを出力にする
}
void loop() {
for (led_width = 0; led_width <= 255; led_width +=1){
analogWrite(LED1, led_width); //LED1をPWMで点灯させる
delay(wait); //ウェイト時間
}
for (led_width = 255; led_width >= 0; led_width -=1){
analogWrite(LED1, led_width); //LED1をPWMで点灯させる
delay(wait); //ウェイト時間
}
}
for (led_width = 0; led_width <= 255; led_width +=1)のループで、「led_width」を1づつ255まで増やしていき、PWM幅を増やしていきます。
「led_width」が255まで達したら、for (led_width = 255; led_width >= 0; led_width -=1)のループで、255から0までled_widthを減らして、PWM幅を減少させていきます。
定数「wait」でPWM幅の増減の速さが変わるので、ここを大きくするとLEDの明るさの変化するスピードが遅くなります。
今回は「wait」を2msとしているので、約510msかけて徐々に明るくなり、約510msかけて暗くなっていくという動作をします。
実際に動かしてみた時の波形が下記になります。CH2には9ピンにCRフィルタを追加した波形を測ってみました。(C=1μF、R=10kΩ)
PWM波形はこの画像だと細かすぎて良くわからないので、下記に拡大した波形を載せておきます。拡大した波形で見ると、ちゃんとPWM周波数は490Hzで1周期は約2.04msになっています。
CRフィルタを通した波形はきれいな三角波になっており、ちゃんと約510ms周期で増減していることが確認出来ました。LEDもこの周期に合わせてふわっと点滅しています。
出力するピンを9から5に変更して波形を見てみました。下記のとおり、PWM周波数は980Hzで1周期は約1.03msになっています。LEDのゆっくり点滅する周期は同じです。
まとめ
LEDが繰り返しふわっと点滅するような動作をさせてみることが出来ました。analogWrite関数を使用して、ArduinoのPWM出力を使う方法で試してみました。
引き続き難しいLチカに挑戦していきましょう。