Lekcia 29/31: Auto-7 Ovládanie inteligentného auta SunFounder pomocou diaľkového ovládača | Robojax
V tej lekciji premeníme váš SunFounder smart car na vozidlo na diaľkové ovládanie pomocou infračerveného (IR) diaľkového ovládača. Namiesto spoliehania sa na káblové pripojenie alebo aplikáciu v smartfóne sa naučíte, ako priradiť tlačidlá štandardného IR diaľkového ovládača na ovládanie pohybu auta—dopredu, dozadu, zatáčanie a dokonca aj diagonálne manévre—ako aj upravovať jeho rýchlosť za chodu. Tento projekt je ideálnym ďalším krokom po zvládnutí základov ovládania motorov a IR komunikácie, pretože kombinuje oboje do jedného interaktívneho systému.
Skutočná hodnota v reálnom svete spočíva v pochopení, ako vytvoriť robustné a užívateľsky prívetivé ovládacie rozhranie pre robotickú platformu. Princípy, ktoré sa naučíte, sú priamo použiteľné na širokú škálu projektov, ako napríklad:
- Stavba robota na diaľkové ovládanie pre úlohy domácej automatizácie, napríklad malého doručovacieho robota.
- Vytvorenie programovateľného vozidla pre vzdelávacie robotické súťaže.
- Vývoj vlastného diaľkového ovládača pre kamerovú koľajnicu alebo zariadenie na naklápanie a otáčanie.
- Prototypovanie užívateľského rozhrania pre väčší a komplexnejší automatizovaný systém.
Hardvér a komponenty
Tento projekt nadväzuje na SunFounder 3-v-1 Arduino kit. Na jeho realizáciu budete potrebovať komponenty uvedené nižšie. Zapojenie je jednoduché a rozširuje predchádzajúce lekcie kurzu.
- SunFounder 3-v-1 Arduino kit: Obsahuje podvozok smart car, dosku ovládača motorov a dosku Arduino.
- Infračervený diaľkový ovládač: Štandardný diaľkový ovládač dodávaný so súpravou.
- IR prijímač: Senzor, ktorý dekóduje signály z diaľkového ovládača.
- LED a 330-ohmový rezistor: Používajú sa ako vizuálny indikátor na potvrdenie stlačenia klávesu. (vo videu o 04:08)
- Prepojovacie vodiče: Na vytvorenie potrebných spojení na breadboarde.
Sprievodca zapojením
Predtým, než sa ponoríme do kódu, sa uistime, že je hardvér správne zapojený. Zapojenie IR prijímača a ovládača motorov je v súlade s predchádzajúcimi lekciami tejto série. Aby bol projekt interaktívnejší, pripojíme tiež externú LED na pin 13 ako vizuálny indikátor spätnej väzby.
Tu je podrobný návod na zapojenie:
- IR prijímač: IR prijímač má tri piny. Kladný pin sa pripája na 5V lištu na breadboarde. Uzemňovací pin sa pripája na GND lištu. Signálny pin, ktorý je posledným pinom, sa pripája na digitálny pin 11 na vašej doske Arduino. (vo videu o 05:29)
- Externá LED: Pripojte jednu nožičku 330-ohmového rezistora na digitálny pin 13 na Arduino. Druhú nožičku rezistora pripojte na dlhšiu (anódovú) nožičku LED. Kratšia (katódová) nožička LED by mala byť pripojená na GND lištu na breadboarde. (vo videu o 04:08)
- Ovládač motorov: Štyri piny ovládača motorov (A_1B, A_1A, B_1B, B_1A) sú pripojené na piny 5, 6, 9 a 10 na Arduino. Toto zapojenie bolo vysvetlené v predchádzajúcich lekciách. (vo videu o 06:44)
Pre vizuálnu referenciu týchto zapojení si pozrite schému zapojenia nižšie.
Vysvetlenie kódu
Kód pre tento projekt je navrhnutý tak, aby bol intuitívny. Používa knižnicu IRremote na zvládnutie komplexnej úlohy dekódovania IR signálov. Poďme si rozobrať časti konfigurovateľné používateľom, ktoré by ste mohli chcieť upraviť pre svoje vlastné projekty.
Na začiatku náčrtu nájdete definície pinov. Toto sú prvé veci, ktoré by ste mali skontrolovať, ak ste zapojili komponenty na iné piny, ako sú použité v tomto príklade.
const int IR_RECEIVE_PIN = 12; // Definuje číslo pinu pre IR senzor
const int A_1B = 5;
const int A_1A = 6;
const int B_1B = 9;
const int B_1A = 10;
IR_RECEIVE_PIN: Táto konštanta definuje digitálny pin pripojený na signálny pin vášho IR prijímača. Ak ste ho pripojili na iný pin, zmenili by ste číslo tu.A_1B,A_1A,B_1B,B_1A: Tieto konštanty mapujú štyri riadiace piny na vašom ovládači motorov. Riadi rýchlosť a smer ľavého a pravého motora.
Ďalej nájdete kľúčovú premennú, ktorá riadi správanie auta.
int speed = 150;
speed: Táto premenná nastavuje počiatočnú rýchlosť auta. Hodnota sa môže pohybovať od 0 do 255. V tomto projekte ju môžete zmeniť pomocou klávesov "+" a "-" na diaľkovom ovládači. Kód tiež obsahuje logiku, ktorá zabraňuje prekročeniu rýchlosti nad 255 alebo poklesu pod 0. (vo videu o 09:22)
Základná logika diaľkového ovládania je spracovaná vo funkcii loop(). Keď sa stlačí kláves, funkcia decodeKeyValue() preloží surový IR kód na jednoduchý reťazec, ako napríklad "2" pre dopredu alebo "+" pre zvýšenie rýchlosti. To robí if príkazy, ktoré nasledujú, veľmi ľahko čitateľnými a upraviteľnými. (vo videu o 07:58)
Vlastné funkcie ako moveForward(), turnRight() a moveLeft() sú miestom, kde dochádza k riadeniu motorov. Každá funkcia berie aktuálnu rýchlosť ako argument. Napríklad moveForward(speed) poháňa oba motory dopredu zadanou rýchlosťou. Kľúčový rozdiel medzi „otočením“ a „pohybom“ je v tom, že otočenie otáča obe kolesá v opačných smeroch, čo spôsobí, že sa auto otáča na mieste, zatiaľ čo pohyb otáča iba jedno koleso, čo spôsobí, že auto oblúkom obchádza stacionárne koleso. (vo videu o 10:14)
Živá ukážka projektu
Po nahratí kódu a zapnutí auta sa diaľkové ovládanie stane vaším primárnym rozhraním. Ukážka vo videu zdôrazňuje niekoľko kľúčových správaní:
- Ovládanie rýchlosti: Stlačením klávesu „+“ sa rýchlosť zvýši o 50, zatiaľ čo kláves „-“ ju zníži. Rýchlosť je obmedzená na 255 a minimálne na 0, aby sa chránili motory. (vo videu o 11:56)
- Okamžitý pohyb: Keď stlačíte smerový kláves ako „2“ (dopredu) alebo „8“ (dozadu), auto sa pohne na jednu sekundu a potom sa automaticky zastaví. Toto je bezpečnostná funkcia zabudovaná v kóde. (vo videu o 13:09)
- Otáčanie a manévrovanie: Klávesy usporiadané do krížového vzoru na diaľkovom ovládači fungujú ako joystick. Stlačením „4“ alebo „6“ sa auto otočí doľava alebo doprava na mieste. Stlačením diagonálnych klávesov, ako „1“ alebo „3“, sa vykoná „pohyb doľava“ alebo „pohyb doprava“, čo je ostrejšie otočenie, pri ktorom je jedno koleso stacionárne. (vo videu o 16:42)
Jedna vec, ktorú si môžete všimnúť, je, že auto nejazdí vždy dokonale rovno. Často je to spôsobené menšími rozdielmi v motoroch alebo napätím montáže auta, čo je bežná a normálna vlastnosť týchto stavebníc. (vo videu o 15:14)
Kapitoly
- [00:00] Úvod do IR diaľkového ovládania pre smart auto
- [01:15] Predpoklady a požadované predchádzajúce lekcie
- [01:56] Prehľad projektovej dokumentácie
- [02:29] Pochopenie funkcií klávesov diaľkového ovládania
- [03:29] Podrobný návod na zapojenie IR prijímača a LED
- [05:51] Otvorenie a načítanie projektového kódu
- [07:41] Vysvetlenie kódu: Slučka, dekódovanie klávesov a akcie
- [09:22] Obmedzenie rýchlosti a bezpečnostné funkcie v kóde
- [10:08] Vysvetlenie funkcií pohybu motorov
- [11:49] Živá ukážka: Testovanie ovládania rýchlosti a blikania LED
- [13:27] Živá ukážka: Dopredu, dozadu a otáčanie
- [14:31] Plná ukážka auta s napájaním a pohybom
/*
Lesson 29/31: Car-7 Controlling SunFounder Smart Car using Remote Controller
Get this code and watch video Download and resource page https://robojax.com/RJT612
*/
#include <IRremote.h>
const int IR_RECEIVE_PIN = 12; // Define the pin number for the IR Sensor
const int A_1B = 5;
const int A_1A = 6;
const int B_1B = 9;
const int B_1A = 10;
int speed = 150;
void setup() {
Serial.begin(9600);
//motor
pinMode(A_1B, OUTPUT);
pinMode(A_1A, OUTPUT);
pinMode(B_1B, OUTPUT);
pinMode(B_1A, OUTPUT);
//IR remote
IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK); // Start the IR receiver // Start the receiver
Serial.println("REMOTE CONTROL START");
}
void loop() {
if (IrReceiver.decode()) {
// Serial.println(results.value,HEX);
String key = decodeKeyValue(IrReceiver.decodedIRData.command);
if (key != "ERROR") {
Serial.println(key);
if (key == "+") {
speed += 50;
} else if (key == "-") {
speed -= 50;
} else if (key == "2") {
moveForward(speed);
delay(1000);
} else if (key == "1") {
moveLeft(speed);
} else if (key == "3") {
moveRight(speed);
} else if (key == "4") {
turnLeft(speed);
} else if (key == "6") {
turnRight(speed);
} else if (key == "7") {
backLeft(speed);
} else if (key == "9") {
backRight(speed);
} else if (key == "8") {
moveBackward(speed);
delay(1000);
}
if (speed >= 255) {
speed = 255;
}
if (speed <= 0) {
speed = 0;
}
delay(500);
stopMove();
}
IrReceiver.resume(); // Enable receiving of the next value
}
}
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 moveLeft(int speed) {
analogWrite(A_1B, 0);
analogWrite(A_1A, speed);
analogWrite(B_1B, 0);
analogWrite(B_1A, 0);
}
void moveRight(int speed) {
analogWrite(A_1B, 0);
analogWrite(A_1A, 0);
analogWrite(B_1B, speed);
analogWrite(B_1A, 0);
}
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);
}
String decodeKeyValue(long result)
{
switch(result){
case 0x16:
return "0";
case 0xC:
return "1";
case 0x18:
return "2";
case 0x5E:
return "3";
case 0x8:
return "4";
case 0x1C:
return "5";
case 0x5A:
return "6";
case 0x42:
return "7";
case 0x52:
return "8";
case 0x4A:
return "9";
case 0x9:
return "+";
case 0x15:
return "-";
case 0x7:
return "EQ";
case 0xD:
return "U/SD";
case 0x19:
return "CYCLE";
case 0x44:
return "PLAY/PAUSE";
case 0x43:
return "FORWARD";
case 0x40:
return "BACKWARD";
case 0x45:
return "POWER";
case 0x47:
return "MUTE";
case 0x46:
return "MODE";
case 0x0:
return "ERROR";
default :
return "ERROR";
}
}
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
-
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