部品 · 読了まで3分

ポテンショメーターとは?Arduinoでのアナログ読み取りと制御

ポテンショメーターとは何か、どう動くのか、Arduinoにどうつなぐのか。Bカーブ(直線)とAカーブ(対数)の違い、B10Kの表記、analogReadでの読み取り、LEDの明るさ調整の例を紹介します。

ポテンショメーターは、軸を回すと抵抗値が変わる可変抵抗です。ラジオの音量つまみ、照明の調光器、ゲームコントローラーのスティックは、どれもポテンショメーターです。Arduinoのプロジェクトでは、ユーザーから値を受け取るいちばん簡単な方法です。つまみを回すと、Arduinoが0〜1023の数値を読み取ります。

ポテンショメーター
回転式ポテンショメーター:両端の2本の足は固定抵抗の端、真ん中の足は動くワイパーです。

ポテンショメーターはどう動く?

内部には円弧状の抵抗体と、その上をすべるワイパーがあります。両端の2本の足の間の抵抗値は一定です(たとえば10 kΩ)。真ん中の足はワイパーにつながっていて、軸を回すとワイパーが抵抗体の上を移動し、両端の足との間の抵抗値が変わります。両端の足に5 VとGNDをつなぐと、真ん中の足から0〜5 Vの電圧が得られます。つまり、ポテンショメーターは調整できる分圧回路なのです。

ポテンショメーターの種類

種類見た目用途
回転式ポテンショメーター軸付き、3本足音量、明るさ、速度の調整
半固定抵抗(トリマー)小型、ドライバーで調整一度設定したら変えない値(LCDのコントラストなど)
スライド式ポテンショメーターまっすぐなレールの上をスライドミキサーやコントロールパネル
ジョイスティック2つのポテンショメーターが1つに2軸の制御(XとY)
B10KやB103という表記は、10 kΩの直線(Bカーブ)ポテンショメーターを意味します。値はつまみの回転に比例して変わります。Aの文字は対数(オーディオ用)のポテンショメーターを表します。Arduinoで測定や制御をするなら、直線(B)タイプを選んでください。

ポテンショメーターをArduinoにつなぐ

  1. 両端の足の一方を5Vに、もう一方をGNDにつなぎます(入れ替えると回す向きが逆になるだけです)。
  2. 真ん中の足をアナログ入力、たとえばA0につなぎます。
  3. PWMに対応した9番ピンに、220 Ωの抵抗を通してLEDをつなぎます。
  4. 下のコードを書き込み、シリアルモニタを開きます。つまみを回すと、値とLEDの明るさが変わります。
C++ (Arduino IDE)
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 / Nano10ビット0〜1023analogRead()
ESP3212ビット0〜4095analogRead()
Raspberry Pi Pico12ビット(16ビットに換算)0〜65535ADC.read_u16()
ESP32とPicoは3.3 Vで動作します。ポテンショメーターの端の足は5 Vではなく3.3 Vにつないでください。ESP32では、Wi-Fiがオンのとき、安定して読み取れるのはADC1のピン(GPIO 32〜39)だけです。

よくある失敗

  • 真ん中の足を5VやGNDに直接つなぐ:つまみを端まで回したときにショートし、ポテンショメーターが焼けることがあります。電源は必ず両端の足につなぎます。
  • 値がふらつく:読み取り値が数単位ほど揺れることがあります。複数回の読み取りを平均するか、小さな変化を無視してください。
  • 対数タイプを使う:Aタイプでは、値が回し始めはゆっくり、終わりのほうで急に変わります。直線的に制御するにはBタイプを使ってください。
  • デジタルピンにつなぐ:ポテンショメーターはアナログ値を出すので、A0〜A5のようなアナログ入力につなぐ必要があります。

ポテンショメーターでサーボの角度を調整する方法はサーボモーターとは?で、抵抗の基本は抵抗とは?で紹介しています。

よくある質問

Arduinoにはどの値のポテンショメーターを買えばいいですか?

10 kΩの直線タイプ(B10K)がいちばん一般的です。1 kΩ〜100 kΩの値でも動きますが、値が小さすぎると電流が多く流れ、大きすぎると読み取り値にノイズが乗りやすくなります。

ポテンショメーターの足はどう見分けますか?

軸を手前に向けて持ったとき、真ん中の足がワイパーです。両端の足の順番は、どちらに回すと値が増えるかを決めるだけです。

読み取り値がちょうど0や1023にならないのはなぜですか?

両端の接触抵抗や製造時の誤差によって、最小値や最大値が数単位ずれることがあります。コードに5〜10単位の余裕をもたせれば解決します。

ジョイスティックとポテンショメーターは同じものですか?

ジョイスティックには、直角に配置された2つのポテンショメーターと、たいていボタンが1つ入っています。それぞれの軸は別々のアナログ入力で読み取ります。

全プロジェクトを見る
ポテンショメーターでサーボモーターを操作
#36初級
プレミアム

ポテンショメーターでサーボモーターを操作

ポテンショメーターのつまみを回すと、サーボモーターのアームもそれに合わせて回ります。つまみの一方の端が0度、もう一方の端が半回転に対応します。Arduinoがつまみの位置を常に読み取り、サーボモーターが動きにすぐ反応します。ロボットアームや回転式カメラ台などのプロジェクトへの第一歩です。

4.6(37)
52
ESP32と可変抵抗でLEDの明るさを制御(アナログ→PWM)
#115中級
プレミアム

ESP32と可変抵抗でLEDの明るさを制御(アナログ→PWM)

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

4.5(19)
32
速度調整できる流れるLED
#7中級

速度調整できる流れるLED

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

4.6(72)
146
速度調整できるKnight Rider風LED
#8中級

速度調整できるKnight Rider風LED

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

4.5(60)
120
ジョイスティックでLEDを制御
#59中級
プレミアム

ジョイスティックでLEDを制御

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

4.7(50)
67
ESP32の調色ライト(可変抵抗3個 + RGB LED + OLED)
#138上級
プレミアム

ESP32の調色ライト(可変抵抗3個 + RGB LED + OLED)

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

4.7(6)
10
LCDディスプレイ付きデジタル電圧計
#56中級
プレミアム

LCDディスプレイ付きデジタル電圧計

自作の測定器で、電池や電源アダプターが出力する電圧を調べます。2つの抵抗で作る分圧回路が、高い電圧をボードで読み取れるレベルまで下げます。Arduinoが元の電圧を計算し、2行のLCDディスプレイにボルト単位で表示します。この回路では約55ボルトまでの直流電圧を測定できます。コンセントの商用電源には絶対に接続しないでください。

4.5(27)
36