【Raspberry Pi】【ロボット】HC-SR04で障害物を検出する

  • URLをコピーしました!

※本ページはアフィリエイト広告を利用しています

今回はラズパイベースのロボット、PiCrawlerに搭載されている距離センサーHC-SR04を使って障害物検出をしてみたいと思います。

目次

Raspberry Pi(ラズベリーパイ)とは

Raspberry Pi 5は、Raspberry Pi財団が開発した最新のシングルボードコンピュータで、従来モデルよりも大幅な性能向上を実現しています。

Raspberry Pi
¥14,000 (2025/01/08 19:30時点 | Amazon調べ)
\ポイント最大11倍!/
楽天市場
\ポイント5%還元!/
Yahooショッピング

搭載される64ビットクアッドコアプロセッサは、クロック速度が最大2.4GHzに達し、前世代よりも処理速度が格段に向上しました。また、4GBまたは8GBのRAMを選択できるため、教育用途からリソースを必要とするプロジェクトまで幅広く対応可能です。

グラフィックス性能も強化され、4K解像度でのデュアルディスプレイ出力をサポートしています。さらに、新たにPCIeインターフェイスが追加され、外部ストレージや高速デバイスとの接続が容易になりました。Wi-Fi 6やBluetooth 5.2の導入により、無線通信も高速かつ安定。

教育、IoT、AI開発、メディア再生など、多様な用途に対応するRaspberry Pi 5は、初心者から上級者まで幅広いユーザーにとって魅力的な選択肢となっています。

Raspberry Piでできることについては以下の記事で解説していますので、あわせてご覧ください。

ソーテック社
¥3,058 (2025/01/08 21:01時点 | Amazon調べ)
\ポイント最大11倍!/
楽天市場
\ポイント5%還元!/
Yahooショッピング

PiCrawlerについて

Raspberry Piをコントローラとして動作するロボット、PiCrawlerです。詳細は下記の記事で解説していますのでご覧ください。

超音波距離センサー HC-SR04

PiCrawlerに搭載されたHC-SR04

超音波センサーは、人間が聞き取ることのできない周波数帯域の音波を送信し、物体に反射して返ってくる時間を計測することで、物体までの距離を計測することができます。PiCrawlerに付属しているHC-SR04は2-400cm間の物体までの距離を計測することができます。

ロボットPiCrawlerで障害物検出する

PiCrawlerではHC-SR04のハードウェアを制御するためのライブラリーがあらかじめ用意されており、以下の一行を記述するだけで物体との距離を取得することができます。

distance = sonar.read()

これで変数distanceに距離を表す数値が代入されます。

ロボットを制御するソースコード

今回はPiCrawlerが障害物との距離が近くなるまで前進し続け、閾値の距離に到達したら少し後退して停止するという動作をPythonで記述しました。ソースコードは以下の通りです。

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

tts = TTS()

#サーボ初期化
crawler = Picrawler([10,11,12,4,5,6,1,2,3,7,8,9])

#距離センサー初期化
sonar = Ultrasonic(Pin("D2") ,Pin("D3"))

#距離センサ閾値設定
alert_distance = 15

#動作速度を0-100で指定
speed = 100

def main():

    #距離センサで距離を取得
    distance = sonar.read()
    print(distance) #距離を表示
    
    #距離により行動を分岐
    if distance < 0: #エラー
        pass
        
    elif distance <= alert_distance: #現在の距離が閾値より低い場合     
        crawler.do_action('backward', 4, speed) #ロボットを後退させる
        
        #プログラムを終了
        sys.exit(0)
        
    else : #距離が閾値より大きい場合は前進
        crawler.do_action('forward', 1, speed) #ロボットを前進させる
        time.sleep(0.2)
        
        
if __name__ == "__main__":

    while True:
        main()
15行目:
HC-SR04のデバイスを初期化します。

18行目:
障害物に接近したことを判定するための閾値を設定します。

25行目:
HC-SR04から現在の障害物との距離を取得します。

29行目:
現在の距離からロボットの次の行動を判断します。

プログラムを実行している動画

プログラムを動作させている動画は以下となります。

ドアの手前まで前進していき、直前(閾値で設定した距離)で停止させることができました

\ Pythonを自宅で好きな時に学べる! /

まとめ

PiCrawlerのライブラリを使うことで距離検出の処理を一行のコードで実装することができました。ロボットを自律制御を行う際に、障害物を回避したり進路を判断するのに活用できるかと思います。

また、以下の記事で効率的にPythonのプログラミングスキルを学べるプログラミングスクールの選び方について解説しています。最近ではほとんどのスクールがオンラインで授業を受けられるようになり、仕事をしながらでも自宅で自分のペースで学習できるようになりました。

スキルアップや副業にぜひ活用してみてください。

スクールではなく、自分でPythonを習得したい方には、いつでもどこでも学べる動画学習プラットフォームのUdemyがおすすめです。

講座単位で購入できるため、スクールに比べ非常に安価(セール時1200円程度~)に学ぶことができます。私も受講しているおすすめの講座を以下の記事でまとめていますので、ぜひ参考にしてみてください。

それでは、また次の記事でお会いしましょう。

著:山内 直, 著:大久保 竣介, 著:森本 梨聖, 監修:太田 昌文
¥2,618 (2025/01/10 17:11時点 | Amazon調べ)
\ポイント最大11倍!/
楽天市場
\ポイント5%還元!/
Yahooショッピング
よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次