注釈

こんにちは、SunFounder Raspberry Pi & Arduino & ESP32 Enthusiast Community on Facebookへようこそ!他の愛好家と一緒に、Raspberry Pi、Arduino、ESP32の世界により深く入り込みましょう。

参加する理由

  • 専門家サポート: 購入後の問題や技術的な課題を、コミュニティと私たちのチームの助けを借りて解決します。

  • 学習と共有: ヒントやチュートリアルを交換して、スキルを向上させましょう。

  • 限定プレビュー: 新製品の発表や先行プレビューに早期アクセスできます。

  • 特別割引: 最新製品を特別割引でお楽しみいただけます。

  • 季節限定キャンペーンとプレゼント: プレゼント企画やホリデーキャンペーンに参加しましょう。

👉 一緒に発見し、創造する準備はできましたか? [こちら] をクリックして、今すぐ参加しましょう!

2.13 超音波センサーモジュール

はじめに

超音波センサーモジュールは、超音波を利用して距離を高精度に測定するためのセンサーです。超音波を送信し、その反射波(エコー)を受信するまでの時間をもとに距離を算出します。この技術は汎用性が高く、ロボット、障害物検知、距離測定など、さまざまな用途で広く利用されています。


必要なもの

このプロジェクトに必要なコンポーネントは以下のとおりです。

COMPONENT INTRODUCTION

PURCHASE LINK

ジャンパーワイヤー

購入

超音波モジュール

購入

Fusion HAT+

-

Raspberry Pi

-


回路図

以下は、超音波センサーモジュールの回路図です。

../_images/2.2.7_sch.png

配線図

以下の図を参考にして回路を組み立ててください。

../_images/2.2.7_bb.png

接続が確実であることを確認してください。EchoピンはRaspberry PiのGPIO22に、TriggerピンはGPIO27に接続します。


サンプルの実行

このチュートリアルで使用するすべてのサンプルコードは ai-lab-kit ディレクトリに含まれています。 以下の手順に従ってサンプルを実行してください。

cd ~/ai-lab-kit/python/
sudo python3 2.13_Ultrasonic.py

このPythonスクリプトは、超音波距離センサーを使用して対象物までの距離を測定し、その結果をコンソールに表示します。実行すると、次のように動作します。

  1. GPIO27(Trigger)およびGPIO22(Echo)に接続されたセンサーが、最も近い物体までの距離を継続的に測定します。

  2. 距離はメートル単位で計算された後、センチメートルに変換され、 Distance: <value> cm の形式で小数点以下2桁まで表示されます。

  3. 距離は0.3秒ごとに更新されるため、ほぼリアルタイムで監視できます。

  4. プログラムは Ctrl+C で中断されるまで継続して動作し、その後安全に終了します。


コード

以下は、このプロジェクトで使用するPythonコードです。

# Import Ultrasonic and Pin class
from fusion_hat.modules import Ultrasonic
from fusion_hat.pin import Pin
from time import sleep

# Create Ultrasonic object
sensor = Ultrasonic(Pin(27), Pin(22))

try:
   # Main loop to continuously measure and report distance
   while True:
      dis = sensor.read() # Measure distance in centimeters
      print('Distance: {:.2f} cm'.format(dis))  # Print the distance with two decimal precision
      sleep(0.3)  # Wait for 0.3 seconds before the next measurement

except KeyboardInterrupt:
   # Handle KeyboardInterrupt (Ctrl+C) to gracefully exit the loop
   pass

コードの解説

  1. インポート:

    from fusion_hat.modules import Ultrasonic
    from fusion_hat.pin import Pin
    from time import sleep
    

    このスクリプトでは、超音波センサーを操作するために fusion_hat ライブラリの Ultrasonic クラスを、待機時間を入れるために time モジュールの sleep 関数をインポートしています。

  2. 初期化:

    sensor = Ultrasonic(Pin(27), Pin(22))
    

    EchoピンをGPIO22、TriggerピンをGPIO27に接続して超音波センサーを初期化します。この設定により、Raspberry Piから超音波信号を送信し、その反射波を受信できます。

  3. メインループ:

    while True:
       dis = sensor.read() # Measure distance in centimeters
       print('Distance: {:.2f} cm'.format(dis))  # Print the distance with two decimal precision
       sleep(0.3)  # Wait for 0.3 seconds before the next measurement
    
    • 最も近い物体までの距離を継続的に測定します。

    • 距離をセンチメートル単位で取得します。

    • 小数点以下2桁までの精度で距離を表示します。

    • 測定間に0.3秒の待機時間を入れることで、センサーの動作を安定させます。

  4. 安全な終了処理:

    try-except ブロックにより、 Ctrl+C で中断された場合でもプログラムを安全に終了できます。

    except KeyboardInterrupt:
       pass
    

トラブルシューティング

  1. 距離が表示されない:

    • 原因: センサーが正しく接続されていない、または電源が供給されていない可能性があります。

    • 対処方法:

      • TriggerピンがGPIO27に、EchoピンがGPIO22に正しく接続されていることを確認してください。

      • センサーに安定した電源が供給されていることを確認してください。

  2. 距離の値が一定、または不正確になる:

    • 原因: 対象物がセンサーに近すぎる、または遠すぎる、あるいは干渉が発生している可能性があります。

    • 対処方法:

      • 対象物がセンサーの有効測定範囲内(通常は2cm〜400cm)にあることを確認してください。

      • 他の超音波機器や反射しやすい表面による干渉がないか確認してください。

  3. 距離が常に0になる:

    • 原因: センサーの故障、または配線ミス。

    • 対処方法: 別のGPIO構成でセンサーをテストするか、故障している場合は交換してください。配線構成も再確認してください。


拡張アイデア

  1. しきい値アラート: 測定距離が特定のしきい値を下回ったときに警告を出すことができます。

if dis < 10:
    print("Warning: Object too close!")
  1. 音によるフィードバック: 距離がしきい値を下回ったときにブザーを鳴らすことができます。

from fusion_hat import Buzzer
buzzer = Buzzer(Pin(4))
if dis < 10:
   buzzer.on()
else:
   buzzer.off()

まとめ

このプロジェクトでは、Raspberry Piで超音波センサーモジュールを使用して距離を測定する方法を学びました。超音波検知の原理とGPIOプログラミングの基礎を理解することで、ロボットからホームオートメーションまで、さまざまなアプリケーションにこの種のセンサーを組み込むことができます。この基礎をもとに、センサーを使ったより高度な実世界インタラクションのプロジェクトへと発展させることができます。