11月25日発売 書籍『Arduinoと3Dプリンタでロボットを作ろう』を出させて頂きました!

【Arduino/ 小ネタ⑤】アナログ入力とアナログ出力(PWM出力)について!

Arduinoの入出力端子には、デジタル入出力端子とアナログ入力端子があります。

Arduino Unoで言うとD0~D13と書かれた端子はデジタル入出力端子となります。
名前からも分かる通りデジタルでのやり取りHIGH or LOW(0または1)の入出力で使える端子です。

そしてArduinoにはアナログ入力端子もあります。
こちらは入力端子なのでアナログ値を読み取るために使うことが出来ます。

さらにArduinにはアナログ値の出力が行えるアナログ出力(PWM出力)を使うことも出来ます。
アナログ出力?Arduinoボードを見てみてもそのような端子はありませんが・・・

Arduinoのアナログ入力やアナログ出力(PWM出力)に関してよくご質問頂くことがあるので簡単にまとめてみました。

アナログ入力とアナログ出力の違いって何?

アナログ入力端子について

まずArduinoのアナログ入力端子です。
Arduino Unoではこの部分ですね。
A0~A5までの計6本のアナログ入力端子が搭載されています。

MEMO
Arduino NanoやPro Miniなど表面実装(QFPタイプ)のチップが取り付けられたボードでは8本(A0~A7)のアナログ入力端子を使うことができるボードもあります

Arduinoのアナログ入力端子は10ビットのADC(アナログ-デジタル コンバータ)が搭載されています。
10ビットの分解能、つまり2の10乗なので1024段階の数値として入力されたアナログ値を扱うことが出来るようになっています。(ESP系のマイコンボードでは12ビットとなっています)

これにより、アナログ入力端子に入力された0~5Vの入力電圧を0~1023の数値に変換して使う事が出来るようになっています。
単位あたりで計算すると、5.0/1024=0.00488V(約4.9mV)となり分解能は1単位あたり4.9mVとなります。

これがArduinoのアナログ入力端子の仕様となり、ポテンショメータ(可変抵抗器)などを使ったアナログ入力値の計測に使うことが出来ます。

アナログ入力端子からの読み取りには、analogRead();関数が使われます

例えばアナログ入力端子A0に接続したポテンショメーターのアナログ値を読み取るにはこのようなスケッチになります。

アナログ入力端子にかかる電圧(0~5V)を0~1023までの数値として読み取り、扱うことが出来るようになります。

Arduinoのアナログ入力端子に関して詳しくはこちらの記事も合わせて読んで頂ければと思います。

【Arduino入門編⑥】可変抵抗を使いアナログ値を読み取る。アナログ値から実際に入力されている電圧を計算。アナログ入力端子の解説です!

簡単な応用例として、アナログ入力端子に接続した抵抗の値を計測する事も出来ます。
アナログ入力端子から得た数値を利用しオームの法則を使って抵抗値を計算するというものです。

Arduinoで超簡単な簡易抵抗測定器を作ってみる!

また今回の内容とは少し離れてしまいますが、Arduinoのアナログ入力端子はデジタル入出力端子として使うことも出来ます。
これはpinMode();関数で入力または出力に設定することにより可能となります。

【Arduino/ 小ネタ①】アナログ入力端子はデジタル入出力端子として使うことも出来ます!

アナログ出力(PWM出力)について

Arduinoにはアナログ入力以外にアナログ値を出力するアナログ出力機能(PWM出力)も搭載されています。

LEDの点灯の明るさを変えたりモーターの回転速度を変えたりと、デジタル出力のHIGHまたはLOWだけでは出来ないアナログ的な動作が可能となります。

Arduinoのアナログ出力(PWM出力)が出来る端子はボードにより変わってきますが、マイコンチップにATmega328Pを使っているボードではデジタルピンD3/D5/D6/D9/D10/D11で使うことが出来ます。
Arduino Unoでは[~]記号がプリントされた端子となります。

アナログ出力はanalogWrite();関数を使って行います。
この時指定するデューティー比は0から255までの範囲で指定します。

デューティー比に0を指定すると0Vの電圧が出力され、255を指定すると5Vが出力(3.3Vボードでは3.3Vが出力)されるということですね。

analogWrite(ピン番号, デューティー比);
(デューティー比:0~255)

デジタル出力ではHIGH/LOWの出力なので、例えばLEDでは点灯または消灯させることしか出来ませんが、アナログ出力(PWM出力)を使えば明るさを変えたりとアナログ的な動作をさせることが出来るようになります。

アナログ出力(PWM出力)ではこのような矩形波が出力されています。
HIGHとLOWの比率(デューティー比)により擬似的にデジタル信号をアナログ値として出力させるというものです。

先程のポテンショメーターから取得した値を使いLEDの明るさを調整できるようにしてみます。

analogRead()で取得した値(0~1023)を使いアナログ出力のデューティー比(0~255)になるように調整し(単純に4で割っています)、analogWrite()でLEDの明るさを調整して点灯させています。

Arduinoのアナログ出力はPWM信号を出力するものとなりますが、詳しくはこちらの記事も参考にして下さい!

【Arduino入門編③】PWM制御でLEDをゆっくり点灯&消灯させてみる!アナログ出力(PWM)の解説その①
MEMO
analogWrite();関数が実行されると上記のような矩形波(PWM信号)が出力されるようになります。
通常のデジタル入出力端子として使いたい場合はpinMode();関数で入力または出力に設定すれば、デジタル入出力端子として使えるということになります。

最後に!

しばしばご質問等を頂くことがあるArduinoのアナログ入力とアナログ出力の違いについて見ていきました。
詳細に関しては個別記事のリンク先ページを見て頂ければ理解しやすいかと思います。

Arduinoのアナログ入力はアナログ入力端子の電圧変化(0~5V)をArduinoのADC(デジタル-アナログコンバーター)を通して0~1023までの数値として取り込まれることや、アナログ出力(PWM出力)では指定するデューティー比が0~255までの範囲となる事はArduinoを使い始めたばかりの頃は少しごっちゃになりやすい項目だと思います。

このようなArduinoのちょっとした小ネタ的な内容のものはこちらのタグにまとめているので合わせてみ見て頂ければと思います。


【これから始めるArduino】ELEGOO Arduinoスターターキットを比較!多くの作例を試せる『Arduinoスターターキット』からArduinoに触れてみるのはオススメです!

コメントを残す