🐝

電源切り忘れ防止装置の作成

に公開

はじめに

電気ストーブや扇風機をよく切り忘れることがあるので、ESP8266、SSR(ソリッドステートリレー)、人感センサを組み合わせて「電源切り忘れ防止装置」を作って見ました。

人感センサが人の動きを検知するとSSRがオンになり、検知しなくなってから一定時間経過するとSSRをオフにして電源コンセントにAC100Vが出力されなくなるという単純な装置です。

一番やっかいだったのがケースの加工です。ケースの中が部品でぎゅうぎゅう詰めなので配線も中々大変でした。

主な使用部品

  1. SSR SSR-24 DAという24Vから380Vの電圧で定格電流25Aとなっている半導体リレー。Amazonで1,000円ちょいで販売されています。
  2. 人感センサ SR501という製品で、感度調整と遅延時間の調整ボリュームがついた部品です。これもAmazonで一つ200円前後で販売されています。
  3. ESP8266 人感センサの検知した情報からSSRをON/OFFしたりするために使用します。
  4. LED 赤色と緑色の2つを使い、コンセントに100Vが出力されている場合は赤色が点灯し、出力されていない場合は緑色が点灯するようにしています。
  5. ブザー SSRは機械式リレーのようにON/OFF時にカチカチ音がしないのでSSRのON/OFFに合わせて音を出すようにしています。
  6. ケース 未来工業のノック無しのPVKボックスを使用しています。本来は電気工事用です。
  7. 電源アダプタ 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で面積が約100cm^2強のアルミ板で放熱を行なっています。
500W程度の負荷ではケースがほのかに暖かくなる程度で問題ありませんでした。長時間は試していませんが、1KWの負荷でもケースが十分素手で触れるぐらいの温度上昇でしたので、放熱板の効果が出ていると思われます。

SSRについてはこちらにも記事があります。

Discussion