Сабақ 28/31: Car-6 SunFounder өздігінен жүретін Arduino көлігі | Robojax
Бұл жобада біз Arduino, ультрадыбыстық датчик және екі инфрақызыл датчик арқылы қарапайым өздігінен басқарылатын көлік жасаймыз. Бұл автономды навигация, датчиктерді біріктіру және шешім қабылдау логикасын үйренуге арналған тамаша кіріспе жоба. Көлік алға, артқа қозғала алады және кедергілерді болдырмау үшін бұрылыстар жасай алады, осылайша өз бетінше таза жолды тиімді табады. Бұл жоба SunFounder 3-в-1 Arduino жинағына негізделген және Robojax Arduino курсының бөлігі болып табылады.
Бұл жоба тек ойыншық жасау туралы емес; бұл автономды робототехниканың негізгі тұжырымдамаларына практикалық кіріспе. Дәл осы логика мен датчиктер нақты әлемдегі қолданбаларда қолданылады, мысалы, робот-шаңсорғыштарда, қоймалардағы автоматтандырылған басқарылатын көліктерде және тіпті күрделі роботтардың навигациялық жүйелерінде. Қашықтықты өлшеуді қарапайым навигация ережелерімен біріктіруді түсіну арқылы сіз әртүрлі жобаларды жасай аласыз, мысалы:
- Бөлмені шарлап, жиһазды болдырмайтын шағын робот жасау.
- Қарапайым жолмен жүретін немесе аумақты күзететін автоматтандырылған көлік жасау.
- Үлкен робототехника жобалары үшін негізгі кедергілерді болдырмау алгоритмдерін енгізуді үйрену.
Аппараттық құрамдас бөліктер
Бұл жоба SunFounder 3-в-1 жинағының құрамдас бөліктерін пайдаланады. Негізгі бөліктер:
- Arduino Uno тақтасы
- Моторлары бар SunFounder 2WD немесе 3-в-1 көлік шассиі
- Мотор драйвері модулі (мысалы, L298N немесе ұқсас)
- HC-SR04 ультрадыбыстық қашықтық датчигі
- Екі ИҚ кедергі датчигі
- Қосқыш сымдар және моторларға арналған қуат көзі
Сымдарды қосу нұсқаулығы
Сымдарды қосу - өздігінен басқарылатын көлігіңізді жандандырудың маңызды алғашқы қадамы. Қосылымдар қарапайым, бірақ құрамдас бөліктерге зақым келтірмеу үшін әрқайсысын екі рет тексеру өте маңызды. Сымдарды қосудың логикасы - Arduino басқару түйреуіштерін мотор драйверіне және датчиктерге қосу, бұл Arduino-ға деректерді оқуға және командалар жіберуге мүмкіндік береді.
- Мотор драйверінің түйреуіштері (A-1B, A-1A, B-1B, B-1A): Бұл түйреуіштер екі мотордың жылдамдығы мен бағытын басқарады. Олар Arduino-ның 5, 6, 9 және 10 түйреуіштеріне қосылған, олар PWM қабілетті, бұл айнымалы жылдамдықты басқаруға мүмкіндік береді.
- Ультрадыбыстық датчик (Trig және Echo): Trig түйреуіші ультрадыбыстық импульс жібереді, ал Echo түйреуіші шағылысқан сигналды қабылдайды. Trig түйреуіші Arduino-ның 3 түйреуішіне, ал Echo түйреуіші Arduino-ның 4 түйреуішіне қосылған.
- ИҚ датчиктер (сол және оң): Бұл датчиктер кедергінің тікелей алдында бар-жоғын анықтайды. Сол жақ ИҚ датчигі Arduino-ның 8 түйреуішіне, ал оң жақ ИҚ датчигі 7 түйреуішіне қосылған. Олар көліктің бүйірлеріндегі кеңістікті тексеру үшін қолданылады.
Егжей-тегжейлі визуалды нұсқаулық үшін төмендегі сымдар диаграммасын қараңыз, ол әр қосылымды нақты көрсетеді.
Кодты түсіндіру
Код Arduino бағдарламалау тілінде (C++) жазылған. Толық бағдарламаны бейне сипаттамасындағы ресурс бетінен жүктеп алуға болады. Осы эскиздің негізгі, пайдаланушы конфигурациялай алатын бөліктерін қарастырайық.
Түйреуіш анықтамалары
Кодтың жоғарғы жағында Arduino-ны әртүрлі құрамдас бөліктерге қосатын түйреуіштерді анықтайсыз. Егер тақтаңызда басқа түйреуіштерді қолдансаңыз, оларды өзгерте аласыз.
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;
A_1B, A_1A, B_1B және B_1A түйреуіштері H-көпір мотор драйверін басқарады. Бұл түйреуіштерді әртүрлі комбинацияларда HIGH немесе LOW етіп орнату арқылы әр мотордың бағытын басқара аласыз. echoPin және trigPin ультрадыбыстық датчикке арналған, ал rightIR және leftIR инфрақызыл датчиктерге арналған.
Мінез-құлық айнымалылары мен логикасы
Өздігінен басқару мінез-құлқының негізгі логикасы loop() функциясында орналасқан. Көлік ИҚ датчиктері мен ультрадыбыстық датчиктен алынған көрсеткіштерге негізделген шешімдер қабылдайды. Код әртүрлі әрекеттерді тудыратын нақты қашықтықтарды анықтайды. Мысалы, distance айнымалысы сантиметрмен өлшенеді. Логика келесідей:
- Егер қашықтық 50 см-ден үлкен болса: Алдағы жол таза, сондықтан көлік 200 жылдамдықпен алға жылжиды.
- Егер қашықтық 2 см мен 10 см аралығында болса: Көлік кедергіге тым жақын. Ол бір секунд артқа жүреді, содан кейін жаңа жол табу үшін жарты секунд солға-артқа бұрылады.
- Егер қашықтық 10 см мен 50 см аралығында болса: Көлік "сақтық аймағында". Ол алға жылжиды, бірақ 150 баяу жылдамдықпен.
Бұл шекті мәндер (50 см, 10 см және 2 см) және жылдамдықтар (200 және 150) - көлігіңіздің мінез-құлқын өзгерту үшін реттей алатын негізгі айнымалылар. Мысалы, көлігіңіз тез қозғалса, "қауіпсіз" қашықтықты 60 см-ге дейін арттыруыңыз мүмкін.
Арнайы функциялар
Код көліктің қозғалыстарын басқару үшін бірнеше арнайы функцияларды қамтиды. Олар негізгі циклде кодты таза және түсінуге оңай ету үшін қолданылады.
moveForward(int speed): Бұл функция мотор түйреуіштерін көлікті алға жүргізу үшін орнатады.speedпараметрі (0-255) моторлардың қаншалықты жылдам айналатынын басқарады.moveBackward(int speed):moveForwardфункциясына ұқсас, бірақ көлікті артқа жүргізу үшін мотор бағытын кері аударады.backLeft(int speed)жәнеbackRight(int speed): Бұл функциялар бір моторды кері бағытта іске қосып, екіншісін тоқтату арқылы көлікті бұрады. Бұл көліктің бағытын тиімді өзгертуге көмектесетін айналмалы бұрылыс.stopMove(): Бұл функция барлық басқару түйреуіштерін LOW күйіне орнату арқылы барлық моторларды тоқтатады.readSensorData(): Бұл функция ультрадыбыстық сенсордан импульс жіберіп, жаңғырықтың қайту уақытын өлшейді. Содан кейін қашықтықты сантиметрмен есептеп, мәнді қайтарады.
Тірі Жоба Демонстрациясы
(бейнеде 07:09) Демонстрацияда көлік қораптар мен қабырғалар сияқты әртүрлі кедергілері бар ортаға қойылған. Көліктің логикасы оның жүруі кезінде көрінеді. Ультрадыбыстық сенсор қабырғаны немесе кедергіні 50 см-ден алыс анықтағанда, ол сенімді түрде алға жүреді. Жақындаған сайын, бүйірдегі инфрақызыл сенсорлар бос кеңістікті тексереді.
Егер сол жақта кедергі анықталса, көлік оны болдырмау үшін оңға артқа бұрылыс жасайды және керісінше. Көлік тар жерде, мысалы, үстелдің астында қалғанда (бейнеде 07:49), ол өзін босату және ашық жол табу үшін артқа жүру және бұрылу функцияларын қолданады. Көлік үнемі қоршаған ортаны оқып, шешім қабылдайды, бұл алдын ала жоспарланған жолға тәуелді емес реактивті басқару жүйесін көрсетеді.
Бейне Бөлімдері
- [00:00] Өздігінен жүретін көлік жобасына кіріспе
- [00:28] SunFounder 3-в-1 жинағы туралы
- [01:32] Кодты ашу және шолу
- [02:02] Код құрылымы мен жаңа функцияларды түсіндіру
- [03:11] Setup функциясында түйреуіштерді орнату
- [03:28] Loop ішіндегі негізгі шешім қабылдау логикасы
- [05:41] Тірі демонстрация: Көлік әрекетте
- [07:09] Кедергілермен және қабырғаны қадағалаумен демонстрация
- [09:58] Қорытынды және соңғы ойлар
/*
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);
}
}
}
Common Course Links
Common Course Files
Сізге қажет болуы мүмкін нәрселер
-
АмазонкаSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
Амазонка
-
Амазонка
-
Амазонка
-
Амазонка
Ресурстар мен сілтемелер
-
ҚұжаттамаDocumentation for SunFounder 3 in 1 IoT/Smart Car/Learning Kitdocs.sunfounder.com
-
СыртқыPurchase SunFounder's 3-in-1 Smart car learning kitsunfounder.com
Файлдар📁
Arduino кітапханалары (zip)
-
SunFounder's 3-in-1 Smart Car learning kit source code
3in1-kit-main-v2.zip12.80 MB