人感センサで玄関照明を付ける
PIRセンサ(焦電型赤外線センサ)で人の動きを検出して玄関のライトを付ける
新規性はない
https://gyazo.com/717bff5970a3669990a1117570fa7289
素材
3.3Vから動くのでラズパイと直結しても使えるはず
いろいろ情報見てると5V以上のほうが安定しそう?
5V電源ピンに繋げば問題ないか
余ってたので
スマート電球 TP-Link Kasa
Amazonのセールで3.5k円で買った
資料
HC-SR501関連
TP-LinkのRasPi制御
Node.js
Pythonの方がうまくいった
これ最近もメンテされていて良さそう
code:python-kasa.py
import asyncio
from kasa import SmartBulb
ip = '192.168.1.3'
async def main():
p = SmartBulb(ip)
await p.update()
print(f'{p.alias} に接続しました')
await p.turn_on()
if __name__ == "__main__":
asyncio.run(main())
コード
オン状態での保持時間はセンサの半固定抵抗でもいじれるが、調整が難しかったのでソフトウェア側で時間を測るようにした
code:main.py
# -*- coding: utf-8 -*-
import asyncio
import time
import RPi.GPIO as GPIO
from kasa import SmartBulb
IP = '192.168.1.3'
SENSOR_GPIO = 5
ON_HOLD_TIME = 15.0
GPIO.setmode(GPIO.BCM)
GPIO.setup(SENSOR_GPIO, GPIO.IN)
async def main():
p = SmartBulb(IP)
await p.update()
state = False
pre_on_time = time.time()
while True:
time.sleep(0.3)
new_state = GPIO.input(SENSOR_GPIO) == GPIO.HIGH
if new_state == True:
pre_on_time = time.time()
if state == True: continue
await p.turn_on()
else:
if state == False: continue
if time.time() - pre_on_time < ON_HOLD_TIME: continue
await p.turn_off()
state = new_state
if __name__ == "__main__":
asyncio.run(main())
天気予報を付ける
IFTTTとか使うのかと思っていたらiOSショートカットでできる模様
天気アプリで数時間分の予報を取ってきて色を変え、直後に消灯すればいい
ノイズ対策
いい感じだと思ったが約1分おきの頻度でなにもないのにセンサが反応していちいち照明がつく……
Wi-Fi信号のノイズらしい
コンパクトにするために密着させて配置していたが、こんな罠もあるのか……
電球のIPアドレスを固定する
しばらくいい感じに使えていたが、10日おきくらいの頻度でプログラムが止まってしまう…
kasa.exceptions.SmartDeviceException: Unable to connect to the device: 192.168.1.7: Errno 101 Network is unreachable Kasa電球のIPアドレスが変動してしまい、kasaライブラリから繋げなくなっている模様
ちょっと調べたが、IPアドレスベタ書き以外で確実に接続するのは難しそう
なのでルータのDHCPv4設定でIPを固定する