前回取り上げた、超音波距離センサー「HC-SR04」ですが、センサーとその前にある物体との距離を測れるものの、それが人であるかの判定はできません。
ですので、今回は人感センサーといわれるものを取り上げてみます。
人感センサーは、赤外線などを利用して周囲温度と温度差のあるものが検知範囲内で動いたときに、その温度変化を検知する仕組みで動作しています。
逆に言えば、検知範囲内で動かない場合は検知しません。
ですので、「検知範囲内で動く生き物(もちろん、人も含みます)を検知する」ものです。動かない状態では検知しないようです。
1. センサーの購入
型番違いでいろいろなものがあるようですが、基本的には同じようです。
端子は3つ。
電源(+、ー)と、GPIOに接続するものの3つです。
セットによく含まれているので、セットで購入してしまうのもよいと思います。
|
|
2. 配線
端子が少ない分、楽です。
手元にある機器は、どちらがvccか、gndかプリントが無いので困りましたが、どちらかです。
基盤にプリントしてある型番 + データシート(またはdatasheet)でインターネット検索すると、たいてい出てきます。
3. Pythonプログラミング
今回はあまり考えず、0.5秒間隔で、「検知した(MOVE!)」、「検知していない(FREEZE)」をターミナルに時刻とともに表示します。
正確に言えば、「動き続けない限り」、検知しません。
# -*- coding: utf-8 -*- # 日本語コメントをエラーとしないように、UTF-8で保存 # 使用するライブラリのインポート import RPi.GPIO as GPIO import datetime from time import sleep # 定数の定義 ZINKAN_PIN = 17 def init_GPIO(): """ GPIOの初期設定 """ GPIO.setwarnings(False) GPIO.setmode(GPIO.BCM) GPIO.setup(ZINKAN_PIN, GPIO.IN) def zinkan(): """ 人感センサーの検知結果を返却 """ if GPIO.input(ZINKAN_PIN): return True else: return False # 初期化 init_GPIO() # 無限ループ、「年月日と時分秒」と「検知結果」を0.5秒間隔で表示 while True: # 検知結果のメッセージ if (zinkan()): ita = "MOVE!" else: ita = "FREEZE" # 「年月日と時分秒」と検知結果表示 now = datetime.datetime.now() print(f'{now.strftime("%Y/%m/%d %H:%M:%S")}: {ita}') sleep(0.5)