こんにちは! けい(Twitter)です。
今回は、Raspberry Pi Pico(ラズピコ)で超音波センサーを使う方法についてまとめていきたいと思います。
ラズパイよりもリアルタイム性に優れているラズピコは、より超音波センサーでの距離測定に向いていると言えます。
目次
必要なもの
Raspberry Pi Pico
超音波センサー
抵抗
使う抵抗は1kΩと2kΩの2本だけですが、このような抵抗セットがあると今後も便利です。
その他
Raspberry Pi Picoとの通信+電源ケーブルとしてmicroUSBケーブルが必要です。
通信機能がないケーブルもあるので、ご確認ください。
配線
GP14をTriggerに、GP15をEchoに接続します。
上側の抵抗が1kΩで、下側の抵抗が2kΩのものを使用しています。
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を測定出来ていますね。