Bincika Lambar

Darasi na 26/31: Mota Mai Wayo Kashi na 4: Guje wa Cikas ta Amfani da Na'urar Ultrasonic | SunFounder Robojax

Darasi na 26/31: Mota Mai Wayo Kashi na 4: Guje wa Cikas ta Amfani da Na'urar Ultrasonic | SunFounder Robojax

A cikin wannan darasi, zamu inganta motarka mai wayo da ikon gani da kuma amsa muhallinta ta amfani da na'urar ultrasonic sensor. Ta hanyar auna nisa zuwa abubuwan da ke gabanta, motar za ta iya yanke shawara mai hankali: za ta motsa gaba lokacin da hanya ta bayyana, ta tsaya lokacin da wani abu ya kasance a cikin yankin taka tsantsan, kuma ta koma baya lokacin da wani cikas ya yi kusa sosai. Wannan aikin ya ginu a kan tushen sarrafa motar da kuma sensor da ka riga ka koya, wanda zai haifar da mota mai cin gashin kanta da gaske.

26-SunFounder-Car-4-Ultrasonic.mp4_snapshot_00.09.009

Wannan ba abin wasa ba ne kawai; mataki ne mai muhimmanci zuwa gina ayyukan robotics mafi rikitarwa. Dabaru da za ka aiwatar anan—ji, tunani, yi—su ne waɗanda ake amfani da su a komai daga injinan tsaftacewa na robot zuwa sarrafa masana'antu. Ga wasu ra'ayoyi don zaburar da ginin naka:

  • Rover mai cin gashin kansa: Ƙirƙiri robot wanda zai iya bincika daki ko hallway ba tare da cin karo da bango ko kayan daki ba.
  • Tsarin ƙararrawa na kusanci: Sanya ultrasonic sensor a kan servo don duba wani yanki da kuma kunna ƙararrawa ko haske lokacin da mai kutse ya shiga wani yanki da aka ayyana.
  • Mataimakin fakin mota mai wayo: Gina tsarin da ke amfani da karatun nisa don jagorantar mota zuwa wuri mai tsayi, yana ba da amsa na gani ko na sauti.

Wannan jagorar ta dogara ne akan kayan aikin SunFounder 3-in-1 Arduino da kuma aikin sa na "Play with Ultrasonic Module". Za mu bi ta hanyar wayoyi, mu bayyana lambar yanke shawara, kuma mu nuna motar tana aiki.

26-SunFounder-Car-4-Ultrasonic.mp4_snapshot_02.26.146

Yadda Dabaru na Guje wa Cikas ke Aiki

Jigon wannan aikin ita ce bishiyar yanke shawara mai sauƙi, amma mai ƙarfi. Ultrasonic sensor na auna nisa zuwa abin da ke gabanta kai tsaye. Wannan darajar nisa ana amfani da ita don sarrafa motocin motar, kamar yadda aka nuna a hoton da ke ƙasa.

  • Idan nisa > 25 cm: Hanya a bayyane take, don haka motar tana motsa gaba.
  • Idan 10 cm < nisa <= 25 cm: An gano wani abu a cikin "yankin taka tsantsan," don haka motar ta tsaya don guje wa karo.
  • Idan 2 cm < nisa <= 10 cm: Wani abu yana da haɗari kusa. Motar tana koma baya don samar da ƙarin sarari.
  • Idan nisa <= 2 cm: Karatun yana yiwuwa kuskure ne (kusa da yawa don auna daidai), don haka motar ta tsaya a matsayin matakin tsaro.

Kayan Aikin Hardware

Don gina wannan aikin, za ka buƙaci waɗannan kayan aikin, waɗanda duk suna cikin kayan aikin SunFounder 3-in-1.

  • 1x Arduino Uno (ko board mai jituwa)
  • 1x Smart Car chassis tare da motoci biyu masu geared
  • 1x L298N Motor Driver Module
  • 1x HC-SR04 Ultrasonic Distance Sensor
  • 1x Breadboard
  • Wayoyin Jumper
  • Samar da wutar lantarki ga motar (misali, batir pack)
26-SunFounder-Car-4-Ultrasonic.mp4_snapshot_00.00.000

Jagorar Haɗin Wayoyi

Haɗin wayoyi yana haɗa motor driver, ultrasonic sensor, da Arduino. Motor driver yana sarrafa ƙafafun motar, yayin da ultrasonic sensor ke aiki a matsayin "idanunta."

Ga hoton haɗin daga takardun SunFounder:

Bari mu raba haɗin. Da farko, ba da wutar lantarki ga ingantattun rails na breadboard daga pins 5V da GND na Arduino. Ultrasonic sensor an haɗa shi kamar haka:

  • VCC (Wutar lantarki): An haɗa shi zuwa ingantaccen rail a kan breadboard.
  • GND (Ƙasa): An haɗa shi zuwa korau rail a kan breadboard.
  • Trig (Trigger): An haɗa shi zuwa digital pin 3 a kan Arduino. Wannan pin yana aika ultrasonic pulse.
  • Echo (Karɓa): An haɗa shi zuwa digital pin 4 a kan Arduino. Wannan pin yana karɓar reflected pulse.

Haɗin motor driver iri ɗaya ne da na darussa da suka gabata. Hudu control pins (IN1, IN2, IN3, IN4) an haɗa su zuwa digital pins 5, 6, 9, da 10 na Arduino. Waɗannan pins suna sarrafa saurin da alkiblar motoci biyu. Tabbatar da cewa wutar lantarki da ƙasa na motor driver an haɗa su daidai da batir pack da ƙasa na Arduino. (a cikin bidiyo a 02:24)

Bayanin Lambar

Lambar wannan aikin tana sarrafa halayen motar bisa ga karatun nisa daga ultrasonic sensor. Dabaru a bayyane suke kuma mai sauƙin keɓancewa. Bari mu duba mahimman sassa waɗanda mai amfani zai iya daidaitawa.

1. Ma'anar Pins

A saman sketch, an ayyana pins na motoci da ultrasonic sensor. Kana iya canza waɗannan idan ka haɗa kayan aikin ka zuwa wasu pins na Arduino.

const int A_1B = 5;
  const int A_1A = 6;
  const int B_1B = 9;
  const int B_1A = 10;
  
  const int trigPin = 3;
  const int echoPin = 4;

Anan, A_1A, A_1B, B_1A, da B_1B suna sarrafa motocin hagu da dama ta hanyar L298N driver. trigPin da echoPin na ultrasonic sensor ne.

2. Masu Canjin Halaye da Dabaru

Babban hali ana sarrafa shi a cikin aikin loop(). Anan ne za ka iya daidaita "halin" motar.

void loop() {
    float nisa = readSensorData();
    if (nisa > 25) {
      matsugaba(200);
    }
    else if (nisa < 10 && nisa > 2) {
      koma baya(200);
    } else {
      tsayawa();
    }
  }

Ga yadda za ka keɓanta shi:

  • Ƙofofin Nisa: Lambobin 25 da 10 suna ayyana yankunan "lafiya" da "haɗari" a cikin santimita. Ƙara 25 don sa motar ta tsaya da wuri, ko rage shi don ba da damar ta matso kusa da abubuwan da ke tare da hanya. 2 shine tazarar aminci don yin watsi da karatun kuskure daga abubuwan da suke kusa sosai.
  • Gudun Motar: 200 da aka ba wa matsugaba() da koma baya() yana saita gudun motar. Wannan ƙimar na iya kasancewa daga 0 zuwa 255. Ƙimar da ta fi ƙasa, kamar 150, za ta sa motar ta motsa a hankali kuma cikin taka tsantsan.

Sauran lambobin sun ƙunshi aikin readSensorData(), wanda ke sarrafa lokacin firikwensin ultrasonic don ƙididdige nisa, da ayyukan matsugaba(), koma baya(), da tsayawa(), waɗanda ke sarrafa direban motar don aiwatar da abin da ake so.

Magance Kuskure na Yau da Kullun

Kana iya haɗuwa da kuskure kamar 'moveForward' was not declared in this scope. Wannan yana faruwa saboda Arduino IDE yana karanta lambar daga sama zuwa ƙasa. Lokacin da ya kai ga aikin loop(), bai san ayyukan da aka ayyana a ƙasa ba tukuna. Don gyara wannan, dole ne ka ƙara "prototypes na aiki" kafin aikin setup(). Waɗannan su ne kawai bayanan sunan aikin da nau'in dawowa, waɗanda ke ƙarewa da alamar semicolon.

void moveForward(int speed);
  void moveBackward(int speed);
  void stopMove();
  float readSensorData();

Ƙara waɗannan layukan yana gaya wa mai haɗawa, "Waɗannan ayyukan suna nan kuma za a ayyana su daga baya," wanda ke warware kuskuren. (a cikin bidiyo a 09:21)

Inganta Kwanciyar Hankalin Firikwensin

Yayin gwaji, kana iya lura cewa motar tana tsayawa ko tana yin ɗan tsayawa ko da lokacin da hanya ta bayyana. Wannan sau da yawa saboda loop ɗin yana gudana da sauri, kuma firikwensin ultrasonic bai da isasshen lokaci don karɓar siginar echo, yana haifar da karatun 0 cm. Don gyara wannan, ƙara ɗan jinkiri a ƙarshen aikin loop() don ba firikwensin lokaci don aiki.

void loop() {
    float nisa = readSensorData();
    if (nisa > 25) {
      matsugaba(200);
    }
    else if (nisa < 10 && nisa > 2) {
      koma baya(200);
    } else {
      tsayawa();
    }
    jinkiri(100); // Ƙara jinkiri na 100ms don ingantaccen karatu
  }

Jinkiri na milisakan 100 yawanci ya isa don samun ingantaccen karatun nisa. (a cikin bidiyo a 10:56)

Nuna Aikin Aiki Kai Tsaye

Da zarar an ɗora lambar, buɗe Serial Monitor. Za ka ga rubutu da ke nuna yanayin motar, kamar "Gaba", "Baya", ko "Tsaya".

A cikin nunin, an sanya motar tana fuskantar wani abu mai toshewa. Lokacin da abin ya fi 25 cm nesa, motar tana motsawa gaba. Yayin da ka matso da hannunka, motar tana tsayawa lokacin da nisa ya faɗi ƙasa da 25 cm. Idan ka kawo hannunka kusa sosai, cikin 10 cm, motar za ta koma baya. Wannan hali yana bayyana a fili a cikin bidiyon kuma yana tabbatar da cewa dabaru na guje wa abubuwa suna aiki daidai. (a cikin bidiyo a 11:53)

Ƙarshe

Taya murna! Ka gina mota mai wayo da ke iya kewaya muhallinta da guje wa abubuwa. Wannan aikin ya haɗa shigar da firikwensin, dabaru na yanke shawara, da sarrafa motar a cikin tsari ɗaya mai aiki. Ba kawai ka koyi yadda ake amfani da firikwensin ultrasonic ba, har ma ka koyi yadda ake aiwatar da tsarin sarrafawa mai sauƙi wanda shine tushe na mutummutumi masu rikitarwa da yawa.

Babuka

  • [00:00] Gabatarwa ga Guje wa Abubuwa
  • [01:16] Bayanin Aikin da Abubuwan Da Ake Bukata
  • [02:24] Haɗa Firikwensin Ultrasonic da Direban Motar
  • [04:56] Buɗe Lambar Aikin
  • [05:12] Bayanin Lambar: Dabaru da Ayyuka
  • [08:34] Ɗora Lambar da Gwajin Farko
  • [09:21] Magance Matsala: Prototypes na Aiki
  • [10:56] Magance Matsala: Ƙara Jinkiri don Kwanciyar Hankali
  • [11:53] Nuna Aikin Aiki Kai Tsaye na Guje wa Abubuwa

Hotuna

27 SunFounder Car 5 follow hand
27 SunFounder Car 5 follow hand
26 SunFounder Car 4 ultrasonic video snapshot 00.09.009
26 SunFounder Car 4 ultrasonic video snapshot 00.09.009
26 SunFounder Car 4 ultrasonic video snapshot 02.26.146
26 SunFounder Car 4 ultrasonic video snapshot 02.26.146
26 SunFounder Car 4 ultrasonic video snapshot 00.00.000
26 SunFounder Car 4 ultrasonic video snapshot 00.00.000
899-Lesson 26/31: Avoiding Obstacle Using Ultrasonic Sensor
Harshe: C++
/*
Lesson 26/31: Avoiding Obstacle Using Ultrasonic Sensor 
Get this code and watch video Download and resource page https://robojax.com/RJT609
YouTube video https://www.youtube.com/watch?v=uLBmRvaemxA

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

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

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

void loop() {
  float distance = readSensorData();
  if (distance > 25) {
    moveForward(200);
  }
  else if (distance < 10 && distance > 2) {
    moveBackward(200);
  } 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 stopMove() {
  analogWrite(A_1B, 0);
  analogWrite(A_1A, 0);
  analogWrite(B_1B, 0);
  analogWrite(B_1A, 0);
}

Albarkatun da kuma shafukan da za a duba

Fayiloli📁

Littattafan Arduino (zip)