M5Stackで炎検知センサー

Flame detector alarm ・ 火焰检测

非接触赤外線センサーで炎を検知し、ブザーで警報を鳴らします。

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

部品リスト(BOM)

部品役割ポートリンク・価格
M5Stack Core2Controllergrove_i2c, grove_analog, grove_uart, mbusofficial page — $46.9
Unit PaHub2I2C Hub (1→6)grove_i2cofficial page — $7.95
Unit NCIRNon-contact IR temperature sensor (flamegrove_i2cofficial page — $19.95
Unit BuzzerBuzzer (alarm)grove_analogofficial page — $4.5

配線

作り方

M5Stack Core2と非接触赤外線温度センサーUnit NCIR、そしてブザーUnit Buzzerを使って、火災を検知して警報を鳴らす装置です。NCIRが炎の熱を感知し、設定した温度を超えるとブザーが鳴ります。

  1. 部品を用意する — 用意するもの:M5Stack Core2本体、Unit PaHub2(I2Cハブ)、Unit NCIR(非接触温度センサー)、Unit Buzzer(ブザー)、Groveケーブル3本(通常ユニットに付属)、Core2とパソコンをつなぐUSB-Cケーブル。
  2. PaHub2をCore2に接続する — Groveケーブルを使って、PaHub2の入力ポート(IN)とCore2の赤いPort.A(I2Cポート)を接続します。コネクタは一方向にしか入らないので、無理に押し込まないでください。
  3. NCIRをPaHub2に接続する — 別のGroveケーブルで、NCIRとPaHub2のいずれかのチャンネルポート(CH0~CH5)を接続します。どのチャンネルでも構いませんが、コード内でチャンネル番号を合わせる必要があります。ここではCH0に接続します。
  4. BuzzerをCore2に接続する — 3本目のGroveケーブルで、BuzzerとCore2の黒いPort.B(アナログ/GPIOポート)を接続します。
  5. パソコンにつないでMicroPythonを書き込む — USB-CケーブルでCore2をパソコンにつなぎます。UIFlowやThonnyなどのツールで、Core2にMicroPythonファームウェアが入っていることを確認し、下のコードをデバイスにコピーして実行します。
  6. 火災検知のしきい値を調整する — コードを実行し、画面に表示される温度(摂氏)を確認します。通常の室温を確認したら、火災と判断する温度(例:50℃)をALARM_TEMPに設定します。必要に応じて調整してください。
  7. 動作をテストする — NCIRの前にライターや熱源を近づけると、温度が上昇し、しきい値を超えたときにブザーが鳴ります。熱源を遠ざけると温度が下がり、ブザーが止まることを確認します。

サンプルコード(micropython)

# M5Stack Core2 + PaHub2 + NCIR + Buzzer (fire detection alarm)
# Wiring:
#   PaHub2 IN -> Core2 red Port.A (I2C)
#   NCIR -> PaHub2 CH0 (I2C channel 0)
#   Buzzer -> Core2 black Port.B (GPIO 26 for PWM)
import time
from machine import Pin, PWM, I2C
from m5stack import lcd

# I2C setup for PaHub2 (TCA9548A) and NCIR (MLX90614)
i2c = I2C(0, scl=Pin(22), sda=Pin(21), freq=100000)
TCA_ADDR = 0x70  # PaHub2 I2C address
MLX_ADDR = 0x5A  # NCIR I2C address

def select_channel(ch):
    """Select TCA9548A channel (0-5)"""
    i2c.writeto(TCA_ADDR, bytes([1 << ch]))

def read_mlx_temp():
    """Read object temperature from MLX90614 in Celsius"""
    select_channel(0)  # NCIR on channel 0
    data = i2c.readfrom_mem(MLX_ADDR, 0x07, 2)  # read raw IR data
    raw = (data[0] | (data[1] << 8))
    temp = (raw * 0.02) - 273.15  # convert to Celsius
    return temp

# Buzzer on Port.B (GPIO 26)
buzzer = PWM(Pin(26), freq=4000, duty=0)  # 4KHz, 0% duty initially

ALARM_TEMP = 50.0  # alarm threshold in Celsius

while True:
    temp = read_mlx_temp()
    lcd.clear()
    lcd.print('Temp: %.1f C' % temp, 10, 20)
    if temp >= ALARM_TEMP:
        lcd.print('FIRE ALARM!', 10, 60)
        buzzer.duty(512)  # 50% duty cycle
    else:
        buzzer.duty(0)    # off
    time.sleep(1)

コツ・安全上の注意

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

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

エディタで開く →

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