乗車日記

自転車ときのこ

人感センサー

月曜日に作った5分ごとに天井ライトをoffする赤外線信号を送る装置(ラジコン軽量化、自動消灯器 - 乗車日記)ですが、部屋にいても電気が消えて鬱陶しいという苦情が来ました。ということで人感センサー(焦電素子)をつけて部屋に人がいる間はoff信号を送らないようにプログラムしました。

結果は好評。部屋に入るだけで電気がつくので、リモコンに触る必要がなくなったとのことです。人を堕落させる装置を作っている気もして来ましたが。。。

やったのは外部入出力(GPIO)に人感センサーモジュールの出力をつなぎ、pigpioというライブラリを用いて、pythonというプログラミング言語でプログラムを書き、前回導入した赤外線制御ライブラリのコマンドを制御しました。pigpioの使い方については、こちらの記事を参考にさせていただきました。(Raspberry PiのGPIO制御の決定版 pigpio を試す - karaage. [からあげ])

pigpioですが私がラズベリーパイ に導入したRasbian Stretch Lightでは
sudo apt-get install pigpioだけではpythonのライブラリが導入されなかったので、
wget abys.co.uk/rpi/pigpio/pigpio.zip
でソースを入手してmakeしました。

プログラムはこんな感じです。

!usr/bin/python
# -*- coding: utf-8 -*-
import pigpio
from time import sleep
import subprocess
import time

pi=pigpio.pi()
pi.set_mode(23,pigpio.INPUT)
start_time=time.time()

def cb_interrupt(gpio,level,tick):
 global start_time
 start_time=time.time()
 subprocess.Popen(['irsend','SEND_ONCE','light','on'])

cb=pi.callback(23,pigpio.RISING_EDGE, cb_interrupt)

try:
 while True:
  sleep(50.0)
  if (time.time()-start_time)>300.0:
   subprocess.Popen(['irsend','SEND_ONCE','light','off'])
   start_time=time.time()
  
except KeyboardInterrupt:
 pass
pi.stop()

ただし、このプログラムを走らせる前に、pigpioを走らせておく必要があります。

まあ上手く行ったのは良いのですが、このままだとオフィスビルにあるライトと同じなので一捻りしたいところです。焦電センサーは割と大きく動かないと反応しないので、カメラをつけて動体検出でより精度よく人がいるか居ないかを検知して、照明に反映させるなどをやって見たいと思います。