search
LoginSignup
1
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

MYJLab Advent Calendar 2020 Day 5

posted at

updated at

人勧センサが感知している時間を正確に計測したい

myjlabアドベントカレンダー4日目。徹夜して頑張ります。

前提

pythonを使用します。ラズパイと人勧モジュールセンサを所持している。接続された状態である。接続に関してはこちらを参考にしてください

人勧モジュールセンサとは

image.png

家電にたまについているようです。赤外線で熱源体を感知するセンサ。近くに生物が存在しているのか、いないのかという一次元の情報を取得できます。

装着されているねじを回して感知距離と検知時間(一度検知した情報を保持する時間)を調節できるのですが、細かい調節は不可能です。

感知されている時間を計測する

時間を計測するプログラムを書きます。

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()

ここでみそとなるのはこの部分です。

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回繰り返して生物の有無を確認していますが、人勧モジュールセンサの感度には個体差があるので調整する必要があります。

終わりに

安く手に入る人勧モジュールセンサですが、扱いには少し気を使ってあげる必要があります。取り扱いの説明書等も特にないので初めて使用する人の役に立てば幸いです。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
1
Help us understand the problem. What are the problem?