PARTSSWITCHES7 MIN READ
スイッチとタクトスイッチ4 本足のタクトスイッチの内部配線と、プルアップ、チャタリング
ボタン(タクトスイッチ)は「押している間だけつながる」だけの単純な部品ですが、足が 4 本あるせいで最初はどこにつなぐか迷います。中の配線を知れば、ブレッドボードに挿す向きも、GPIO で読む方法も決まります。
CONTENTSこの記事の目次+
01 — INSIDE
4 本足の中身
タクトスイッチの4本足と内部のつながり。対角線(1と4、または2と3)を選べば、向きを気にせず確実にボタンとして動作します。
- 4 本足だが、電気的には 2 端子のスイッチ。2 本ずつが最初から導通している
- 対角線の 2 本(1 と 4、または 2 と 3)は必ず別の組なので、ここを使えば向きを間違えない
- 隣り合う 2 本を使うと、組み合わせによっては「押さなくても常に ON」になる
- ブレッドボードでは中央の溝をまたいで挿す。4 本が別々の穴の組に入るので、内部の導通で困らない
02 — PULL-UP
GPIO で読む配線
プルアップ抵抗回路の仕組み。ボタン開放時は3.3V(HIGH)、ボタンを押すとGNDに流れて0V(LOW)を検出します。
- ESP32:
pinMode(pin, INPUT_PULLUP)。Raspberry Pi 5:gpiozero のButton(27)は最初からプルアップ - 押していない = HIGH(1)、押した = LOW(0)。「押すと 0」に慣れる
- 外付けの抵抗は不要。ただし配線が長いときやノイズが多いときは外付け 10kΩ を足す
03 — VARIETIES
いろいろなスイッチ
| 種類 | 動き | 用途 |
|---|---|---|
| タクトスイッチ | 押している間だけ ON(モーメンタリ) | 入力ボタン |
| スライド / トグルスイッチ | 切り替えた状態を保つ(オルタネート) | 電源、モード切り替え |
| マイクロスイッチ | レバーで ON/OFF。カチッと音がする | 位置検出、リミットスイッチ |
| リードスイッチ | 磁石が近づくと ON | ドアの開閉検出 |
| タッチセンサー | 触れると ON。ESP32 は内蔵のタッチ入力を持つ | ボタンのない入力 |
04 — CHATTERING
チャタリング
ボタンを押した瞬間、接点は数ミリ秒の間バウンドして ON/OFF を繰り返します。マイコンは速いので、1 回押しただけなのに「5 回押された」と数えることがあります。
1 回の押下で接点が細かくバウンドし、複数のエッジが発生します。人には見えませんがマイコンは全部数えてしまいます。
- ソフトで対策:状態が変わったら 20〜50ms 待ってから読み直す(→ ボタンで LED を操作する)
- ハードで対策:ボタンの両端に 0.1μF のコンデンサ(→ コンデンサの基本)
- ライブラリに任せる:M5Unified の
M5.BtnA.wasPressed()は対策済み。gpiozero はbounce_timeを指定できる
05 — WATCH OUT
注意点
4 本足の 2 本だけ使う
隣り合う 2 本を使うと「常に ON」になることがあります。対角線を使うか、テスターで確認します。
フローティング入力
ボタンを GPIO と GND につなぐだけでプルアップを忘れると、値が不定でランダムに反応します。
ESP32 の GPIO0 にボタンをつながない
起動時に押されているとダウンロードモードに入ります。GPIO3・45・46 も同様に避けます。
06 — CHECK YOURSELF
理解チェック
Q1押していないのに GPIO が 0 と 1 をランダムに行き来する。原因は?答えを見る
プルアップ(またはプルダウン)がない。INPUT_PULLUP を有効にする。
Q21 回押したのにカウントが 3 増える。名前と対策は?答えを見る
チャタリング。20〜50ms 待って読み直すか、ボタンに 0.1μF を並列に入れる。
