8. 自動運転車

このプロジェクトは、 6. 超音波モジュールで遊ぼう および 5. 障害物回避モジュールを使って遊ぼう の2つのプロジェクトの組み合わせです。 2つの赤外線障害物回避モジュールは短距離または端の検出を行い、 超音波モジュールは長距離の検出を行い、自由に運転する過程で車が障害物にぶつからないことを確認します。

必要な部品

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

一式を購入するのは便利です。リンクはこちら:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

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

コンポーネントの紹介

購入リンク

Arduino Uno R4 Minima

BUY

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

-

TTモーター

-

超音波モジュール

BUY

障害物回避モジュール

BUY

配線図

超音波モジュールと2つのIR障害物回避モジュールを同時に接続します。

R4ボードに超音波を以下のように接続します。

超音波モジュール

R4ボード

Vcc

5V

Trig

3

Echo

4

Gnd

GND

R4ボードへの2つのIR障害物回避モジュールの接続方法は次の通りです。

左IRモジュール

R4ボード

OUT

8

GND

GND

VCC

5V

右IRモジュール

R4ボード

OUT

7

GND

GND

VCC

5V

../_images/car_7_8.png

コード

注釈

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

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

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

コードが正常にアップロードされると、車は自由に運転します。両側のIR遮断モジュールが障害物を検出すると、緊急回避のために反対方向に移動します。車の正面2〜10cm以内に障害物がある場合、車は左にバックアップして方向を調整し、前進します。

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

このプロジェクトのワークフローは以下の通りです。

  • 左右のIR障害物回避モジュールの値を優先的に読み取ります。

  • 左のIRモジュールが0(障害物検出)で、右のIRモジュールが1の場合、車は左にバックアップします。

  • 右のIRモジュールが0(障害物検出)の場合、車は右にバックアップします。

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

  • それ以外の場合は、超音波モジュールによって検出された距離を読み取ります。

  • 距離が50cm以上の場合、車を前進させます。

  • 距離が2-10cmの場合、車を旋回する前にバックアップします。

  • 距離が10-50cmの場合、車は低速で前進します。

void loop() {

    int left = digitalRead(leftIR);   // 0: 遮蔽物あり 1: 空
    int right = digitalRead(rightIR);

    if (!left && right) {
        backLeft(150);
    } else if (left && !right) {
        backRight(150);
    } else if (!left && !right) {
        moveBackward(150);
    } else {
        float distance = readSensorData();
        Serial.println(distance);
        if (distance > 50) { // 安全
            moveForward(200);
        } else if (distance < 10 && distance > 2) { // 注意
            moveBackward(200);
            delay(1000);
            backLeft(150);
            delay(500);
        } else {
            moveForward(150);
        }
    }
}