Deep Tech. Blog

ガジェットや技術についての紹介や自身のメモとして記事を書いていくブログ

【Raspberry Pi】人感センサで自室の照明ON/OFFを自動化(赤外線モーションセンサ接続編)

概要

 前回は人感センサで照明のON/OFF操作を自動化するために必要そうなモノを用意しました.今回は,Raspberry Piに赤外線モーションセンサを接続して人感センサとして利用出来ることを確認するところまでやってみようと思います.

Raspberry Piに赤外線モーションセンサを接続

 まずはRaspberry Piと赤外線モーションセンサをジャンパ線で接続します.

下の写真のようにRaspberry PiにはHDMIモニタを接続しているので,HDMIモニタから出ているGPIOピンに赤外線モーションセンサを接続することになります. f:id:deep_tech:20190103145255j:plain f:id:deep_tech:20190103145741j:plain

下図が赤外線モーションセンサのセンサ側の写真です.このセンサは家電等色んな製品で見かけるセンサですね. f:id:deep_tech:20190103145843j:plain

下図は赤外線モーションセンサの基板側の写真です.写真下部の3つのピンがRaspberry Piに接続するピンになります.ピンは左から右に向かって,Power, Output, Groundになっています.写真上部のオレンジ色のダイヤルは,右側が検出感度,左側が検出時間を調整するためのものです. f:id:deep_tech:20190103150035j:plain

下図はRaspberry Pi側にジャンパ線を接続した写真です.

  • 赤外線モーションセンサのPowerピンをRaspberry Pi側の5Vピンに接続.
  • 赤外線モーションセンサのGroundピンをRaspberry Pi側のGNDピンに接続.
  • 赤外線モーションセンサのOutputピンをRaspberry Pi側のGPIO0番ピンに接続(BCMでは17番,HDMIモニタを経由しているためGPIO番号が異なるので注意) f:id:deep_tech:20190103150346j:plain

下図は赤外線モーションセンサ側に接続したピンの状態です. 上図のRaspberry Pi側のジャンパ線の色でどのピンとどのピンを接続しているかが分かると思います. f:id:deep_tech:20190103151423j:plain

赤外線モーションセンサの値取得

 ここまでの作業でハードウェア的にRaspberry Piと赤外線モーションセンサを接続しました.では,正しく接続出来ているか,赤外線モーションセンサが利用出来るかを確認するために赤外線モーションセンサの値を取得して見たいと思います.ここからの作業はRaspberry Pi上での操作になるので,Raspberry Piを起動してVNCか何かで操作します.

 赤外線モーションセンサの値を取得する方法は様々ありますが,今回はPythonでの値取得を試みます.今後照明のON/OFF操作の命令をNature Remoに送信する際にもPythonを使う予定です. Pythonスクリプトは下図のような感じで適当にフォルダを作成してその中にsensor_test.pyという空のファイルを作成しました. f:id:deep_tech:20190103152643p:plain

 sensor_test.pyをダブルクリックするとThonnyというウィンドウが立ち上がってPythonスクリプトの編集や実行が可能な状態になります. f:id:deep_tech:20190103152912p:plain

 Thonnyが立ち上がったら下記スクリプトを貼付けて実行します.スクリプト的にはGPIO17番ピンを入力として,ループでピンの値を監視してGPIO.HIGHになったら人がいると検知して時刻と"detected!"という文字を出力します.GPIO.HIGHでない場合は17番ピンの値をそのまま出力します.処理の終了はCTRL+Cです.

from datetime import datetime
import time
import RPi.GPIO as GPIO

SLEEP_TIME = 1
GPIO_PIN = 17

GPIO.setmode(GPIO.BCM)
GPIO.setup(GPIO_PIN, GPIO.IN)

if __name__ == '__main__':
    try:
        print("Starting detection...")
        while True:
            if(GPIO.input(GPIO_PIN) == GPIO.HIGH):
                print(datetime.now().strftime('%Y/%m/%d %H:%M:%S') + ":" + "detected!")
            else:
                print(GPIO.input(GPIO_PIN))
            time.sleep(SLEEP_TIME)
    except KeyboardInterrupt:
        print("exit process...")
    finally:
        GPIO.cleanup()
        print("GPIO cleanup")

 実行後,赤外線モーションセンサの前で手をかざしたりして動きを検知させてみます.すると下図のような出力が得られます.この例の場合,検知して3秒程度で未検知状態に戻っています.この長さは上記のオレンジ色のダイヤルで調整可能です. f:id:deep_tech:20190103154555p:plain

まとめ

 Raspberry Piと赤外線モーションセンサをジャンパ線で接続し,Pythonスクリプトで赤外線モーションセンサの値を取得することで人感センサとして利用出来ることを確認しました.次の記事では,人感センサと照明のON/OFF操作を連携させてみようと思います.

参考サイト

 赤外線モーションセンサの利用について下記のサイトを参考にさせて頂きました.