この記事の結論
- タクトスイッチは4本足だが、対角にある2本を選んで使えば必ずスイッチとして機能する、実質は2本足のスイッチと同じ部品
- 配線は内部プルアップ(INPUT_PULLUP)を使うのが最も簡単、抵抗器を1本も使わずに済む
- ボタンを押した瞬間に信号が細かく振動する「チャタリング」は、ソフトウェア(delay・時間計測)とハードウェア(コンデンサ)の両方で対策できる
- 入門段階ではソフトウェア対策だけで十分、確実性を求める工作ではハードウェア対策も併用する
LEDの次にArduino工作で扱うことが多いのが、ボタンを押して何かを起こす「入力」の工作です。
タクトスイッチ(プッシュボタン)自体は数十円の安価な部品ですが、いざ配線しようとすると「4本の足はどうつなぐのか」「プルアップって何か」「ボタンを押すと反応が2回、3回と誤検知される」など、初心者がつまずきやすいポイントがいくつもあります。
この記事では、タクトスイッチの基本構造から選び方、配線、そして最後に「チャタリング」という誤検知現象の対策までを順番に整理します。
タクトスイッチとは何か、押しボタンの基本構造
タクトスイッチは、電子工作キットにほぼ必ず入っている、四角い黒っぽい小さな押しボタン部品です。
見た目には4本の足がありますが、内部では、同じ辺から出ている隣り合う2本ずつ(①と②、③と④)が常に導通(つながった状態)しており、ボタンを押すとその2辺同士がつながる仕組みです。
この常に導通している同じ辺の2本(例:①と②、または③と④)をそのまま使ってしまうと、ボタンを押していなくても回路がつながったままになり、スイッチとして機能しません。
そのため実際の配線では、対角にある2本(例:①と④、または②と③)を選んで使うことで、押していないときは離れ、押したときだけつながる、本来のスイッチとして必ず機能させられます。
つまり、電気的な役割としては「2本足のスイッチ」と同じで、4本あるのはブレッドボードに挿したときに安定して固定するための脚だと考えれば理解しやすくなります。
ボタンを押すと2つのペアがつながり回路が閉じ、離すとつながりが切れて回路が開く、というのが基本の動作です。

選び方のポイント
サイズ・足の間隔
Arduino入門で最も扱いやすいのは、6mm角のタクトスイッチで、足の間隔がブレッドボードの穴の間隔とぴったり合うタイプです。
この6mm角タイプは、多くのスターターキットに標準で同梱されているため、初めて買う場合はまずこのサイズを基準に考えて問題ありません。
紹介した商品:タクトスイッチ(6mm角)
uxcell タクトスイッチ 6x6x7mm 4ピン 100個
ブレッドボードに挿せる6mm角の4ピンタイプ。100個入りなので、ボタンを何個使う工作でも足ります。
Amazon ¥907(100個入り) / 楽天市場 ¥955(100個入り)
※価格は記事執筆時点のものです。購入前に最新価格をご確認ください。
ブレッドボードそのものの構造については、ブレッドボードの使い方の記事を参照してください。
押下荷重の違い
タクトスイッチには「押下荷重」という、ボタンを押すのに必要な力の強さを示す値があり、一般的な製品は100g〜260g程度のラインナップになっています。
軽い力で反応してほしい工作なら100g前後、誤操作を防ぎたい工作(たとえば常時触れる場所に置く場合)なら少し重めのものを選ぶ、という考え方ができます。
入門用のスターターキットに入っている標準的なタクトスイッチは、160g〜260g程度のものが多く、特にこだわりがなければそのまま使って問題ありません。
キャップ付きタイプの活用
基板から直接ボタンを押すタイプに加えて、色付きのキャップ(帽子のような部品)を上から被せられるタイプも販売されています。
ケースに入れて作品として仕上げたい場合や、複数のボタンを色分けして役割を分かりやすくしたい場合に、キャップ付きタイプを検討する価値があります。
紹介した商品:タクトスイッチ用キャップ
BEHOSHI スイッチキャップ タクトスイッチ セット 6x6mm 4ピン DIP(420個)
色付きキャップとスイッチがセットになった詰め合わせ。ボタンを色分けして作品に仕上げたいときに使えます。
Amazon ¥1,399(セット) / 楽天市場 ¥2,070(セット)
※価格は記事執筆時点のものです。購入前に最新価格をご確認ください。
配線とコードの基本、プルアップ・プルダウン
タクトスイッチをデジタル入力ピンにつなぐとき、そのままでは「ボタンを押していないとき」の電圧が不安定(浮いた状態)になってしまいます。
これを防ぐために、押していないときの電圧を一定に固定する「プルアップ」または「プルダウン」という仕組みが必要になります。
内部プルアップ(INPUT_PULLUP)を使う配線が簡単
Arduinoには、外部に抵抗器を追加しなくても使える「内部プルアップ抵抗」という機能が内蔵されています。
setup()の中でpinMode(buttonPin, INPUT_PULLUP);と書くだけで、そのピンの電圧が常にHIGH(5V相当)に保たれます。
配線は、4本の足のうち対角にある2本を選び、片方をそのピンに、もう片方をGNDにつなぐだけで完了し、抵抗器を1本も使わずにスイッチの入力を読み取れるのが最大のメリットです。
この場合、ボタンを押すとピンの電圧がGND側に引っ張られてLOWになるため、digitalRead(buttonPin) == LOWが「押されている」状態を意味することに注意してください。

外部プルダウン抵抗を使う場合
「押したときにHIGHになってほしい」という直感的な動作にしたい場合は、外部にプルダウン抵抗(10kΩ程度が一般的)を追加する方法もあります。
ピンとGNDの間に10kΩの抵抗を挟み、ボタンの片方をそのピンに、もう片方を5Vにつなぐ配線にすると、押していないときはLOW、押したときはHIGHになります。
紹介した商品:よく使う値がそろった抵抗器セット
ELEGOO 17値1%抵抗器、0オーム〜1Mオーム(525本)
220Ω・1kΩ・10kΩなど、この記事で紹介した値を含む17種類がまとまった1%精度品です。
Amazon ¥1,500
※価格は記事執筆時点のものです。購入前に最新価格をご確認ください。
抵抗のカラーコードの読み方は、抵抗のカラーコードの読み方の記事で確認できます。
入門段階では、配線が1本減らせる内部プルアップ方式をまず使ってみて、必要に応じて外部プルダウン方式も試す、という順番がおすすめです。
チャタリング対策の基本
チャタリングとは何が起きているのか
ボタンを押した瞬間、金属の接点同士は一瞬でぴったりくっつくわけではなく、ごく短い時間(数ミリ秒程度)、接触と離れを何度も細かく繰り返しています。
この現象を「チャタリング」と呼び、Arduino側ではこの細かい振動を「1回だけ押した」ではなく「何十回も押された」と誤検知してしまうことがあります。
ソフトウェアで対策する(時間差によるデバウンス)
最も手軽な対策が、ボタンの状態が変化してから一定時間(数十ミリ秒)は再判定しない、という「デバウンス」の考え方です。

const int buttonPin = 2;
unsigned long lastDebounceTime = 0;
const unsigned long debounceDelay = 50; // 50ミリ秒
int lastReading = HIGH;
int buttonState = HIGH;
void setup() {
pinMode(buttonPin, INPUT_PULLUP);
Serial.begin(9600);
}
void loop() {
int reading = digitalRead(buttonPin);
if (reading != lastReading) {
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay) {
if (reading != buttonState) {
buttonState = reading;
if (buttonState == LOW) {
Serial.println("ボタンが押されました");
}
}
}
lastReading = reading;
}
状態が変化してから50ミリ秒待ち、その間に読み取り値が変わらなければ、その状態を正式な「buttonState」として確定させる、というのがこのコードの考え方です。
さらに、確定したbuttonStateが直前の値からLOWに切り替わった瞬間だけSerial.printlnを実行するようにしているため、ボタンを押し続けている間もメッセージが出続けることはなく、1回押すたびに1回だけ表示されます。
単純にdelay(50)を入れるだけの対策でも同様の効果はありますが、その間はloop()の他の処理が止まってしまうため、複数の部品を同時に扱う工作ではmillis()を使った時間計測の方法をおすすめします。
ハードウェアで対策する(コンデンサを使う)
ソフトウェアだけでなく、回路側にコンデンサを1つ追加することでもチャタリングを軽減できます。
スイッチの入力端子とGNDの間に0.01μF〜0.1μF程度の小容量コンデンサを挟むと、電圧が細かく振動する動きが物理的になだらかになります。
コンデンサの種類や容量表記の読み方については、別の記事で詳しく整理しています。
紹介した商品:セラミックコンデンサ 0.1μF(104)
PENGLIN セラミックコンデンサー ディスク型 100nF 0.1uF 104 DIP 100個
パスコンやチャタリング対策に使う0.1μFのセラミックコンデンサ。極性がないので向きを気にせず挿せます。
Amazon ¥599(100個入り) / 楽天市場 ¥850(100個入り)
※価格は記事執筆時点のものです。購入前に最新価格をご確認ください。
確実性を高めたい工作(カウンターや計測系など、誤検知が困る用途)では、ソフトウェアのデバウンスとハードウェアのコンデンサを両方併用するのがおすすめです。

まとめ:よく使う回路パターンの早見表
最後に、タクトスイッチの配線とチャタリング対策の組み合わせを表にまとめます。
| 場面 | 配線 | チャタリング対策 |
|---|---|---|
| とにかく手早く試したい | 内部プルアップ(抵抗器なし) | 特になし(誤検知が出たら追加対応) |
| 一般的な入力工作 | 内部プルアップ | ソフトウェアのデバウンス(50ms目安) |
| カウンター・計測系 | 内部プルアップ or 外部プルダウン | ソフトウェア+コンデンサの併用 |
取り組む前に、以下の点がなんとなくつかめているか確認してみてください。
- 同じ辺の2本は内部でつながっているので、対角の2本を選んで配線すればよいという見当がついている
- INPUT_PULLUPを使えば抵抗器なしで配線できることが分かっている
- チャタリングという現象の存在と、ソフトウェアでの基本的な対策方法がイメージできている
ボタン入力の基本がつかめたら、if文を使った条件分岐と組み合わせることで、さまざまな工作に応用できます。
if文の基本的な書き方については、別の記事で詳しく整理しています。
関連記事
- 関連記事:➔ ブレッドボードの使い方
- 関連記事:➔ 抵抗のカラーコードの読み方
- 関連記事:➔ テスター(マルチメーター)の使い方


コメント