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

arduino-extra-edition-05-00 学習
スポンサーリンク

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

こんにちはomoroyaです。

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

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

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

 

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

 

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

 

アナログ出力に関してはこちらを確認ください。

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

 

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

 

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

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

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

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

 

スポンサーリンク

Arduino アナログ入力ピン

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

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

外観図左下にあります。

アナログ入力と書かれているところです。

A0、A1、A2、A3、A4、A5、A6がアナログ入力ピンになります。

arduino_uno_R3-appearance

 

アナログ入力ピンは名前の通り、アナログ値を読み取るためのピンです。

アナログって何?

wikipedia アナログ

アナログ(英: analog英語発音: [ˈænəˌlɔːg] ナローグ)は、連続した量(例えば時間)を他の連続した量(例えば角度)で表示すること。

単純に言えば、連続した量であったり、永遠と続く無理数の値といったところでしょうか?

例えば「時間」。

時間は永遠と続く連続した量ですよね。

 

また、乾電池の電圧は「1.5V」で表現されますよね。

しかし、実際には「1.49875・・・・・・」と永遠に続いているはずです。

 

ところがコンピュータの世界は「0」と「1」の2進数の世界で表現されています。

いわゆる「デジタル」ってやつですね。

このままでは、無理数で表現されている「アナログ値」は扱うことができません。

そこで、登場するのが「A/Dコンバータ」です。
※「Analog-to-Digital Converter」アナログーデジタル変換回路

wikipedia アナログ-デジタル変換回路

アナログ-デジタル変換回路(アナログ-デジタルへんかんかいろ、A/D変換回路)は、アナログ電気信号をデジタル電気信号に変換する電子回路である。A/DコンバーターADC(エーディーシー)、英語: Analog-to-digital converter)とも言う。

 

この「A/Dコンバータ」は世の中のあらゆるところに存在します。

なぜか?

それは人間が「アナログ」だからです。

「人間:アナログ」と「コンピュータ:デジタル」をつなぐ。

そためには「A/D」コンバータで変換して人間の動作をコンピュータにわかってもらう必要があるわけです。

最近はやりの自動運転も、センサから得られたアナログをデジタルに変換してコンピュータ処理しているわけです。

 

Arduino ADコンバータ

Arduinoには「10bit A/Dコンバータ」搭載されています。

この場合、分解能が10bitあるということです。

10bitの分解能って何?ということですが。

10bitで表現できる2進数は以下となります。

「0000000000」 ~ 「1111111111」

全部で1024種の組み合わせがあります。
※計算方法 2^10 = 1024

 

0から始まりますから、1023段階の分解能があるということですね。

Arduino UNOの電圧の「5V」に当てはめて考えてみます。

5÷1023=約4.89mVの分解能を持つということになります。

「電圧」、「2進数」、「10進数」の関係を表すと下表のようになります。

入力電圧[mV]2進数10進数
0.00 ~ 4.890000000000
4.89 ~ 9.780000000001
・・・・・・・・・
4990.22 ~ 4995.1111111111101022
4995.11 ~ 5000.0011111111111023

 

アナログ入力

アナログ入力は、外観図のアナログ入力0,1,2,3,4,5の端子が対応しています。
※A0、A1、A2、A3、A4、A5、A6

対象のピンに電子パーツを接続することで端子電圧を測定できます。

また、アナログ入力の読み取りには100マイクロ秒(0.0001秒)要します。

最大の読み取りレートは,1秒間に10000回(1万回)です.

 

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

analogRead(ピン番号)
ピン番号:読み取るピン番号を指定(0,1,2,3,4,5)
戻り値 :0~1023までの整数値

読み取った値は0から1023までの整数値に変換されます。

そのため電圧を求める場合は計算をさせてやる必要があります。

 

以下で計算します。※5Vの場合

戻り値から電圧の値を求める
戻り値 ÷ 1023 × 5[V]

 

例 アナログ入力3(A3:ピン番号3)の値を読み取り電圧値を計算

int val;
float volt;
val = analogRead( 3 );
volt =  (float)val / 1023.0f * 5.0f;

ここでfloatを利用しているのは計算のオーバーフローを避けるためです。

 

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

//sample code extra-lesson05 analogRead()
int analogPin =3; //アナログ入力ピンを3番に設定
int val = 0; //読み取り値の変数設定
float v_convert = 0.0f; //計算値の変数設定、オーバーフローしないようにflaot設定

void setup() {
Serial.begin(9600); //シリアル通信のデータ転送レートを9600bpsで指定。bpsはビット/秒。
}

void loop(){
val = analogRead( analogPin ); //ピンの値を読み取り
v_convert = (float)val / 1023.0f * 5.0f; //読み取った値を電圧に変換、floatで計算

Serial.print( "value / volt : " ); //表示をプリント
Serial.print( val ); //読み取り値を表示
Serial.print( " / " ); //表示をプリント
Serial.println( v_convert ); //計算した電圧値を表示、改行

delay(500); //500m秒(0.5秒)ごとに表示させるための遅延
}

 

ポテンショメータを使用すれば、analogRead()関数の使い方を簡単に理解することができます。

ポテンショメータとは「可変抵抗器」のことです。

可変抵抗器の出力の電圧を読み取ることをすれば実践できそうです。

 

Arduino 入門のLesson編にポテンショメータを使った実践の解説を記事にする予定です。

Lesson編の記事を更新しだい、ここにもリンクを貼りますのでしばらくお待ちください。

 

次回の番外編 06は「シリアル通信」もしくは「I2C」の解説を予定しています。

 

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

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

 

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

コメント

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