Lekcia 25/31: Smart Car-3 sa vyhýba prekážkam pomocou infračervených senzorov | SunFounder Robojax
Tento projekt premení vaše SunFounder 3-v-1 Arduino inteligentné autíčko na autonómne vozidlo vyhýbajúce sa prekážkam. Namontovaním dvoch infračervených (IR) senzorov—jedného na ľavej a jedného na pravej strane—dokáže autíčko detegovať objekty vo svojej dráhe a robiť rozhodnutia v zlomku sekundy, aby sa im vyhlo. Toto je základný krok v robotike, ktorý vás učí kombinovať vstupy zo senzorov s logikou riadenia motorov a vytvoriť tak reaktívny, samočinný stroj. Princípy, ktoré sa tu naučíte, sa uplatňujú v širokej škále reálnych aplikácií, vrátane:
- Stavba robotického vysávača, ktorý sa pohybuje po miestnosti bez toho, aby narážal do nábytku.
- Vytvorenie robota sledujúceho čiaru alebo riešiaceho bludisko pre súťaže alebo vzdelávacie projekty.
- Vývoj automatizovaného bezpečnostného hliadkovacieho robota, ktorý sa môže pohybovať po obvode a vyhýbať sa stenám.
- Navrhovanie inteligentného hračkárskeho autíčka, ktoré sa môže hrať samostatne bez toho, aby sa zaseklo.
Táto príručka priamo nadväzuje na predchádzajúce lekcie, kde ste sa naučili ovládať motory autíčka a pochopiť, ako fungujú IR senzory. Tu tieto zručnosti spojíme a implementujeme jednoduchý, no účinný algoritmus vyhýbania sa prekážkam.
Ako funguje logika vyhýbania sa prekážkam
Základná myšlienka je jednoduchá: autíčko používa dva IR senzory na kontrolu prekážok na ľavej a pravej strane. Každý senzor vydáva digitálny signál: LOW (0), keď deteguje objekt vo svojom dosahu (asi 20 cm), a HIGH (1), keď je dráha voľná. Logika potom určuje činnosť autíčka na základe stavov senzorov (vo videu o 02:35):
- Prekážka vľavo, vpravo voľno: Autíčko sa otočí doprava, aby sa jej vyhlo.
- Prekážka vpravo, vľavo voľno: Autíčko sa otočí doľava.
- Prekážky na oboch stranách: Autíčko cúva, aby uniklo z potenciálnej slepej uličky.
- Žiadne prekážky: Autíčko ide dopredu.
Tento reaktívny prístup je klasickým príkladom konečného automatu, kde správanie autíčka je priamou odpoveďou na aktuálne vstupy zo senzorov.
Hardvérové komponenty
Na dokončenie tohto projektu budete potrebovať nasledujúce komponenty, ktoré sú všetky súčasťou súpravy SunFounder 3-v-1 Arduino:
- 1x SunFounder 3-v-1 Arduino Smart Car Kit (alebo ekvivalentné diely)
- 2x Infračervené senzory na vyhýbanie sa prekážkam
- 1x Arduino Uno (alebo kompatibilná doska)
- 1x Shield/doska na ovládanie motorov
- Prepojovacie vodiče
Návod na zapojenie
Správne zarovnanie senzorov je pre fungovanie tohto projektu kľúčové. IR senzory musia byť zarovnané smerom dopredu a mierne von, pretože budú detegovať prekážky na bokoch autíčka (vo videu o 02:07). Nasledujúci schéma zapojenia ukazuje, ako pripojiť senzory k Arduinu. Upozorňujeme, že inštruktor použil konkrétny bod distribúcie napájania na breadboarde autíčka, ale dôležité sú pripojenia k Arduinu.
Pripojenia sú nasledovné (vo videu o 03:47):
- Napájanie (VCC): Pripojte pin VCC oboch IR senzorov na 5V výstup na Arduine alebo na napájaciu lištu autíčka.
- Uzemenie (GND): Pripojte pin GND oboch IR senzorov na spoločné uzemnenie na Arduine alebo na uzemňovaciu lištu autíčka.
- Výstup pravého senzora (OUT): Pripojte digitálny výstupný pin pravého IR senzora na digitálny pin 7 na Arduine.
- Výstup ľavého senzora (OUT): Pripojte digitálny výstupný pin ľavého IR senzora na digitálny pin 8 na Arduine.
Pripojenia ovládača motorov pre ľavý a pravý motor sú rovnaké ako tie, ktoré boli vytvorené v predchádzajúcej lekcii o ovládaní motorov.
Vysvetlenie kódu
Kód pre tento projekt je jednoduchý. Hlavný program je k dispozícii na stiahnutie nižšie v článku. Tu sa zameriame na časti, ktoré môže používateľ konfigurovať a ktoré môžete upraviť pre svoje vlastné autíčko.
const int A_1B = 5;
const int A_1A = 6;
const int B_1B = 9;
const int B_1A = 10;
const int rightIR = 7;
const int leftIR = 8;
Tieto riadky definujú piny použité pre ovládač motorov a IR senzory. Piny motorov (A_1B, A_1A, B_1B, B_1A) ovládajú rýchlosť a smer dvoch motorov. Piny rightIR a leftIR sú miesta, kam pripojíte signálne vodiče zo svojich senzorov. Ak ste použili iné piny, zmenili by ste tieto hodnoty tu.
int speed = 150;
Táto premenná nastavuje základnú rýchlosť autíčka. Hodnota sa môže pohybovať od 0 do 255, pričom 255 je maximálna rýchlosť. Hodnota 150 je dobrým východiskovým bodom pre učenie, pretože je dostatočne rýchla na to, aby bola zaujímavá, ale dostatočne pomalá na to, aby umožnila reakčný čas (vo videu o 07:10). Môžete ju upraviť, aby bolo vaše autíčko rýchlejšie alebo pomalšie.
Zvyšok kódu definuje logiku vo funkcii loop(). Načíta stav ľavého a pravého senzora a potom zavolá príslušnú pohybovú funkciu (moveForward(), moveBackward(), backLeft(), backRight()). Tieto funkcie sú vopred definované a riadia motorový ovládač na dosiahnutie požadovaného pohybu. Inštruktor neskôr pridal aj funkciu stop() v rámci úpravy, aby auto na krátky čas zastavilo po manévri vyhýbania sa, čím sa jeho pohyby stali zámernejšími (vo videu o 10:29).
Živá demonštrácia projektu
Vo videu inštruktor najprv demonštruje logiku pomocou sériového monitora. Umiestnením škatule blízko senzorov môžete vidieť, ako sa na obrazovke objavia zodpovedajúce správy ako „Go Left", „Go Right" alebo „Go Backward", čo potvrdzuje, že údaje zo senzorov a logika sú správne (vo videu o 09:11).
Po overení logiky inštruktor pridá kľúčové vylepšenie: funkciu stop(). Táto funkcia úplne zastaví auto na definovaný čas (napr. 1 sekundu) po tom, ako vykoná otočenie alebo cúvanie, čím zabráni trhavým pohybom a umožní autu znovu vyhodnotiť svoje okolie (vo videu o 10:29).
Nakoniec sa auto testuje na podlahe so sériou prekážok. Video ukazuje, ako sa auto úspešne pohybuje okolo škatúľ, zatáča doľava, doprava a cúva podľa potreby, aby našlo voľnú cestu, čo demonštruje praktické využitie tohto algoritmu na vyhýbanie sa prekážkam (vo videu o 12:13).
Kapitoly
- [00:00] Úvod do vyhýbania sa prekážkam s IR senzormi
- [01:24] Predpoklady a prehľad projektu
- [02:35] Ako funguje logika vyhýbania sa prekážkam
- [03:47] Zapojenie IR senzorov a motorov
- [05:40] Otvorenie a vysvetlenie kódu
- [09:11] Testovanie logiky pomocou sériového monitora
- [10:29] Pridanie funkcie stop pre plynulejšiu navigáciu
- [11:42] Testovanie funkcie stop
- [12:13] Záverečný praktický test na podlahe
const int A_1B = 5;
const int A_1A = 6;
const int B_1B = 9;
const int B_1A = 10;
const int rightIR = 7;
const int leftIR = 8;
void setup() {
Serial.begin(9600);
//motor
pinMode(A_1B, OUTPUT);
pinMode(A_1A, OUTPUT);
pinMode(B_1B, OUTPUT);
pinMode(B_1A, OUTPUT);
//IR obstacle
pinMode(leftIR, INPUT);
pinMode(rightIR, INPUT);
}
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);
}
}
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);
}
Common Course Links
Common Course Files
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