M5Stackでヒーター自動制御

Thermostat heater control ・ 加热器控制

ENV IIIで温度を測定し、設定温度に基づいてSSRでヒーターをON/OFF制御します。

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

部品リスト(BOM)

部品役割ポートリンク・価格
M5Stack Core2Controllergrove_i2c, grove_analog, grove_uart, mbusofficial page — $46.9
Unit ENV IIITemp / humidity sensorgrove_i2cofficial page — $5.95
Unit SSRSolid-state relay for heatergrove_analogofficial page — $6.5

配線

作り方

M5Stack Core2とENV IIIユニット(温度センサー)、SSRユニット(ソリッドステートリレー)で作る、かんたんな自動ヒーター制御装置です。ENV IIIが温度を測定し、設定した温度を下回るとSSRがヒーターをONに、上回るとOFFにします。

  1. 部品を用意する — 用意するもの:M5Stack Core2本体、ENV IIIユニット(温度・湿度・気圧センサー)、SSRユニット(ソリッドステートリレー)、Groveケーブル2本(通常ユニットに付属)、Core2とパソコンをつなぐUSB-Cケーブル。
  2. ENV IIIユニットをPort.Aに接続する — Groveケーブルの一端をENV IIIユニットに、もう一端をCore2の赤いPort.A(I2Cポート)に差し込みます。コネクタは一方向にしか入らないので、無理に押し込まないでください。
  3. SSRユニットをPort.Bに接続する — もう1本のGroveケーブルの一端をSSRユニットに、もう一端をCore2の黒いPort.B(アナログ/IOポート)に差し込みます。
  4. ヒーターをSSRユニットに接続する — SSRユニットの出力端子(負荷側)にヒーターの電源線を接続します。SSRは交流(AC)用です。ヒーターの定格電圧・電流がSSRの仕様(AC 220-250V、最大2A)を超えないように注意してください。
  5. パソコンにつないでMicroPythonを書き込む — USB-CケーブルでCore2をパソコンにつなぎます。UIFlowやThonnyなどのツールで、Core2にMicroPythonファームウェアが入っていることを確認し、下のコードをデバイスにコピーして実行します。
  6. 温度設定を調整してテストする — コード内のSETPOINT(目標温度)を希望の値に変更します。例えば25.0に設定すると、温度が25度を下回ったときにヒーターがONになります。動作を確認するには、温度が設定値をまたぐようにしてください(例:センサーを冷やす/温める)。

サンプルコード(micropython)

# M5Stack Core2 + ENV III + SSR (automatic heater control)
# Wiring: ENV III -> Core2 red Port.A (I2C), SSR -> Core2 black Port.B (analog/IO)
import time
from machine import Pin, I2C
from m5stack import lcd

# I2C for ENV III (SHT30 address 0x44)
i2c = I2C(0, scl=Pin(22), sda=Pin(21), freq=100000)

# SSR control pin (Port.B = GPIO 36)
ssr = Pin(36, Pin.OUT)

SETPOINT = 25.0  # target temperature in Celsius

def read_temperature():
    # Read temperature from SHT30
    i2c.writeto(0x44, bytes([0x2C, 0x06]))  # send measurement command
    time.sleep_ms(50)
    data = i2c.readfrom(0x44, 6)
    if len(data) == 6:
        raw_temp = (data[0] << 8) | data[1]
        temp = -45.0 + 175.0 * raw_temp / 65535.0
        return temp
    return None

while True:
    temp = read_temperature()
    if temp is not None:
        lcd.clear()
        lcd.print('Temp: %.1f C' % temp, 10, 20)
        if temp < SETPOINT:
            lcd.print('Heater ON', 10, 60)
            ssr.on()
        else:
            lcd.print('Heater OFF', 10, 60)
            ssr.off()
    else:
        lcd.print('Sensor error', 10, 20)
    time.sleep(2)

コツ・安全上の注意

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

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

エディタで開く →

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