6.1 距離の測定

超音波センサーモジュールは、物体までの距離を決定するために、ソナーおよびレーダーシステムの原理に基づいて動作します。

必要なコンポーネント

このプロジェクトには、以下のコンポーネントが必要です。

名前

このキットに含まれるアイテム

リンク

Keplerキット

450以上

Kepler Kit

以下のリンクから個別にも購入可能です。

S/N

コンポーネント

数量

リンク

1

Raspberry Pi Pico W

1

BUY

2

マイクロUSBケーブル

1

3

ブレッドボード

1

BUY

4

ジャンパーワイヤー

数本

BUY

5

超音波モジュール

1

BUY

回路図

sch_ultrasonic

配線

wiring_ultrasonic

コード

注釈

  • kepler-kit-main/micropython のパスの下にある 6.1_measuring_distance.py ファイルを開くか、このコードをThonnyにコピーしてから、「Run Current Script」をクリックするか、単にF5キーを押して実行してください。

  • 画面右下隅の「MicroPython(Raspberry Pi Pico)」インタプリタをクリックするのを忘れないでください。

  • 詳細なチュートリアルは、 コードを直接開いて実行する を参照してください。

import machine
import time

TRIG = machine.Pin(17, machine.Pin.OUT)
ECHO = machine.Pin(16, machine.Pin.IN)

def distance():
    TRIG.low()
    time.sleep_us(2)
    TRIG.high()
    time.sleep_us(10)
    TRIG.low()
    while not ECHO.value():
        pass
    time1 = time.ticks_us()
    while ECHO.value():
        pass
    time2 = time.ticks_us()
    during = time.ticks_diff(time2, time1)
    return during * 340 / 2 / 10000

while True:
    dis = distance()
    print('Distance: %.2f' % dis)
    time.sleep_ms(300)

プログラムが動作すると、シェルは前方の障害物からの超音波センサーの距離を出力します。

動作原理は?

超音波センサーは、送信プローブによって発生された高周波の音波(超音波)を生成します。この超音波が物体に衝突すると、エコーとして反射され、受信プローブによって検出されます。送信から受信までの時間を計算することで、距離を求めることができます。 この原理に基づいて、 distance() 関数が導出されます。

def distance():
    TRIG.low()
    time.sleep_us(2)
    TRIG.high()
    time.sleep_us(10)
    TRIG.low()
    while not ECHO.value():
        pass
    time1 = time.ticks_us()
    while ECHO.value():
        pass
    time2 = time.ticks_us()
    during = time.ticks_diff(time2, time1)
    return during * 340 / 2 / 10000
  • その中で、最初の数行は10usの超音波を送信するために使用されます。

TRIG.low()
time.sleep_us(2)
TRIG.high()
time.sleep_us(10)
TRIG.low()
  • 次に、超音波が発射された瞬間にプログラムが一時停止し、現在の時間が記録されます。

while not ECHO.value():
    pass
time1 = time.ticks_us()
  • その後、プログラムは再び一時停止します。エコーが受信された後、再度現在の時間が記録されます。

while ECHO.value():
    pass
time2 = time.ticks_us()
  • 最後に、2つの記録の時間差に音速(340m/s)を掛けて、超音波モジュールと障害物の間の距離(すなわち、モジュールから障害物までの超音波の往復)を2倍にします。単位をセンチメートルに変換すると、必要な戻り値が得られます。

during = time.ticks_diff(time2, time1)
return during * 340 / 2 / 10000

注意:超音波センサーが動作している間、プログラムは一時停止するため、複雑なプロジェクトを作成する際には遅延が発生する可能性があります。