M5Stackで侵入検知アラーム

Intrusion alarm ・ 入侵报警

PIRセンサーで侵入を検知し、ブザーとリレーで警報を発します。

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

部品リスト(BOM)

部品役割ポートリンク・価格
M5Stack Core2Controllergrove_i2c, grove_analog, grove_uart, mbusofficial page — $46.9
M5Stack Unit PIRPIR motion sensorgrove_i2cofficial page — $5.5
Unit BuzzerBuzzergrove_analogofficial page — $4.5
Unit RelayRelay (alarm output)grove_analogofficial page — $3.5

配線

作り方

M5Stack Core2とPIRセンサー、ブザー、リレーで作る侵入検知アラームです。PIRセンサーが人の動きを検知すると、ブザーが鳴り、リレーが作動して外部機器(ライトやサイレンなど)を制御できます。

  1. 部品を用意する — 用意するもの:M5Stack Core2本体、PIR Unit(人感センサー)、Unit Buzzer(ブザー)、Unit Relay(リレー)、Groveケーブル3本(各ユニットに付属)、Core2とパソコンをつなぐUSB-Cケーブル。
  2. PIRセンサーをPort.A(赤)に接続する — PIR UnitはI2C通信を使います。Groveケーブルの一端をPIR Unitに、もう一端をCore2の赤いPort.A(I2Cポート)に差し込みます。コネクタは一方向にしか入らないので、無理に押し込まないでください。
  3. ブザーをPort.B(黒)に接続する — Unit BuzzerはPWM信号で駆動します。Groveケーブルの一端をブザーユニットに、もう一端をCore2の黒いPort.B(アナログ/IOポート)に差し込みます。
  4. リレーをPort.B(黒)に接続する — Unit Relayもデジタル信号で制御します。Groveケーブルの一端をリレーユニットに、もう一端をCore2の黒いPort.B(アナログ/IOポート)に差し込みます。注意:Port.Bは1つしかないため、ブザーとリレーを同時に接続するには別途Port.B拡張が必要です。このガイドでは、ブザーとリレーを同じPort.Bに接続するのは推奨しません。代わりに、リレーをPort.C(青)に接続するか、Groveハブを使用してください。ここでは、ブザーをPort.B、リレーをPort.C(青)に接続する手順で進めます。
  5. リレーをPort.C(青)に接続する(代替配線) — Port.Bがブザーで使用されているため、リレーはCore2の青いPort.C(UARTポート)に接続します。ただし、Port.CはUART用ですが、デジタル出力としても使えます。Groveケーブルの一端をリレーユニットに、もう一端をCore2の青いPort.Cに差し込みます。
  6. パソコンにつないでMicroPythonを書き込む — USB-CケーブルでCore2をパソコンにつなぎます。UIFlowやThonnyなどのツールで、Core2にMicroPythonファームウェアが入っていることを確認し、下のコードをデバイスにコピーして実行します。
  7. 動作をテストする — コードを実行したら、PIRセンサーの前で手を振ってみてください。動きを検知するとブザーが数秒間鳴り、リレーがONになります。リレーには負荷(電球など)を接続してテストできます。

サンプルコード(micropython)

# M5Stack Core2 + PIR + Buzzer + Relay Intrusion Alarm
# Wiring:
#   PIR Unit -> Core2 red Port.A (I2C)
#   Buzzer Unit -> Core2 black Port.B (GPIO 36? Actually Port.B uses GPIO 36 for analog, but for digital output we use GPIO 26? Check pinout: Port.B: 36 (ADC), 26 (GPIO). We'll use GPIO 26 for buzzer.
#   Relay Unit -> Core2 blue Port.C (UART, but we use GPIO 16/17? Actually Port.C: TX=17, RX=16. We'll use GPIO 16 for relay.
# Note: PIR unit uses I2C address 0x64.

import time
from machine import Pin, I2C
from m5stack import lcd

# I2C for PIR (Port.A)
i2c = I2C(0, scl=Pin(22), sda=Pin(21), freq=100000)
PIR_ADDR = 0x64

# Buzzer on Port.B GPIO 26
buzzer = Pin(26, Pin.OUT)

# Relay on Port.C GPIO 16 (TX)
relay = Pin(16, Pin.OUT)

# PIR sensor registers (from datasheet)
PIR_REG_STATUS = 0x00  # 0 = no motion, 1 = motion detected

def read_pir():
    try:
        data = i2c.readfrom(PIR_ADDR, 1)
        return data[0] & 0x01
    except:
        return 0

while True:
    motion = read_pir()
    lcd.clear()
    lcd.print('Motion: %d' % motion, 10, 20)
    if motion:
        lcd.print('ALARM!', 10, 60)
        buzzer.on()
        relay.on()
        time.sleep(5)
        buzzer.off()
        relay.off()
    else:
        buzzer.off()
        relay.off()
    time.sleep(0.5)

コツ・安全上の注意

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

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

エディタで開く →

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