注釈

こんにちは、SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Communityへようこそ!Facebook上で、仲間と一緒にRaspberry Pi、Arduino、ESP32をさらに深く探求しましょう。

なぜ参加するのか?

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

  • 学びと共有:スキルを向上させるためのヒントやチュートリアルを交換。

  • 限定プレビュー:新製品発表や予告編に早期アクセス。

  • 特別割引:最新製品の特別割引を楽しむ。

  • フェスティブプロモーションとプレゼント:プレゼントやホリデープロモーションに参加。

👉 私たちと一緒に探索と創造を始める準備はできましたか?[ここ]をクリックして、今すぐ参加しましょう!

レッスン23: 超音波センサーモジュール (HC-SR04)

このレッスンでは、超音波距離センサーをRaspberry Piに接続し、距離測定を行うためのPythonスクリプトを書く方法を学びます。センサーのトリガーピンをGPIO 17に、エコーピンをGPIO 27に配線する手順を説明します。提供されたPythonコードを使用して距離を測定し、センチメートル単位で表示します。

必要なコンポーネント

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

全てが揃ったキットを購入すると便利です。リンクはこちらです:

Name

ITEMS IN THIS KIT

LINK

Universal Maker Sensor Kit

94

Universal Maker Sensor Kit

以下のリンクから個別に購入することもできます。

Component Introduction

Purchase Link

Raspberry Pi 5

-

超音波センサーモジュール (HC-SR04)

購入

ブレッドボード

購入

配線

../_images/Lesson_23_ultrasonic_sensor_Pi_bb.png

コード

#!/usr/bin/env python3
from gpiozero import DistanceSensor
from time import sleep

# Initialize the DistanceSensor using GPIO Zero library
# Trigger pin is connected to GPIO 17, Echo pin to GPIO 27
sensor = DistanceSensor(echo=27, trigger=17)

try:
    # Main loop to continuously measure and report distance
    while True:
        dis = sensor.distance * 100  # Measure distance and convert from meters to 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. ライブラリのインポート

    スクリプトは、超音波センサーのためにgpiozeroライブラリから DistanceSensor を、タイミング制御のためにtimeモジュールから sleep をインポートすることから始まります。

    from gpiozero import DistanceSensor
    from time import sleep
    
  2. 距離センサーの初期化

    DistanceSensor``オブジェクト ``sensor が作成され、 echo ピンと trigger ピンがそれぞれGPIO 27とGPIO 17に接続されます。これらのピンは、距離測定のために超音波信号の送受信に使用されます。

    sensor = DistanceSensor(echo=27, trigger=17)
    
  3. 継続的な監視ループの実装

    • 無限ループ( while True: )を持つ``try``ブロックが使用され、継続的に距離を測定します。

    • ループ内で、 sensor.distance はメートル単位で測定された距離を返し、それをセンチメートルに変換して dis に保存します。

    • 距離は format メソッドを使用して小数点以下2桁の精度で表示されます。

    • ``sleep(0.3)``は各測定の間に0.3秒の遅延を追加し、読み取りの頻度を制御してCPUの負荷を軽減します。


    try:
        while True:
            dis = sensor.distance * 100
            print('Distance: {:.2f} cm'.format(dis))
            sleep(0.3)
    
  4. 優雅な終了のためのKeyboardInterruptの処理

    ``except``ブロックはKeyboardInterrupt(通常はCtrl+C)をキャッチするために使用されます。これが発生すると、追加のアクションを取ることなくスクリプトはループを正常に終了します。

    except KeyboardInterrupt:
        pass