5. 障害物回避モジュールで遊ぶ

車の前部には2つの赤外線障害物回避モジュールが取り付けられており、近くの障害物を検出するのに使用できます。

このプロジェクトでは、車は自由に前進することが許されており、障害物に遭遇した場合、それを避けて他の方向に移動を続けることができます。

必要なコンポーネント

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

一式を購入することは非常に便利です。こちらがリンクです:

名前

このキットのアイテム数

リンク

3 in 1 スターターキット

380+

3 in 1 Starter Kit

以下のリンクからそれぞれの部品を別々に購入することもできます。

コンポーネント紹介

購入リンク

SunFounder R3ボード

BUY

L9110 モータードライバーモジュール

-

TTモーター

-

障害物回避モジュール

BUY

配線

障害物回避モジュールは、出力が通常高く、障害物が検出されると低くなる距離調整可能な赤外線近接センサーです。

以下の図に従って回路を組み立てます。

左IRモジュール

R3ボード

OUT

8

GND

GND

VCC

5V

右IRモジュール

R3ボード

OUT

7

GND

GND

VCC

5V

../_images/car_5.png

モジュールの調整

プロジェクトを開始する前に、モジュールの検出距離を調整する必要があります。

上記の図に従って配線し、R3ボードに電源を供給します(USBケーブルを直接差し込むか、9Vのバッテリーケーブルをスナップしてください)。コードをアップロードせずに。

車のIR障害物回避の前にノートや他の平らな物体を約5cm置きます。

次に、モジュール上のポテンショメーターを回して、モジュールの信号インジケーターがちょうど点灯するまで調整し、最大検出距離を5cmに調整します。

同じ方法で別の赤外線モジュールを調整します。

../_images/ir_obs_cali.jpg

コード

注釈

  • 3in1-kit\car_project\5.obstacle_avoidance_module のパスの下にある 5.obstacle_avoidance_module.ino ファイルを開きます。

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

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

コードが正常にアップロードされると、車は前進します。左の赤外線モジュールが障害物を検出すると、左に後退します。右の赤外線モジュールが障害物を検出すると、右に後退します。両方の側面で障害物が検出された場合、後退します。

動作原理は?

このプロジェクトは、左と右の赤外線障害物回避モジュールの値に基づいて車が適切なアクションを実行するものです。

  1. 2つの障害物回避モジュールのピン定義を追加します。ここでは INPUT に設定されています。

    ...
    const int rightIR = 7;
    const int leftIR = 8;
    
    void setup() {
    ...
    
    //IR障害物回避
        pinMode(leftIR, INPUT);
        pinMode(rightIR, INPUT);
    }
    
  2. 左および右の赤外線モジュールの値を読み取り、車に対応するアクションを実行させます。

    void loop() {
    
        int left = digitalRead(leftIR);   // 0: Obstructed  1: Empty
        int right = digitalRead(rightIR);
        int speed = 150;
    
        if (!left && right) {
            backLeft(speed);
        } else if (left && !right) {
            backRight(speed);
        } else if (!left && !right) {
            moveBackward(speed);
        } else {
            moveForward(speed);
        }
    }
    
    • 左のIRモジュールが0(障害物検出)で、右のIRモジュールが1の場合、車を左に後退させます。

    • 右のIRモジュールが0(障害物検出)の場合、車を右に後退させます。

    • 2つのIRモジュールが同時に障害物を検出すると、車は後退します。

    • それ以外の場合、車は前進し続けます。

  3. backLeft() 関数について。

    右のモーターが反時計回りに回転し、左のモーターが回転しない場合、車は左に後退します。

    void backLeft(int speed) {
        analogWrite(A_1B, speed);
        analogWrite(A_1A, 0);
        analogWrite(B_1B, 0);
        analogWrite(B_1A, 0);
    }
    
  4. backLeft() 関数について。

    左のモーターが時計回りに回転し、右のモーターが回転しない場合、車は右に後退します。

    void backRight(int speed) {
        analogWrite(A_1B, 0);
        analogWrite(A_1A, 0);
        analogWrite(B_1B, 0);
        analogWrite(B_1A, speed);
    }
    
  • &&: ロジカルANDは、両方のオペランドが真の場合にのみ真となります。

  • !: ロジカルNOTは、オペランドが偽の場合は真、逆の場合は偽となります。