ラズパイ3×ドアセンサーパート2 ~リードセンサー編~
会議室利用状況を作ってみようとのことでラズパイとドアセンサーを使用ときのメモです。
脱コボラー+IoT初心者ですので、ご意見いただけると光栄です。
<パート1 ~人感センサー編~>
<パート2 ~リードセンサー編~>
<パート3 ~Lチカ編~>
各種パーツ
・ Raspberry Pi 3 Model B
・ ドアセンサー(リードセンサー)スイッチ
・ ジャンパーワイヤ(メス – メス)×2
・ USBアダプター(Micro-B)
回路作成
以下の通り回路を作成する
GND: 25番ピン
OUT: 22番ピン(GPIO25)
サンプルプログラム
プルアップ/ダウン
ドアセンサープログラムを実行して気付いたこと。
人感センサー編のプログラムをまねて実行した。
python:readSensor.py # coding: utf-8 import RPi.GPIO as GPIO import time from datetime import datetime GPIO.setmode(GPIO.BCM) # GPIO番号設定 GPIO.setup(25, GPIO.IN) # 入力設定 while True: nowTime = datetime.now().strftime('%Y/%m/%d %H:%M:%S') # 0 -> 閉じている, 1 -> 開いている print(nowTime+' ['+str(GPIO.input(25))+']') time.sleep(1)
sudo python readSensor.py
しかし、リードセンサーが開いている(離れている)時、出力結果は0,1の繰り返し。
GPIOにはプルアップ/ダウンの設定があるらしく、スイッチOFF時には電位が不定になってしまうらしい
前回の人感センサーではあまり差がなかったので気づかなかった。
ということで以下のように変更
python:title # coding: utf-8 import RPi.GPIO as GPIO import time from datetime import datetime GPIO.setmode(GPIO.BCM) # GPIO番号設定 #GPIO.setup(25, GPIO.IN) GPIO.setup(25, GPIO.IN, pull_up_down=GPIO.PUD_UP) # 入力設定 while True: nowTime = datetime.now().strftime('%Y/%m/%d %H:%M:%S') # 0 -> 閉じている, 1 -> 開いている print(nowTime+' ['+str(GPIO.input(25))+']') time.sleep(1)
次は問題なく出力されました!
所感
GPIOにそんな落とし穴があったとは!
確かにドアにはラッチとやらがついてるからそんなイメージなのかな。
次はリードセンサーと人感センサーを利用したLチカ!
こちらは入力値ではなく出力値が必要みたい!わくわく