6. 超音波モジュールで遊ぶ

5. 障害物回避モジュールで遊ぶ プロジェクトでは、2つの赤外線障害物回避モジュールを障害物回避のために使用していますが、IR障害物回避モジュールの検出距離は短いため、車が障害物を避けるのが遅くなる可能性があります。

このプロジェクトでは、超音波モジュールを使って遠距離の検出を行い、車がもっと遠くの障害物を感知して判断できるようにします。

必要な部品

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

全体のキットを購入すると非常に便利です。リンクは以下の通りです:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

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

コンポーネントの紹介

購入リンク

SunFounder R3ボード

BUY

L298N モジュール

BUY

TTモーター

-

超音波モジュール

BUY

配線図

超音波センサモジュールは、超音波を使って物体までの距離を測定する機器です。 2つのプローブがあります。1つは超音波を送信し、もう1つは超音波を受信して送受信の時間を距離に変換し、装置と障害物との間の距離を検出します。

以下の図に従って回路を組み立ててください。

超音波モジュール

R3ボード

Vcc

5V

Trig

3

Echo

4

Gnd

GND

../_images/car_ultrasonic.jpg

コード

注釈

  • 3in1-kit\car_project\6.ultrasonic_module のパスの下で 6.ultrasonic_module.ino ファイルを開きます。

  • または、このコードを Arduino IDE にコピーします。

  • または、 Arduino Web Editor を通じてコードをアップロードします。

コードが正常にアップロードされた後、車を壁に向けてください。距離が遠すぎる場合は前進し、近すぎる場合は後退し、安全な距離であれば停止します。

どのように動作するのか?

このプロジェクトは、超音波モジュールから読み取った距離に基づいて、車に適切な動作をさせるものです。

  1. 超音波モジュールのピン定義を追加します。 trigPin は超音波を送信するために使用され、 OUTPUT に設定されます。 echoPin は超音波を受信するために INPUT に設定されます。

    ...
    const int trigPin = 3;
    const int echoPin = 4;
    
    void setup() {
    ...
    
    //超音波
        pinMode(echoPin, INPUT);
        pinMode(trigPin, OUTPUT);
    }
    
  2. まず、超音波モジュールから取得した距離の値を読み取ります。距離が25より大きい場合、車を前進させます。距離が2~10cmの間であれば、車を後退させます。それ以外の場合(10~25の間)、停止します。

    void loop() {
        float distance = readSensorData();
        if (distance > 25) {
            moveForward(200);
        }
        else if (distance < 10 && distance > 2) {
            moveBackward(200);
        } else {
            stopMove();
        }
    }
    
  3. readSensorData() 関数について。

    超音波モジュールの送信機は、2usごとに10usの正方形の波形信号を送信し、範囲内に障害物がある場合、受信機は高レベル信号を受信します。 pulseIn() 関数を使用して、送信から受信までの時間を記録し、音速340m/sで除算し、さらに2で除算すると、このモジュールと障害物との距離がcm単位で得られます。

    float readSensorData() {
        digitalWrite(trigPin, LOW);
        delayMicroseconds(2);
        digitalWrite(trigPin, HIGH);
        delayMicroseconds(10);
        digitalWrite(trigPin, LOW);
        float distance = pulseIn(echoPin, HIGH) / 58.00; //(340m/s*1us)/2に相当。
        return distance;
    }
    
  • pulseIn(pin, value)

    • pin: パルスを読みたいArduinoのピンの番号。許可されているデータ型: int。

    • value: 読みたいパルスの種類:HIGHまたはLOW。許可されているデータ型: int。

    ピン上でのパルス(HIGHまたはLOW)を読み取ります。例えば、valueがHIGHの場合、 pulseIn() は、ピンがLOWからHIGHになるのを待ち、タイミングを開始し、次にピンがLOWになるのを待ち、タイミングを停止します。