Search Code

Somo la 25/31: Gari-3 Gari Mahiri Huepuka Kizuizi Kwa Kutumia Sensorer za Infrared | SunFounder Robojax

Somo la 25/31: Gari-3 Gari Mahiri Huepuka Kizuizi Kwa Kutumia Sensorer za Infrared | SunFounder Robojax

Mradi huu unabadilisha gari lako la akili la SunFounder 3-in-1 Arduino kuwa gari linalojiepusha na vizuizi kwa njia ya kujitegemea. Kwa kuweka sensorer mbili za infrared (IR)—moja upande wa kushoto na moja upande wa kulia—gari linaweza kugundua vitu vilivyo mbele yake na kufanya maamuzi ya haraka ili kuvizunguka. Hii ni hatua ya msingi katika robotiki, inayokufundisha jinsi ya kuchanganya pembejeo za sensorer na mantiki ya udhibiti wa motor ili kuunda mashine inayojibu na kujiendesha yenyewe. Kanuni utakazojifunza hapa zinatumika katika matumizi mengi ya ulimwengu halisi, ikijumuisha:

  • Kujenga kisafishaji cha utupu cha roboti kinachotembea ndani ya chumba bila kugonga samani.
  • Kuunda roboti inayofuata mstari au kutatua maze kwa mashindano au miradi ya kielimu.
  • Kutengeneza roboti ya doria ya usalama inayojiendesha inayoweza kuzunguka eneo na kuepuka kuta.
  • Kubuni gari la kuchezea la akili linaloweza kucheza kwa kujitegemea bila kukwama.

Mwongozo huu unajenga moja kwa moja juu ya masomo ya awali ambapo ulijifunza kudhibiti motor za gari na kuelewa jinsi sensorer za IR zinavyofanya kazi. Hapa, tutachanganya ujuzi huo kutekeleza algorithm rahisi lakini yenye ufanisi ya kuepuka vizuizi.

Jinsi Mantiki ya Kuepuka Vizuizi Inavyofanya Kazi

Wazo kuu ni rahisi: gari hutumia sensorer mbili za IR kuangalia vizuizi upande wake wa kushoto na kulia. Kila sensorer hutoa ishara ya dijiti: LOW (0) inapogundua kitu ndani ya eneo lake (takriban sm 20) na HIGH (1) wakati njia iko wazi. Mantiki kisha huamua kitendo cha gari kulingana na hali za sensorer (katika video saa 02:35):

  • Kizuizi Kushoto, Kulia Wazi: Gari hugeuka kulia kuliepuka.
  • Kizuizi Kulia, Kushoto Wazi: Gari hugeuka kushoto.
  • Vizuizi Pande Zote Mbili: Gari husogea nyuma kuepuka mwisho wa njia unaowezekana.
  • Hakuna Vizuizi: Gari huenda mbele.

Mbinu hii ya kujibu ni mfano wa kawaida wa mashine ya hali ya kikomo, ambapo tabia ya gari ni jibu la moja kwa moja kwa pembejeo zake za sasa za sensorer.

Sunfounder-Smartcar-Obstacle-avoideance-1

Vipengele vya Maunzi

Ili kukamilisha mradi huu, utahitaji vipengele vifuatavyo, ambavyo vyote vimejumuishwa katika kit cha SunFounder 3-in-1 Arduino:

  • 1x Kit cha SunFounder 3-in-1 Arduino Smart Car (au sehemu sawa)
  • 2x Sensorer za Kuepuka Vizuizi za Infrared
  • 1x Arduino Uno (au bodi inayooana)
  • 1x Motor Driver Shield/Bodi
  • Waya za Jumper

Mwongozo wa Uunganishaji wa Waya

Mpangilio sahihi wa sensorer ni muhimu kwa mradi huu kufanya kazi. Sensorer za IR lazima ziwe zikielekea mbele na kidogo nje, kwani zitagundua vizuizi kwenye pande za gari (katika video saa 02:07). Mchoro ufuatao wa uunganishaji unaonyesha jinsi ya kuunganisha sensorer kwenye Arduino. Tafadhali kumbuka kwamba mwalimu alitumia sehemu maalum ya usambazaji wa nguvu kwenye breadboard ya gari, lakini uunganishaji kwenye Arduino ndio muhimu.

Sunfounder-Smartcar-Obstacle-avoideance-wiring

Uunganishaji wa waya ni kama ifuatavyo (katika video saa 03:47):

  • Nguvu (VCC): Unganisha pini ya VCC ya sensorer zote mbili za IR kwenye pato la 5V kwenye Arduino au reli ya nguvu ya gari.
  • Ardhi (GND): Unganisha pini ya GND ya sensorer zote mbili za IR kwenye ardhi ya kawaida kwenye Arduino au reli ya ardhi ya gari.
  • Pato la Sensorer ya Kulia (OUT): Unganisha pini ya pato la dijiti ya sensorer ya kulia ya IR kwenye pini ya dijiti 7 kwenye Arduino.
  • Pato la Sensorer ya Kushoto (OUT): Unganisha pini ya pato la dijiti ya sensorer ya kushoto ya IR kwenye pini ya dijiti 8 kwenye Arduino.

Uunganishaji wa motor driver kwa motor za kushoto na kulia ni sawa na ule ulioanzishwa katika somo la awali la udhibiti wa motor.

Maelezo ya Msimbo

Msimbo wa mradi huu ni rahisi. Programu kuu inapatikana kwa kupakuliwa chini ya makala. Hapa, tutazingatia sehemu zinazoweza kusanidiwa na mtumiaji ambazo unaweza kurekebisha kwa gari lako mwenyewe.

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;

Mistari hii inafafanua pini zinazotumika kwa motor driver na sensorer za IR. Pini za motor (A_1B, A_1A, B_1B, B_1A) zinadhibiti kasi na mwelekeo wa motor mbili. Pini za rightIR na leftIR ndizo unazounganisha waya za ishara kutoka kwa sensorer zako. Ikiwa ulitumia pini tofauti, ungebadilisha maadili haya hapa.

int speed = 150;

Kigezo hiki kinaweka kasi ya msingi ya gari. Thamani inaweza kuwa kati ya 0 hadi 255, ambapo 255 ni kasi ya juu zaidi. Thamani ya 150 ni mahali pazuri pa kuanzia kwa kujifunza, kwani ni ya haraka vya kutosha kuwa ya kuvutia lakini polepole vya kutosha kuruhusu muda wa kujibu (katika video saa 07:10). Unaweza kurekebisha hii kufanya gari lako liwe la haraka au la polepole.

Sehemu iliyobaki ya msimbo inafafanua mantiki katika kazi ya loop(). Inasoma hali ya sensorer za kushoto na kulia na kisha kuita kazi inayofaa ya harakati (moveForward(), moveBackward(), backLeft(), backRight()). Kazi hizi zimefafanuliwa mapema na zinadhibiti kiendeshaji cha motor kufikia mwendo unaotakiwa. Mwalimu pia aliongeza kazi ya stop() katika marekebisho ya baadaye ili kusimamisha gari kwa muda mfupi baada ya kitendo cha kukwepa, na kufanya harakati zake ziwe za makusudi zaidi (katika video saa 10:29).

Maonyesho ya Moja kwa Moja ya Mradi

Katika video, mwalimu kwanza anaonyesha mantiki kwa kutumia Serial Monitor. Kwa kuweka sanduku karibu na sensorer, unaweza kuona ujumbe unaolingana kama "Go Left", "Go Right", au "Go Backward" ukionekana kwenye skrini, ikithibitisha kwamba usomaji wa sensorer na mantiki ni sahihi (katika video saa 09:11).

Baada ya kuthibitisha mantiki, mwalimu anaongeza uboreshaji muhimu: kazi ya stop(). Kazi hii inaleta gari kusimama kabisa kwa muda uliowekwa (kwa mfano, sekunde 1) baada ya kufanya zamu au kurudi nyuma, ikizuia harakati za kushtuka na kuruhusu gari kutathmini tena mazingira yake (katika video saa 10:29).

Hatimaye, gari linajaribiwa sakafuni na mfululizo wa vizuizi. Video inaonyesha gari likipita kwa mafanikio karibu na masanduku, kugeuka kushoto, kulia, na kurudi nyuma inapohitajika kupata njia wazi, ikionyesha matumizi ya ulimwengu halisi ya algoriti hii ya kukwepa vizuizi (katika video saa 12:13).

Sura

  • [00:00] Utangulizi wa Kukwepa Vizuizi kwa Sensorer za IR
  • [01:24] Mahitaji na Muhtasari wa Mradi
  • [02:35] Jinsi Mantiki ya Kukwepa Vizuizi Inavyofanya Kazi
  • [03:47] Kuunganisha Sensorer za IR na Motors
  • [05:40] Kufungua na Kuelezea Msimbo
  • [09:11] Kujaribu Mantiki kwa Serial Monitor
  • [10:29] Kuongeza Kazi ya Kusimama kwa Urambazaji Bora
  • [11:42] Kujaribu Kazi ya Kusimama
  • [12:13] Jaribio la Mwisho la Vitendo Sakafuni

Bilder

Sunfounder-Smartcar-Obstacle-avoideance-1
Sunfounder-Smartcar-Obstacle-avoideance-1
Sunfounder-Smartcar-Obstacle-avoideance-wiring
Sunfounder-Smartcar-Obstacle-avoideance-wiring
894-Lesson 25: SunFounder's 3-in-1 Arduino kit Car-3 Smart Car Avoids Obstacle Using Infrared Sensors
Språk: 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);
}

Resurser och referenser

Filer📁

Arduino-bibliotek (zip)