必要部品一覧
リードスイッチについて
2枚の金属板が内部にあり、磁石を近づけることによりその2枚の板が重なり合い導通するという仕組み。 リードスイッチのリードとは木管楽器(クラリネットなど)で使用されているリードに金属板の形状が似ていることからそう呼ばれているらしい。プルアップ、プルダウン抵抗
スイッチを使用する際に小学生の時などは下記のようなスイッチ回路を使用したと思う。この回路が実際に動かないわけではない。
スイッチを押した場合にRBoardへ3.3Vが印加される。では、スイッチを押していない場合にはRBoardへどのような信号が印加されるのであろうか? 答えは不確定である。どこにも繋がっていない状態となるため何が印加されるのか実際に動かして計測してみなければわからない。
その様な状態を避けるためプルアップ、プルダウン抵抗を使用する。
プルアップ・プルダウンを使用した場合、ボタンを押していない場合でも何かしらの信号がRBoardへ印加されるようになる。
⇒プルアップの場合3.3V、プルダウンの場合0V(GND)
抵抗が無くてもつながっている状態になるのでは無いかと思うかもしれないが、抵抗を入れなければスイッチを押した際に3.3VとGNDでショートしてしまう。 また、プルアップとプルダウンではプルアップの方が使用される頻度が多い。理由の一つとしてプルダウンでは断線した場合に気ずきにくいという点がある。
以下のように赤線の部分で断線した場合にははじめに記した回路と同じ状態となってしまうため。
マイコンに内蔵されているプルアップ、プルダウン抵抗を使用することにより回路を省略することができます。
電子回路
内蔵プルアップ抵抗を使用したブレッドボード回路コネクタ付きコードを使用して接続してください。
プログラム
ドアが開いているときLEDを点灯させるプログラム
REED_SW = 18
pinMode(REED_SW, 1)
pinPull(REED_SW, 1)
while true
status = digitalRead(REED_SW)
# プルアップしているのでドアが閉じている場合にstatusは0となる
if(status == 1)
digitalWrite(0, 1)
else
digitalWrite(0, 0)
end
end
ピンにてプルアップ・ダウン抵抗を使用する場合はpinPull(ピン番号, 設定値)を使用する。
設定値は0が通常の状態、1など自然数の場合にpullup、-1など負の数の場合にはpulldownが設定される。ピンの状態を取得するためはdigitalRead(ピン番号)を使用する。
例題:
- 一定時間ドアが空いていた場合にLEDを点灯する。 閉じた場合はLEDを消灯。
REED_SW = 18
LED1 = 0
pinMode(REED_SW, 1)
pinPull(REED_SW, 1)
cnt = 0
while true
status = digitalRead(REED_SW)
if(status == 1)
if(cnt > 5)
digitalWrite(LED1, 1)
end
cnt += 1
else
digitalWrite(LED1, 0)
cnt = 0
end
sleep(1)
end