micro:bit とジョイスティックを接続したらスイッチ入力がうまく読めない?原因と仕組みを解説
micro:bit とジョイスティックを接続して遊んでいたところ、
ジョイスティックの「押し込みスイッチ(SW ピン)」がうまく動作しない問題に遭遇しました。
調べてみると、micro:bit の入力ピンのデフォルト設定が原因で、
思わぬ電圧が読み取られていたことが分かったので、仕組みと対処をまとめます。
1. ジョイスティックの構造と SW ピン

一般的なジョイスティックは、
- X 軸(左右)
- Y 軸(上下)
- 押し込みスイッチ(SW)
の 3 種類の入力を持っています。
今回問題になったのは、この 押し込みスイッチ(SW ピン) です。
2. ジョイスティックのスイッチ回路

ジョイスティック内部のスイッチ回路は、概ね次のような構成です。
- 3.3V と GND の間に 4.8kΩ の抵抗
- その途中からスイッチへ配線
- 自分で追加した 10kΩ のプルアップ抵抗(R1)
- スイッチを押すと GND に落ちる構造
SW ピンはこの抵抗とスイッチの間に接続され、
micro:bit の P0 ピン に入力されるようにしています。
3. アナログ読み取りでは正常に動作する
micro:bit の P0 を アナログ入力に設定した場合、
- 押していない → 3.3V
- 押した → 0V
と、期待通りの電圧が読み取れます。
4. デジタル読み取りにすると電圧が 1.9V になる謎

ところが、P0 を デジタル入力にすると挙動が変わります。
- 押していない → 1.9V
- 押した → 0V
本来 3.3V が来るはずなのに、なぜか 1.9V に低下してしまう。

この 1.9V が厄介で、 デジタル入力の判定基準(しきい値)に対して、
- HIGH にも LOW にも判定されない中途半端な電圧
になってしまい、結果として 常に 0(LOW)扱いになってしまいます。
5. 原因:micro:bit のデジタル入力はデフォルトで「プルダウン」になる
調べてみると、micro:bit の入力ピンは、
- アナログ入力 → プルアップ/プルダウンなし
- デジタル入力 → デフォルトでプルダウン抵抗が有効
という仕様になっていました。
つまり、P0 をデジタル入力にした瞬間、
- 内蔵プルダウン抵抗(数十 kΩ)が GND に接続される
- 外付けの 10kΩ プルアップと 分圧が発生
- 結果として 1.9V になる
という仕組みです。
6. 分圧で 1.9V になる理由
外付け 10kΩ(プルアップ)と micro:bit 内蔵のプルダウン抵抗(仮に 20kΩ とする)が直列になると、
実際には抵抗値の誤差などで 1.9V 前後になります。
この電圧はデジタル入力のしきい値を超えないため、
押していない状態でも HIGH と判定されないというわけです。
7. 解決策:入力ピンの設定を明示的に変更する

micro:bit の P0 を使うときは、
- プルアップに設定する
- プルダウンを無効にする
- アナログ入力として扱う
など、用途に応じて 明示的に設定する必要があります。
デフォルトのまま使うと、今回のように意図しない分圧が起きてしまいます。
8. まとめ:内部回路を理解して設計しよう
今回のポイントをまとめると、
- micro:bit のデジタル入力はデフォルトで プルダウン有効
- 外付けプルアップと内蔵プルダウンが 分圧を起こす
- その結果、SW ピンが 1.9V の中途半端な電圧になる
- 入力ピンの設定(プルアップ/プルダウン)は必ず確認する
電子工作では、マイコン内部の回路設定が思わぬ動作に影響することがあります。
今回のようなトラブルは良い学びになるので、ぜひ参考にしてみてください。
