Lekcija 27/31: SunFounder pametni automobil-5 prati vašu ruku koristeći Arduino | Robojax
Uvod
Jeste li ikada željeli napraviti robota koji intuitivno reagira na vašu prisutnost? Ovaj projekt pretvara standardni SunFounder Smart Car u vozilo upravljano gestama koje prati vašu ruku. Umjesto daljinskog upravljača ili aplikacije za pametni telefon, ovaj automobil koristi kombinaciju ultrazvučnih i infracrvenih senzora za otkrivanje položaja i udaljenosti vaše ruke, omogućujući vam da ga usmjeravate lijevo, desno ili naprijed jednostavnim prirodnim pokretima.
Ovaj projekt dio je Robojax Arduino tečaja (Lekcija 27/31) i izrađen je pomoću SunFounder 3-u-1 Arduino kompleta. To je odličan način da naučite o fuziji senzora, gdje više senzora radi zajedno kako bi stvorili složenije i responzivnije ponašanje. Praktična vrijednost ovdje je u razumijevanju kako kombinirati različite vrste ulaza za donošenje odluka, što je temeljni koncept u robotici i automatizaciji.
Evo nekoliko praktičnih ideja koje biste mogli nadograditi na temelju ove logike:
- Interaktivni izlošci: Napravite mali robotski zaslon koji prati posjetitelje kako bi privukao njihovu pažnju.
- Autonomna platforma za izbjegavanje prepreka: Modificirajte kod tako da automobil navigira prostorijom izbjegavajući prepreke umjesto da prati ruku.
- Edukativni robotski komplet: Koristite ovo kao temeljni projekt za podučavanje učenika o integraciji senzora, logici i upravljanju motorima.
- Pametna dostavna kolica: U kontroliranom okruženju, ova logika mogla bi se prilagoditi za mala kolica koja prate osobu u skladištu ili tvornici.
Hardver i komponente
Ovaj projekt koristi komponente uključene u SunFounder 3-u-1 Arduino komplet. Osnovne komponente koje ćete koristiti su:
- SunFounder Smart Car šasija: Fizička platforma s kotačima i motorima.
- Arduino ploča: "Mozak" automobila koji pokreće kod.
- Ultrazvučni senzor (HC-SR04): Koristi se za mjerenje udaljenosti do objekta (vaše ruke) ispred automobila.
- Dva IR (infracrvena) senzora za izbjegavanje prepreka: Montirana na lijevoj i desnoj strani za otkrivanje prisutnosti vaše ruke na tim stranama.
- Pokretač motora: Modul (često L298N ili sličan) koji se koristi za upravljanje brzinom i smjerom motora automobila na temelju signala s Arduina.
- Izvor napajanja: Baterije za napajanje Arduina i motora.
Vodič za povezivanje
Kao što je spomenuto u videu, povezivanje za ovaj projekt identično je onome što je objašnjeno u prethodnim lekcijama za automobil koji izbjegava prepreke. Senzori i motori svi su povezani na digitalne i analogne pinove Arduina. Za vizualnu referencu, pogledajte dijagram povezivanja za SunFounder Smart Car.
Kod definira specifične pinove koji se koriste za svaku komponentu, što je detaljno objašnjeno u sljedećem odjeljku.
Objašnjenje koda
Ovaj odjeljak fokusira se na korisnički konfigurabilne dijelove koda koje biste mogli željeti prilagoditi za svoj automobil. Cijeli program dostupan je za preuzimanje na Robojax stranici resursa.
Na samom vrhu skice pronaći ćete definicije pinova. Ovo su najkritičnije linije koje treba razumjeti ako ste svoj automobil povezali drugačije od instruktora.
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;
const int trigPin = 3;
const int echoPin = 4;
Evo što svaka grupa pinova radi:
- Pinovi motora (A_1A, A_1B, B_1A, B_1B): Ovo su pinovi povezani na pokretač motora za upravljanje dvama motorima. Oznake "A" i "B" obično se odnose na lijevi i desni motor. Morate ih promijeniti ako je vaš pokretač motora povezan na druge Arduino pinove.
- Pinovi IR senzora (rightIR, leftIR): Ovi digitalni ulazni pinovi čitaju signal s lijevog i desnog infracrvenog senzora za prepreke. Vrijednost
0znači da je prepreka (vaša ruka) otkrivena, dok1znači da je put čist. - Pinovi ultrazvučnog senzora (trigPin, echoPin):
trigPinje izlaz koji šalje kratki ultrazvučni puls, aechoPinje ulaz koji čita trajanje reflektiranog pulsa za izračun udaljenosti.
Unutar loop() funkcije pronaći ćete glavnu logiku ponašanja. Postoji jedna varijabla koju biste mogli željeti prilagoditi:
int speed = 150;
Ova speed varijabla kontrolira snagu koja se šalje motorima tijekom kretanja. Može se kretati od 0 (zaustavljeno) do 255 (maksimalna brzina). Možete povećati ovu vrijednost (npr. na 200) za brži automobil ili je smanjiti (npr. na 100) za kontroliranije, sporije pokrete.
Kod također sadrži funkcije poput moveForward(), turnLeft() i turnRight(). Ove funkcije koriste se za upravljanje kretanjem automobila i pozivaju se na temelju očitanja senzora. Ne morate ih mijenjati, ali ih možete koristiti kao gradivne blokove za stvaranje vlastitih prilagođenih ponašanja.
Kako funkcionira logika "Prati svoju ruku"
Čarolija ovog projekta leži u tome kako Arduino tumači podatke sa tri senzora. Logika je jednostavna i izvršava se kontinuirano u loop() funkciji.
Prvo, automobil mjeri udaljenost do objekta direktno ispred sebe koristeći ultrazvučni senzor. Zatim provjerava dva infracrvena senzora da vidi da li se objekat nalazi s njegove lijeve ili desne strane. Proces donošenja odluka je sljedeći:
- Kretanje naprijed: Ako je udaljenost koju mjeri ultrazvučni senzor veća od 5 cm, ali manja od 10 cm, automobil se kreće naprijed. Ovo stvara "sweet spot" zonu u kojoj će automobil pratiti vašu ruku.
- Skretanje lijevo: Ako udaljenost nije u toj zoni, automobil provjerava IR senzore. Ako je lijevi senzor blokiran (vaša ruka je s lijeve strane), a desni senzor je čist, automobil skreće lijevo.
- Skretanje desno: Obrnuto, ako je desni senzor blokiran, a lijevi je čist, automobil skreće desno.
- Zaustavljanje: Ako nijedan od ovih uslova nije ispunjen—na primjer, ako je vaša ruka previše daleko ili previše blizu—automobil se zaustavlja.
Ovaj jednostavan skup pravila omogućava automobilu da dinamično reagira na položaj vaše ruke, stvarajući glatko i intuitivno ponašanje praćenja.
Demonstracija projekta uživo
U video demonstraciji, instruktor prikazuje ponašanje automobila u stvarnom vremenu. Serijski monitor se koristi za prikaz udaljenosti koju očitava ultrazvučni senzor. Kada je automobil u stanju mirovanja i vaša ruka je daleko (npr. 36 cm), ostaje zaustavljen. Čim stavite ruku u zonu od 5-10 cm ispred automobila, on počinje da se kreće naprijed.
Demonstracija također naglašava logiku skretanja. Kada stavite ruku s lijeve strane automobila, lijevi IR senzor se aktivira i automobil skreće lijevo. Slično tome, stavljanje ruke s desne strane čini da automobil skreće desno. Automobil će nastaviti pratiti vašu ruku dok je pomičete, zaustavljajući se samo kada uklonite ruku iz dometa senzora ili je približite previše. Ovo potvrđuje da fuzija senzora i logika rade kako je predviđeno, stvarajući responzivan i zabavan projekat.
Poglavlja
- [00:00] Uvod u pametni automobil koji prati ruku
- [00:35] O Robojax Arduino kursu i kompletu
- [01:41] Pregled projekta i postavljanje koda
- [02:19] Objašnjenje definicija pinova i postavljanja
- [03:19] Logika koda za praćenje vaše ruke
- [05:48] Demonstracija automobila uživo
- [07:28] Završna demonstracija i pregled performansi
/*
Lesson 27/31: Car-5 SunFounder Smart Car Follows Your Hand
Get this code and watch video Download and resource page https://robojax.com/RJT610
YouTube video https://www.youtube.com/watch?v=mcbJlE7-8ro
*/
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;
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);
//IR obstacle
pinMode(leftIR,INPUT);
pinMode(rightIR,INPUT);
//ultrasonic
pinMode(echoPin, INPUT);
pinMode(trigPin, OUTPUT);
}
void loop() {
float distance = readSensorData();
int left = digitalRead(leftIR); // 0: Obstructed 1: Empty
int right = digitalRead(rightIR);
int speed = 150;
if (distance>5 && distance<10){
moveForward(speed);
}else if(!left&&right){
turnLeft(speed);
}else if(left&&!right){
turnRight(speed);
}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 turnRight(int speed) {
analogWrite(A_1B, speed);
analogWrite(A_1A, 0);
analogWrite(B_1B, speed);
analogWrite(B_1A, 0);
}
void turnLeft(int speed) {
analogWrite(A_1B, 0);
analogWrite(A_1A, speed);
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