인권 센서가 감지하는 시간을 정확하게 측정하고 싶습니다.

myjlab 어드벤트 캘린더 4일째. 밤새도록 노력하겠습니다.

전제



파이썬을 사용합니다. 라즈파이와 인권 모듈 센서를 소지하고 있다. 연결된 상태입니다. 접속에 관해서는 여기 를 참고해 주세요

인권 모듈 센서란?





가전에 가끔씩 있는 것 같습니다. 적외선으로 열원체를 감지하는 센서. 가까이에 생물이 존재하는지 아니면 없는지에 대한 1차원 정보를 얻을 수 있습니다.

장착된 나사를 돌려 감지 거리와 감지 시간(한 번 감지한 정보를 유지하는 시간)을 조절할 수 있습니다만, 세세한 조절은 불가능합니다.

감지된 시간 측정



시간을 측정하는 프로그램을 작성합니다.

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회 반복하여 생물의 유무를 확인하고 있습니다만, 인권 모듈 센서의 감도에는 개체차이가 있으므로 조정할 필요가 있습니다.

끝에



싸게 얻을 수 있는 인권 모듈 센서입니다만, 취급에는 조금 신경을 써 줘야 합니다. 취급의 설명서 등도 특별히 없기 때문에 처음으로 사용하는 사람의 도움이 되면 다행입니다.

좋은 웹페이지 즐겨찾기