皆さんこんにちは。yossyです。
電子工作でよく使われるセンサーの一つに、超音波距離センサーというものがあります。これは、名前の通り超音波を使って距離を測るためのセンサーです。
この記事では、Raspberry Pi Picoで超音波距離センサーを使う方法について解説します。
超音波距離センサー HC-SR04とは?
超音波距離センサー HC-SR04は、超音波を使って距離を計測するためのセンサーです。基本的なセンサーの一つで、電子工作ではよく使われます。
個人的な推しポイントは値段が安いところです。中国の通販サイト、AliExpressだと1つあたり約100円から入手できます。もちろん日本のAmazonなどでも購入できるので、たくさん買っていろんな工作に使えます!

なにができる?:距離に応じた装置が作れる!
超音波距離センサーは距離を測るセンサーなので、
- 自動消毒スプレー
- 自動開閉ゴミ箱
- 水位測定機
などなど、距離や接近を使った装置を作ることができます。
私も過去にこのセンサーを使った障害物検出カーを製作したことがあります。

超音波距離センサーの仕組み
超音波距離センサーは、超音波を使って距離を測定していますが、具体的な仕組みはどうなっているのでしょうか?
超音波距離センサーは、超音波の送信機/受信機を持っています。このセンサーに短い信号を送ると、送信機から1回超音波が発射されます。発射された超音波は物に当たると反射して、センサーに戻ってきます。この超音波を受信機で受けとります。

この送信→反射→受信までの時間を、GPIOを使って計測します。
計測した時間と音速から、物体との距離はこのように表せますね。
物体との距離 = 時間 ÷ 2 × 音速

時間を半分にしているのは、往復しているからです!
と、このように超音波距離センサーは超音波を発してから反射して戻って来るまでの時間を計測し、その時間と音速から物体との距離を求めるという仕組みになっています。
「超音波」と聞くとなにかハイテクなことをしているイメージが湧いてきますが、実際にしていることはかなりアナログです。
Raspberry Pi Picoで超音波距離センサーを使う方法
それでは、実際にRaspberry Pi PicoでHC-SR04を使う方法を解説します。
必要なもの
必要なものはこちら。
- Raspberry Pi Pico
- HC-SR04
- 抵抗(1KΩ,2KΩ)
- ジャンパワイヤー
- ブレッドボード
特に、抵抗はこのセンサーを使うときに大事になってくるので持っていない人は用意しましょう。





その他、必要なものの購入はこちらから!
・必要なものがすべて揃ったスターターキット!


・HC-SR04 本体


・Raspberry Pi Pico
・ジャンパワイヤー


・ブレッドボード
抵抗を使う理由:分圧するため
先ほど、抵抗が必要と説明しましたが、これにはマイコンに使われる電圧が関係しています。
HC-SR04は、出力の信号が5Vで出てきます。これを入力が3.3Vのラズピコに接続すると、電圧が違うためラズピコが壊れる可能性があります。そのため、抵抗を使って電圧を分けて3.3Vを作ります。
配線
配線はこのようになります。
HC-SR04 | ラズピコのピン | 説明 |
---|---|---|
VCC | VBUS | 5V電源 |
GND | GND | センサーの GND |
TRIG | GP15 | トリガ入力 |
ECHO | GP14 | 出力(後述の電圧分圧を介して接続) |
ECHOピンの分圧回路次のイラストのようになっています。(一番下はGNDです。)


実際に配線した写真はこんな感じです。




プログラム
距離を計測して、Thonnyのシェルに表示するプログラムはこちらです。
from machine import Pin, time_pulse_us
import time
# センサーのピン設定
trigger = Pin(15, Pin.OUT)
echo = Pin(14, Pin.IN)
def get_distance():
#トリガーパルスの発生
trigger.low()
time.sleep_us(2)
trigger.high()
time.sleep_us(10)
trigger.low()
#エコーパルスの測定
pulse_time = time_pulse_us(echo, 1, 30000)
if pulse_time < 0:
return None
#距離への変換
distance_cm = (pulse_time / 2) * 0.0343
return distance_cm
# メインループ
while True:
dist = get_distance()
if dist is None:
print("測定できませんでした")
else:
print("距離: {:.2f} cm".format(dist))
time.sleep(1)
プログラムの解説
今回は、get_distance()
関数の動作を解説します。
def get_distance():
#トリガーパルスの発生
trigger.low()
time.sleep_us(2)
trigger.high()
time.sleep_us(10)
trigger.low()
#エコーパルスの測定
pulse_time = time_pulse_us(echo, 1, 30000)
if pulse_time < 0:
return None
#距離への変換
distance_cm = (pulse_time / 2) * 0.0343
return distance_cm
まずは、トリガーパルスの発生。トリガーピンを2マイクロ秒オフにして、信号を安定化します。その後10マイクロ秒のパルスを送ります。
次に、エコーパルスの測定です。time_pulse_us()
は、指定したピンがある電圧レベルになっている時間をマイクロ秒単位で測る関数です。
簡単に言うと、あるピンがHIGH(またはLOW)になっている間の時間を測るということです。
HC- SR04は、距離に応じてECHOピンがHIGHになっている長さが変わります。その長さを距離を求める式に代入することで、距離を計算することができます。
注意するポイントは、一番右の30000という値はタイムアウト時間を表しています。この長さを超えると返り値がマイナスになります。今回はマイナスになった場合はNoneを返すようにします。
最後に距離への変換です。記事前半に紹介したように音速を使って距離を計算します。
実際に使ってみた


こんな感じで距離を測ってみます。


精度もまあまあで、電子工作用としては十分に使えますね!
まとめ
今回は、Raspberry Pi Picoで超音波距離センサーを使う方法を解説しました!
最初にお伝えした通り、このセンサーは電子工作にとても良く使われるセンサーです。
このセンサーを活用すれば、面白い・役に立つ装置が作れると思います!
ということで、皆さん電子工作ライフを楽しみましょう✨
コメント