Arduino可変抵抗の使い方|配線とanalogRead入門

プログラミング・電子工作






Arduinoで可変抵抗を読む|配線と値の取得







入門 / Arduino

Arduinoで可変抵抗を読む|配線と値の取得を徹底解説

可変抵抗(ポテンショメータ)は、つまみを回すと抵抗値が連続的に変化する部品です。ArduinoのanalogRead()と組み合わせれば、回転角度を数値として扱えます。本記事では、配線の基本からコードの書き方までを解説します。さらに、取得した値を用途に合わせて変換する方法まで、初心者の方に向けて順を追って紹介します。

YOFUKASI LAB編集部
公開日:2026年8月27日
読了目安:12分

執筆・実機検証:YOFUKASI LAB運営者

理学療法士/Arduino・Pythonを使った医療機器制作・学会発表経験あり

Chapter 01 / Basics

01可変抵抗とは|analogReadとの関係

可変抵抗(ポテンショメータ)の仕組み

可変抵抗は、つまみを回すことで内部の抵抗値が変化する部品です。ボリュームやポテンショメータとも呼ばれます。オーディオ機器の音量つまみを思い浮かべると、イメージしやすいでしょう。この抵抗値の変化を利用すると、回転角度に応じて電圧を連続的に変化させられます。

なぜアナログピンで読み取るのか

タクトスイッチのようなデジタル入力は、HIGHかLOWかの2値しか扱えません。しかし、可変抵抗が出力する電圧は違います。0Vから5Vまで連続的に変化するのです。この連続的な値をコードで扱うには工夫が必要です。digitalRead()ではなくanalogRead()を使う必要があります。ArduinoのA0〜A5のようなアナログ入力ピンは、このために用意されています。連続的な電圧を数値に変換してくれるのです。

編集部想定シナリオ

タクトスイッチの読み取りを一通り学んだSさんは、次のテーマに興味を持った。「押す・押さない」ではなく「どれくらい回したか」を知りたくなったのだ。そこで可変抵抗の存在を知り、analogReadで値を取得してみた。すると、つまみの角度に応じて0から1023まで滑らかに変化する数値を得られた。デジタル入力とアナログ入力の違いを実感できる、良い題材です。



Chapter 02 / Concept

02analogReadの基礎知識

ArduinoのanalogReadで0Vから5Vを0から1023の値として読み取る仕組み

0〜1023という数値の意味

Arduino Unoには「ADC(アナログ-デジタル変換回路)」が内蔵されています。これは電圧を数値に変換する回路です。Arduino公式のanalogRead()リファレンスによると、このADCは10ビットの分解能を持ちます。10ビットとは、2の10乗、つまり1024段階という意味です。0Vのときは0、5Vのときは1023という数値が得られます。その間の電圧は、比例した数値として返されます。

電圧との対応関係

公式リファレンスでは、電圧の刻み幅も説明されています。5V÷1024、つまり約4.9mV刻みで電圧を読み取れるとのことです。これはかなり細かい精度です。人の手でつまみを回す用途であれば、十分すぎるほどの分解能だと言えるでしょう。

つまみの位置 入力電圧の目安 analogRead()の値
最小(片方の端) 0V 0
中間 約2.5V 約512
最大(反対側の端) 5V 1023

※どちら側が最小・最大になるかは、配線のつなぎ方によって変わります。

Chapter 03 / Wiring

03配線方法:Arduinoと可変抵抗

Arduino Unoと可変抵抗の配線図|中央ピンをA0、両端を5VとGNDに接続

3本足の接続

一般的な可変抵抗には、3本の足があります。両端の2本は電源用です。それぞれ5VとGNDにつなぎます。中央の1本は「ワイパー」と呼ばれます。ここが、回転角度に応じて変化する電圧の出力です。このワイパーを、ArduinoのアナログピンであるA0などにつなぎます。

[画像挿入位置]Arduino Unoと可変抵抗の配線図(両端の5V・GND、中央のワイパーをA0につなぐ様子がわかるもの)

両端の接続順序について

両端のどちらを5V、どちらをGNDにつなぐかは、動作上どちらでも構いません。ただし、つなぎ方によって結果が変わります。つまみを右に回すと値が増えるか減るか、という対応が変わるのです。実機で動かしながら、自分の配線での対応を確認しておくとよいでしょう。

データ・編集部見解

編集部の見解として、可変抵抗の配線で迷ったら1つだけ覚えておいてください。「両端は電源、真ん中は出力」という役割です。3本足のうち、どれが電源でどれが出力かさえ間違えなければ、大きなトラブルにはつながりません。



Chapter 04 / Code

04基本のコード|analogReadで値を読み取る

最小構成のコード

配線ができたら、コードで値を読み取ってみましょう。analogRead()にピン番号を渡すだけです。それだけで、0〜1023の値を取得できます。

// 可変抵抗の値をシリアルモニタに表示するコード
const int potPin = A0;

void setup() {
  Serial.begin(9600);
}

void loop() {
  int value = analogRead(potPin);
  Serial.println(value);
  delay(100);
}

シリアルモニタで値を確認する

このコードを書き込んだら、シリアルモニタを開いてみましょう。つまみを回すと、0から1023の間で数値が滑らかに変化する様子を確認できます。値がまったく変化しない場合は、配線を見直してください。多くの場合、原因は決まっています。ワイパー(中央のピン)ではなく、電源側のピンをアナログ入力につないでいるのです。

Chapter 05 / Conversion

05値を変換する|map()関数の使い方

Arduinoのmap関数でanalogReadの0から1023をLEDやサーボ用の値に変換する方法

map()の基本構文

analogRead()が返す0〜1023という範囲は、そのまま使うには不便な場合があります。例えば、LEDの明るさを指定するanalogWrite()は0〜255の範囲を必要とします。このようなときに使うのがmap()関数です。Arduino公式のmap()リファレンスによると、この関数の働きは明快です。ある範囲の数値を、別の範囲の数値に変換してくれます。

// map()の基本的な使い方
int value = analogRead(A0);        // 0〜1023の範囲で取得
int brightness = map(value, 0, 1023, 0, 255); // 0〜255の範囲に変換

変換先の範囲は自由に指定できる

変換先の範囲は、用途に応じて自由に指定できます。例えば、サーボモーターの角度に変換したいとしましょう。0〜180度の範囲であれば、次のように書きます。

int value = analogRead(A0);
int angle = map(value, 0, 1023, 0, 180); // サーボの角度用に変換

サーボモーターの制御方法については、下記の記事で詳しく解説しています。

整数計算による誤差に注意

公式リファレンスには注意点も書かれています。map()は整数の計算を行うということです。そのため、小数点以下は切り捨てられます。電圧のようにミリボルト単位の精密さが必要な場合もあるでしょう。そのときは、map()に頼らず自分で計算式を書くことも検討してください。



Chapter 06 / Practice

06実践例:可変抵抗でLEDの明るさを調整する

Arduinoで可変抵抗を回してLEDの明るさを調整する仕組みとトラブル対処

3つの関数を組み合わせる

ここまでの内容を組み合わせてみましょう。可変抵抗を回してLEDの明るさをリアルタイムに調整するプログラムが作れます。流れは3ステップです。analogRead()で値を読み取ります。map()で変換します。そしてanalogWrite()でLEDに出力します。

実装コード

// 可変抵抗でLEDの明るさを調整するコード
const int potPin = A0;
const int ledPin = 9; // PWM対応ピン(~マーク付き)を使用

void setup() {
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  int value = analogRead(potPin);          // 0〜1023の範囲で読み取る
  int brightness = map(value, 0, 1023, 0, 255); // 0〜255の範囲に変換

  analogWrite(ledPin, brightness); // LEDの明るさに反映

  Serial.println(brightness); // 確認用に値を表示
  delay(50);
}

この構成は、Arduinoの入門プロジェクトとして広く使われている定番の組み合わせです。LEDの配線や抵抗値の考え方については、下記の記事も参考にしてください。



Chapter 07 / Troubleshooting

07よくあるトラブルと対処法

症状別の対処早見表

症状 主な原因 対処法
値がまったく変化しない 電源側のピンをアナログ入力につないでいる 中央のワイパーをアナログ入力ピンにつなぎ直す(3章参照)
値が常に0または1023で固定 ワイパーが5VまたはGNDに接触したまま 配線とはんだ付け、接触状態を再確認する
map()で変換した値がおかしい 変換元・変換先の範囲指定を間違えている map()の引数の順序(元の範囲→変換先の範囲)を見直す
LEDの明るさが変化しない PWM非対応のピンにLEDをつないでいる ~マーク付きのPWM対応ピンに配線し直す
値が細かくふらつく 可変抵抗の特性やノイズによる微小な変動 複数回の平均を取るなど、数値の安定化処理を加える(FAQ参照)

原因を素早く切り分けるコツ

編集部想定シナリオ

Tさんは可変抵抗を配線したが、シリアルモニタの値がまったく変化しなかった。配線図を見直しても、間違いは見当たらないように思えた。そこで、3本のピンのどれをどこにつないだか、1本ずつ指でなぞって確認してみた。すると、原因がわかった。中央のワイパーではなく、電源側のピンをアナログ入力につないでいたのだ。配線し直すと、値は正しく変化するようになった。

Chapter 08 / FAQ

08よくある質問

基本のQ&A

Q.analogReadの値が0や1023から動かないことがあります。原因は何ですか?
A.多くの場合、中央ピン(ワイパー)ではなく、両端のどちらかのピンをアナログ入力につないでいることが原因です。両端のピンは5VまたはGNDに固定されているため、回転させても値が変わりません。中央ピンをアナログ入力につないでいるか、配線を確認してください。

Q.可変抵抗は3本足のどれをどこにつなげばいいですか?
A.両端の2本を5VとGNDに、中央の1本(ワイパー)をArduinoのアナログ入力ピンにつなぎます。両端をどちらに接続するかによって、回転方向と値の増減の対応が変わりますが、動作自体に問題はありません。

応用のQ&A

Q.analogReadの値をそのままLEDの明るさに使えますか?
A.そのままでは使えません。analogRead()は0〜1023の範囲を返しますが、analogWrite()でLEDの明るさを指定する際は0〜255の範囲が必要です。map()関数を使って、0〜1023の値を0〜255の範囲に変換してから渡してください。

Q.値がふらついて安定しません。どうすればいいですか?
A.可変抵抗自体の特性や、配線の接触不良、電源のノイズなどが原因で、数値が数ポイント程度ふらつくことがあります。複数回の読み取り値を平均する、あるいは変化量が一定以下なら値を更新しない、といった処理を加えると安定しやすくなります。

関連記事・参考資料

基礎を学べる記事

  1. YOFUKASI LAB「analogRead・analogWriteの使い方」2026年, https://yofukasi-lab-wp.com/2026/07/30/analog-read-analogwrite/
  2. YOFUKASI LAB「Arduinoに必要な工具・部品リスト」2026年, https://yofukasi-lab-wp.com/2026/08/22/arduino-tools-parts/
  3. YOFUKASI LAB「Arduinoでタクトスイッチ入力|配線とコード」2026年, https://yofukasi-lab-wp.com/2026/08/27/arduino-tact-switch-input/

応用・トラブルシューティング記事

  1. YOFUKASI LAB「Arduinoでサーボモーターを制御する方法」2026年, https://yofukasi-lab-wp.com/2026/08/18/servo/
  2. YOFUKASI LAB「Arduinoのシリアルモニタ活用術」2026年, https://yofukasi-lab-wp.com/2026/08/22/arduino-serial-monitor-debugging/
  3. YOFUKASI LAB「Arduinoのコンパイルエラー一覧」2026年, https://yofukasi-lab-wp.com/2026/07/30/error/

参考資料(外部・一次情報)

  1. Arduino Documentation「analogRead()」, https://docs.arduino.cc/language-reference/en/functions/analog-io/analogRead/
  2. Arduino Documentation「Read Analog Voltage」, https://www.arduino.cc/en/Tutorial/ReadAnalogVoltage
  3. Arduino Documentation「map()」, https://docs.arduino.cc/language-reference/en/functions/math/map/

※本記事は個人の学習・電子工作用途を対象にしています。実際の製品や医療機器へ組み込む場合は、電気安全・製品規格の専門家に別途ご相談ください。


関連記事

特集記事

コメント

この記事へのコメントはありません。

TOP
CLOSE