Lekcija 26/31: Pametni automobil Dio 4: Izbjegavanje prepreka pomoću ultrazvučnog senzora | SunFounder Robojax
U ovoj lekciji, nadograđujemo vaš pametni automobil mogućnošću da vidi i reagira na svoje okruženje koristeći ultrazvučni senzor. Mjerenjem udaljenosti do objekata ispred sebe, automobil može donositi inteligentne odluke: kretat će se naprijed kada je put jasan, zaustaviti se kada je objekt unutar zone opreza, i voziti unazad kada je prepreka preblizu. Ovaj projekt se nadograđuje na osnove upravljanja motorima i senzorima koje ste već naučili, što rezultira istinski autonomnim vozilom.
Ovo nije samo igračka; to je temeljni korak prema izgradnji složenijih robotičkih projekata. Logika koju ćete ovdje implementirati—osjeti, razmisli, djeluj—ista je ona koja se koristi u svemu, od robotskih usisivača do industrijske automatizacije. Evo nekoliko ideja koje će vas inspirirati za vlastite konstrukcije:
- Autonomni rover: Napravite robota koji može istraživati sobu ili hodnik bez udaranja u zidove ili namještaj.
- Sistem alarma za blizinu: Postavite ultrazvučni senzor na servo motor za skeniranje područja i aktiviranje alarma ili svjetla kada uljez uđe u definiranu zonu.
- Pametni asistent za parkiranje: Napravite sistem koji koristi očitanja udaljenosti za vođenje vozila u tijesan prostor, pružajući vizualne ili zvučne povratne informacije.
Ovaj vodič se temelji na SunFounder 3-u-1 Arduino kompletu i njegovom projektu "Play with Ultrasonic Module". Proći ćemo kroz povezivanje, objasniti kod za donošenje odluka i demonstrirati automobil u akciji.
Kako funkcionira logika izbjegavanja prepreka
Srž ovog projekta je jednostavno, ali moćno stablo odlučivanja. Ultrazvučni senzor neprestano mjeri udaljenost do objekta direktno ispred sebe. Ova vrijednost udaljenosti se zatim koristi za upravljanje motorima automobila, kao što je prikazano na dijagramu ispod.
- Ako je udaljenost > 25 cm: Put je jasan, pa se automobil kreće naprijed.
- Ako je 10 cm < udaljenost <= 25 cm: Objekt je otkriven u "zoni opreza", pa se automobil zaustavlja kako bi izbjegao sudar.
- Ako je 2 cm < udaljenost <= 10 cm: Objekt je opasno blizu. Automobil se kreće unazad kako bi stvorio više prostora.
- Ako je udaljenost <= 2 cm: Očitanje je vjerojatno greška (preblizu za precizno mjerenje), pa se automobil zaustavlja kao sigurnosna mjera.
Hardverske komponente
Za izgradnju ovog projekta trebat će vam sljedeće komponente, koje su sve uključene u SunFounder 3-u-1 komplet.
- 1x Arduino Uno (ili kompatibilna ploča)
- 1x Šasija pametnog automobila s dva zupčasta motora
- 1x L298N modul za upravljanje motorima
- 1x HC-SR04 ultrazvučni senzor udaljenosti
- 1x Eksperimentalna pločica (breadboard)
- Kratkospojne žice
- Napajanje za automobil (npr. baterijski paket)
Vodič za povezivanje
Povezivanje spaja upravljač motora, ultrazvučni senzor i Arduino. Upravljač motora kontrolira kotače automobila, dok ultrazvučni senzor djeluje kao njegove "oči".
Ovdje je dijagram povezivanja iz SunFounder dokumentacije:
Razdvojimo povezivanja. Prvo, napajajte pozitivnu i negativnu tračnicu eksperimentalne pločice s Arduino 5V i GND pinova. Ultrazvučni senzor se zatim povezuje na sljedeći način:
- VCC (Napajanje): Spojen na pozitivnu tračnicu na eksperimentalnoj pločici.
- GND (Uzemljenje): Spojen na negativnu tračnicu na eksperimentalnoj pločici.
- Trig (Okidač): Spojen na digitalni pin 3 na Arduinu. Ovaj pin šalje ultrazvučni impuls.
- Echo (Prijem): Spojen na digitalni pin 4 na Arduinu. Ovaj pin prima reflektirani impuls.
Priključci upravljača motora su isti kao u prethodnim lekcijama. Četiri upravljačka pina (IN1, IN2, IN3, IN4) spojena su na digitalne pinove 5, 6, 9 i 10 na Arduinu. Ovi pinovi kontroliraju brzinu i smjer dva motora. Provjerite jesu li napajanje i uzemljenje upravljača motora pravilno spojeni na baterijski paket i uzemljenje Arduina. (u videu na 02:24)
Objašnjenje koda
Kod za ovaj projekt kontrolira ponašanje automobila na temelju očitanja udaljenosti s ultrazvučnog senzora. Logika je jednostavna i lako se prilagođava. Pogledajmo ključne dijelove koje korisnik može konfigurirati.
1. Definicije pinova
Na vrhu skice definirani su pinovi za motore i ultrazvučni senzor. Možete ih promijeniti ako ste komponente spojili na druge Arduino pinove.
const int A_1B = 5;
const int A_1A = 6;
const int B_1B = 9;
const int B_1A = 10;
const int trigPin = 3;
const int echoPin = 4;
Ovdje, A_1A, A_1B, B_1A i B_1B kontroliraju lijevi i desni motor putem L298N upravljača. trigPin i echoPin su za ultrazvučni senzor.
2. Varijable ponašanja i logika
Glavno ponašanje je kontrolirano unutar loop() funkcije. Ovdje možete prilagoditi "ličnost" automobila.
void loop() {
float udaljenost = readSensorData();
if (udaljenost > 25) {
moveNaprijed(200);
}
else if (udaljenost < 10 && udaljenost > 2) {
moveNazad(200);
} else {
stopKretanje();
}
}
Evo kako to prilagoditi:
- Pragovi udaljenosti: Brojevi
25i10definiraju "sigurnu" i "opasnu" zonu u centimetrima. Povećajte25da se automobil ranije zaustavi, ili ga smanjite da mu dozvolite da se približi preprekama. Broj2je sigurnosna margina za ignorisanje pogrešnih očitanja od objekata koji su preblizu. - Brzina motora: Vrijednost
200proslijeđena funkcijamamoveNaprijed()imoveNazad()postavlja brzinu automobila. Ova vrijednost može biti od 0 do 255. Niža vrijednost, poput 150, učinit će da se automobil kreće sporije i opreznije.
Ostatak koda sastoji se od funkcije readSensorData(), koja upravlja tajmingom ultrazvučnog senzora za izračunavanje udaljenosti, te funkcija moveNaprijed(), moveNazad() i stopKretanje(), koje kontroliraju pokretač motora za izvršavanje željene radnje.
Rješavanje česte greške
Možda naiđete na grešku poput 'moveNaprijed' nije deklarisan u ovom opsegu. Ovo se dešava jer Arduino IDE čita kod od vrha prema dnu. Kada dođe do funkcije loop(), još ne zna za funkcije definirane ispod nje. Da biste to popravili, morate dodati "prototipove funkcija" prije funkcije setup(). To su jednostavno deklaracije imena funkcije i tipa povratne vrijednosti, koje završavaju tačkom-zapetom.
void moveNaprijed(int brzina);
void moveNazad(int brzina);
void stopKretanje();
float readSensorData();
Dodavanje ovih linija govori kompajleru: "Ove funkcije postoje i bit će definirane kasnije", što rješava grešku. (u videu na 09:21)
Poboljšanje stabilnosti senzora
Tokom testiranja, možda primijetite da se automobil zaustavlja ili trza čak i kada je put čist. To je često zato što se petlja izvršava prebrzo, a ultrazvučni senzor nema dovoljno vremena da primi eho signal, što rezultira očitanjem od 0 cm. Da biste to popravili, dodajte malu pauzu na kraju funkcije loop() kako biste dali senzoru vremena da radi.
void loop() {
float udaljenost = readSensorData();
if (udaljenost > 25) {
moveNaprijed(200);
}
else if (udaljenost < 10 && udaljenost > 2) {
moveNazad(200);
} else {
stopKretanje();
}
delay(100); // Dodajte pauzu od 100ms za stabilna očitanja
}
Pauza od 100 milisekundi obično je dovoljna za stabilna i dosljedna očitanja udaljenosti. (u videu na 10:56)
Demonstracija projekta uživo
Nakon što se kod prenese, otvorite Serial Monitor. Vidjet ćete tekst koji prikazuje stanje automobila, poput "Naprijed", "Nazad" ili "Stop".
U demonstraciji, automobil je postavljen okrenut prema prepreci. Kada je prepreka udaljena više od 25 cm, automobil se kreće naprijed. Kako približavate ruku, automobil se zaustavlja kada udaljenost padne ispod 25 cm. Ako ruku približite vrlo blizu, unutar 10 cm, automobil će se kretati unazad. Ovo ponašanje jasno je vidljivo u videu i potvrđuje da logika izbjegavanja prepreka radi ispravno. (u videu na 11:53)
Zaključak
Čestitamo! Uspješno ste napravili pametni automobil koji može navigirati svojim okruženjem i izbjegavati prepreke. Ovaj projekat kombinuje senzorski unos, logiku donošenja odluka i kontrolu motora u jedan, funkcionalan sistem. Naučili ste ne samo kako koristiti ultrazvučni senzor, već i kako implementirati jednostavan kontrolni algoritam koji je temelj za mnogo složenije autonomne robote.
Poglavlja
- [00:00] Uvod u izbjegavanje prepreka
- [01:16] Pregled projekta i preduvjeti
- [02:24] Povezivanje ultrazvučnog senzora i pokretača motora
- [04:56] Otvaranje koda projekta
- [05:12] Objašnjenje koda: Logika i funkcije
- [08:34] Prenošenje koda i početni test
- [09:21] Rješavanje problema: Prototipovi funkcija
- [10:56] Rješavanje problema: Dodavanje pauze za stabilnost
- [11:53] Demonstracija izbjegavanja prepreka uživo
/*
Lesson 26/31: Avoiding Obstacle Using Ultrasonic Sensor
Get this code and watch video Download and resource page https://robojax.com/RJT609
YouTube video https://www.youtube.com/watch?v=uLBmRvaemxA
*/
const int A_1B = 5;
const int A_1A = 6;
const int B_1B = 9;
const int B_1A = 10;
const int trigPin = 3;
const int echoPin = 4;
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);
}
void loop() {
float distance = readSensorData();
if (distance > 25) {
moveForward(200);
}
else if (distance < 10 && distance > 2) {
moveBackward(200);
} else {
stopMove();
}
}
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 stopMove() {
analogWrite(A_1B, 0);
analogWrite(A_1A, 0);
analogWrite(B_1B, 0);
analogWrite(B_1A, 0);
}
Common Course Links
Common Course Files
Stvari koje bi vam mogle zatrebati
-
AmazonSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
Amazon
-
Amazon
-
Amazon
-
Amazon
Resursi i reference
-
DokumentacijaDocumentation for SunFounder 3 in 1 IoT/Smart Car/Learning Kitdocs.sunfounder.com
-
EksternoPurchase SunFounder's 3-in-1 Smart car learning kitsunfounder.com
Datoteke📁
Arduino biblioteke (zip)
-
SunFounder's 3-in-1 Smart Car learning kit source code
3in1-kit-main-v2.zip12.80 MB