ポテンショメーターとは?Arduinoでのアナログ読み取りと制御
ポテンショメーターとは何か、どう動くのか、Arduinoにどうつなぐのか。Bカーブ(直線)とAカーブ(対数)の違い、B10Kの表記、analogReadでの読み取り、LEDの明るさ調整の例を紹介します。
ポテンショメーターは、軸を回すと抵抗値が変わる可変抵抗です。ラジオの音量つまみ、照明の調光器、ゲームコントローラーのスティックは、どれもポテンショメーターです。Arduinoのプロジェクトでは、ユーザーから値を受け取るいちばん簡単な方法です。つまみを回すと、Arduinoが0〜1023の数値を読み取ります。

ポテンショメーターはどう動く?
内部には円弧状の抵抗体と、その上をすべるワイパーがあります。両端の2本の足の間の抵抗値は一定です(たとえば10 kΩ)。真ん中の足はワイパーにつながっていて、軸を回すとワイパーが抵抗体の上を移動し、両端の足との間の抵抗値が変わります。両端の足に5 VとGNDをつなぐと、真ん中の足から0〜5 Vの電圧が得られます。つまり、ポテンショメーターは調整できる分圧回路なのです。
ポテンショメーターの種類
| 種類 | 見た目 | 用途 |
|---|---|---|
| 回転式ポテンショメーター | 軸付き、3本足 | 音量、明るさ、速度の調整 |
| 半固定抵抗(トリマー) | 小型、ドライバーで調整 | 一度設定したら変えない値(LCDのコントラストなど) |
| スライド式ポテンショメーター | まっすぐなレールの上をスライド | ミキサーやコントロールパネル |
| ジョイスティック | 2つのポテンショメーターが1つに | 2軸の制御(XとY) |
ポテンショメーターをArduinoにつなぐ
- 両端の足の一方を5Vに、もう一方をGNDにつなぎます(入れ替えると回す向きが逆になるだけです)。
- 真ん中の足をアナログ入力、たとえばA0につなぎます。
- PWMに対応した9番ピンに、220 Ωの抵抗を通してLEDをつなぎます。
- 下のコードを書き込み、シリアルモニタを開きます。つまみを回すと、値とLEDの明るさが変わります。
1const int POT_PIN = A0; // potansiyometre orta bacak / pot wiper
2const int LED_PIN = 9; // PWM pini / PWM pin
3
4void setup() {
5 pinMode(LED_PIN, OUTPUT); // LED çıkış / LED output
6 Serial.begin(9600); // seri monitör / serial monitor
7}
8
9void loop() {
10 int raw = analogRead(POT_PIN); // 0–1023 oku / read 0–1023
11 int brightness = map(raw, 0, 1023, 0, 255); // PWM'e çevir / scale to PWM
12 analogWrite(LED_PIN, brightness); // parlaklık / brightness
13 Serial.println(raw); // değeri yaz / print value
14 delay(20);
15}map()関数は、ある範囲の値を別の範囲に変換します。たとえば0〜1023の読み取り値を0〜255のPWM値や0〜180のサーボの角度に変えるといった使い方です。分圧回路の考え方を数値で確認するには、分圧回路計算ツールを使ってください。
ボードごとのアナログ読み取り範囲
| ボード | 分解能 | 範囲 | 関数 |
|---|---|---|---|
| Arduino Uno / Nano | 10ビット | 0〜1023 | analogRead() |
| ESP32 | 12ビット | 0〜4095 | analogRead() |
| Raspberry Pi Pico | 12ビット(16ビットに換算) | 0〜65535 | ADC.read_u16() |
よくある失敗
- 真ん中の足を5VやGNDに直接つなぐ:つまみを端まで回したときにショートし、ポテンショメーターが焼けることがあります。電源は必ず両端の足につなぎます。
- 値がふらつく:読み取り値が数単位ほど揺れることがあります。複数回の読み取りを平均するか、小さな変化を無視してください。
- 対数タイプを使う:Aタイプでは、値が回し始めはゆっくり、終わりのほうで急に変わります。直線的に制御するにはBタイプを使ってください。
- デジタルピンにつなぐ:ポテンショメーターはアナログ値を出すので、A0〜A5のようなアナログ入力につなぐ必要があります。
ポテンショメーターでサーボの角度を調整する方法はサーボモーターとは?で、抵抗の基本は抵抗とは?で紹介しています。
よくある質問
Arduinoにはどの値のポテンショメーターを買えばいいですか?
10 kΩの直線タイプ(B10K)がいちばん一般的です。1 kΩ〜100 kΩの値でも動きますが、値が小さすぎると電流が多く流れ、大きすぎると読み取り値にノイズが乗りやすくなります。
ポテンショメーターの足はどう見分けますか?
軸を手前に向けて持ったとき、真ん中の足がワイパーです。両端の足の順番は、どちらに回すと値が増えるかを決めるだけです。
読み取り値がちょうど0や1023にならないのはなぜですか?
両端の接触抵抗や製造時の誤差によって、最小値や最大値が数単位ずれることがあります。コードに5〜10単位の余裕をもたせれば解決します。
ジョイスティックとポテンショメーターは同じものですか?
ジョイスティックには、直角に配置された2つのポテンショメーターと、たいていボタンが1つ入っています。それぞれの軸は別々のアナログ入力で読み取ります。
この記事を読んだ後に作れるプロジェクト
全プロジェクトを見る
ポテンショメーターでサーボモーターを操作
ポテンショメーターのつまみを回すと、サーボモーターのアームもそれに合わせて回ります。つまみの一方の端が0度、もう一方の端が半回転に対応します。Arduinoがつまみの位置を常に読み取り、サーボモーターが動きにすぐ反応します。ロボットアームや回転式カメラ台などのプロジェクトへの第一歩です。

ESP32と可変抵抗でLEDの明るさを制御(アナログ→PWM)
可変抵抗を使ってLEDの明るさをアナログ操作で調整します。ESP32のADCピンで可変抵抗からの0-3.3Vの電圧を読み取り、PWM(パルス幅変調)信号に変換してLEDに出力します。可変抵抗を回すと、LEDが徐々に明るくなったり暗くなったりします。Arduino Core 3.0+ではanalogWrite()を直接使えます。ESP32-S2/S3ではADCの分解能を12ビットに固定します。

速度調整できる流れるLED
6個のLEDが順番に点滅し、光が端から端へ走るように見えます。ポテンショメーターのつまみを回すと、その速さがすぐに変わります。一方に回すと光が素早く進み、反対に回すと各LEDが1秒近く点灯します。つまみで動きの速さを調整する仕組みを目で確かめられます。

速度調整できるKnight Rider風LED
6個のLEDの上を光が端から端へ走り、折り返して戻ってきます。ポテンショメーターのつまみを回すと、その速さをすぐに調整できます。つまみを一方の端にすると光が飛ぶように進み、反対の端にするとゆっくり進みます。1つのつまみで動作中のアニメーションを操る楽しさを体験できます。

ジョイスティックでLEDを制御
ジョイスティックのスティックをいずれかの方向へいっぱいに倒すと、その方向のLEDが点灯します。右、左、上、下にそれぞれ異なる4色のLEDがあります。スティックを離すと中央に戻り、すべてのLEDが消灯します。ロボットカーや画面上のゲームを操作するための第一歩です。

ESP32の調色ライト(可変抵抗3個 + RGB LED + OLED)
ESP32と3個の可変抵抗で、好みの色を作れるスマート調色ライトです。赤・緑・青の可変抵抗を回すと、カソードコモンのRGB LEDの色がリアルタイムに変わります。SSD1306 OLEDディスプレイには、各色の0~255の値、色の強さを示すバー、#FF8040などのWeb用HEXカラーコードをリアルタイムで表示します。小さなプロ仕様のカラースタジオとして、RGBの色の仕組み、ADCによるアナログ値の読み取り、PWMによる明るさの制御、I2Cディスプレイの表示設計を1つのプロジェクトで学べます。

LCDディスプレイ付きデジタル電圧計
自作の測定器で、電池や電源アダプターが出力する電圧を調べます。2つの抵抗で作る分圧回路が、高い電圧をボードで読み取れるレベルまで下げます。Arduinoが元の電圧を計算し、2行のLCDディスプレイにボルト単位で表示します。この回路では約55ボルトまでの直流電圧を測定できます。コンセントの商用電源には絶対に接続しないでください。
ほかの記事
BlueGraysアプリ
この回路をスマホでステップごとに作る
回路図、コード、部品リストを1つの画面で確認できます。Arduino、ESP32、Picoのプロジェクトを200件以上用意しています。

