注釈
こんにちは、SunFounderのRaspberry Pi & Arduino & ESP32愛好家コミュニティへようこそ!Facebook上でRaspberry Pi、Arduino、ESP32についてもっと深く掘り下げ、他の愛好家と交流しましょう。
参加する理由は?
エキスパートサポート:コミュニティやチームの助けを借りて、販売後の問題や技術的な課題を解決します。
学び&共有:ヒントやチュートリアルを交換してスキルを向上させましょう。
独占的なプレビュー:新製品の発表や先行プレビューに早期アクセスしましょう。
特別割引:最新製品の独占割引をお楽しみください。
祭りのプロモーションとギフト:ギフトや祝日のプロモーションに参加しましょう。
👉 私たちと一緒に探索し、創造する準備はできていますか?[ここ]をクリックして今すぐ参加しましょう!
8. 自動運転車¶
このプロジェクトは、 6. 超音波モジュールで遊ぶ と 5. 障害物回避モジュールで遊ぶ の2つのプロジェクトの組み合わせです。 2つの赤外線障害物回避モジュールは短距離またはエッジ検出を行い、 超音波モジュールは車が自由に走行する過程で障害物に衝突しないことを確認するための長距離検出を行います。
必要なコンポーネント
このプロジェクトでは、以下のコンポーネントが必要です。
一式を購入すると非常に便利です、リンクは以下です:
名前 |
このキットに含まれるアイテム |
リンク |
|---|---|---|
3 in 1 スターターキット |
380+ |
以下のリンクからそれぞれ購入することもできます。
コンポーネントの紹介 |
購入リンク |
|---|---|
- |
|
- |
|
配線
超音波モジュールと2つのIR障害物回避モジュールを同時に接続します。
R3ボードに超音波を次のように接続します。
超音波モジュール |
R3ボード |
|---|---|
Vcc |
5V |
Trig |
3 |
Echo |
4 |
Gnd |
GND |
R3ボードへの2つのIR障害物回避モジュールの配線は次のとおりです。
左IRモジュール |
R3ボード |
|---|---|
OUT |
8 |
GND |
GND |
VCC |
5V |
右IRモジュール |
R3ボード |
|---|---|
OUT |
7 |
GND |
GND |
VCC |
5V |
コード
注釈
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: Obstructed 1: Empty
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) { // Safe
moveForward(200);
} else if (distance < 10 && distance > 2) { // Attention
moveBackward(200);
delay(1000);
backLeft(150);
delay(500);
} else {
moveForward(150);
}
}
}