M5Stackで風速計

Wind speed meter ・ 风速计

超音波距離センサで風速を測定し、Core2に記録します。

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

部品リスト(BOM)

部品役割ポートリンク・価格
M5Stack Core2Controller with displaygrove_i2c, grove_analog, grove_uart, mbusofficial page — $46.9
Unit Ultrasonic-IO (UNIT SONIC IO)Ultrasonic distance sensorgrove_analogofficial page — $5.95

配線

作り方

M5Stack Core2と超音波距離センサーUnit Ultrasonic-IOで風速を測定し、記録する装置です。センサーが物体までの距離を測り、その変化から風速を計算します。Core2の画面に風速を表示し、データを保存できます。

  1. 部品を用意する — 用意するもの:M5Stack Core2本体、Unit Ultrasonic-IO(超音波距離センサーユニット)、Groveケーブル(黒色、アナログ用)、Core2とパソコンをつなぐUSB-Cケーブル。
  2. Groveケーブルでつなぐ — Unit Ultrasonic-IOはアナログ(黒)接続です。Groveケーブルの一端をユニットのGroveポートに、もう一端をCore2の黒いPort.B(アナログ/IOポート)に差し込みます。コネクタは一方向にしか入らないので、無理に押し込まないでください。
  3. センサーを設置する — 超音波センサーを風が当たる場所に固定します。センサーの前方に障害物がないようにし、測定面が風向きに対して垂直になるように設置してください。センサーから物体までの距離が2cm~450cmの範囲内になるようにします。
  4. パソコンにつないでMicroPythonを書き込む — USB-CケーブルでCore2をパソコンにつなぎます。UIFlowやThonnyなどのツールで、Core2にMicroPythonファームウェアが入っていることを確認し、下のコードをデバイスにコピーして実行します。
  5. 風速を測定して確認する — コードを実行すると、Core2の画面に距離と風速が表示されます。風を当てると数値が変化することを確認してください。データはシリアルモニターにも出力されます。

サンプルコード(micropython)

# M5Stack Core2 + Unit Ultrasonic-IO (wind speed measurement)
# Wiring: Unit Ultrasonic-IO -> Core2 black Port.B (analog/GPIO)
import time
from machine import Pin, ADC
from m5stack import lcd

# Port.B pins: analog input pin 36, trigger pin 26 (not used for analog mode)
# The ultrasonic unit outputs analog voltage proportional to distance
sensor = ADC(Pin(36))
sensor.atten(ADC.ATTN_11DB)  # 0-3.3V range

# Constants for wind speed calculation (calibrate as needed)
# Distance measurement: voltage to cm (example: 0.1V = 10cm, adjust per sensor)
VOLTS_PER_CM = 0.01  # 1cm = 0.01V (typical)
SAMPLE_INTERVAL = 0.1  # seconds between samples
WINDOW_SIZE = 10  # number of samples for averaging

# Initialize variables
prev_distance = None
samples = []

while True:
    raw = sensor.read()  # 0-4095
    voltage = raw / 4095 * 3.3
    distance = voltage / VOLTS_PER_CM  # in cm
    
    # Calculate wind speed from distance change
    if prev_distance is not None:
        delta = distance - prev_distance
        speed = abs(delta) / SAMPLE_INTERVAL  # cm/s
        samples.append(speed)
        if len(samples) > WINDOW_SIZE:
            samples.pop(0)
        avg_speed = sum(samples) / len(samples)
        
        # Display
        lcd.clear()
        lcd.print('Distance: %.1f cm' % distance, 10, 20)
        lcd.print('Wind speed: %.1f cm/s' % avg_speed, 10, 60)
        print('Distance: %.1f cm, Wind speed: %.1f cm/s' % (distance, avg_speed))
    
    prev_distance = distance
    time.sleep(SAMPLE_INTERVAL)

コツ・安全上の注意

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

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

エディタで開く →

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