Somo la 26/31: Gari Mahiri Sehemu ya 4: Kuepuka Kizuizi Kwa Kutumia Sensor ya Ultrasonic | SunFounder Robojax
Hii sio toy tu; ni hatua ya msingi kuelekea kujenga miradi changamano zaidi ya robotiki. Mantiki utakayotekeleza hapa—sikia, fikiri, tenda—ni ile ile inayotumika katika kila kitu kuanzia visafishaji vya utupu vya roboti hadi uendeshaji wa viwanda. Hapa kuna mawazo machache ya kukusaidia kujenga miradi yako mwenyewe:
- Rover ya Kujitegemea: Tengeneza roboti inayoweza kuchunguza chumba au korido bila kugonga kuta au fanicha.
- Mfumo wa Kengele ya Ukaribu: Weka sensor ya ultrasonic kwenye servo ili kuchunguza eneo na kuwasha kengele au taa wakati mtu asiyehitajika anaingia katika eneo lililobainishwa.
- Msaidizi wa Kuegesha kwa Akili: Jenga mfumo unaotumia usomaji wa umbali kuongoza gari kuingia katika nafasi nyembamba, ukitoa maoni ya kuona au ya kusikia.
Mwongozo huu unategemea kit cha SunFounder 3-in-1 Arduino na mradi wake wa "Play with Ultrasonic Module". Tutapitia uunganishaji wa nyaya, tueleze msimbo wa kufanya maamuzi, na tuonyeshe gari likifanya kazi.
Jinsi Mantiki ya Kuepuka Vizuizi Inavyofanya Kazi
Kiini cha mradi huu ni mti rahisi lakini wenye nguvu wa maamuzi. Sensor ya ultrasonic hupima kila mara umbali wa kitu kilicho mbele yake moja kwa moja. Thamani hii ya umbali hutumika kudhibiti motors za gari, kama inavyoonyeshwa kwenye mchoro hapa chini.
- Ikiwa umbali > 25 cm: Njia iko wazi, kwa hiyo gari linasonga mbele.
- Ikiwa 10 cm < umbali <= 25 cm: Kitu kimegunduliwa katika "eneo la tahadhari," kwa hiyo gari linasimama ili kuepuka mgongano.
- Ikiwa 2 cm < umbali <= 10 cm: Kitu kiko karibu sana na hatari. Gari linarudi nyuma ili kuunda nafasi zaidi.
- Ikiwa umbali <= 2 cm: Usomaji huo pengine ni kosa (karibu sana kupima kwa usahihi), kwa hiyo gari linasimama kama hatua ya usalama.
Vipengele vya Vifaa
Ili kujenga mradi huu, utahitaji vipengele vifuatavyo, ambavyo vyote vimejumuishwa katika kit cha SunFounder 3-in-1.
- 1x Arduino Uno (au bodi inayooana)
- 1x Chasi ya gari mahiri yenye motors mbili za gia
- 1x Moduli ya Kiendeshaji cha Motor L298N
- 1x Sensor ya Umbali ya Ultrasonic HC-SR04
- 1x Breadboard
- Nyaya za jumper
- Ugavi wa nishati kwa gari (k.m., pakiti ya betri)
Mwongozo wa Uunganishaji wa Nyaya
Uunganishaji wa nyaya unaunganisha kiendeshaji cha motor, sensor ya ultrasonic, na Arduino. Kiendeshaji cha motor kinadhibiti magurudumu ya gari, wakati sensor ya ultrasonic inafanya kama "macho" yake.
Hapa kuna mchoro wa uunganishaji kutoka kwenye nyaraka za SunFounder:
Hebu tuchambue uunganishaji. Kwanza, weka nishati kwenye reli chanya na hasi za breadboard kutoka kwenye pini za 5V na GND za Arduino. Sensor ya ultrasonic kisha inaunganishwa kama ifuatavyo:
- VCC (Nishati): Imeunganishwa kwenye reli chanya kwenye breadboard.
- GND (Ardhi): Imeunganishwa kwenye reli hasi kwenye breadboard.
- Trig (Kichochezi): Imeunganishwa kwenye pini ya dijiti 3 kwenye Arduino. Pini hii hutuma pulse ya ultrasonic.
- Echo (Pokea): Imeunganishwa kwenye pini ya dijiti 4 kwenye Arduino. Pini hii hupokea pulse iliyoakisiwa.
Uunganishaji wa kiendeshaji cha motor ni sawa na katika masomo yaliyopita. Pini nne za udhibiti (IN1, IN2, IN3, IN4) zimeunganishwa kwenye pini za dijiti 5, 6, 9, na 10 za Arduino. Pini hizi zinadhibiti kasi na mwelekeo wa motors mbili. Hakikisha nishati na ardhi ya kiendeshaji cha motor zimeunganishwa vizuri kwenye pakiti ya betri na ardhi ya Arduino. (katika video saa 02:24)
Maelezo ya Msimbo
Msimbo wa mradi huu unadhibiti tabia ya gari kulingana na usomaji wa umbali kutoka kwenye sensor ya ultrasonic. Mantiki ni rahisi na rahisi kubinafsisha. Hebu tuangalie sehemu muhimu, zinazoweza kusanidiwa na mtumiaji.
1. Ufafanuzi wa Pini
Juu ya sketch, pini za motors na sensor ya ultrasonic zimefafanuliwa. Unaweza kuzibadilisha ikiwa umeunganisha vipengele vyako kwenye pini tofauti za 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;
Hapa, A_1A, A_1B, B_1A, na B_1B zinadhibiti motors za kushoto na kulia kupitia kiendeshaji cha L298N. trigPin na echoPin ni za sensor ya ultrasonic.
2. Vigezo vya Tabia na Mantiki
Tabia kuu inadhibitiwa ndani ya kazi ya loop(). Hapa ndipo unaweza kurekebisha "utu" wa gari.
Hapa ni jinsi ya kuibadilisha:
- Vizingiti vya Umbali: Nambari
25na10zinafafanua maeneo ya "usalama" na "hatari" kwa sentimita. Ongeza25ili gari lisimame mapema, au ipunguze ili kuruhusu kukaribia vizuizi zaidi.2ni kiwango cha usalama cha kupuuza usomaji usio sahihi kutoka kwa vitu vilivyo karibu sana. - Kasi ya Injini:
200inayopitishwa kwamoveForward()namoveBackward()huweka kasi ya gari. Thamani hii inaweza kuwa kati ya 0 hadi 255. Thamani ya chini, kama 150, itafanya gari kusonga polepole na kwa tahadhari zaidi.
Msimbo uliobaki unajumuisha kazi ya readSensorData(), ambayo inashughulikia muda wa sensor ya ultrasonic kuhesabu umbali, na kazi za moveForward(), moveBackward(), na stopMove(), ambazo zinadhibiti kiendeshaji cha injini kutekeleza kitendo kinachohitajika.
Kushughulikia Hitilafu ya Kawaida
Unaweza kukutana na hitilafu kama 'moveForward' was not declared in this scope. Hii hutokea kwa sababu Arduino IDE inasoma msimbo kutoka juu hadi chini. Inapofikia kazi ya loop(), bado haijui kazi zilizofafanuliwa chini yake. Ili kurekebisha hili, lazima uongeze "prototypes za kazi" kabla ya kazi ya setup(). Hizi ni matamko rahisi ya jina la kazi na aina ya kurudi, yanayoishia na semicolon.
void moveForward(int speed);
void moveBackward(int speed);
void stopMove();
float readSensorData();
Kuongeza mistari hii kunamwambia mkusanyaji, "Kazi hizi zipo na zitafafanuliwa baadaye," ambayo hutatua hitilafu. (katika video saa 09:21)
Kuboresha Utulivu wa Sensor
Wakati wa majaribio, unaweza kuona gari likisimama au kutetemeka hata wakati njia iko wazi. Hii mara nyingi hutokea kwa sababu kitanzi kinaendesha haraka sana, na sensor ya ultrasonic haina muda wa kutosha kupokea ishara ya echo, na kusababisha usomaji wa 0 cm. Ili kurekebisha hili, ongeza kuchelewa kidogo mwishoni mwa kazi ya loop() ili kumpa sensor muda wa kufanya kazi.
void loop() {
float distance = readSensorData();
if (distance > 25) {
moveForward(200);
}
else if (distance < 10 && distance > 2) {
moveBackward(200);
} else {
stopMove();
}
delay(100); // Ongeza kuchelewa kwa 100ms kwa usomaji thabiti
}
Kuchelewa kwa millisecond 100 kwa kawaida kunatosha kupata usomaji wa umbali thabiti na sawa. (katika video saa 10:56)
Maonyesho ya Mradi wa Moja kwa Moja
Mara tu msimbo unapopakiwa, fungua Serial Monitor. Utaona maandishi yanayoonyesha hali ya gari, kama "Forward", "Reverse", au "Stop".
Katika maonyesho, gari limewekwa likikabili kizuizi. Wakati kizuizi kiko zaidi ya 25 cm mbali, gari linasonga mbele. Unaposogeza mkono wako karibu, gari linasimama wakati umbali unapungua chini ya 25 cm. Ukileta mkono wako karibu sana, ndani ya 10 cm, gari litarudi nyuma. Tabia hii inaonekana wazi kwenye video na inathibitisha kwamba mantiki ya kukwepa vizuizi inafanya kazi vizuri. (katika video saa 11:53)
Hitimisho
Hongera! Umefanikiwa kujenga gari mahiri linaloweza kusafiri katika mazingira yake na kukwepa vizuizi. Mradi huu unachanganya usomaji wa sensor, mantiki ya kufanya maamuzi, na udhibiti wa injini katika mfumo mmoja unaofanya kazi. Hujifunza si tu jinsi ya kutumia sensor ya ultrasonic, bali pia jinsi ya kutekeleza algorithm rahisi ya udhibiti ambayo ni msingi wa roboti ngumu zaidi zinazojitegemea.
Sura
- [00:00] Utangulizi wa Kukwepa Vizuizi
- [01:16] Muhtasari wa Mradi na Mahitaji
- [02:24] Kuunganisha Sensor ya Ultrasonic na Kiendeshaji cha Injini
- [04:56] Kufungua Msimbo wa Mradi
- [05:12] Maelezo ya Msimbo: Mantiki na Kazi
- [08:34] Kupakia Msimbo na Jaribio la Awali
- [09:21] Utatuzi wa Shida: Prototypes za Kazi
- [10:56] Utatuzi wa Shida: Kuongeza Kuchelewa kwa Utulivu
- [11:53] Maonyesho ya Moja kwa Moja ya Kukwepa Vizuizi
/*
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);
}
Common Course Links
Common Course Files
Tänker att du kanske behöver
-
AmazonSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
Amazon
-
Amazon
-
Amazon
-
Amazon
Resurser och referenser
-
DokumentationDocumentation for SunFounder 3 in 1 IoT/Smart Car/Learning Kitdocs.sunfounder.com
-
Extern.Purchase SunFounder's 3-in-1 Smart car learning kitsunfounder.com
Filer📁
Arduino-bibliotek (zip)
-
SunFounder's 3-in-1 Smart Car learning kit source code
3in1-kit-main-v2.zip12.80 MB