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以内ならほぼ実用になると思います。