Micro:bit MicroPython HC-SR04による距離の測定

2019.11.29 JH7UBC


最もポピュラーな超音波センサーHC-SR04を使って、距離を測定する実験を行いました。
HC-SR04で、センサーと物体までの距離を測定する手順は、次のとおりです。

1) micro:bitのpin0から10us幅以上のトリガパルスをHC-SR04のTrig端子に加えます。
2) HC-SR04から40KHzの超音波が発信され、物体に反射されて戻ってきます。
 Echo端子には、発信から受信に対応するEchoパルスが出力されます。
3) Echoパルスのパルス幅の時間t(s)を測定します。
 超音波は、センサーと物体の間の距離L(m)の2倍を進んだので、音速をV(m/s)とすると、2L = V * t より、 L = (V*t)/2 となります。
 音速は、温度によって変化し、V(m/s)=331.5+0.6*temp(℃)で近似されます。精度を求めなければ、V=340m/sとすれば良いと思います。
 センサーと物体間の距離Lを下の図の式で、cm単位で計算します。

 接続回路図です。HC-SR04は、5V動作ですので、HC-SR04のECHO出力を分圧して、micro:bitのpin1に入れています。

Trigパルスは、10us以上とされています。pin0からパルスを出力するには、
pin0.write_digital(1)
pin0.write_digital(0)
とすれば良く、これで下の図のように約70us幅のパルスが発生します。

TrigerパルスをHC-SR04に加えると、下の図のように物体までの距離に対応したEchoパルス(赤色)が帰ってきます。

スクリプトです。
ECHOパルスは、立ち上がりの時刻t1と立下りの時刻t2をutime_us()で測定し、その差をutime.ticks_diff(t2,t1)でパルス幅t(us)を求めます。
測定した距離Lは、cm単位でLEDにスクロール表示しています

'''
micro:bit HC-SR04による距離の測定
2019.11.28
JH7UBC Keiji Hata
'''
from microbit import *
import utime
# pin0初期化
pin0.write_digital(0)
while True:
    # 音速を計算する
    V = 0.6 * temperature() + 331.5
    # トリガパルス
    pin0.write_digital(1)
    pin0.write_digital(0)
    # 距離の測定と表示
    while pin1.read_digital() == 0:
        utime.sleep_us(1)
    t1 = utime.ticks_us()
    while pin1.read_digital():
        utime.sleep_us(1)
    t2 = utime.ticks_us()
    t = utime.ticks_diff(t2, t1)
    L = int(t * V / 20000)
    display.scroll(L)
    sleep(100)

測定の様子です。

実測の結果です。

L(cm)   測定値(cm)
10        8
20       19〜21
30       30
40       38〜40
50       49
60       57〜60
70       68〜70
80       78〜79
90       88〜90
100     98
110    109
120    117
130    122〜124
140    122〜124

といった具合でした。
1m程度までなら1〜2cmの誤差で測定できました。1m以内ならほぼ実用になると思います。

inserted by FC2 system