M5StackでHat Heart (Heart Rate HAT) を使う

Using the Hat Heart (Heart Rate HAT) ・ 使用 Hat Heart (Heart Rate HAT)

M5StackのHat Heart (Heart Rate HAT)をコントローラーに接続する最小構成。配線とBOMつき。

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

部品リスト(BOM)

部品役割ポートリンク・価格
ATOM LiteControllergrove_i2c, i2c, gpioofficial page — $7.5
Hat Heart (Heart Rate HAT)hati2c, gpioofficial page — $36.9

配線

作り方

ATOM LiteとHat Heart(心拍数HAT)を使って、心拍数と血中酸素濃度(SpO2)を測定する装置です。MAX30102センサーを搭載したHATをATOM LiteのI2Cポートに接続し、測定値を表示します。

  1. 部品を用意する — 用意するもの:ATOM Lite本体、Hat Heart(心拍数HAT)、USB Type-Cケーブル(ATOM Liteとパソコンを接続する用)。
  2. Hat HeartをATOM Liteに取り付ける — Hat HeartはM5StickC用のHATですが、ATOM LiteにもI2C接続で使えます。HATのピンソケットをATOM LiteのGroveポートに差し込むのではなく、HATの裏面にある4ピン端子とATOM LiteのGrove端子をジャンパワイヤなどで接続します。配線は以下の通りです:HATのVCC(赤)→ATOM Liteの5V(Groveの赤線)、HATのGND(黒)→ATOM LiteのGND(Groveの黒線)、HATのSCL(黄)→ATOM LiteのGrove SCL(白線)、HATのSDA(白)→ATOM LiteのGrove SDA(黄線)。注意:HATは3.3V動作ですが、ATOM Liteの5Vピンから供給しても問題ありません(内部レギュレータで3.3Vに変換されます)。
  3. パソコンにつないでMicroPythonを書き込む — USB Type-CケーブルでATOM Liteをパソコンにつなぎます。UIFlowやThonnyなどのツールで、ATOM LiteにMicroPythonファームウェアが入っていることを確認し、下のコードをデバイスにコピーして実行します。
  4. 心拍数を測定する — コードを実行すると、ATOM LiteのLEDが点滅し、シリアルモニタに心拍数とSpO2の値が表示されます。指をセンサーに軽く押し当てて測定します。

サンプルコード(micropython)

# ATOM Lite + Hat Heart (MAX30102) heart rate & SpO2 monitor
# Wiring: Hat Heart I2C -> ATOM Lite Grove port (SDA=26, SCL=32)
import time
from machine import Pin, I2C
from m5stack import lcd

# Initialize I2C on ATOM Lite Grove port
# SDA=26, SCL=32 (Grove port pins)
i2c = I2C(0, scl=Pin(32), sda=Pin(26), freq=400000)

# MAX30102 I2C address is 0x57
MAX30102_ADDR = 0x57

# Simple register write function
def write_reg(reg, value):
    i2c.writeto_mem(MAX30102_ADDR, reg, bytes([value]))

# Initialize sensor (simplified)
def init_sensor():
    # Reset
    write_reg(0x09, 0x40)  # MODE_CONFIG: reset
    time.sleep(0.1)
    # Set mode to SpO2/HR
    write_reg(0x09, 0x03)  # MODE_CONFIG: SpO2 mode
    # Set sample rate and LED current (typical values)
    write_reg(0x0A, 0x27)  # SPO2_CONFIG: 100Hz, 411us pulse width, 200uA
    write_reg(0x0C, 0x1F)  # LED1_PA: 50mA
    write_reg(0x0D, 0x1F)  # LED2_PA: 50mA

# Read FIFO data (simplified)
def read_fifo():
    data = i2c.readfrom_mem(MAX30102_ADDR, 0x07, 6)  # FIFO_DATA register
    # Combine bytes to 18-bit values
    val1 = (data[0] << 16) | (data[1] << 8) | data[2]
    val2 = (data[3] << 16) | (data[4] << 8) | data[5]
    return val1 & 0x3FFFF, val2 & 0x3FFFF

init_sensor()

while True:
    ir, red = read_fifo()
    print("IR:", ir, "Red:", red)
    lcd.clear()
    lcd.print("IR: %d" % ir, 10, 20)
    lcd.print("Red: %d" % red, 10, 50)
    time.sleep(0.1)

コツ・安全上の注意

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

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

エディタで開く →

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