ふわっとLチカ【マイコンLチカ道場 Arduino編 1-4】

ふわっとLチカ PWM波形Arduino
スポンサーリンク

はじめに

このページは「マイコン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); //ウェイト時間
  }
}
analogWrite関数について

analogWrite関数は、指定したピンからPWM信号を出力する関数です。
analogWrite(pin, value)
pin: 出力に使うピンの番号
value: デューティ比(0から255)
(参考:Arduino 日本語リファレンス

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出力波形:全体

PWM波形はこの画像だと細かすぎて良くわからないので、下記に拡大した波形を載せておきます。拡大した波形で見ると、ちゃんとPWM周波数は490Hzで1周期は約2.04msになっています。
CRフィルタを通した波形はきれいな三角波になっており、ちゃんと約510ms周期で増減していることが確認出来ました。LEDもこの周期に合わせてふわっと点滅しています。

PWM波形:Duty50%付近を拡大
PWM出力波形:Duty50%付近を拡大
PWM出力波形:Duty90%付近を拡大
PWM出力波形:Duty90%付近を拡大

出力するピンを9から5に変更して波形を見てみました。下記のとおり、PWM周波数は980Hzで1周期は約1.03msになっています。LEDのゆっくり点滅する周期は同じです。

ピン5からのPWM出力波形:Duty50%付近を拡大
ピン5からのPWM出力波形:Duty50%付近を拡大

まとめ

LEDが繰り返しふわっと点滅するような動作をさせてみることが出来ました。analogWrite関数を使用して、ArduinoのPWM出力を使う方法で試してみました。
引き続き難しいLチカに挑戦していきましょう。

このページの実験は下記の商品で試すことが出来ます。
Arduino Uno Rev3 アルドゥイーノ ウノ ATmega328P【正規代理店品】プログラミング ロボット 電子工作 アルデュイーノ 正規品 アルディーノ 電子パーツ 電子工作キット
Arduinoオフィシャルストア
初めての方は正規品か、互換品でもUSB-シリアル変換にAtmega16U2が使われているものがオススメです。安価な互換品はCH340G等が使われており、トラぶると面倒かもしれません。
Arduino電子工作
スポンサーリンク
このページをシェアする
のぶをフォローする
スポンサーリンク
スポンサーリンク
のぶらぼ
タイトルとURLをコピーしました