Raspberry Pi Pico で超音波距離センサ HC-SR04を使って距離を計測します。
今回紹介するもの
超音波距離センサ (HC-SR04)
特徴
超音波(40KHz)の音波を出し、音が反射して戻ってくるまでの時間を計測します。
電源電圧 | 5V |
出力(Echo) | 5V 往復時間 |
計測距離範囲 | 2 ~ 400cm センサー基板中心から±15° |
音波周波数 | 40kHz |
トリガ信号(Trigger) | 10us |
注意!!
HC-SR04の出力信号は5Vです。
Raspberry Pi Pico (RP2040系)の信号レベルは3.3Vなので、出力信号をRaspberry Pi Picoに入力すると故障の原因になります。
使用するマイコン基板の電圧を変換して使用する必要があります。
3.3Vへの変換方法は「使い方」に記載します。
外観
使用感
5Vでの電源と信号レベルなので、3.3V信号レベルのマイコンとの親和性がよくありません。
ロジックレベル変換モジュールを使用することで解決はできますが、すっきりしないのが難点です。
簡単な命令と知識で、誤差数%の距離測定を手軽に行うことができるので面白いモジュールだと思います。
凹凸の大きいものや、音の反響の小さい布類などには向いていませんが、平面の堅い対象物については精度が期待できます。
音に反応するセンサLM393の記事
準備
使うもの
画像 | 名称、型番 | 用途 |
---|---|---|
超音波距離センサ HC-SR04 | 対象物への音の反射時間を計測します。 | |
Raspberry Pi Pico | HC-SR04へのトリガ出力 読み取った時間から距離を計測します。 | |
ブレッドボード | 配線します | |
双方向ロジックレベル変換モジュール | HC-SR04からの電圧レベルを降圧させます。 5Vから3.3Vへ変換。 または分圧抵抗をで降圧させます。 | |
– | 抵抗 100Ω 200Ω | HC-SR04からの電圧レベルを降圧させます。 5Vから3.3Vへ変換。 またはロジックレベル変換モジュールを使用します。 |
– | ジャンパワイヤ数本 | 配線します |
双方向ロジックレベル変換モジュールについて
動作
説明
100msインターバルにより距離を計測します。
距離はmm単位で算出されます。
時間計測は以下の式を使用します。
距離 (mm) = 331.5m/s + 0.61t x 20degC) ÷ 2 ÷ 1000
配線
ロジックレベル変換モジュールを使用した配線
Raspberry Pi Pico | 配線 | ロジックレベル変換モジュール | 配線 | HC-SR04 |
---|---|---|---|---|
VBUS(5V) | 赤 | 5V側 LV | 赤 | VCC |
3V3 | 赤 | 3.3V側 LV | ||
GND | 黒 | 3.3V側GND | 黒 | GND |
GPIO2 | 青 | 3.3V側LV1 | ||
5V側LV1 | 青 | Echo | ||
GPIO3 | 黄 | 黄 | Trig | |
5V側 GND | 黒 | GND |
ロジックレベル変換モジュールを使用した配線図
分圧抵抗を使用した配線図
スケッチ
/**********************************************************************
【ライセンスについて】
Copyright(c) 2022 by tamanegi
Released under the MIT license
'http://tamanegi.digick.jp/about-licence/
【マイコン基板】
Raspberry Pi Pico
【スケッチの説明】
HC-SR04 超音波センサーを使用して距離を計測します。
距離の係数は
Distance(mm) = ((331.5m/s + 0.61t * 20degC) / 2) / 1000
【ライブラリ】
Raspberry Pi Pico/RP2040 > Raspberry Pi Pico
【準備】
HC-SR04 の電源は5Vで、信号も5Vです。
Raspberry Pi PicoのGPIOに5V印加すると故障の原因になるので、3.3Vへ電圧変換します。
Raspberry Pi Pico <-> HC-SR04
VCC(5V) <-> VCC
GND <-> GND
GPIO2 <-> Echo(3.3Vへ降圧する必要がある)
GPIO3 <-> Trig
降圧例1 : 分圧抵抗
(HC-SR04) Echo -> 100Ω -> (Pico) GPIO2 -> 200Ω -> (Pico) GND
降圧例2 : ロジックレベル変換モジュール (5V -> 3V)
(HC-SR04) Echo -> ロジックレベル変換モジュール -> (Pico) GPIO2
【バージョン情報】
2023/4/9 : 新規
**********************************************************************/
#define PIN_ECHO 2
#define PIN_TRIGGER 3
#define TRIGGERPULSE_US 10
#define SOUNDSPEED (331.5 + 0.61 * 20) //音速 331.5m/s, 摂氏 0.61t, 20℃
void setup()
{
Serial.begin(115200);
//トリガピンと、エコーピンの設定
pinMode(PIN_TRIGGER, OUTPUT);
pinMode(PIN_ECHO, INPUT);
//トリガはLOWに設定
digitalWrite(PIN_TRIGGER, LOW );
delay(100);
}
void loop()
{
//距離測定、トリガ発振
digitalWrite(PIN_TRIGGER, HIGH );
delayMicroseconds(TRIGGERPULSE_US);
digitalWrite(PIN_TRIGGER, LOW );
//反射時間の読み取り (単位 us)
double DdTwoWayTime_us = pulseIn(PIN_ECHO, HIGH); //us
double DdOneWayTime_us = DdTwoWayTime_us / 2; //往復時間の計測を片道時間にする
double DdDistance_mm = DdOneWayTime_us * SOUNDSPEED / 1000; // 距離(mm)を計算
Serial.println(DdDistance_mm);
delay(100);
}
結果
HC-SR04と壁との距離を測定することができました。
この時の測定は100mmの距離を測定したところ97.6mmでした。
(参考 : 室温 20℃)
2Mまでの距離を計測してグラフにしました。
橙線が目標値との誤差です。
近距離が若干誤差が大きく出ていますが、ほとんど 1~2%程度と精度は悪くありません。
コメント