JH7UBCブログ

アマチュア無線 電子工作 家庭菜園など趣味のブログです

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

2019-11-29 14:11:38 | micro:bit

 最もポピュラーな超音波センサー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以内ならほぼ実用になると思います。