M5Stackで自動ファン制御

Temperature fan control ・ 温控风扇

ENV III で温度を測定し、アナログポート経由でファンユニットを制御します。

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

部品リスト(BOM)

部品役割ポートリンク・価格
M5Stack CoreS3Controllergrove_i2c, grove_analog, grove_uart, mbus, usb_c, sdcardofficial page — $59.9
Unit ENV IIITemperature / humidity / pressuregrove_i2cofficial page — $5.95
Unit FanFan unitgroveofficial page — $4.95

配線

作り方

M5Stack CoreS3とENV IIIユニット(温度・湿度・気圧センサー)とFanユニット(ファン)を使って、温度が高いときに自動でファンを回す装置です。CoreS3が温度を読み取り、設定したしきい値を超えたらファンをONにします。

  1. 部品を用意する — 用意するもの:M5Stack CoreS3本体、ENV IIIユニット、Fanユニット、Groveケーブル2本(通常ユニットに付属)、CoreS3とパソコンをつなぐUSB-Cケーブル。
  2. ENV IIIユニットをCoreS3のPort.A(赤)に接続する — Groveケーブルの一端をENV IIIユニットに、もう一端をCoreS3の赤いPort.A(I2Cポート)に差し込みます。コネクタは一方向にしか入らないので、無理に押し込まないでください。
  3. FanユニットをCoreS3のPort.B(黒)に接続する — もう1本のGroveケーブルの一端をFanユニットに、もう一端をCoreS3の黒いPort.B(アナログ/IOポート)に差し込みます。
  4. パソコンにつないでMicroPythonを書き込む — USB-CケーブルでCoreS3をパソコンにつなぎます。UIFlowやThonnyなどのツールで、CoreS3にMicroPythonファームウェアが入っていることを確認し、下のコードをデバイスにコピーして実行します。
  5. 温度のしきい値を調整する — コードを実行し、画面に出る温度の数値を見ます。ファンを回したい温度(例:30℃)を決め、コード内のTEMP_THRESHOLDをその値に設定します(単位は摂氏)。
  6. 動作をテストする — 温度がしきい値より低いときはファンが止まっていることを確認します。センサーを温める(手で覆うなど)と温度が上がり、しきい値を超えたらファンが回り始めるはずです。冷えるとファンが止まります。

サンプルコード(micropython)

# M5Stack CoreS3 + ENV III (temperature) + Fan Unit
# Wiring: ENV III -> CoreS3 red Port.A (I2C)
#         Fan Unit -> CoreS3 black Port.B (analog/GPIO)
import time
from machine import Pin, I2C
from m5stack import lcd

# I2C for ENV III (SHT30 address 0x44)
i2c = I2C(0, scl=Pin(1), sda=Pin(2), freq=100000)  # CoreS3 Port.A pins

# Fan control pin (Port.B on CoreS3 is GPIO 8)
fan = Pin(8, Pin.OUT)

TEMP_THRESHOLD = 30.0  # Celsius, adjust as needed

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)
    raw_temp = (data[0] << 8) | data[1]
    temp = -45.0 + 175.0 * raw_temp / 65535.0
    return temp

while True:
    temp = read_temperature()
    lcd.clear()
    lcd.print('Temp: %.1f C' % temp, 10, 20)
    if temp > TEMP_THRESHOLD:
        lcd.print('Fan ON', 10, 60)
        fan.on()
    else:
        lcd.print('Fan OFF', 10, 60)
        fan.off()
    time.sleep(2)

コツ・安全上の注意

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

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

エディタで開く →

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