Arduinoで可変抵抗を読む|analogReadと分圧のしくみ、map()でLEDの明るさを変えるまで
つまみを回すと値が変わる可変抵抗(ボリューム)を、Arduinoのアナログ入力で読む方法を紹介します。3本の端子の役割とB10Kの表記、分圧で電圧が決まるしくみ、analogReadの0〜1023の意味から、配線とスケッチ、map()での変換、PWMでLEDの明るさを変える方法、値のふらつき対策まで、USB給電で試せる範囲でまとめました。

つまみを回すと音量が変わる、明るさが変わる。そんな操作を電子工作で作りたいときに使うのが、可変抵抗(ボリューム)です。ボタンのように「押した・押していない」の2つの状態ではなく、回した量を連続した値として読み取れるので、Arduinoで扱える入力の幅が一気に広がります。
ただ、可変抵抗は端子が3本あり、「どこに何をつなぐのか」「読んだ値の0〜1023は何を表しているのか」で手が止まりやすい部品でもあります。ここでは、可変抵抗の中のしくみから、分圧という考え方、Arduinoのアナログ入力が電圧を数値に変えるしくみ、配線とスケッチ、値の変換、LEDの明るさ調整、値のふらつき対策までを順に扱います。前提として、USB給電で動くArduino Unoのような5V系のボードを想定しています。ボードの準備やLEDの点滅がまだの場合は、Arduinoのはじめの一歩から進めると分かりやすいでしょう。
可変抵抗のしくみ:3本の端子の役割
抵抗の帯の上を接点が動く
可変抵抗の中には、馬蹄形(U字形)に曲がった抵抗の帯が入っています。帯の両端がそれぞれ外側の2本の端子につながり、つまみと一緒に回る接点(ワイパー)が帯の上を滑るように動きます。この接点につながっているのが真ん中の端子です。
両端の2本の端子のあいだの抵抗値は、つまみをどこに回しても変わりません。10kΩの可変抵抗なら、両端のあいだは常に約10kΩです。変わるのは、真ん中の端子から見た「左端までの抵抗」と「右端までの抵抗」の割合です。つまみを左に回し切ると、真ん中と左端のあいだはほぼ0Ω、真ん中と右端のあいだはほぼ10kΩになります。右に回すとその逆になり、二つの合計はいつも約10kΩのままです。
2本だけ使うこともできる
真ん中と片側の端子の2本だけを使うと、回すにつれて抵抗値が変わる「可変の抵抗」として使えます。LEDの電流を変えるといった使い方も考えられますが、回し切ると抵抗が0Ωに近づくため、電流が流れすぎないよう固定の抵抗を別に入れる必要があります。Arduinoで回した位置を読む用途では、3本すべてを使う「分圧」の使い方が基本で、この記事でもその使い方を中心にします。

テスターで確かめる
初めて使う可変抵抗は、テスターの抵抗測定で一度確かめておくと安心です。両端の2本を測ると表記どおりの値に近い数字が出て、回しても変わりません。真ん中と片側を測りながらつまみを回すと、数値が0Ω付近から表記の値付近まで連続して変わるはずです。途中で数値が飛んだり、ある位置で極端に変わったりするものは、接点の傷みが考えられます。測り方はテスター(マルチメーター)の基本で紹介しています。測るときは回路から外し、電源の入っていない状態で行います。
種類と表記の読み方:B10Kとカーブの違い
形の違い
電子工作で手に入る可変抵抗には、大きく分けて次の3つの形があります。
- 回転型(ボリューム):軸につまみを付けて回すもの。音響機器の音量つまみと同じ形で、手で操作する部分に使います。
- 半固定抵抗(トリマー):小さな四角い部品で、ドライバーで回して調整します。一度合わせたらあまり触らない、感度の調整などに向いています。
- スライド型:直線に動かすつまみのもの。動きが目で見て分かりやすく、操作盤のような作品に使われます。
仕組みはどれも同じで、抵抗の帯の上を接点が動くだけです。ブレッドボードで試すなら、足がブレッドボードの穴にそのまま入る半固定抵抗か、ブレッドボード向けの細い足を持つ回転型が手軽です。パネル取り付け用の大きな回転型は端子が太く平たいため、ブレッドボードには挿さらず、導線をはんだ付けして使うことになります。
「B10K」の読み方
可変抵抗の本体や袋には「B10K」のような表記があります。最後の「10K」は両端のあいだの抵抗値で、10kΩを表します。先頭のアルファベットは、つまみを回した量と抵抗値の変わり方の関係を示す「カーブ」です。
| 表記 | カーブ | 回した量と値の関係 | 向いている用途 |
|---|---|---|---|
| B | 直線(リニア) | 回した角度にほぼ比例して変わる | 位置や設定値を読む、Arduinoの入力 |
| A | 対数(オーディオ) | 回し始めはゆっくり、後半で大きく変わる | 音量の調整など、人の感覚に合わせる用途 |
| C | 逆対数 | Aとは逆の変わり方 | 特定の調整用途 |
Arduinoで「回した位置を数値として使う」なら、Bカーブを選びます。Aカーブでも動きますが、つまみの真ん中あたりで値が半分にならず、回した感覚と数値の対応が分かりにくくなります。なお、カーブの記号の割り当ては製品の地域や規格によって違う場合があるため、購入するときは商品の説明で「直線」「リニア」と書かれているかも確かめてください。
抵抗値の選び方
Arduinoの入力で位置を読むなら、10kΩ前後が扱いやすい値です。理由は二つあります。一つは、両端を5VとGNDにつなぐため、抵抗値が小さいと常に流れる電流が増えることです。10kΩなら流れる電流は「5V÷10kΩ=0.5mA」と小さく、USB給電で気にする必要はありません。もう一つは、抵抗値が大きすぎると、後で説明するアナログ入力の読み取りが不安定になりやすいことです。100kΩを超えるような値は、入門の段階では避けたほうが無難です。
分圧のしくみ:真ん中の電圧が変わる理由
抵抗が2つ並んでいると考える
3本の端子を使うとき、可変抵抗は「接点の位置で分かれた2つの抵抗が直列につながったもの」と考えると分かりやすくなります。上側(5V側)の抵抗をR1、下側(GND側)の抵抗をR2とすると、つまみを回すとR1とR2の割合が変わり、合計は一定のままです。
直列の抵抗に電圧をかけると、それぞれの抵抗には抵抗値の割合に応じて電圧が分かれてかかります。これを分圧と呼びます。真ん中の端子に出てくる電圧は、次の式で求められます。
出力電圧 = 電源電圧 × R2 ÷ (R1 + R2)
例えば10kΩの可変抵抗を真ん中まで回すと、R1もR2も5kΩで、出力電圧は「5V×5kΩ÷10kΩ=2.5V」です。GND側に4分の1回したところ(R2が2.5kΩ)なら「5V×2.5÷10=1.25V」になります。Bカーブの可変抵抗なら、回した角度にほぼ比例して、0Vから5Vまで電圧が連続して変わるわけです。
合計の抵抗値は答えに影響しない
この式で大事なのは、出力電圧を決めているのは「R1とR2の割合」だけで、合計の抵抗値ではないという点です。10kΩの可変抵抗でも50kΩの可変抵抗でも、真ん中まで回せば2.5Vです。抵抗値の選び方が電流や読み取りの安定性の問題で、出力電圧の範囲とは関係しないのはこのためです。
分圧は、可変抵抗以外でもよく使う考え方です。光の強さで抵抗値が変わるセンサーと固定の抵抗を直列にすれば、明るさに応じて変わる電圧が取り出せますし、2本の固定抵抗で電圧を決まった割合に下げることもできます。電圧・電流・抵抗の関係そのものは、LEDに付ける抵抗の計算で扱ったオームの法則と同じです。











