注釈

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

参加する理由

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

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

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

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

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

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

4.3 バックアラーム

はじめに

車をガレージに安全に駐車するには、特に狭い場所では慎重な操作が必要です。このプロジェクトでは、超音波センサーとブザーを使ってバックアラームシステムを作成します。このシステムは実際の駐車支援センサーのように動作し、障害物までの距離に応じて音でフィードバックを返します。


必要なもの

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

COMPONENT INTRODUCTION

PURCHASE LINK

ブレッドボード

購入

ジャンパーワイヤー

購入

抵抗器

購入

ブザー

購入

トランジスタ

購入

超音波モジュール

購入

Fusion HAT+

-

Raspberry Pi

-


回路図

このシステムでは、超音波センサーを使って障害物までの距離を測定します。ブザーは距離に応じて異なる頻度で警告音を出します。

../_images/4.1.6_sch.png

配線図

以下の配線図に従ってシステムを組み立ててください。

../_images/4.1.6_bb.png

サンプルの実行

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

cd ~/ai-lab-kit/python/
sudo python3 4.3_ReversingAlarm.py

このPythonスクリプトは、超音波距離センサーとブザーを組み合わせて、リアルタイム距離監視システムを構築します。実行すると、次のように動作します。

  1. 距離測定: 超音波センサーが前方の最も近い物体までの距離を測定し、その値をセンチメートルに変換します。

  2. ブザー警告: 測定した距離に応じて次のように動作します。

    • 50 cmより大きい: ブザーは鳴りません。

    • 20 cmから50 cmの間: 短い間隔を空けて2回ブザーが鳴ります。

    • 20 cm以下: 接近を示すためにブザーがすばやく連続して鳴ります。


コード

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

#!/usr/bin/env python3

import time
from fusion_hat.modules import Ultrasonic, Buzzer
from fusion_hat.pin import Pin

# Ultrasonic sensor: Trig -> GPIO 27, Echo -> GPIO 22
sensor = Ultrasonic(trig=Pin(27), echo=Pin(22))

# Buzzer connected to GPIO 17
buzzer = Buzzer(Pin(17))

def get_distance():
    """
    Read distance from ultrasonic sensor and print it.
    Returns distance in centimeters.
    """
    dis = sensor.read()
    print(f"Distance: {dis:.2f} cm")
    return dis


def beep(times, on_time, off_time):
    """
    Make the buzzer beep with given timing.
    """
    for _ in range(times):
        buzzer.on()
        time.sleep(on_time)
        buzzer.off()
        time.sleep(off_time)


def loop():
    """
    Continuously measure distance and control buzzer frequency.
    """
    while True:
        dis = get_distance()

        if dis >= 50:
            # Far distance: buzzer silent
            time.sleep(0.5)

        elif 20 < dis < 50:
            # Medium distance: slow beeping
            beep(times=2, on_time=0.05, off_time=0.2)

        else:
            # Close distance (<= 20 cm): fast beeping
            beep(times=5, on_time=0.05, off_time=0.05)

        time.sleep(0.3)  # Measurement interval

try:
    loop()
except KeyboardInterrupt:
    buzzer.off()
    print("\nProgram stopped, buzzer turned off.")

コードの解説

  1. 距離測定: 超音波センサーが距離を計算します。

    def get_distance():
        """
        Read distance from ultrasonic sensor and print it.
        Returns distance in centimeters.
        """
        dis = sensor.read()
        print(f"Distance: {dis:.2f} cm")
        return dis
    
  2. 音による警告: 障害物との距離に応じて、ブザーの鳴り方が変化します。

    • 50 cm超: 音は鳴りません。

    • 20〜50 cm: 中程度の間隔で2回鳴ります。

    • 20 cm以下: 緊急警告としてすばやく連続して鳴ります。

    def loop():
        while True:
            dis = get_distance()
    
            if dis >= 50:
                # Far distance: buzzer silent
                time.sleep(0.5)
    
            elif 20 < dis < 50:
                # Medium distance: slow beeping
                beep(times=2, on_time=0.05, off_time=0.2)
    
            else:
                # Close distance (<= 20 cm): fast beeping
                beep(times=5, on_time=0.05, off_time=0.05)
    
            time.sleep(0.3)  # Measurement interval
    

トラブルシューティング

  1. 距離が測定されない:

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

    • 対処方法:

      • 超音波センサーの echo ピンと trigger ピンが、それぞれ GPIO22 と GPIO27 に接続されていることを確認してください。

      • センサー単体でテストし、正常に動作することを確認してください。

  2. ブザーが鳴らない:

    • 原因: ブザーが接続されていない、または故障している。

    • 対処方法:

      • ブザーが GPIO17 と GND に正しく接続されていることを確認してください。

      • 次のコードでブザーを手動テストしてください。

        buzzer.on()
        time.sleep(1)
        buzzer.off()
        

拡張アイデア

  1. 警告しきい値の調整: ブザー警告の距離しきい値をユーザーが自由に設定できるようにします。

  2. データログ記録: 距離測定値をファイルに保存して後で分析できます。

    with open("distance_log.txt", "a") as log_file:
          log_file.write(f"{time.time():.3f}, {dis:.2f} cm\n")
    
  3. 視覚的な警告: 距離レベルに応じて色の異なるLEDを使用します(例:安全は緑、注意は黄、危険は赤)。


まとめ

このプロジェクトでは、超音波センサーを活用した実用的なバックアラームシステムを紹介しました。音によるフィードバックを組み合わせることで、直感的に距離を把握できます。このようなシステムは車両やロボティクス分野で非常に有用であり、近接検知やIoT連携の理解にも役立ちます。ぜひ機能を拡張し、独自のアイデアに発展させてください。