注釈

こんにちは、FacebookのSunFounder Raspberry Pi & Arduino & ESP32愛好者コミュニティへようこそ!Raspberry Pi、Arduino、ESP32について、他の愛好者と一緒にさらに深く学びましょう。

参加する理由

  • 専門家のサポート: 購入後の問題や技術的な課題を、コミュニティやチームのサポートを受けて解決できます。

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

  • 限定プレビュー: 新製品の発表や先行公開情報をいち早く手に入れましょう。

  • 特別割引: 新製品に対する特別割引を楽しめます。

  • 祝祭キャンペーンやプレゼント: プレゼントキャンペーンやシーズンプロモーションに参加できます。

👉 一緒に探求し、創造的な活動をしてみませんか?[こちら]をクリックして、今すぐ参加しましょう!

7.10 後方支援システムの構築

このプロジェクトでは、Raspberry Pi Pico 2、超音波センサー、LED、ブザーを使用して 後方支援システム を作成します。このシステムは、実際の駐車センサーがどのように動作するかを模倣し、障害物との距離を検出して、接近に応じて音と視覚的なフィードバックを提供します。このセットアップをラジコンカーに取り付けて、ガレージにバックする体験を模倣することができます。

必要なもの

このプロジェクトでは、以下の部品が必要です。

キットを購入するのが便利です。こちらのリンクからご覧いただけます:

名前

キット内の部品

リンク

Newton Lab Kit

450以上

Newton Lab Kit

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

番号

部品

数量

リンク

1

Raspberry Pi Pico 2

1

購入

2

Micro USBケーブル

1

3

ブレッドボード

1

購入

4

ジャンパーワイヤー

複数

購入

5

トランジスタ

1(S8050)

購入

6

抵抗器

2(1KΩ, 220Ω)

購入

7

Active ブザー

1

8

LED

1

購入

9

超音波モジュール

1

購入

部品の理解

  • 超音波センサー (HC-SR04): 超音波を発信し、エコーが戻ってくるまでの時間を測定して、障害物までの距離を計測します。

  • ブザー: 音でフィードバックを提供し、物体が近づくほど頻繁に鳴ります。

  • LED: 視覚的なフィードバックを提供し、物体が近づくほど点滅が速くなります。

回路図

sch_reversing_aid

配線図

wiring_reversing_aid

コード作成

次のMicroPythonスクリプトを作成します:

  • 超音波センサーで距離を計測する。

  • 距離に応じてブザーの音の頻度やLEDの点滅速度を調整する。

  • 物体が近づいたり離れたりするごとに継続的なフィードバックを提供する。

注釈

  • 7.10_reversing_aid.pynewton-lab-kit/micropython から開くか、コードをThonnyにコピーして、「実行」ボタンをクリックするか、F5キーを押して実行します。

  • 正しいインタプリタが選択されていることを確認してください:MicroPython(Raspberry Pi Pico)。COMxx。

import machine
import utime

# ピンの設定
trigger = machine.Pin(17, machine.Pin.OUT)
echo = machine.Pin(16, machine.Pin.IN)
buzzer = machine.Pin(15, machine.Pin.OUT)
led = machine.Pin(14, machine.Pin.OUT)

# 距離を計測する関数
def measure_distance():
    # トリガーを低に設定
    trigger.low()
    utime.sleep_us(2)
    # トリガーに10usのパルスを送信
    trigger.high()
    utime.sleep_us(10)
    trigger.low()

    # エコーパルスの長さを測定
    while echo.value() == 0:
        signaloff = utime.ticks_us()
    while echo.value() == 1:
        signalon = utime.ticks_us()

    timepassed = utime.ticks_diff(signalon, signaloff)
    distance = (timepassed * 0.0343) / 2  # cmに変換
    return distance

# ブザーとLEDを制御する関数
def alert(interval):
    buzzer.high()
    led.high()
    utime.sleep(0.1)
    buzzer.low()
    led.low()
    utime.sleep(interval)

# メインループ
try:
    while True:
        dist = measure_distance()
        print("Distance: {:.2f} cm".format(dist))
        if dist < 0:
            print("Out of range")
            utime.sleep(1)
        elif dist <= 10:
            alert(0.2)  # 非常に近い、迅速にアラート
        elif dist <= 20:
            alert(0.5)  # 近い、適度にアラート
        elif dist <= 50:
            alert(1)    # あまり近くない、ゆっくりアラート
        else:
            alert(2)    # 遠い、まれにアラート
except KeyboardInterrupt:
    print("Measurement stopped by User")

コードが実行されたら、超音波センサーから異なる距離で物体を配置して、ブザーの音の頻度とLEDの点滅速度の変化を観察しましょう。 コンソールには計測された距離が表示されます。

コードの理解

  1. 距離の計測:

    • measure_distance() 関数は、TRIGピンに10マイクロ秒のパルスを送信します。

    • 次に、ECHOピンがハイになってからローになるまでの時間を測定します。

    • 超音波パルスが戻るまでの時間に基づいて、距離を計算します。

    def measure_distance():
        # トリガーを低に設定
        trigger.low()
        utime.sleep_us(2)
        # トリガーに10usのパルスを送信
        trigger.high()
        utime.sleep_us(10)
        trigger.low()
    
        # エコーパルスの長さを測定
        while echo.value() == 0:
            signaloff = utime.ticks_us()
        while echo.value() == 1:
            signalon = utime.ticks_us()
    
        timepassed = utime.ticks_diff(signalon, signaloff)
        distance = (timepassed * 0.0343) / 2  # cmに変換
        return distance
    
  2. アラート関数:

    • alert(interval) 関数は、ブザーとLEDを0.1秒間オンにして、その後オフにします。

    • interval パラメータは、距離に応じてアラートの間隔を調整します。

    def measure_distance():
        # トリガーを低に設定
        trigger.low()
        utime.sleep_us(2)
        # トリガーに10usのパルスを送信
        trigger.high()
        utime.sleep_us(10)
        trigger.low()
    
        # エコーパルスの長さを測定
        while echo.value() == 0:
            signaloff = utime.ticks_us()
        while echo.value() == 1:
            signalon = utime.ticks_us()
    
        timepassed = utime.ticks_diff(signalon, signaloff)
        distance = (timepassed * 0.0343) / 2  # cmに変換
        return distance
    
  3. メインループ:

    • 距離を継続的に計測します。

    • あらかじめ設定された距離の閾値に応じて、アラートの頻度を調整します。

    try:
        while True:
            dist = measure_distance()
            print("Distance: {:.2f} cm".format(dist))
            if dist < 0:
                print("Out of range")
                utime.sleep(1)
            elif dist <= 10:
                alert(0.2)  # 非常に近い、迅速にアラート
            elif dist <= 20:
                alert(0.5)  # 近い、適度にアラート
            elif dist <= 50:
                alert(1)    # あまり近くない、ゆっくりアラート
            else:
                alert(2)    # 遠い、まれにアラート
    except KeyboardInterrupt:
        print("Measurement stopped by User")
    

安全対策

  • 電圧レベル:

    • 超音波センサーのECHOピン電圧が5Vの場合は注意してください。

    • PicoのGPIOピンを保護するために、電圧分割器やレベルシフターを使用してください。

  • 電源:

    すべての部品の電流要件を満たせる電源を使用してください。

さらに実験する

  • 視覚表示:

    LCDやOLEDディスプレイを追加して、距離を視覚的に表示できます。

  • 複数のセンサー:

    複数の超音波センサーを使用して、より多くの方向をカバーできます。

  • 高度なアラート:

    ブザーに異なるトーンやパターンを実装して、距離ごとに異なるアラートを出すことができます。

結論

Raspberry Pi Pico 2を使用して、後方支援システムを構築しました!このプロジェクトは、センサーを使ってリアルタイムのフィードバックを提供する方法を示しており、ロボティクスやオートメーションの基本的な概念を学ぶことができます。