【Raspberry Pi Pico】超音波センサーで距離を測定する方法

【Raspberry Pi Pico】超音波センサーで距離を測定する方法

こんにちは! けい(Twitter)です。

今回は、Raspberry Pi Pico(ラズピコ)で超音波センサーを使う方法についてまとめていきたいと思います。

ラズパイよりもリアルタイム性に優れているラズピコは、より超音波センサーでの距離測定に向いていると言えます。

必要なもの

Raspberry Pi Pico

超音波センサー

ELEGOO Arduino用 HC-SR04超音波距離センサー5PCS
ELEGOO

抵抗

使う抵抗は1kΩと2kΩの2本だけですが、このような抵抗セットがあると今後も便利です。

その他

created by Rinker
Sintron
¥343 (2023/05/26 13:50:35時点 Amazon調べ-詳細)

Raspberry Pi Picoとの通信+電源ケーブルとしてmicroUSBケーブルが必要です。
通信機能がないケーブルもあるので、ご確認ください。

created by Rinker
Amazonベーシック(AmazonBasics)
¥711 (2024/03/14 11:19:36時点 Amazon調べ-詳細)

配線

GP14をTriggerに、GP15をEchoに接続します。

上側の抵抗が1kΩで、下側の抵抗が2kΩのものを使用しています。

なぜ抵抗を使うの?

超音波センサーの動作電圧が5Vなのに対し、ラズピコは3.3Vです。
よって、超音波センサーからの入力電圧が5Vのままだとラズピコが壊れる可能性があります。
そのため、入力電圧を5V→3.3Vにするために抵抗を用いて分圧を行っています。

詳しくは以前の記事でまとめているので、そちらを参考にしてください。

MicroPythonプログラム

MicroPythonでプログラムを書きました。

from machine import Pin
import utime
trigger = Pin(14, Pin.OUT)
echo = Pin(15, Pin.IN)

def read_distance():
    trigger.low()
    utime.sleep_us(2)
    trigger.high()
    utime.sleep(0.00001)
    trigger.low()
    while echo.value() == 0:
        signaloff = utime.ticks_us()
    while echo.value() == 1:
        signalon = utime.ticks_us()
    timepassed = signalon - signaloff
    distance = (timepassed * 0.0343) / 2
    print("dinstance: ",distance,"cm")

while True:
   read_distance()
   utime.sleep(0.1)

プログラム解説

def read_distance():

read_distanceという関数で、超音波センサーで距離を測定しています。

    trigger.high()
    utime.sleep(0.00001)
    trigger.low()

トリガーピンを10μsだけHighにしています。

    while echo.value() == 0:
        signaloff = utime.ticks_us()
    while echo.value() == 1:
        signalon = utime.ticks_us()
    timepassed = signalon - signaloff
    distance = (timepassed * 0.0343) / 2

whileループでEchoピンからの入力を監視します。

    timepassed = signalon - signaloff

timepassedという変数に超音波センサーから出たパルス信号が送信されてから、受信されるまでの時間(単位はμs)が格納されます。

    distance = (timepassed * 0.0343) / 2

音の速度343m/s (0.0343cm/μs) を乗算すると、往復分の距離になり、往復分の距離を半分にすることで片道分の距離を計算します。

実行結果

実際に上のプログラムを使って、距離を測定していきましょう。
ラズピコから15cm程度離れた場所に壁を置きます。

プログラムを実行します。

15cmを測定出来ていますね。