ArduinoでAD変換を使用する
センサなどの値が電圧で出力されたときに、出力された電圧値を読み取るのに必要なものがAD変換。
今回は、実際に電圧を読み取り、Arduinoからパソコンにデータを送りたいと思います。
実際にAD変換でセンサ値を読み取り、Arduinoからパソコンに出力してみましょう。
🔍 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変換回路図
💻 プログラムコード
#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へのライブラリ導入
インストールが環境すると”MsTIMER.h”のヘッダーファイルが使用できるようになります。
📘 解説
このプログラムでは100msごとにAD変換で出力された値を電圧値に変換し、シリアル通信で出力しています。
analogWrite関数はPWMを出力する関数です。
パルス幅の指定はデューティ比の数値となります。
デューティー比は0(常にオフ)から255(常にオン)までで指定することができます。
analogRead()
:0〜1023の範囲で電圧を読み取るanalogWrite()
:PWM信号を出力(0:OFF〜255:最大)MsTimer2
:指定時間ごとに処理(この例では100ms)
🎥 実際の動作確認
YouTube動画で動作の様子をご覧ください:
赤色の線がボリュームから出力される電圧で、黄色の線が電圧に対応してLEDに入力されるPWM信号です。
電圧が変化することによってPWMのパルス幅が変化し、LED光量が変化していることがわかります。
これで、AD変換で出力された値をArduino内で正常に処理することができ、結果をシリアル通信によってPCに送信できていることがわかりました。
✅ まとめ
- AD変換とPWM出力、シリアル通信を組み合わせて電圧値の可視化ができました。
- この仕組みは各種センサーにも応用可能です。
より高度な処理に向けた第一歩として、ぜひお試しください。
See you…