🐝
電源切り忘れ防止装置の作成
はじめに
電気ストーブや扇風機をよく切り忘れることがあるので、ESP8266、SSR(ソリッドステートリレー)、人感センサを組み合わせて「電源切り忘れ防止装置」を作って見ました。
人感センサが人の動きを検知するとSSRがオンになり、検知しなくなってから一定時間経過するとSSRをオフにして電源コンセントにAC100Vが出力されなくなるという単純な装置です。
一番やっかいだったのがケースの加工です。ケースの中が部品でぎゅうぎゅう詰めなので配線も中々大変でした。
主な使用部品
- SSR SSR-24 DAという24Vから380Vの電圧で定格電流25Aとなっている半導体リレー。Amazonで1,000円ちょいで販売されています。
- 人感センサ SR501という製品で、感度調整と遅延時間の調整ボリュームがついた部品です。これもAmazonで一つ200円前後で販売されています。
- ESP8266 人感センサの検知した情報からSSRをON/OFFしたりするために使用します。
- LED 赤色と緑色の2つを使い、コンセントに100Vが出力されている場合は赤色が点灯し、出力されていない場合は緑色が点灯するようにしています。
- ブザー SSRは機械式リレーのようにON/OFF時にカチカチ音がしないのでSSRのON/OFFに合わせて音を出すようにしています。
- ケース 未来工業のノック無しのPVKボックスを使用しています。本来は電気工事用です。
- 電源アダプタ iPhone用の5V1Aの充電器を流用しています。
回路図
Fritzingに適当な部品図がなかったので、ありあわせで回路図を書いたので歪な回路図になっています。
回路図のGNDラインに修正があります。
Zennでは画像を入れ替えても更新されないようなので、回路図はこちらのURLを参照して下さい。
実態図
これも実際の部品とかけ離れていますが、参考程度にどうぞ。
実態図
実物外観
内部
ケースの蓋を開けて上からみたものです。
内部
正面
PIRセンサとLEDがある正面から見たものです。
正面
背面
ACコードの引き入れとコンセントがある背面から見たものです。
背面
pythonコード
人感センサが反応しAC100Vがコンセントに供給されるとブザーが2回鳴り、電源が切れるとブザーが1回鳴るようになってしています。
pythonコード
# NodeNCU PIR power outlet
# Mar. 4 2025 (C) IoT101
# Buzzer added on Mar. 5th 2025
from machine import Pin
import time
DEBUG = True
# DEBUG = False
LED_RED = 16
LED_GREEN = 12
RELAY = 5
PIR = 4
BUZZER = 13
ON = 1
OFF = 0
BWAIT = 0.1
BUZZER_FLAG = "OFF"
led_red_status = 0
led_green_status = 0
relay_status = 0
led_red = Pin(LED_RED, Pin.OUT)
led_green = Pin(LED_GREEN, Pin.OUT)
relay = Pin(RELAY, Pin.OUT)
pir = Pin(PIR, Pin.IN)
buzzer = Pin(BUZZER, Pin.OUT)
def beep(n):
if n < 1:
return -1
for i in range(n):
buzzer.on()
time.sleep(BWAIT)
buzzer.off()
time.sleep(BWAIT)
def blink(t, n):
for i in range(n):
beep(1)
led_red.off() # turn on
led_green.off() # turn on
time.sleep(t)
led_red.on() # turn off
led_green.on() # turn off
time.sleep(t)
def led_onoff(pin,s):
if s == ON:
pin.off()
if s == OFF:
pin.on()
def relay_onoff(s):
global BUZZER_FLAG
if s == ON:
relay.on()
if BUZZER_FLAG == "OFF":
beep(2)
BUZZER_FLAG = "ON"
if DEBUG == True:
print("Relay ON")
if s == OFF:
relay.off()
if BUZZER_FLAG == "ON":
beep(1)
BUZZER_FLAG = "OFF"
if DEBUG == True:
print("Relay OFF")
# ---
# Turn off relay
relay_onoff(OFF)
while True:
# PIR is ON
if pir.value() == True:
if DEBUG == True:
print("PIR ON")
led_red_status = 1
led_green_status = 0
relay_status = 1
led_onoff(led_red, ON)
led_onoff(led_green, OFF)
relay_onoff(ON)
else:
if DEBUG == True:
print("PIR OFF")
led_red_status = 0
led_green_status = 1
relay_status = 0
led_onoff(led_red, OFF)
led_onoff(led_green, ON)
relay_onoff(OFF)
time.sleep(0.5)
おわりに
人感センサのディレーはつまみを調整して、約3分に設定しています。
SSRは発熱が心配だったので、厚さ1mmで面積が約
500W程度の負荷ではケースがほのかに暖かくなる程度で問題ありませんでした。長時間は試していませんが、1KWの負荷でもケースが十分素手で触れるぐらいの温度上昇でしたので、放熱板の効果が出ていると思われます。
SSRについてはこちらにも記事があります。
Discussion