見出し画像

【応用】AD変換で電圧を測ってみよう #10

今回は、Arduino UNO R4を使ってAD変換をする方法をご紹介します。

アナログ入力電圧をデジタル値に変換し、そのデジタル値から電圧に換算することで、入力電圧を推定できます。

少し小難しい話になってしまうのですが、できるだけ分かりやすく説明していますのでぜひご覧ください!

はじめに

この記事では、ELEGOOのArduino用電子LearningキットE3に付属する電子部品を使って解説しています。

【 注意 】
当Webサイトに掲載された内容によって生じた損害等の一切の責任を負いません。また生じた問題についてはご自身の責任において解決いただくことをあらかじめご承知おきください。詳しくは下記URLの免責事項をご確認願います。当サイトの免責事項に同意いただける場合に限り、当サイトの内容をご利用いただけます

https://note.com/shingo_shirogane/n/n3d5686bf512b

動画

ArduinoでAD変換する方法を、動画で分かりやすく解説しています。

必要なもの

1. マイコンボード

本記事では、Arduino UNO R4 Wi-Fiを使います。

画像

2. 電子部品

ELEGOOのArduino用電子LearningキットE3に入っている部品を使います。

  • 可変抵抗器(ポテンショメータ) × 1

  • ジャンパーワイヤー 適量

  • ブレッドボード × 1

画像

AD変換するための基礎知識

AD変換とは

画像

Arduino UNOは電源電圧の5Vまでをアナログ端子に入力できます。

画像

Arduinoは10ビット*の分解能力を持っており、上限5Vを1023分割した目盛りを使って、入力電圧を測ります。

*2の10乗=1024通り。なおUNO R4は設定で14ビットに変更可。

画像

例えば、3Vが入力されたとします。この3Vを先ほどの目盛りを使って測定すると、目盛り614個分と分かりました。これがAD変換した値です。

このようにアナログの電圧値を「目盛り何個分か」に変換することAD変換といいます。

電圧への換算

画像

入力電圧は、AD変換値(目盛り何個分か)に1目盛り当たりの電圧値を掛け算することで求められます。

10ビットの分解能力なので、上限の電源電圧5Vを1023分割して計算できます。1目盛り当たりの電圧は、

5 / 1023 = 0.00488…V

になります。なので、入力電圧は次のように求められます。

614 × 0.004887… = 3.000977…. ≒ 3.0 (V)

計算結果は3Vになり、入力電圧と合いました。ある程度の誤差がありますので、完全に一致はしません。今回はたまたまです。目安程度に考えましょう。

【注意】USB接続時のAD変換

実はArduinoをUSBケーブルをつないで動かしている場合、電源電圧が正確には5Vではなく4.6Vくらいになります

理由は、USBコネクタから供給される5Vはショットキーダイオードを通り、そこで約0.4Vが使われるからです。(電流によって変わる)

したがって、1目盛り当たりの電圧が少し変わります。具体的には、

4.6 / 1023 = 0.004496… (V)

となるので、電圧換算する際には注意が必要です。

実際やると分かるのですが、例えば3V入力だとAD変換値は665くらいを示します。5Vのまま計算してみると、3.25Vとなって入力電圧と全然合いません。

一方で電源電圧4.6Vとして、1目盛り当たりの電圧0.004496… (V)を掛ければ計算値は2.9902…になり、入力電圧3Vとつじつまが合います。

可変抵抗を使った入力電圧の調整

画像

入力電圧を幅広く変更するために、可変抵抗を使います。可変抵抗について知りたい方は、👇の記事をご覧ください。

画像

図のように接続すると、可変抵抗の抵抗値に応じて電圧が変化して、Arduino側に入力されます。

画像

アナログピンとGNDの間の抵抗値が大きいと、それだけ入力電圧も大きくなります。逆に抵抗値が小さいと、入力電圧も小さくなります。

ArduinoでAD変換するための回路

回路図

画像
いたってシンプルな回路になってます

配線の様子

画像

シンプルですが、配線が少し交差してます。間違えないように気を付けてください。

プログラミング

analogReadで値を読む

Arduinoのアナログピンの値を読みたい場合は、

analogRead(アナログピンの番号);

と記述します。例えばA3のピンを読みたい場合は、

analogRead(A3);

という感じに記述します。また値を変数に入れたい場合は、

x = analogRead(A3);

という感じです。

AD変換して電圧を測定するプログラム

👇がAD変換値と電圧換算値をシリアルモニタに表示するプログラムです。注意事項をよく読んだ上で、ご使用ください。

//当Webサイトに掲載された内容によって生じた損害等の一切の責任を負いません。
//当webサイトの免責事項に同意いただける場合に限り、プログラムをご利用いただけます。

#define ANALOG_PIN A3   //ピンの設定
#define VCC 4.6         //電圧の設定

//変数の宣言
int ad_value = 0;  
double voltage = 0;

void setup() {
  Serial.begin(9600);  //シリアル通信の準備
}

void loop() {
  ad_value = analogRead(ANALOG_PIN);  //アナログピンの値を読む
  voltage = (VCC / 1023) * ad_value; //電圧に換算

  //シリアルモニタに表示
  Serial.print("AD変換値:");
  Serial.print(ad_value); 
  Serial.print("  ");
  Serial.print("電圧換算:");
  Serial.println(voltage);

  delay(1000);  //1秒待機
}

プログラムの検証と書き込み

画像
👆実行するとこんな感じです

プログラムが完成したら、Arduinoをパソコンとつなぎ、検証→書き込みを行います。

  • 「✓マーク」を押す(検証)

  • 問題なければ、「→マーク」を押す(書き込み)

書き込みが終わり、上手く回路とプログラムが作れていれば、シリアルモニタに数値が表示されるはずです。

画像
時計回り・反時計回りに回してみてね(やさしく)

マイナスドライバーで抵抗値を変えると、モニタの表示値も変わるので面白いですよ!ぜひ遊んでみてください。

ここまでお疲れさまでした!

おわりに

いかがだったでしょうか。

今回は、Arduino UNO R4を使ったAD変換についてご紹介しました。

もしこの記事がお役に立てたら、"スキ"をいただけると励みになります!

最後まで読んでいただき、ありがとうございました。

いいなと思ったら応援しよう!

みんなの電気・電子回路 今後ともお役に立てるような記事を発信していきます!よろしければサポートいただけると嬉しいです!

ピックアップされています

はじめてのArduino UNO

  • 20本

コメント

コメントするには、 ログイン または 会員登録 をお願いします。
【応用】AD変換で電圧を測ってみよう #10|みんなの電気・電子回路
word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word

mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1