PWMとArduinoでのアナログ出力

Arduino

ArduinoではPWMによるアナログ出力(0~5V)をサポートしています。

すなわち,デジタル信号としてHIGH(5V,Arduinoを駆動している電圧)とLOW(0V)だけではなく,2Vなどの中間の値も出力できます。

これによって,例えばLEDの明るさを少しづつ変えたりできます。

PWMとは?

PWM(Pulse Width Modulation)は,電圧を制御する方法の一つです。出力のONとOFFのスイッチを行うことで,パルス幅に比例した電圧を得ることができます。

例えば次の例では波の1周期の間で,25%の時間だけONになっています。

100%の時間ONになっていれば5Vを意味します。したがって,左の図の場合は    
   5[V]*25[%]/100[%]=1.25[V]
の電圧を得ることができます。

なお,ONである時間の割合をデューティー比といいます。これがすなわち,最大電圧に対する出力電圧の割合になります。

ArduinoのPWM出力

Arduino Unoではデジタル信号の3,5,6,9,10,11の6個のピンがPWMに利用できます。ピン番号の前に~記号が付記されており,PWMが利用可能であることがわかります。

analogWriteの使い方

ArduinoではPWM出力にはanalogWrite関数を利用します。analogWrite関数は第一引数にピン番号,第二引数にデューティー比を受け取ります。

第二引数は,%の値ではなく,0(0%)~255(100%)の値になります。したがって,出力したい電圧をv,デューティー比をd,analogWrite関数の第二引数をxとしたら,
   v=5.0[V]*d=5.0[V]*x/255 したがって,x=v*255/5=v*51
となります。ただし,xは整数値ですので,丸めた値を用います。

なお,analogWriteを呼ぶためにpinModeを事前に宣言する必要はありません。

PWM出力の計測

では実際に,次の方法でanalogWriteによるPWM出力の状態を確認してみましょう。Arduinoスケッチは次のとおりです。3番ピンで2Vを出力しています。

1行目:アナログ出力ピンとして3番を用いる
2行目:2Vを出力する
5行目:2Vを上述の式で整数値に変換する
6行目:3番ピンに2Vを出力する

このプログラムを実行して,マルチメータで計測すると下の写真のようになります。確かに,およそ2Vになっています。

また,オシロスコープを用いて出力波を確認すると次のようになります。

縦軸の1目盛りは2.0V、横軸の1目盛りは500μsecです。したがって、周波数は1/2msec=500Hz(厳密には490Hzだそうです),デューティー比は800μsec/2000μsec=40%であることがわかります。

参考URL
   https://iot.keicode.com/arduino/arduino-analogwrite-pwm.php

Arduinoのアナログ入力

早速ですが、アナログ入力を利用した回路を考えます。

Arduino UnoのA0~A5ピンがアナログ入力ピンになります。CdSと抵抗10kΩで5Vを分圧しています。この電圧をA0に入力します。

次のスケッチは、A0ピンに入力された電圧をシリアルモニターで読み取るものです。

2行目:シリアル通信のボーレートを9600bpsに設定します。
6行目:A0に入力された値を格納する変数。0~1023の整数になります。
7行目:analog_dataから求められた電圧を格納する変数。こちらは、実数型です。
9行目:A0に入力された値をanalog_dataに代入します。
11行目:analog_dataから電圧を算出しvoltageに代入します。analog_data=0が0.0V、analog_data=1023が5.0Vになります。
12~14行目:シリアルモニターに出力します。

それでは、スケッチを実行してみます。右の動画が、シリアルモニターの様子です。最初、電圧値は4V付近を出力しています。しばらく見ていると電圧値が1.5V付近に落ちたのがわかると思います。このとき、CdSを手で覆い暗くしました。これで、CdSが光センサーとして働いているのがわかりました。

では、次に、CdSに手をかざしたらLEDが点灯するスケッチを以下に示します。

スケッチの説明は上と異なる点だけ説明します。

3行目:13番ピンを出力モードにします。
15行目:デフォルトはLEDを消灯させます。
16行目:voltageが2.0V以下、すなわちCdSの周辺が暗くなったら、17行目を実行します。
17行目:LEDを点灯させます。

このスケッチを実行した結果が下の動画です。

まとめ

  • アナログ出力の端子は、数字の前に~がついている。
  • アナログ出力はPWMにより電圧を生成する。その値は疑似的に0から255の値で与えられる。0→0.0V、255→5.0Vである。
  • アナログ出力を用いて、2.0Vを生成した。その値をデジタルマルチメータ―およびオシロスコープで確認した。
  • アナログ入力の端子は、A0~A5である。
  • アナログ入力の値は、0から1023の値で与えられる。0→0.0V、1023→5.0Vである。
  • CdSにより変化した電圧値をアナログ入力端子で読み取り、シリアルモニターで表示するスケッチを作成した。
  • CdSの周囲が暗くなると、LEDが点灯する回路を製作した。

コメント

タイトルとURLをコピーしました