Hľadať kód

Lekcia 25/31: Smart Car-3 sa vyhýba prekážkam pomocou infračervených senzorov | SunFounder Robojax

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.

Sunfounder-Smartcar-Obstacle-avoideance-1

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.

Sunfounder-Smartcar-Obstacle-avoideance-wiring

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

Obrázky

Sunfounder smartcar obstacle avoidance 1
Sunfounder smartcar obstacle avoidance 1
Sunfounder smartcar obstacle avoidance wiring
Sunfounder smartcar obstacle avoidance wiring
894-Lesson 25: SunFounder's 3-in-1 Arduino kit Car-3 Smart Car Avoids Obstacle Using Infrared Sensors
Jazyk: C++
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);
}

Zdroje a referencie

Súbory📁

Knižnice Arduino (zip)