注釈

こんにちは!SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Communityへようこそ!Raspberry Pi、Arduino、ESP32について、他の愛好者と一緒にさらに深く学んでいきましょう。

参加する理由

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

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

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

  • 特別割引: 新しい製品に対して限定割引をお楽しみください。

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

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

障害物回避

このプロジェクトでは、PiCrawlerが超音波モジュールを使用して前方の障害物を検出します。 PiCrawlerが障害物を検出すると、信号を送信し、別の方向に進むために方向転換を行います。

../_images/avoid1.png

コードを実行する

cd ~/picrawler/examples
sudo python3 avoid.py

コードを実行すると、PiCrawlerは前進を開始します。もし障害物までの距離が10cm未満であると検出した場合、警告音を鳴らして停止し、左に回転して停止します。左に回転後、障害物がなければまたは障害物までの距離が10cm以上であれば、前進を続けます。

コード

注釈

下記のコードは 修正/リセット/コピー/実行/停止 できます。ただし、まずはソースコードのパス(例えば picrawler\examples )に移動してください。コードを修正した後、直接実行して効果を確認できます。

from picrawler import Picrawler
from robot_hat import TTS, Music
from robot_hat import Ultrasonic
from robot_hat import Pin
import time

tts = TTS()
music = Music()

crawler = Picrawler()
sonar = Ultrasonic(Pin("D2") ,Pin("D3"))
music.music_set_volume(100)

alert_distance = 15
speed = 80

def main():
    distance = sonar.read()
    print(distance)
    if distance < 0:
        pass
    elif distance <= alert_distance:
        try:
            music.sound_play_threading('./sounds/sign.wav', volume=100)
        except Exception as e:
            print(e)
        crawler.do_action('turn left angle',3,speed)
        time.sleep(0.2)
    else :
        crawler.do_action('forward', 1,speed)
        time.sleep(0.2)

if __name__ == "__main__":
    while True:
        main()

動作の仕組み

Ultrasonic クラスをインポートすることで、距離を取得できます。

from robot_hat import Ultrasonic

次に、超音波のピンを初期化します。

sonar = Ultrasonic(Pin("D2") ,Pin("D3"))

こちらがメインのプログラムです。

  • 超音波モジュールで検出した distance を読み取り、0未満の値を除外します(超音波モジュールが障害物から遠すぎるか、データが正しく読み取れない場合に distance<0 が表示されます)。

  • distance が alert_distance (事前に設定した閾値、ここでは10)以下の場合、 sign.wav の効果音を再生し、PiCrawlerは turn left angle の動作を行います。

  • distance が alert_distance より大きければ、PiCrawlerは forward の動作を続けます。

distance = sonar.read()
print(distance)
if distance < 0:
    pass
elif distance <= alert_distance:
    try:
        music.sound_play_threading('./sounds/sign.wav', volume=100)
    except Exception as e:
        print(e)
    crawler.do_action('turn left angle',3,speed)
    time.sleep(0.2)
else :
    crawler.do_action('forward', 1,speed)
    time.sleep(0.2)

注釈

musics や sounds フォルダにさまざまな効果音や音楽を追加することができます。詳細は:ref:filezilla をご参照ください。