これは Grove インターフェース互換のマグネットスイッチモジュールです。CT10 密閉型リードスイッチをベースにして
M5StickC Plus2 × 超音波距離センサ HC-SR04
超音波距離センサー HC-SR04 とは?
HC-SR04 は、超音波を使って物体までの距離を測るセンサーです。
ロボットや電子工作でよく使われ、「目が2つある」見た目が特徴です。
仕組み
① 超音波を出す
- センサーの Trig(トリガ) ピンに短いパルスを送る
- すると、右側の送信器から 超音波(人には聞こえない音) が出る
② 跳ね返りを待つ
- 超音波が物体に当たる
- 反射して戻ってくる
③ 戻ってきた時間を測る
- 左側の受信器が反射波を受信
- Echo(エコー)ピンが HIGH になっている時間を測る
距離が分かる理由
- 音は 空気中を一定の速さ(約340m/s) で進む
- 「行って戻るまでの時間」が分かれば、距離は計算できる
距離の計算式(cm)
距離 = (音が返ってくるまでの時間 × 音速) ÷ 2
ArduinoやESP32では、だいたいこう書くことが多い:
distance_cm = duration * 0.0343 / 2;
1) 準備
- M5StickC Plus2
- 超音波距離センサ HC-SR04
- ジャンパ線
- 抵抗 2本(1kΩ + 2kΩ 程度)※重要
※HC-SR04は Groveではない(直配線)
2) HC-SR04の超要点
- 右:送信(Trig)
- 左:受信(Echo)
- 超音波を出して → 反射が返るまでの時間を測る
- 距離 = 時間 × 音速 ÷ 2
4) 配線(安全版・確定)
電源
- HC-SR04 VCC → M5 5V
- HC-SR04 GND → M5 GND
信号
- Trig → GPIO32(3.3V出力でOK)
- Echo → GPIO33
5) サンプルコード(M5表示つき・最小)
#include <M5Unified.h>
const int TRIG_PIN = 32;
const int ECHO_PIN = 33;
void setup() {
M5.begin();
M5.Display.setTextSize(2);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
}
void loop() {
// トリガパルス
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(5);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
// Echo時間取得
long duration = pulseIn(ECHO_PIN, HIGH, 30000); // 30msタイムアウト
// 距離計算(cm)
float distance = duration * 0.0343 / 2.0;
M5.Display.setCursor(0, 0);
if (duration == 0) {
M5.Display.println("Out of range");
} else {
M5.Display.printf("Dist:\n%.1f cm\n", distance);
}
delay(200);
}
6) 動作確認
- センサ正面に手を近づける
- 数値が 10〜200cm 程度で変化すればOK
- 近すぎ(<2cm)・遠すぎ(>4m)は不安定

7) よくあるハマりどころ
Q1. 値が出ない / 0のまま
- Echo分圧忘れ
- Trig/Echo逆
pulseInタイムアウト
Q2. 数値がガタガタ
- 壁が斜め
- 柔らかい物(布・服)
- 超音波が拡散してる