組み込み開発を、実機で体系的に学びませんか?
クミタテでは、ESP32・電子回路・IoT開発を学べる オンライン教材を公開しています。無料会員向け教材も利用できます。
無料会員登録して教材を見る Googleアカウントなら簡単に登録できます
micro:bit とジョイスティックを接続して遊んでいたところ、
ジョイスティックの「押し込みスイッチ(SW ピン)」がうまく動作しない問題に遭遇しました。
調べてみると、micro:bit の入力ピンのデフォルト設定が原因で、
思わぬ電圧が読み取られていたことが分かったので、仕組みと対処をまとめます。

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

ジョイスティック内部のスイッチ回路は、概ね次のような構成です。
SW ピンはこの抵抗とスイッチの間に接続され、
micro:bit の P0 ピン に入力されるようにしています。
micro:bit の P0 を アナログ入力に設定した場合、
と、期待通りの電圧が読み取れます。

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

この 1.9V が厄介で、 デジタル入力の判定基準(しきい値)に対して、
になってしまい、結果として 常に 0(LOW)扱いになってしまいます。
調べてみると、micro:bit の入力ピンは、
という仕様になっていました。
つまり、P0 をデジタル入力にした瞬間、
という仕組みです。
外付け 10kΩ(プルアップ)と micro:bit 内蔵のプルダウン抵抗(仮に 20kΩ とする)が直列になると、
実際には抵抗値の誤差などで 1.9V 前後になります。
この電圧はデジタル入力のしきい値を超えないため、
押していない状態でも HIGH と判定されないというわけです。

micro:bit の P0 を使うときは、
など、用途に応じて 明示的に設定する必要があります。
デフォルトのまま使うと、今回のように意図しない分圧が起きてしまいます。
今回のポイントをまとめると、
電子工作では、マイコン内部の回路設定が思わぬ動作に影響することがあります。
今回のようなトラブルは良い学びになるので、ぜひ参考にしてみてください。