M5Stackで育苗ヒーター制御

Seedling heat mat control ・ 育苗加热

温床ヒーターをリレーで制御し、ENV IIIセンサーで温度監視。

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

部品リスト(BOM)

部品役割ポートリンク・価格
M5Stack Core2Controllergrove_i2c, grove_analog, grove_uart, mbusofficial page — $46.9
Unit PaHub2I2C hub (1→6)grove_i2cofficial page — $7.95
Unit ENV IIITemp / humidity / pressuregrove_i2cofficial page — $5.95
Unit 2Relay (2-Channel Relay Unit)2-Channel Relaygrove_i2cofficial page — $6.5

配線

作り方

M5Stack Core2とPaHub2、ENV IIIセンサー、2Relayユニットを使って、育苗床のヒーターを制御するシステムです。ENV IIIが温度を測定し、Core2がその値に基づいてリレーをON/OFFすることで、ヒーターを自動でコントロールします。

  1. 部品を用意する — 用意するもの:M5Stack Core2本体、Unit PaHub2、Unit ENV III、Unit 2Relay(2チャンネルリレーユニット)、Groveケーブル3本(各ユニットに付属)、Core2とパソコンをつなぐUSB-Cケーブル。
  2. PaHub2をCore2に接続する — Groveケーブルを使って、PaHub2の入力ポート(IN)をCore2のPort.A(赤いポート)に接続します。コネクタは一方向にしか入らないので、無理に押し込まないでください。
  3. ENV IIIと2RelayをPaHub2に接続する — 2本目のGroveケーブルでENV IIIをPaHub2のチャンネル0(CH0)に、3本目のGroveケーブルで2RelayをPaHub2のチャンネル1(CH1)に接続します。これでI2Cバスが分離され、アドレス競合を防げます。
  4. パソコンにつないでMicroPythonを書き込む — USB-CケーブルでCore2をパソコンにつなぎます。UIFlowやThonnyなどのツールで、Core2にMicroPythonファームウェアが入っていることを確認し、下のコードをデバイスにコピーして実行します。
  5. 温度しきい値を設定する — コード内のTEMP_THRESHOLDを、ヒーターをONにしたい温度(例:25℃)に設定します。温度がこの値を下回るとリレーがONになり、上回るとOFFになります。
  6. 動作をテストする — コードを実行し、Core2の画面に温度とリレーの状態が表示されることを確認します。温度がしきい値より低いときにリレーがON(Relay: ON)になり、高いときにOFF(Relay: OFF)になることを確認してください。

サンプルコード(micropython)

# M5Stack Core2 + PaHub2 + ENV III + 2Relay (seedling bed heater controller)
# Wiring: Core2 Port.A -> PaHub2 IN, PaHub2 CH0 -> ENV III, PaHub2 CH1 -> 2Relay
import time
from machine import Pin, I2C
from m5stack import lcd

# I2C setup on Core2 Port.A (sda=21, scl=22)
i2c = I2C(0, sda=Pin(21), scl=Pin(22), freq=400000)

# TCA9548A (PaHub2) I2C address
TCA_ADDR = 0x70

# ENV III: SHT30 temperature sensor I2C address
SHT30_ADDR = 0x44

# 2Relay I2C address (default 0x26)
RELAY_ADDR = 0x26

# Temperature threshold in Celsius (adjust as needed)
TEMP_THRESHOLD = 25.0

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

def read_temperature():
    """Read temperature from SHT30 on ENV III."""
    select_channel(0)  # ENV III on CH0
    # Send measurement command (0x2C, 0x06) for high repeatability
    i2c.writeto(SHT30_ADDR, bytes([0x2C, 0x06]))
    time.sleep(0.015)  # wait for measurement
    data = i2c.readfrom(SHT30_ADDR, 6)
    # Convert raw data to temperature (Celsius)
    raw_temp = (data[0] << 8) | data[1]
    temp = -45.0 + 175.0 * raw_temp / 65535.0
    return temp

def set_relay(channel, state):
    """Set relay channel (0 or 1) to ON (True) or OFF (False)."""
    select_channel(1)  # 2Relay on CH1
    # 2Relay register: 0x01 for relay1, 0x02 for relay2
    reg = 0x01 if channel == 0 else 0x02
    i2c.writeto(RELAY_ADDR, bytes([reg, 1 if state else 0]))

# Initialize relay to OFF
set_relay(0, False)

while True:
    temp = read_temperature()
    lcd.clear()
    lcd.print('Temp: %.1f C' % temp, 10, 20)
    if temp < TEMP_THRESHOLD:
        lcd.print('Heater ON', 10, 60)
        set_relay(0, True)   # Relay1 ON (heater)
    else:
        lcd.print('Heater OFF', 10, 60)
        set_relay(0, False)  # Relay1 OFF
    time.sleep(2)

コツ・安全上の注意

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

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

エディタで開く →

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