Lekcia 28/31: Auto-6 Samojazdné auto SunFounder s Arduinom pomocou | Robojax
V tomto projekte postavíme základné samočiace auto pomocou Arduina, ultrazvukového senzora a dvoch infračervených senzorov. Toto je skvelý úvodný projekt na učenie sa o autonómnej navigácii, fúzii senzorov a logike rozhodovania. Auto sa vie pohybovať dopredu, dozadu a zatáčať, aby sa vyhlo prekážkam, a efektívne si tak samo nájde voľnú cestu. Tento projekt je založený na stavebnici SunFounder 3-v-1 Arduino a je súčasťou kurzu Arduina od Robojaxu.
Tento projekt nie je len o stavbe hračky; je to praktický úvod do základných konceptov autonómnej robotiky. Rovnaká logika a senzory sa používajú v reálnych aplikáciách, ako sú robotické vysávače, automaticky riadené vozidlá v skladoch a dokonca aj navigačné systémy zložitejších robotov. Pochopením toho, ako skombinovať snímanie vzdialenosti s jednoduchými pravidlami navigácie, môžete vytvoriť rôzne projekty, napríklad:
- Postaviť malého robota, ktorý sa vie pohybovať po miestnosti a vyhýbať sa nábytku.
- Vytvoriť automatické vozidlo, ktoré vie nasledovať jednoduchú cestu alebo strážiť oblasť.
- Naučiť sa implementovať základné algoritmy na vyhýbanie sa prekážkam pre väčšie robotické projekty.
Hardvérové komponenty
Tento projekt používa komponenty zo stavebnice SunFounder 3-v-1. Základné časti sú:
- Doska Arduino Uno
- Podvozok auta SunFounder 2WD alebo 3-v-1 s motormi
- Modul ovládača motora (napr. L298N alebo podobný)
- Ultrazvukový senzor vzdialenosti HC-SR04
- Dva infračervené senzory prekážok
- Prepojovacie vodiče a zdroj napájania pre motory
Návod na zapojenie
Zapojenie je kritickým prvým krokom na oživenie vášho samočiaceho auta. Prepojenia sú jednoduché, ale je nevyhnutné každé z nich dôkladne skontrolovať, aby ste nepoškodili komponenty. Logika zapojenia spočíva v pripojení riadiacich pinov Arduina k ovládaču motora a senzorom, čo Arduinu umožňuje čítať údaje a posielať príkazy.
- Piny ovládača motora (A-1B, A-1A, B-1B, B-1A): Tieto piny riadia rýchlosť a smer dvoch motorov. Sú pripojené k pinom Arduina 5, 6, 9 a 10, ktoré podporujú PWM, čo umožňuje variabilné riadenie rýchlosti.
- Ultrazvukový senzor (Trig a Echo): Pin Trig vysiela ultrazvukový impulz a pin Echo prijíma odrazený signál. Pin Trig je pripojený k pinu 3 Arduina a pin Echo je pripojený k pinu 4.
- IR senzory (ľavý a pravý): Tieto senzory zisťujú, či je prekážka priamo pred nimi. Ľavý IR senzor je pripojený k pinu 8 Arduina a pravý IR senzor k pinu 7. Používajú sa na kontrolu priestoru po stranách auta.
Podrobný vizuálny návod nájdete v schéme zapojenia nižšie, ktorá jasne zobrazuje každé prepojenie.
Vysvetlenie kódu
Kód je napísaný v programovacom jazyku Arduina (C++). Celý program je k dispozícii na stiahnutie zo stránky so zdrojmi, na ktorú odkazuje popis videa. Poďme si rozobrať kľúčové časti tohto náčrtu, ktoré môže používateľ nastavovať.
Definície pinov
Na začiatku kódu definujete piny, ktoré spájajú Arduino s rôznymi komponentmi. Môžete ich zmeniť, ak používate iné piny na svojej doske.
const int A_1B = 5;
const int A_1A = 6;
const int B_1B = 9;
const int B_1A = 10;
const int echoPin = 4;
const int trigPin = 3;
const int rightIR = 7;
const int leftIR = 8;
Piny A_1B, A_1A, B_1B a B_1A riadia ovládač motora s H-mosťom. Nastavením týchto pinov na HIGH alebo LOW v rôznych kombináciách môžete riadiť smer každého motora. echoPin a trigPin sú pre ultrazvukový senzor a rightIR a leftIR sú pre infračervené senzory.
Premenné správania a logika
Základná logika samočiaceho správania je vo funkcii loop(). Auto rozhoduje na základe údajov z IR senzorov a ultrazvukového senzora. Kód definuje konkrétne vzdialenosti, ktoré spúšťajú rôzne akcie. Napríklad premenná distance sa meria v centimetroch. Logika je nasledovná:
- Ak je vzdialenosť väčšia ako 50 cm: Cesta vpred je voľná, takže auto sa pohybuje dopredu rýchlosťou 200.
- Ak je vzdialenosť medzi 2 cm a 10 cm: Auto je príliš blízko prekážky. Cúva jednu sekundu, potom zatáča doľava dozadu na pol sekundy, aby našlo novú cestu.
- Ak je vzdialenosť medzi 10 cm a 50 cm: Auto je v „zóne opatrnosti“. Pohybuje sa dopredu, ale pomalšou rýchlosťou 150.
Tieto hraničné hodnoty (50 cm, 10 cm a 2 cm) a rýchlosti (200 a 150) sú hlavné premenné, ktoré môžete upraviť na zmenu správania vášho auta. Napríklad môžete zvýšiť „bezpečnú“ vzdialenosť na 60 cm, ak sa vaše auto pohybuje rýchlo.
Vlastné funkcie
Kód obsahuje niekoľko vlastných funkcií na riadenie pohybov auta. Tieto sa používajú v celom hlavnom cykle, aby bol kód prehľadnejší a ľahšie pochopiteľný.
moveForward(int speed): Táto funkcia nastaví piny motora tak, aby auto jazdilo dopredu. Parameterspeed(0-255) určuje, ako rýchlo sa motory otáčajú.moveBackward(int speed): Podobné akomoveForward, ale obracia smer motora, aby sa auto pohybovalo dozadu.backLeft(int speed)abackRight(int speed): Tieto funkcie otáčajú auto tak, že jeden motor beží v opačnom smere, zatiaľ čo druhý je zastavený. Ide o otočenie na mieste, ktoré pomáha autu efektívne meniť smer.stopMove(): Táto funkcia zastaví všetky motory nastavením všetkých riadiacich pinov na LOW.readSensorData(): Táto funkcia vyšle impulz z ultrazvukového senzora a meria čas, ktorý trvá návrat ozveny. Potom vypočíta vzdialenosť v centimetroch a vráti hodnotu.
Živá ukážka projektu
(vo videu v čase 07:09) V ukážke je auto umiestnené v prostredí s rôznymi prekážkami, ako sú škatule a steny. Logika auta je viditeľná pri jeho navigácii. Keď ultrazvukový senzor zistí stenu alebo prekážku vzdialenú viac ako 50 cm, auto sebavedome jazdí dopredu. Keď sa priblíži, IR senzory na bokoch kontrolujú voľný priestor.
Ak sa zistí prekážka naľavo, auto vykoná otočenie doprava dozadu, aby sa jej vyhlo, a naopak. Keď sa auto ocitne v stiesnenom priestore, napríklad pod stolom (vo videu v čase 07:49), použije svoje funkcie cúvania a otáčania, aby sa dostalo von a našlo voľnú cestu. Auto nepretržite číta svoje okolie a rozhoduje sa, čo demonštruje reaktívny riadiaci systém, ktorý sa nespolieha na vopred naplánovanú trasu.
Kapitoly videa
- [00:00] Úvod do projektu samočinného auta
- [00:28] O súprave SunFounder 3-v-1
- [01:32] Otvorenie kódu a prehľad
- [02:02] Vysvetlenie štruktúry kódu a nových funkcií
- [03:11] Nastavenie pinov vo funkcii setup
- [03:28] Hlavná logika rozhodovania v slučke
- [05:41] Živá ukážka: Auto v akcii
- [07:09] Ukážka s prekážkami a sledovaním steny
- [09:58] Záver a záverečné myšlienky
/*
Lesson 28/31: Car-6 SunFounder self Driving Arduino car
Get this code and watch video Download and resource page https://robojax.com/RJT611
https://www.youtube.com/watch?v=IyninXUcsn0
*/
const int A_1B = 5;
const int A_1A = 6;
const int B_1B = 9;
const int B_1A = 10;
const int echoPin = 4;
const int trigPin = 3;
const int rightIR = 7;
const int leftIR = 8;
float readSensorData() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
float distance = pulseIn(echoPin, HIGH) / 58.00; //Equivalent to (340m/s*1us)/2
return distance;
}
void moveForward(int speed) {
analogWrite(A_1B, 0);
analogWrite(A_1A, speed);
analogWrite(B_1B, speed);
analogWrite(B_1A, 0);
}
void moveBackward(int speed) {
analogWrite(A_1B, speed);
analogWrite(A_1A, 0);
analogWrite(B_1B, 0);
analogWrite(B_1A, speed);
}
void backLeft(int speed) {
analogWrite(A_1B, speed);
analogWrite(A_1A, 0);
analogWrite(B_1B, 0);
analogWrite(B_1A, 0);
}
void backRight(int speed) {
analogWrite(A_1B, 0);
analogWrite(A_1A, 0);
analogWrite(B_1B, 0);
analogWrite(B_1A, speed);
}
void stopMove() {
analogWrite(A_1B, 0);
analogWrite(A_1A, 0);
analogWrite(B_1B, 0);
analogWrite(B_1A, 0);
}
void setup() {
Serial.begin(9600);
//motor
pinMode(A_1B, OUTPUT);
pinMode(A_1A, OUTPUT);
pinMode(B_1B, OUTPUT);
pinMode(B_1A, OUTPUT);
//ultrasonic
pinMode(echoPin, INPUT);
pinMode(trigPin, OUTPUT);
//IR obstacle
pinMode(leftIR, INPUT);
pinMode(rightIR, INPUT);
}
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);
}
}
}
Common Course Links
Common Course Files
Veci, ktoré by ste mohli potrebovať
-
AmazonSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
Amazon
-
Amazon
-
Amazon
-
Amazon
Zdroje a referencie
-
DokumentáciaDocumentation for SunFounder 3 in 1 IoT/Smart Car/Learning Kitdocs.sunfounder.com
-
ExternéPurchase SunFounder's 3-in-1 Smart car learning kitsunfounder.com
Súbory📁
Knižnice Arduino (zip)
-
SunFounder's 3-in-1 Smart Car learning kit source code
3in1-kit-main-v2.zip12.80 MB