ArduinoでAD変換を使用する

センサなどの値が電圧で出力されたときに、出力された電圧値を読み取るのに必要なものがAD変換。

今回は、実際に電圧を読み取り、Arduinoからパソコンにデータを送りたいと思います。

実際にAD変換でセンサ値を読み取り、Arduinoからパソコンに出力してみましょう。

Arduino UNO R4 Minima

Arduino UNO R4 Minima

Arduino UNO R4 Minima starter kit

Arduino UNO R4 Minima starter kit


🔍 AD変換とは

A/D変換(Analog to Digital Conversion)は、アナログ信号をデジタル値に変換する技術です。

ArduinoのAD変換は10bitの分解能を持ち、基準電圧(今回は5V)に対して1024段階で値を取得できます。

(0から1023の整数値で表現される)

基準電圧はArduinoのArefピンを使用することで任意に決めることができますが、今回は標準で使用することができる5Vとします。

5V ÷ 1023 ≒ 0.00489 → 約4.89mV単位で電圧が計測できる。


🔧 ArduinoでAD変換をやってみる

実際にAD変換を使用してみましょう。

今回はボリューム(可変抵抗)で電圧を変化させ、その値をAD変換で読み取り、LEDの明るさ(PWM制御)とシリアル出力をします。

LEDに出力する信号はPWMとして、電圧によってPWMのduty比を変化させLEDの出力制御を行います。

  • AD変換入力:A0
  • PWM出力:D9

回路図と配線例は以下の通り:

AD変換を行うためのArduino回路図

AD変換回路図


💻 プログラムコード

#include <MsTimer2.h> // タイマー割り込みを使用

int ledPin = 9;       // LED接続ピン
int val = 0;
float volt;

// タイマー割り込み処理
void timer() {
  volt = val * 5.0 / 1023.0;
  Serial.println(volt);  // 電圧値を出力
}

void setup() {
  MsTimer2::set(100, timer);  // 100msごとにtimer()を実行
  MsTimer2::start();          // タイマー開始
  Serial.begin(9600);         // シリアル通信開始
  while (!Serial) {}
}

void loop() {
  val = analogRead(A0);            // AD変換(A0ピン)
  analogWrite(ledPin, val / 4);    // PWM出力(0〜255)
}

1行目で読み込んでいる”MsTIMER2.h"はタイマ割り込みを利用するために入れています。

電圧データをループ毎に送信していたら、送信データ量が多く、データ送信間隔がまばらになり定量的なデータではなくなってしまいます。

そのため、タイマ割り込みを利用して定量時間ごとにデータを送信させるようにします。

”MsTIMER2.h" を使用するためにはライブラリのインストールが必要になります。


📦 MsTimer2ライブラリのインストール

ライブラリマネージャから MsTimer2 を検索してインストールしてください:

  • スケッチ > ライブラリをインクルード > ライブラリを管理
Arduinoへのライブラリ導入画面

Arduinoへのライブラリ導入

Arduinoへのライブラリ導入画面

Arduinoへのライブラリ導入

インストールが環境すると”MsTIMER.h”のヘッダーファイルが使用できるようになります。


📘 解説

このプログラムでは100msごとにAD変換で出力された値を電圧値に変換し、シリアル通信で出力しています。

analogWrite関数はPWMを出力する関数です。

パルス幅の指定はデューティ比の数値となります。

デューティー比は0(常にオフ)から255(常にオン)までで指定することができます。

  • analogRead():0〜1023の範囲で電圧を読み取る
  • analogWrite():PWM信号を出力(0:OFF〜255:最大)
  • MsTimer2:指定時間ごとに処理(この例では100ms)

analogWrite 関数リファレンス


🎥 実際の動作確認

YouTube動画で動作の様子をご覧ください:

赤色の線がボリュームから出力される電圧で、黄色の線が電圧に対応してLEDに入力されるPWM信号です。

電圧が変化することによってPWMのパルス幅が変化し、LED光量が変化していることがわかります。

これで、AD変換で出力された値をArduino内で正常に処理することができ、結果をシリアル通信によってPCに送信できていることがわかりました。


✅ まとめ

  • AD変換とPWM出力、シリアル通信を組み合わせて電圧値の可視化ができました。
  • この仕組みは各種センサーにも応用可能です。

より高度な処理に向けた第一歩として、ぜひお試しください。

See you…