myjlabアドベントカレンダー4日目。徹夜して頑張ります。
前提
pythonを使用します。ラズパイと人勧モジュールセンサを所持している。接続された状態である。接続に関してはこちらを参考にしてください
家電にたまについているようです。赤外線で熱源体を感知するセンサ。近くに生物が存在しているのか、いないのかという一次元の情報を取得できます。
装着されているねじを回して感知距離と検知時間(一度検知した情報を保持する時間)を調節できるのですが、細かい調節は不可能です。
感知されている時間を計測する
時間を計測するプログラムを書きます。
sensor.py
import RPi.GPIO as GPIO
import time
start_time = None
time_list = []
array = [0]*7
GPIO.setmode(GPIO.BCM)
GPIO.setup(18,GPIO.IN) #18はセンサと接続しているpin番号の例
def calculate(x, y):
delta_time = x - y
delta_second = delta_time.total_seconds()
return delta_second
try:
while True:
for i in range(7):
array[i] = GPIO.input(18)
time.sleep(1)
if array[0] == GPIO.HIGH or array[1] == GPIO.HIGH or array[2] == GPIO.HIGH or array[3] == GPIO.HIGH or array[4] == GPIO.HIGH or array[5] == GPIO.HIGH or array[6] == GPIO.HIGH:
if start_time is None:
start_time = datetime.now()
time.sleep(53)
else:
if start_time is None:
time.sleep(53)
else:
finish_time = datetime.now()
delta_second = calculate(finish_time, start_time)
time_list.append(delta_second)
start_time = None
time.sleep(53)
except KeyboardInterrupt:
print(time_list)
GPIO.cleanup()
ここでみそとなるのはこの部分です。
.py
for i in range(7):
array[i] = GPIO.input(18)
time.sleep(1)
if array[0] == GPIO.HIGH or array[1] == GPIO.HIGH or array[2] == GPIO.HIGH or array[3] == GPIO.HIGH or array[4] == GPIO.HIGH or array[5] == GPIO.HIGH or array[6] == GPIO.HIGH:
if start_time is None:
今回は7回繰り返して生物の有無を確認していますが、人勧モジュールセンサの感度には個体差があるので調整する必要があります。
##終わりに
安く手に入る人勧モジュールセンサですが、扱いには少し気を使ってあげる必要があります。取り扱いの説明書等も特にないので初めて使用する人の役に立てば幸いです。