M5Stackで冷蔵庫ドア警告

Fridge door open alert ・ 冰箱门提醒

ホールセンサーで冷蔵庫のドアの開閉を監視し、長時間開けっ放しだとブザーで警告します。

この構成をエディタで開く・編集する →

部品リスト(BOM)

部品役割ポートリンク・価格
M5Stack Core2Controllergrove_i2c, grove_analog, grove_uart, mbusofficial page — $46.9
Unit HallHall sensor (door open/close)grove_analogofficial page — $5.95
Unit BuzzerBuzzer (alert)grove_analogofficial page — $4.5

配線

作り方

M5Stack Core2とHallユニット(磁気センサー)、Buzzerユニット(ブザー)で作る、冷蔵庫のドア開けっ放しアラートです。冷蔵庫のドアに磁石を取り付け、Hallユニットで磁気を検知します。ドアが開いて磁石が離れると、設定した時間以上開いている場合にブザーが鳴ります。

  1. 部品を用意する — 用意するもの:M5Stack Core2本体、Unit Hall(磁気センサーユニット)、Unit Buzzer(ブザーユニット)、Groveケーブル2本(各ユニットに付属)、冷蔵庫のドアに貼る小さな磁石、Core2とパソコンをつなぐUSB-Cケーブル。
  2. 磁石とHallユニットを設置する — 冷蔵庫のドアが閉まっているときに、Hallユニットのセンサー面(部品面)と磁石が向かい合うように取り付けます。ドアが閉じているときは磁石が近くにあり、開くと離れるように配置してください。両面テープなどで固定します。
  3. Groveケーブルでつなぐ — HallユニットとBuzzerユニットはどちらもアナログ(黒)接続です。ただし、Core2のPort.B(黒色)は1つしかないため、2つのユニットを同時に接続するには別途Port.Bを増やす必要があります。ここでは、HallユニットをPort.Bに、BuzzerユニットをPort.C(青色)に接続します(Buzzerはデジタル出力でも制御可能なため)。Groveケーブルの一端を各ユニットに、もう一端をCore2の対応するポートに差し込みます。コネクタは一方向にしか入らないので、無理に押し込まないでください。
  4. パソコンにつないでMicroPythonを書き込む — USB-CケーブルでCore2をパソコンにつなぎます。UIFlowやThonnyなどのツールで、Core2にMicroPythonファームウェアが入っていることを確認し、下のコードをデバイスにコピーして実行します。
  5. しきい値とタイマーを調整する — コードを実行し、画面に表示されるHallセンサーの値を見ます。ドアが閉まっているとき(磁石が近い)の値と、開いているとき(磁石が離れている)の値をメモします。コード内のDOOR_OPEN_THRESHOLDをその中間の値に設定します。また、ALARM_DELAY_SECONDSでブザーが鳴るまでの待ち時間を設定します(例:10秒)。
  6. 動作をテストする — ドアを閉じた状態で、画面の値がしきい値以下(閉)であることを確認します。ドアを開けると値がしきい値を超え(開)、設定した秒数後にブザーが鳴ります。ドアを閉じるとブザーが止まることを確認してください。

サンプルコード(micropython)

# M5Stack Core2 + Hall Sensor + Buzzer (Fridge door alert)
# Wiring: Hall -> Core2 black Port.B (analog pin 36)
#         Buzzer -> Core2 blue Port.C (UART pin 16/17, but we use pin 17 as GPIO)
import time
from machine import Pin, ADC
from m5stack import lcd

# Hall sensor on Port.B (analog pin 36)
hall = ADC(Pin(36))
hall.atten(ADC.ATTN_11DB)   # read full 0-3.3V range

# Buzzer on Port.C (use pin 17 as digital output)
buzzer = Pin(17, Pin.OUT)

# Thresholds (adjust after testing)
DOOR_OPEN_THRESHOLD = 2000   # if hall value > this, door is open
ALARM_DELAY_SECONDS = 10     # seconds before alarm sounds

# State variables
door_open_start = None
alarm_active = False

while True:
    value = hall.read()
    lcd.clear()
    lcd.print('Hall: %d' % value, 10, 20)
    
    if value > DOOR_OPEN_THRESHOLD:
        # Door is open
        if door_open_start is None:
            door_open_start = time.time()
        elapsed = time.time() - door_open_start
        lcd.print('Door open for %d s' % elapsed, 10, 60)
        if elapsed >= ALARM_DELAY_SECONDS and not alarm_active:
            alarm_active = True
            buzzer.on()   # start buzzer
            lcd.print('ALARM!', 10, 100)
    else:
        # Door is closed
        door_open_start = None
        if alarm_active:
            buzzer.off()
            alarm_active = False
            lcd.print('Door closed', 10, 100)
    
    time.sleep(0.5)

コツ・安全上の注意

この作り方はAIが構成から生成したものです(未検証)。通電前に配線とコードをご確認ください。

この構成はAIが実在するM5Stack部品から設計し、ポート互換をサーバで検証したものです。編集・共有できます。

エディタで開く →

UnitKit は M5Stack® 製品向けの非公式ツール。作りたいものを書くと、部品リストと配線図が出ます。