Lekcia 27/31: Autíčko SunFounder Smart Car sleduje vašu ruku pomocou Arduina | Robojax
Úvod
Chceli ste niekedy postaviť robota, ktorý reaguje intuitívne na vašu prítomnosť? Tento projekt premení štandardné SunFounder Smart Car auto na vozidlo ovládané gestami, ktoré nasleduje vašu ruku. Namiesto diaľkového ovládania alebo aplikácie v smartfóne toto auto používa kombináciu ultrazvukových a infračervených senzorov na zistenie polohy a vzdialenosti vašej ruky, čo vám umožňuje viesť ho doľava, doprava alebo dopredu jednoduchými prirodzenými pohybmi.
Tento projekt je súčasťou kurzu Robojax Arduino (lekcia 27/31) a je postavený pomocou súpravy SunFounder 3-v-1 Arduino. Je to vynikajúci spôsob, ako sa naučiť o fúzii senzorov, kde viacero senzorov spolupracuje na vytvorení komplexnejšieho a citlivejšieho správania. Skutočná hodnota v reálnom svete spočíva v pochopení, ako kombinovať rôzne typy vstupov na rozhodovanie, čo je základný koncept v robotike a automatizácii.
Tu je niekoľko praktických nápadov, ktoré by ste mohli postaviť na základe tejto logiky:
- Interaktívne výstavy: Vytvorte malý robotický displej, ktorý nasleduje návštevníkov, aby upútal ich pozornosť.
- Autonómna platforma na obchádzanie prekážok: Upravte kód tak, aby auto navigovalo miestnosť obchádzaním prekážok namiesto nasledovania ruky.
- Vzdelávacia robotická súprava: Použite to ako základný projekt na výučbu študentov o integrácii senzorov, logike a riadení motorov.
- Inteligentný doručovací vozík: V kontrolovanom prostredí by táto logika mohla byť prispôsobená pre malý vozík, ktorý nasleduje osobu v sklade alebo továrni.
Hardvér a komponenty
Tento projekt používa komponenty zahrnuté v súprave SunFounder 3-v-1 Arduino. Základné komponenty, ktoré budete používať, sú:
- Podvozok SunFounder Smart Car: Fyzická platforma s kolesami a motormi.
- Doska Arduino: „Mozog" auta, ktorý spúšťa kód.
- Ultrazvukový senzor (HC-SR04): Používa sa na meranie vzdialenosti k objektu (vašej ruke) pred autom.
- Dva IR (infračervené) senzory na obchádzanie prekážok: Umiestnené na ľavej a pravej strane na zistenie prítomnosti vašej ruky na týchto stranách.
- Ovládač motorov: Modul (často L298N alebo podobný) používaný na riadenie rýchlosti a smeru motorov auta na základe signálov z Arduina.
- Zdroj napájania: Batérie na napájanie Arduina a motorov.
Sprievodca zapojením
Ako je uvedené vo videu, zapojenie pre tento projekt je identické s tým, čo bolo vysvetlené v predchádzajúcich lekciách pre auto na obchádzanie prekážok. Senzory a motory sú všetky pripojené k digitálnym a analógovým pinom Arduina. Pre vizuálnu referenciu sa prosím obráťte na schému zapojenia pre SunFounder Smart Car.
Kód definuje konkrétne piny použité pre každý komponent, ktoré sú podrobne opísané v nasledujúcej časti.
Vysvetlenie kódu
Táto časť sa zameriava na používateľsky konfigurovateľné časti kódu, ktoré by ste mohli chcieť upraviť pre svoje vlastné auto. Celý program je k dispozícii na stiahnutie na stránke zdrojov Robojax.
Na úplnom začiatku náčrtu nájdete definície pinov. Toto sú najkritickejšie riadky na pochopenie, ak ste zapojili svoje auto inak ako inštruktor.
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;
Tu je, čo robí každá skupina pinov:
- Piny motorov (A_1A, A_1B, B_1A, B_1B): Toto sú piny pripojené k ovládaču motorov na riadenie dvoch motorov. Označenia „A" a „B" sa zvyčajne vzťahujú na ľavý a pravý motor. Musíte ich zmeniť, ak je váš ovládač motorov pripojený k iným pinom Arduina.
- Piny IR senzorov (rightIR, leftIR): Tieto digitálne vstupné piny čítajú signál z ľavého a pravého infračerveného senzora prekážok. Hodnota
0znamená, že je zistená prekážka (vaša ruka), zatiaľ čo1znamená, že cesta je voľná. - Piny ultrazvukového senzora (trigPin, echoPin):
trigPinje výstup, ktorý vysiela krátky ultrazvukový impulz, aechoPinje vstup, ktorý číta trvanie odrazeného impulzu na výpočet vzdialenosti.
Vo vnútri funkcie loop() nájdete hlavnú logiku správania. Existuje jedna premenná, ktorú možno budete chcieť upraviť:
int speed = 150;
Táto premenná speed riadi výkon odosielaný do motorov počas pohybu. Môže sa pohybovať od 0 (zastavené) do 255 (maximálna rýchlosť). Môžete zvýšiť túto hodnotu (napr. na 200) pre rýchlejšie auto alebo ju znížiť (napr. na 100) pre kontrolovanejšie, pomalšie pohyby.
Kód tiež obsahuje funkcie ako moveForward(), turnLeft() a turnRight(). Tieto funkcie sa používajú na riadenie pohybu auta a sú volané na základe hodnôt zo senzorov. Nemusíte ich upravovať, ale môžete ich použiť ako stavebné bloky na vytvorenie vlastných vlastných správaní.
Ako funguje logika „Nasleduj svoju ruku"
Čaro tohto projektu spočíva v tom, ako Arduino interpretuje údaje z troch senzorov. Logika je jednoduchá a vykonáva sa nepretržite vo funkcii loop().
Najprv auto zmeria vzdialenosť k objektu priamo pred sebou pomocou ultrazvukového senzora. Potom skontroluje dva infračervené senzory, aby zistilo, či sa objekt nachádza na jeho ľavej alebo pravej strane. Proces rozhodovania je nasledovný:
- Pohyb vpred: Ak je vzdialenosť nameraná ultrazvukovým senzorom väčšia ako 5 cm, ale menšia ako 10 cm, auto sa pohybuje vpred. Tým sa vytvára „ideálna zóna", v ktorej bude auto nasledovať vašu ruku.
- Odbočenie doľava: Ak vzdialenosť nie je v tejto zóne, auto skontroluje IR senzory. Ak je ľavý senzor zablokovaný (vaša ruka je vľavo) a pravý senzor je voľný, auto odbočí doľava.
- Odbočenie doprava: Naopak, ak je pravý senzor zablokovaný a ľavý voľný, auto odbočí doprava.
- Zastavenie: Ak nie je splnená žiadna z týchto podmienok – napríklad ak je vaša ruka príliš ďaleko alebo príliš blízko – auto zastaví.
Tento jednoduchý súbor pravidiel umožňuje autu dynamicky reagovať na polohu vašej ruky, čím vytvára plynulé a intuitívne správanie pri nasledovaní.
Živá ukážka projektu
Vo video ukážke inštruktor predvádza správanie auta v reálnom čase. Sériový monitor sa používa na zobrazenie vzdialenosti nameranej ultrazvukovým senzorom. Keď je auto nečinné a vaša ruka je ďaleko (napr. 36 cm), zostane zastavené. Hneď ako umiestnite ruku do zóny 5–10 cm pred auto, začne sa pohybovať vpred.
Ukážka tiež zdôrazňuje logiku otáčania. Keď umiestnite ruku na ľavú stranu auta, aktivuje sa ľavý IR senzor a auto odbočí doľava. Podobne umiestnenie ruky na pravú stranu spôsobí, že auto odbočí doprava. Auto bude pokračovať v nasledovaní vašej ruky, keď ňou pohybujete, a zastaví sa iba vtedy, keď ruku odstránite z dosahu senzorov alebo keď je príliš blízko. To potvrdzuje, že fúzia senzorov a logika fungujú podľa očakávania, čím vytvárajú citlivý a zábavný projekt.
Kapitoly
- [00:00] Úvod do inteligentného auta nasledujúceho ruku
- [00:35] O kurze a súprave Robojax Arduino
- [01:41] Prehľad projektu a nastavenie kódu
- [02:19] Vysvetlenie definícií pinov a nastavenia
- [03:19] Logika kódu pre nasledovanie vašej ruky
- [05:48] Živá ukážka auta v akcii
- [07:28] Záverečná ukážka a hodnotenie výkonu
/*
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
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