48
Raspberry Pi Picoで超音波センサーを使う方法

電子機器で動きや距離を検知する方法は数多くあります。別のチュートリアルでは、Raspberry Pi PicoでPIRモーションセンサーを使用する方法を説明しました。警報システムに使用されるPIRは、赤外線を利用して室内の動体を検知します。例えば、ユーザーがデバイスの前で手を振ってデバイスを起動させたいようなプロジェクトに適しています。Raspberry Piで手洗いタイマーを作る方法に関するチュートリアルでは、PIRを使用しています。

一方、超音波センサーは、音波パルスと簡単な計算を用いて、前方にある物体との距離を測定します。ロボットが障害物にぶつかったり、歩いたりしないようにするために、超音波センサーがよく使われています。また、トイレットペーパーの残量が減ったことを知らせるRaspberry Pi用トイレットペーパーリマインダーにも超音波センサーを使用しました。このチュートリアルでは、超音波距離センサーHC-SR04+を使用して、Raspberry Pi Picoから物体までの距離を素早く測定します。 

このプロジェクトに必要なものは

  • MicroPython を実行する Raspberry Pi Pico (Raspberry Pi Pico の設定方法を参照)
  • Thonnyがコンピュータにインストールされました
  • HC-SR04PまたはHC-SR04+超音波センサー
  • 4 x オス-オスジャンパーワイヤー
  • ハーフサイズまたはフルサイズのブレッドボード

画像

1

2

Raspberry Pi Picoを使った超音波センサー
(画像提供:Tom's Hardware)

Raspberry Pi Pico の超音波センサーのハードウェア設定 

このビルドでは、Raspberry Pi Pico GPIOで使用されている3Vロジックと互換性のある超音波センサーのみを使用しています。HC-SR04PとHC-SR04+は3Vと5Vロジックに対応しており、Raspberry Pi Pico、Pi、Arduinoプロジェクトに最適です。 

Raspberry Pi Picoを使った超音波センサー

(画像提供:Tom's Hardware)

2. HC-SR04P超音波センサーをブレッドボードに挿入します。 

Raspberry Pi Picoを使った超音波センサー

(画像提供:Tom's Hardware)

3.オス-オスのジャンパー ワイヤを使用して、  Raspberry Pi Pico の3V3 ピンを超音波センサーのVCC ピンに接続します。

Raspberry Pi Picoを使った超音波センサー

(画像提供:Tom's Hardware)

4.ジャンパー線を使用して、  Raspberry Pi Pico のGND ピンを超音波センサーのGND ピンに接続します。

Raspberry Pi Picoを使った超音波センサー

(画像提供:Tom's Hardware)

5.超音波センサーのトリガー ピンをRaspberry Pi Pico の GPIO ピン 3 に接続します。

Tom's Hardware の最高のニュースと詳細なレビューをあなたの受信箱に直接お届けします。

Raspberry Pi Picoを使った超音波センサー

(画像提供:Tom's Hardware)

6.超音波センサーのEcho ピンをRaspberry Pi Pico の GPIO ピン 2 に接続します。

Raspberry Pi Picoを使った超音波センサー

(画像提供:Tom's Hardware)

Raspberry Pi Pico の超音波センサーのソフトウェア設定 

回路が構築されたら、Raspberry Pi Pico を接続し、Thonny アプリケーションを開きます。

1.マシンライブラリからPinクラスをインポートし、次にutimeライブラリをインポートします。前者はGPIOピンの制御に使用され、後者は時間ベースの関数のライブラリです。

from machine import Pin
import utime

2. 2つの新しいオブジェクト「trigger」と「echo」を作成します。これらのオブジェクトは、超音波センサーで使用するPicoのGPIOピンを設定します。例えば、triggerピンは電流パルスを送信するために使用されるため、出力ピンとなります。echoピンは反射パルスを受信するため、echoは入力ピンとなります。

trigger = Pin(3, Pin.OUT)
echo = Pin(2, Pin.IN)

3.読み取りに必要なコードを含む関数 ultra() を作成します。

def ultra():

4.トリガー ピンを低く引き下げてアクティブでないことを確認し、2 マイクロ秒間一時停止します。

 trigger.low() utime.sleep_us(2)

5.トリガーピンを5マイクロセンドの間ハイに引いた後、ローに引いてください。これにより、超音波センサーから短いパルスが送信され、その後パルスがオフになります。

 trigger.high() utime.sleep_us(5) trigger.low()

6.エコーピンをチェックするためのwhileループを作成します。エコーパルスが受信されない場合は、変数signaloffを更新し、マイクロ秒単位のタイムスタンプを設定します。

 while echo.value() == 0: signaloff = utime.ticks_us()

7.もう一つのwhileループを作成し、今度はエコーを受信したかどうかを確認します。これにより、現在のタイムスタンプ(マイクロ秒単位)がsignalon変数に格納されます。

 while echo.value() == 1: signalon = utime.ticks_us()

8.新しい変数 timepassed を作成します。この変数には、パルスがセンサーを離れ、オブジェクトに当たってエコーとしてセンサーに戻るまでにかかる合計時間の値が格納されます。

 timepassed = signalon - signaloff

9.新しい変数「distance」を作成します。この変数には方程式の答えが格納されます。移動時間(timepassed)に音速(343.2 m/s、1マイクロ秒あたり0.0343 cm)を掛けます。この式の積を2で割ります。必要なのは移動距離ではなく、物体からセンサーまでの距離だけだからです。

distance = (timepassed * 0.0343) / 2

10.距離を示すメッセージを Python シェルに出力します。

 print("The distance from object is ",distance,"cm")

11. 関数から抜け出して、関数を毎秒実行するループを作成します。

while True: ultra() utime.sleep(1)

完全なコードは次のとおりです。

完全なコードリスト

from machine import Pin
import utime
trigger = Pin(3, Pin.OUT)
echo = Pin(2, Pin.IN)
def ultra(): trigger.low() utime.sleep_us(2) trigger.high() utime.sleep_us(5) 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("The distance from object is ",distance,"cm")
while True: ultra() utime.sleep(1)

コードをRaspberry Pi Picoにcode.pyとして保存し、緑の矢印をクリックしてコードを実行します。Pythonシェルに1秒ごとの距離が表示されます。

Raspberry Pi Picoを使った超音波センサー

(画像提供:Tom's Hardware)