Arduinoと戯れてみる!

Arduino 入門 番外編 04 アナログ出力 とは

arduino-extra-edition-04-00Arduino番外編
スポンサーリンク

「Arduino 入門 番外編 04 アナログ出力 とは」

こんにちはomoroyaです。

今回は、Arduino 入門 番外編 04 アナログ出力 とはです。

arduino 入門 番外編はarduinoの基本的なことを書いていく方向性にしたいと考えています。

本日は、arduinoのアナログ出力についてです。

 

その前に、arduinoの外観とピン配置を確認することをおすすめします。

デジタル出力、入力に関してはこちらを確認ください。

arduino自身のことを少しづつ理解して行きましょう。

 

いやいや、arduinoを早速始めたいんだ!というかたは下記の入門編からお読みください。

 

Lessonの入門編で使用しているArduinoは互換品です。

互換品とは言え、Arduinoはオープンソースであり複製して販売するのもライセンス的に問題なし。

そのため互換品の品質も悪くなく、それでいて値段は安いです。

正規品本体の値段で豊富な部品が多数ついています。

 

スポンサーリンク

Arduino アナログ出力ピン

番外編02のおさらいです。

Arduino UNO R3の外観図を下記に示します。

外観図右下のデジタル3,5,6,9,10,11がアナログ出力ピンになります。

arduino_uno_R3-appearance

アナログ出力ピンといっても、アナログチックに好きな電圧を出力できる!

というわけではありません・・・。

なぜなら、UNOの出力ピンはアナログ出力には対応していないからです。

あくまでも疑似的にアナログ出力をさせることになります。

その方法がPWM(パルス変調)です。
※PWM:Pulse Width Modulation

 

PWM(パルス変調)

PWMは、0Vと5V(0Vと3.3V)を周期的に切り替えながら、疑似的に0V~5V(0V~3.3V)の間の電圧を作り出す方式です。

例えばLEDの明るさを変えたいというときに使用します。

周期的に繰り返される波形があったとします。

5Vになっている期間が長ければ、LEDは明るく点灯。

0Vになっている期間が長ければ、LEDは暗く点灯します。

実際は、LEDに通電している時間を変えているだけで、電圧を変えているわけではありません。

しかし、人間の目には明るさが変わって見えるのです。

波形例を下記に示します。

1/500秒はPWM周波数490Hzを時間換算したものです。
※実際には1/490秒、約2m秒(1/500)

arduino-extra-edition-04-01

例えば上の真ん中の波形は、ON時間50%、OFF時間50%となっています。

この電圧を平均化すると下記に示すように50%の電圧を得ることができます。

5V×0.5+0V×0.5=2.5V

このようにして、ON時間、OFF時間の比率を変えることによって疑似的にアナログ出力を出しているわけです。

なお、このON,OFFの時間の比率をデューティー(Duty) といいます。

 

モードの設定

アナログ出力を使用する場合は、まずpinMode()で出力指定をする必要があります。

pinMode(ピン番号,モード)
ピン番号:使用するピン番号を指定
モード:OUTPUTを指定すれば出力、INPUTと指定すれば入力

例 デジタル3(ピン番号3)を出力ピンとして指定する。

pinMode( 3, OUTPUT );

 

analogWrite()を使用する場合、pinMode()の設定は省略することもできます。

 

アナログ出力

アナログ出力は、外観図のデジタル3,5,6,9,10,11の端子が対応しています。

指定したピンからは使用する「電源電圧」、「0V」のPWM信号を出力することができます。
※電源電圧は5V、3.3V

 

また、PWMの周波数はピンによって下記となります。

ピン番号(デジタル)PWM周波数[Hz]
3,9,10,11490(約0.002秒 ⇒ 約2m秒)
5,6980(約0.001秒 ⇒ 約1m秒)

 

各端子に動作させたい部品を接続することで、PWMの信号を与えて制御することになります。

使用する制御コマンドは以下です。

analogWrite(ピン番号,値)
ピン番号:使用するピン番号を指定
値:デユーティ比(0~255※整数)

残念なことに、値の部分が%ではなく、0~255となっています。

対応は下記となります。

%表示値(デユーティ比)
00
50128
100255

計算で求める場合は以下で計算できます。※5Vの場合

出力したい電圧から引数の値を求めたい場合
255 ÷ 5V × 出力したい電圧[V]
※計算した値は整数に丸め込む
出力したい割合[%]から引数の値を求めたい場合
255 × 出力したい割合[%] × 100
※計算した値は整数に丸め込む

 

例 デジタル3(ピン番号3)に2Vを出力する。

引数の計算:255 ÷ 5V × 2V = 102

analogWrite( 3, 102 );

 

簡単なサンプルコードがこちら。

//sample code
int OutPutPWM_pin =3;
int i = 0;
float V_Out = 2;

void setup(){
pinMode( OutPutPWM_pin, OUTPUT );
i = 255/5*(int)V_Out;
}

void loop(){
analogWrite( OutPutPWM_pin, i );
}

 

Arduino 入門のLesson編にてanalogWrite()を使った実践を解説しています。

ダイオードの輝度を制御する実践です。

ぜひ、実際に試して遊んでみてください。

綺麗な色の変化を確認することができます。

 

次回の番外編 05はアナログ入力の解説を予定しています。

 

Lessonの入門編で使用しているUNOはAmazonにて購入可能です。

Amazon ベストセラーNo.1
ELEGOO UNO キット レベルアップ  チュートリアル付 uno mega2560 r3 nanoと互換 Arduino用

 

上記のものでも十分に多数の部品が入っていますが、最初からもっと多数の部品が入っているこちらもお勧めです。

コメント

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