M5Stackで駐車空き検知

Parking occupancy sensor ・ 车位检测

超音波距離センサーで駐車スペースに車がいるかどうかを検知します。

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

部品リスト(BOM)

部品役割ポートリンク・価格
M5Stack Core2Controllergrove_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ケーブル1本(ユニットに付属)、Core2とパソコンをつなぐUSB-Cケーブル。
  2. Groveケーブルでつなぐ — Unit Ultrasonic-IOはアナログ(黒)接続です。Groveケーブルの一端をユニットに、もう一端をCore2の黒いPort.B(アナログ/IOポート)に差し込みます。コネクタは一方向にしか入らないので、無理に押し込まないでください。
  3. センサーを設置する — 超音波センサーを駐車スペースの真上または真横に、車が停まったときにセンサーと車の距離が変化する位置に固定します。センサーの前面(丸い部分)に障害物がないようにしてください。
  4. パソコンにつないでMicroPythonを書き込む — USB-CケーブルでCore2をパソコンにつなぎます。UIFlowやThonnyなどのツールで、Core2にMicroPythonファームウェアが入っていることを確認し、下のコードをデバイスにコピーして実行します。
  5. 距離のしきい値を調整する — コードを実行し、画面に出る距離の数値を見ます。車がないときの距離と、車があるときの距離をメモします。希望する判定になるよう、コード内のOCCUPIED_THRESHOLDを調整します。
  6. 動作をテストする — 実際に車を停めて、画面の表示が「Occupied」になるか確認します。車を出して「Empty」に変わるかも確認します。正しく動作すれば完成です。

サンプルコード(micropython)

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

# Port.B pins on Core2: analog input pin 36, trigger pin 26 (not used here)
# Ultrasonic-IO outputs analog voltage proportional to distance
sensor = ADC(Pin(36))
sensor.atten(ADC.ATTN_11DB)   # read full 0-3.3V range

# Calibration: measure distance when empty and occupied, set threshold accordingly
OCCUPIED_THRESHOLD = 1500   # raw ADC value, adjust after testing

while True:
    value = sensor.read()        # raw distance reading (0-4095)
    # Convert to approximate distance in cm (optional, for display)
    # distance_cm = (value / 4095) * 450  # linear approximation
    lcd.clear()
    lcd.print('ADC: %d' % value, 10, 20)
    if value < OCCUPIED_THRESHOLD:    # closer = occupied
        lcd.print('Status: Occupied', 10, 60)
    else:
        lcd.print('Status: Empty', 10, 60)
    time.sleep(1)               # update every second

コツ・安全上の注意

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

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

エディタで開く →

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