micro:bit Makecode スイッチの状態取得

2021.10.29 Coskx Lab  

1 はじめに

micro:bitにスイッチを取り付けて,そのスイッチがON状態かOFF状態かを取得する方法を考えます。


スイッチは,ON(接続状態)またはOFF(切断状態)の状態を取り,様々な形のものがあります。ここでは,リミットスイッチを例にとります。

2 使用環境

3 端子の割り付け

スイッチを接続するmicro:bitの端子番号を決めます。
すでに他の用途に使われている端子を使うことはできません。
ここでは端子番号P1を使うことにします。
(特別な例として,ボタンAに割り当て済みのP5を使った例も紹介します)
 参考 micro:bit端子一覧

4 接続

小型リミットスイッチ OMRON D2MV-01L111-1C3は次のような内部構造をしています。
COMとNOの2つの端子を使うと単純な押しボタンスイッチのように使えます。ここではリミットスイッチを用いていますが,スイッチなら他のものでも使用できます。



次のように接続することを目指します。


端子に直接はんだ付けしてしまってもよいのですが,そのようなことはしたくないため,micro:bitの端子を引き出して扱いやすくなっているブレイクアウトボードなどを使います。細工が必要な場合もあります。

ブレイクアウトボードSparkfunを使った場合

ブレッドボードに挿して,ジャンパ線(スイッチにははんだ付けが必要)を用いて接続します。シルク印刷でP1と3V3(3.3Vの意味)と書いてあるところを捜します。
安全のためにはテスタで,ブレイクアウトボードのP1とmicro:bitのP1の間の導通をテストしておくと良いでしょう。


5 スイッチの状態取得プログラム

MakeCodeを使います。
無限ループ内で,スイッチがONのときはP1から1が取得され,OFFの時には0が取得されます。(取得された値をシリアルコンソールに表示しています。)

  スイッチの状態取得用プログラム



コピペする場合は,次のソースコードをPythonソースとして貼り付ければ完了です。

switchstatus = 0

def on_forever():
    global switchstatus
    switchstatus = pins.digital_read_pin(DigitalPin.P1)
    serial.write_line("" + str(switchstatus))
basic.forever(on_forever)

6 実行の様子

スイッチがONのとき1が,OFFのときに0がコンソールに表示されます。

7 スイッチの状態取得のしくみ

スイッチはONとOFFの2つの状態をとりますが,micro:bitの端子P1は,3.3Vを検出したら1を0Vを検出したら0をプログラム上で取得します。
そのため,スイッチのON-OFFを3.3V-0Vに変換する仕組みが必要となります。
ここで,次のようなスイッチと抵抗を用いた回路を考えます。
この回路ではスイッチがOFFのとき,点Aでは0Vが観察され,ONのときには点Aでは3.3Vが観察されます。



この回路を使えば,スイッチのON-OFFを3.3V-0Vに変換することができます。
micro:bit端子P1では,内部に抵抗(pull down抵抗)12kΩが配置されています。そのため,抵抗のことは考えずにスイッチだけを取り付ければ良いようになっています。



重要 P1と同じpull down抵抗が配置されている端子は,P0,P2,P8,P12,P13,P14,P15,P16です。

8 まとめ

micro:bitの端子P1にスイッチを取り付けて,スイッチを状態(ONかOFF)を取得しました。


補足 ボタンA(ボタンB)

micro:bitのボタンAは端子P5につながっていて,端子P5は通常は別の用途には使わないことになっています。ボタンAとP5は次のように配置されています。(pull up抵抗10kΩが配置されています。)



ここで次のスイッチと抵抗の回路を考えてみます。この回路では,スイッチがOFFのときに点Bでは3.3Vが観察され,ONのときには点Bでは0Vが観察されます。



そうすると,

では,ボタンAが押されたとき(スイッチがON)のとき0,押されていないときに1が読み取れていることになります。
また,ボタンAを押しているときはP5には0Vが,押していないときには3.3Vが観察されます。
そこで,ボタンAのスイッチと並列にスイッチを取り付けるることにします。



スイッチはボタンAの代わりに使うことができます。



このプログラムは,ボタンAが押されていないときはコンソールに1を表示し,押されているときは0を表示します。また,外部スイッチがOFFのときはコンソールに1を表示し,押されているときは0を表示します。
ボタンAを押しても,外部スイッチをONにしても「ボタンAが押されたとき」が起動します。
ボタンBと端子P11を使っても同様の動作が得られます。