Arduinoでタクトスイッチを読む|プルアップ抵抗とINPUT_PULLUPのしくみ、チャタリング対策まで
Arduinoで押しボタン(タクトスイッチ)を使うときに必要な、4本足の内部のつながり、入力端子が浮く理由、プルアップ・プルダウン抵抗の考え方を紹介します。INPUT_PULLUPでの配線とスケッチ、押した瞬間の検出、チャタリング対策、長押しの判定、動かないときの確認順まで、USB給電で試せる範囲でまとめました。

LEDの点滅ができたら、次に試したくなるのが「ボタンを押したら何かが起きる」仕組みです。部品はタクトスイッチと呼ばれる小さな押しボタン一つで足りますが、つないでみると「押していないのに反応する」「1回押したのに何回も数える」「どの足を使えばいいか分からない」といったつまずきが次々に出てきます。
これらの多くは、入力端子の性質と、スイッチという部品のくせを知ると説明がつきます。ここでは、タクトスイッチの内部のつながりから、プルアップ抵抗が必要な理由、Arduinoの内部プルアップを使った配線とスケッチ、チャタリング対策、長押しの判定までを順に扱います。前提として、USB給電で動くArduino Unoのような5V系のボードを想定し、3.3V系のボードとの違いは都度補足します。ボードの基本的な使い方はArduinoのはじめの一歩を先に読んでおくと進めやすいでしょう。
タクトスイッチの構造:4本足のつながりを知る
2本ずつ内部でつながっている
電子工作でよく使われるタクトスイッチは、6mm角ほどの四角い本体に4本の足が付いたものです。足が4本あっても、スイッチとしての接点は1つだけです。4本のうち2本ずつが本体の中で常につながっていて、ボタンを押したときだけ、その2組がつながる仕組みになっています。

どの2本がつながっているかは、製品の資料に図で示されていることが多いものの、見た目だけでは判断しにくく、形の違う製品もあります。足の並びから思い込みで配線せず、次の方法で確かめるのが確実です。
テスターで確かめる
確実なのは、テスターの導通測定で調べることです。2本の足にテスト棒を当て、押していなくても音が鳴る組み合わせが「常につながっている組」、押したときだけ鳴る組み合わせが「スイッチになる組」です。テスターの使い方はテスター(マルチメーター)の基本で紹介しています。
テスターがない場合の簡単な方法は、対角の位置にある2本を使うことです。対角の2本は必ず別々の組に属しているので、どちらの向きに置いても、押したときだけつながる配線になります。入門のうちはこの使い方をしておくと、向きの間違いを避けられます。
ブレッドボードへの置き方
ブレッドボードに挿すときは、中央の溝をまたぐように置きます。溝をまたぐと、左右の足が別々の列に入るため、それぞれの足から配線を取り出しやすくなります。足が硬くて入りにくいときは、斜めにせず真上から均等に押し込みます。足を無理に曲げると、ブレッドボードの中で隣の列に触れることがあります。

入力端子が「浮く」とはどういうことか
何もつながない入力は値が決まらない
Arduinoの端子を入力として使うと、端子にかかっている電圧が一定より高ければHIGH、低ければLOWとして読み取れます。ここで問題になるのが、端子がどこにもつながっていない状態です。これを「浮いている(フローティング)」と呼びます。
入力端子は、ほとんど電流を流さずに電圧だけを見る仕組みになっています。そのため、どこにもつながっていない端子は、周りの配線から伝わるわずかな電気の影響や、手を近づけたときの変化だけで、HIGHとLOWの間を不規則に揺れ動きます。「ボタンを押していないのに反応する」「手を近づけただけで値が変わる」という現象の多くは、これが原因です。
スイッチだけをつないでも解決しない
例えば、ボタンの片側を5Vに、もう片側を入力端子につないだとします。押したときは入力端子が5Vにつながるので、HIGHが読めます。しかし押していないときは、入力端子がどこにもつながらない状態、つまり浮いた状態に戻ってしまいます。これでは押していないときの値が定まりません。
この問題を解くのが、次に説明するプルアップ抵抗とプルダウン抵抗です。押していないときにも、入力端子を抵抗を通してどちらかの電圧に「つないでおく」ことで、値を安定させます。

プルアップ抵抗とプルダウン抵抗のしくみ
抵抗で「ふだんの値」を決める
プルアップ抵抗は、入力端子と電源(5V)のあいだに入れる抵抗です。ボタンは入力端子とGNDのあいだに置きます。押していないときは、抵抗を通して入力端子が5Vへ引き上げられ(プルアップ)、HIGHが読めます。押すと入力端子がGNDに直接つながるので、LOWになります。
プルダウン抵抗はその逆で、入力端子とGNDのあいだに抵抗を入れ、ボタンを入力端子と5Vのあいだに置きます。押していないときはLOW、押すとHIGHです。どちらも、押していないときの値を抵抗で決めておくという考え方は同じです。
なぜ抵抗を入れるのか
抵抗の代わりに導線で直接5Vにつないでおくと、ボタンを押した瞬間に5VとGNDが導線だけでつながり、短絡(ショート)になります。大きな電流が流れ、ボードやUSBの電源を傷める原因になります。抵抗を入れておけば、押したときに流れる電流はオームの法則で決まる小さな値に抑えられます。
例えば10kΩのプルアップ抵抗なら、押したときに流れる電流は「5V÷10kΩ=0.5mA」です。LEDに流す電流と比べてもずっと小さく、抵抗が熱を持つこともありません。電圧・電流・抵抗の関係は、LEDに付ける抵抗の計算で詳しく扱っています。
抵抗値の目安
入門の作例では、プルアップやプルダウンに10kΩ前後がよく使われます。小さすぎると押したときの電流が増え、電池で動かす作品では無駄な消費になります。大きすぎると入力端子を引き上げる力が弱くなり、配線が長い場合などに雑音の影響を受けやすくなります。迷ったら10kΩを選び、配線が長くなったら少し小さくする、という考え方で十分です。カラーコードの読み方は抵抗のカラーコードとコンデンサーの表記を参考にしてください。
| 方式 | 抵抗の位置 | ボタンの位置 | 押していないとき | 押したとき |
|---|---|---|---|---|
| プルアップ | 入力と電源のあいだ | 入力とGNDのあいだ | HIGH | LOW |
| プルダウン | 入力とGNDのあいだ | 入力と電源のあいだ | LOW | HIGH |
| 内部プルアップ | ボードの中にある | 入力とGNDのあいだ | HIGH | LOW |
3.3V系のボードで外付けのプルアップ抵抗を使うときは、5Vではなく3.3Vの端子につないでください。入力端子に扱える電圧より高い電圧をかけると、ボードを傷めることがあります。端子ごとの電圧はボードの公式資料で確かめます。










