Bincika Lambar

Daras ta 28/31: Mota-6 Motar SunFounder mai tuka kanta ta Arduino ta amfani da | Robojax

Daras ta 28/31: Mota-6 Motar SunFounder mai tuka kanta ta Arduino ta amfani da | Robojax

A cikin wannan aikin, za mu gina mota mai tuka kanta ta asali ta amfani da Arduino, na'urar ultrasonic, da na'urori biyu na infrared. Wannan kyakkyawan aikin gabatarwa ne don koyon kewayawa mai zaman kanta, haɗakar firikwensin, da dabaru na yanke shawara. Motar na iya tafiya gaba, baya, da yin juyi don guje wa cikas, inda za ta sami hanya mai kyau da kanta. Wannan aikin ya dogara ne akan kayan aikin SunFounder 3-in-1 Arduino kuma yana cikin kwas ɗin Arduino na Robojax.

Wannan aikin ba kawai game da gina abin wasa ba ne; gabatarwa ce mai amfani ga ainihin ra'ayoyin da ke bayan robotics mai zaman kanta. Wannan dabaru da firikwensin ana amfani da su a aikace-aikace na gaske kamar injinan tsabtace gida na robot, motocin jagora masu sarrafa kai a cikin ɗakunan ajiya, har ma da tsarin kewayawa na robots masu rikitarwa. Ta hanyar fahimtar yadda ake haɗa firikwensin nesa tare da ƙa'idodin kewayawa masu sauƙi, za ku iya ƙirƙirar ayyuka daban-daban, kamar:

  • Gina ƙaramin robot wanda zai iya kewayawa cikin ɗaki kuma ya guje wa kayan daki.
  • Ƙirƙirar abin hawa mai sarrafa kansa wanda zai iya bin hanya mai sauƙi ko sintiri a wani yanki.
  • Koyon yadda ake aiwatar da algorithms na guje wa cikas na asali don manyan ayyukan robotics.

Abubuwan Hardware

Wannan aikin yana amfani da abubuwan daga kayan aikin SunFounder 3-in-1. Abubuwan da suka dace sune:

  • Arduino Uno board
  • SunFounder 2WD ko 3-in-1 chassis na mota tare da injuna
  • Modul ɗin direban mota (misali, L298N ko makamancinsa)
  • HC-SR04 Ultrasonic firikwensin nesa
  • Na'urori biyu na IR na cikas
  • Wayoyin jumper da tushen wutar lantarki don injuna

Jagorar Wayoyi

Wayoyi shine muhimmin mataki na farko don kawo motar tuka kanta zuwa rayuwa. Haɗin suna da sauƙi, amma yana da mahimmanci a sake duba kowanne don guje wa lalata abubuwan ku. Dabaru a bayan wayoyi shine haɗa fil ɗin sarrafawa na Arduino zuwa direban mota da firikwensin, yana ba da damar Arduino ya karanta bayanai kuma ya aika umarni.

  • Fil ɗin Direban Mota (A-1B, A-1A, B-1B, B-1A): Waɗannan fil ɗin suna sarrafa saurin da alkiblar injuna biyu. An haɗa su zuwa fil ɗin Arduino 5, 6, 9, da 10, waɗanda ke da ikon PWM, suna ba da damar sarrafa saurin da ya bambanta.
  • Firikwensin Ultrasonic (Trig da Echo): Fil ɗin Trig yana aika bugun ultrasonic, kuma fil ɗin Echo yana karɓar siginar da aka mayar. Fil ɗin Trig an haɗa shi zuwa fil ɗin Arduino 3, kuma fil ɗin Echo an haɗa shi zuwa fil ɗin Arduino 4.
  • Na'urorin IR (Hagu da Dama): Waɗannan firikwensin suna gano idan akwai cikas kai tsaye a gabansu. Firikwensin IR na hagu an haɗa shi zuwa fil ɗin Arduino 8, kuma firikwensin IR na dama an haɗa shi zuwa fil 7. Ana amfani da su don duba sararin da ke gefen motar.

Don cikakken jagorar gani, da fatan za a koma ga zanen wayoyi da ke ƙasa, wanda ke nuna kowane haɗi a sarari.

Bayanin Lambar

An rubuta lambar a cikin yaren shirye-shiryen Arduino (C++). Cikakken shirin yana samuwa don saukewa daga shafin albarkatun da ke da alaƙa a cikin bayanin bidiyon. Bari mu raba mahimman sassa waɗanda mai amfani zai iya daidaita su a cikin wannan zane.

Ma'anar Fil

A saman lambar, kuna bayyana fil ɗin da ke haɗa Arduino zuwa abubuwa daban-daban. Kuna iya canza waɗannan idan kuna amfani da fil daban-daban akan board ɗin ku.

const int A_1B = 5;
const int A_1A = 6;
const int B_1B = 9;
const int B_1A = 10;

const int echoPin = 4;
const int trigPin = 3;

const int rightIR = 7;
const int leftIR = 8;

Fil ɗin A_1B, A_1A, B_1B, da B_1A suna sarrafa direban motar H-bridge. Ta hanyar saita waɗannan fil ɗin HIGH ko LOW a haɗuwa daban-daban, kuna iya sarrafa alkiblar kowane injin. echoPin da trigPin na firikwensin ultrasonic ne, kuma rightIR da leftIR na firikwensin infrared ne.

Abubuwan Halayya da Dabaru

Babban dabaru na halayyar tuka kanta yana cikin aikin loop(). Motar tana yanke shawara bisa karatun daga firikwensin IR da firikwensin ultrasonic. Lambar tana bayyana takamaiman nisa waɗanda ke haifar da ayyuka daban-daban. Misali, mai canzawa distance ana auna shi a santimita. Dabaru shine kamar haka:

  • Idan nisa ya fi 50 cm: Hanyar da ke gaba a bayyane take, don haka motar tana tafiya gaba a saurin 200.
  • Idan nisa tsakanin 2 cm da 10 cm: Motar ta yi kusa da cikas sosai. Tana komawa baya na daƙiƙa ɗaya, sannan ta juya baya-hagu na rabin daƙiƙa don neman sabuwar hanya.
  • Idan nisa tsakanin 10 cm da 50 cm: Motar tana cikin "yankin taka tsantsan." Tana tafiya gaba, amma a saurin da ya rage na 150.

Waɗannan ƙimar ƙofa (50 cm, 10 cm, da 2 cm) da saurin (200 da 150) sune manyan masu canzawa waɗanda kuke iya daidaitawa don canza halayyar motar ku. Misali, kuna iya ƙara nisan "aminci" zuwa 60 cm idan motar ku tana tafiya da sauri.

Ayyuka na Musamman

Lambar ta haɗa da ayyuka na musamman da yawa don sarrafa motsin motar. Ana amfani da waɗannan a cikin babban madauki don sauƙaƙa lambar da kuma sauƙin fahimta.

  • moveForward(int speed): Wannan aikin yana saita fil ɗin motar don tuƙi motar gaba. Sigar speed (0-255) tana sarrafa yadda motocin ke juyawa da sauri.
  • moveBackward(int speed): Yayi kama da moveForward, amma yana juya alkiblar motar don motsa motar baya.
  • backLeft(int speed) da backRight(int speed): Waɗannan ayyuka suna juya motar ta hanyar kunna ɗayan motar a baya yayin da ɗayan ya tsaya. Wannan juyi ne wanda ke taimaka wa motar canza alkibla yadda ya kamata.
  • stopMove(): Wannan aikin yana dakatar da duk motoci ta hanyar saita duk fil ɗin sarrafawa zuwa LOW.
  • readSensorData(): Wannan aikin yana aika bugun jini daga na'urar ultrasonic kuma yana auna lokacin da amsawar ke dawowa. Sannan yana lissafa nisa a santimita kuma ya dawo da ƙimar.

Nunin Aikin Kai Tsaye

(a bidiyo a 07:09) A cikin nunin, an sanya motar a cikin yanayi mai cike da shinge irin su akwatuna da bango. Ana iya ganin dabilar motar yayin da take tafiya. Lokacin da na'urar ultrasonic ta gano bango ko shinge sama da cm 50, tana tuƙi gaba da ƙarfin gwiwa. Yayin da ta kusanto, na'urorin IR a gefe suna duba wurin da yake buɗe.

Idan an gano shinge a hagu, motar tana yin juyi na baya-dama don guje masa kuma akasin haka. Lokacin da motar ta sami kanta a wuri mai matsi, kamar ƙarƙashin tebur (a bidiyo a 07:49), tana amfani da ayyukan juyawa da komawa baya don fitar da kanta kuma ta sami hanya bayyananna. Motar tana ci gaba da karanta muhallinta kuma tana yanke shawara, tana nuna tsarin sarrafawa wanda bai dogara da hanya da aka riga aka tsara ba.

Babban Bidiyo

  • [00:00] Gabatarwa ga Aikin Mota Mai Tafiya Da Kanta
  • [00:28] Game da Kayan SunFounder 3-in-1
  • [01:32] Buɗe Lambar da Duba Gabaɗaya
  • [02:02] Bayanin Tsarin Lambar da Sabbin Ayyuka
  • [03:11] Saita Fil a cikin Aikin Saita
  • [03:28] Babban Dabilar Yanke Shawara a cikin Loop
  • [05:41] Nunin Kai Tsaye: Mota Aiki
  • [07:09] Nunin tare da Shinge da Bin Bango
  • [09:58] Ƙarshe da Tunani na Ƙarshe

Hotuna

28 SunFounder Car 6 self-driving path
28 SunFounder Car 6 self-driving path
Car 7 8 28 self driving
Car 7 8 28 self driving
897-Lesson 28/31: Car-6 SunFounder self Driving Arduino car
Harshe: C++
/*
Lesson 28/31: Car-6 SunFounder self Driving Arduino car
Get this code and watch video Download and resource page https://robojax.com/RJT611
https://www.youtube.com/watch?v=IyninXUcsn0
*/
const int A_1B = 5;
const int A_1A = 6;
const int B_1B = 9;
const int B_1A = 10;

const int echoPin = 4;
const int trigPin = 3;

const int rightIR = 7;
const int leftIR = 8;

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 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);
}

void setup() {
  Serial.begin(9600);

  //motor
  pinMode(A_1B, OUTPUT);
  pinMode(A_1A, OUTPUT);
  pinMode(B_1B, OUTPUT);
  pinMode(B_1A, OUTPUT);

  //ultrasonic
  pinMode(echoPin, INPUT);
  pinMode(trigPin, OUTPUT);

  //IR obstacle
  pinMode(leftIR, INPUT);
  pinMode(rightIR, INPUT);
}

void loop() {

  int left = digitalRead(leftIR);  // 0: Obstructed   1: Empty
  int right = digitalRead(rightIR);

  if (!left && right) {
    backLeft(150);
  } else if (left && !right) {
    backRight(150);
  } else if (!left && !right) {
    moveBackward(150);
  } else {
    float distance = readSensorData();
    Serial.println(distance);
    if (distance > 50) { // Safe
      moveForward(200);
    } else if (distance < 10 && distance > 2) { // Attention
      moveBackward(200);
      delay(1000);
      backLeft(150);
      delay(500);
    } else {
      moveForward(150);
    }
  }
}

Albarkatun da kuma shafukan da za a duba

Fayiloli📁

Littattafan Arduino (zip)