Сабақ 27/31: Car-5 SunFounder Smart Car Follows Your Hand using Arduino | Robojax
Кіріспе
Сіз ешқашан сіздің қатысуыңызға интуитивті түрде жауап беретін робот жасағыңыз келді ме? Бұл жоба стандартты SunFounder Smart Car-ды қолыңызды қадағалайтын ым-ишарамен басқарылатын көлікке айналдырады. Қашықтан басқару пультін немесе смартфон қолданбасын қолданудың орнына, бұл көлік қолыңыздың орны мен қашықтығын анықтау үшін ультрадыбыстық және инфрақызыл сенсорлардың комбинациясын пайдаланады, бұл оны қарапайым табиғи қозғалыстармен солға, оңға немесе алға бағыттауға мүмкіндік береді.
Бұл жоба Robojax Arduino курсының (27/31-сабақ) бөлігі болып табылады және SunFounder 3-в-1 Arduino жинағын қолдану арқылы жасалған. Бұл сенсорлық фузияны үйренудің тамаша тәсілі, мұнда бірнеше сенсорлар күрделірек және жауапты мінез-құлық жасау үшін бірге жұмыс істейді. Мұндағы нақты әлемдік құндылық - шешім қабылдау үшін әртүрлі кіріс түрлерін біріктіруді түсіну, бұл робототехника мен автоматтандырудағы негізгі тұжырымдама.
Міне, осы логикамен құра алатын бірнеше практикалық идеялар:
- Интерактивті көрмелер: Келушілердің назарын аудару үшін оларды қадағалайтын шағын роботтық дисплей жасаңыз.
- Автономды кедергілерден аулақ жүретін платформа: Көліктің қолды қадағалаудың орнына кедергілерден аулақ жүру арқылы бөлмені шарлауы үшін кодты өзгертіңіз.
- Білім беру робототехника жинағы: Студенттерге сенсорлық интеграция, логика және моторды басқару туралы үйрету үшін мұны негізгі жоба ретінде пайдаланыңыз.
- Ақылды жеткізу арбасы: Бақыланатын ортада бұл логиканы қоймада немесе зауытта адамды қадағалайтын шағын арбаға бейімдеуге болады.
Аппараттық құралдар және компоненттер
Бұл жоба SunFounder 3-в-1 Arduino жинағына кіретін компоненттерді пайдаланады. Сіз қолданатын негізгі компоненттер:
- SunFounder Smart Car шассиі: Дөңгелектері мен моторлары бар физикалық платформа.
- Arduino тақтасы: Кодты орындайтын көліктің "миы".
- Ультрадыбыстық сенсор (HC-SR04): Көліктің алдындағы нысанға (қолыңызға) дейінгі қашықтықты өлшеу үшін қолданылады.
- Екі ИҚ (инфрақызыл) кедергіден аулақ жүру сенсоры: Сол және оң жақтарына орнатылған, қолыңыздың осы жақтарда болуын анықтау үшін.
- Мотор драйвері: Arduino сигналдарына негізделген көлік моторларының жылдамдығы мен бағытын басқару үшін қолданылатын модуль (көбінесе L298N немесе ұқсас).
- Қуат көзі: Arduino мен моторларды қуаттандыруға арналған батареялар.
Сымдарды жалғау нұсқаулығы
Бейнеде айтылғандай, бұл жобаның сымдары алдыңғы сабақтарда кедергілерден аулақ жүретін көлік үшін түсіндірілгенмен бірдей. Сенсорлар мен моторлардың барлығы Arduino-ның цифрлық және аналогтық түйреуіштеріне қосылған. Көрнекі анықтама үшін SunFounder Smart Car сымдар диаграммасын қараңыз.
Код әр компонент үшін қолданылатын нақты түйреуіштерді анықтайды, олар келесі бөлімде егжей-тегжейлі сипатталған.
Кодты түсіндіру
Бұл бөлім кодтың өз көлігіңіз үшін реттегіңіз келетін пайдаланушы конфигурациялайтын бөліктеріне бағытталған. Толық бағдарламаны Robojax ресурс бетінен жүктеп алуға болады.
Эскиздің ең жоғарғы жағында түйреуіш анықтамаларын табасыз. Егер сіз көлігіңізді оқытушыдан басқаша жалғаған болсаңыз, бұл түсіну үшін ең маңызды жолдар.
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;
const int trigPin = 3;
const int echoPin = 4;
Міне, әр түйреуіш тобының не істейтіні:
- Мотор түйреуіштері (A_1A, A_1B, B_1A, B_1B): Бұл екі моторды басқару үшін мотор драйверіне қосылған түйреуіштер. "A" және "B" белгілері әдетте сәйкесінше сол және оң моторларды білдіреді. Егер мотор драйверіңіз әртүрлі Arduino түйреуіштеріне қосылған болса, оларды өзгертуіңіз керек.
- ИҚ сенсор түйреуіштері (rightIR, leftIR): Бұл цифрлық кіріс түйреуіштері сол және оң инфрақызыл кедергі сенсорларының сигналын оқиды.
0мәні кедергінің (қолыңыздың) анықталғанын білдіреді, ал1жолдың ашық екенін білдіреді. - Ультрадыбыстық сенсор түйреуіштері (trigPin, echoPin):
trigPin- қысқа ультрадыбыстық импульс жіберетін шығыс, алechoPin- қашықтықты есептеу үшін шағылысқан импульстің ұзақтығын оқитын кіріс.
loop() функциясының ішінде негізгі мінез-құлық логикасын табасыз. Реттегіңіз келетін бір айнымалы бар:
int speed = 150;
Бұл speed айнымалысы қозғалыс кезінде моторларға жіберілетін қуатты басқарады. Ол 0-ден (тоқтаған) 255-ке дейін (максималды жылдамдық) болуы мүмкін. Жылдамырақ көлік үшін бұл мәнді арттыруға (мысалы, 200-ге) немесе баяу, бақыланатын қозғалыстар үшін азайтуға болады (мысалы, 100-ге).
Код сонымен қатар moveForward(), turnLeft() және turnRight() сияқты функцияларды қамтиды. Бұл функциялар көліктің қозғалысын басқару үшін қолданылады және сенсор көрсеткіштеріне негізделген шақырылады. Оларды өзгертудің қажеті жоқ, бірақ оларды өзіңіздің теңшелетін мінез-құлықтарыңызды жасау үшін құрылыс блоктары ретінде пайдалана аласыз.
"Қолыңызды қадағалау" логикасы қалай жұмыс істейді
Бұл жобаның сиқыры Arduino-дың үш сенсордан алынған деректерді қалай түсіндіретінінде жатыр. Логика қарапайым және loop() функциясында үздіксіз орындалады.
Алдымен, көлік ультрадыбыстық сенсорды қолданып, тікелей алдындағы нысанға дейінгі қашықтықты өлшейді. Содан кейін, ол екі инфрақызыл сенсорды тексеріп, нысанның сол жағында немесе оң жағында екенін анықтайды. Шешім қабылдау процесі келесідей:
- Алға жылжу: Егер ультрадыбыстық сенсормен өлшенген қашықтық 5 см-ден үлкен, бірақ 10 см-ден аз болса, көлік алға жылжиды. Бұл көліктің қолыңызды қадағалайтын "ыңғайлы аймақ" жасайды.
- Солға бұрылу: Егер қашықтық осы аймақта болмаса, көлік ИҚ сенсорларын тексереді. Егер сол жақ сенсор жабық болса (қолыңыз сол жақта) және оң жақ сенсор ашық болса, көлік солға бұрылады.
- Оңға бұрылу: Керісінше, егер оң жақ сенсор жабық және сол жақ ашық болса, көлік оңға бұрылады.
- Тоқтау: Егер осы шарттардың ешқайсысы орындалмаса—мысалы, қолыңыз тым алыс немесе тым жақын болса—көлік тоқтайды.
Бұл қарапайым ережелер жиынтығы көлікке қолыңыздың орнына динамикалық түрде жауап беруге мүмкіндік береді, тегіс және интуитивті қадағалау мінез-құлқын жасайды.
Тірі Жоба Демонстрациясы
Бейне демонстрацияда нұсқаушы көліктің мінез-құлқын нақты уақытта көрсетеді. Сериялық монитор ультрадыбыстық сенсор оқитын қашықтықты көрсету үшін қолданылады. Көлік бос тұрғанда және қолыңыз алыс болғанда (мысалы, 36 см), ол тоқтап қалады. Қолыңызды көліктің алдындағы 5-10 см аймаққа қойған бойда, ол алға жылжи бастайды.
Демонстрация сонымен қатар бұрылу логикасын көрсетеді. Қолыңызды көліктің сол жағына қойғанда, сол жақ ИҚ сенсоры іске қосылады және көлік солға бұрылады. Сол сияқты, қолыңызды оң жаққа қою көлікті оңға бұруға мәжбүрлейді. Көлік қолыңызды айналдырғанда оны қадағалауды жалғастырады, тек қолыңыз сенсор ауқымынан алыстағанда немесе тым жақын болғанда тоқтайды. Бұл сенсор біріктіру және логиканың дұрыс жұмыс істеп тұрғанын растайды, жауап беретін және қызықты жоба жасайды.
Тараулар
- [00:00] Қолды Қадағалайтын Ақылды Көлікке Кіріспе
- [00:35] Robojax Arduino Курсы мен Жинағы туралы
- [01:41] Жобаға Шолу және Кодты Орнату
- [02:19] Пин Анықтамалары мен Орнатуды Түсіндіру
- [03:19] Қолыңызды Қадағалауға Арналған Код Логикасы
- [05:48] Көліктің Іс-Әрекетіндегі Тірі Демонстрация
- [07:28] Қорытынды Демонстрация және Өнімділікке Шолу
/*
Lesson 27/31: Car-5 SunFounder Smart Car Follows Your Hand
Get this code and watch video Download and resource page https://robojax.com/RJT610
YouTube video https://www.youtube.com/watch?v=mcbJlE7-8ro
*/
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;
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);
//IR obstacle
pinMode(leftIR,INPUT);
pinMode(rightIR,INPUT);
//ultrasonic
pinMode(echoPin, INPUT);
pinMode(trigPin, OUTPUT);
}
void loop() {
float distance = readSensorData();
int left = digitalRead(leftIR); // 0: Obstructed 1: Empty
int right = digitalRead(rightIR);
int speed = 150;
if (distance>5 && distance<10){
moveForward(speed);
}else if(!left&&right){
turnLeft(speed);
}else if(left&&!right){
turnRight(speed);
}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 turnRight(int speed) {
analogWrite(A_1B, speed);
analogWrite(A_1A, 0);
analogWrite(B_1B, speed);
analogWrite(B_1A, 0);
}
void turnLeft(int speed) {
analogWrite(A_1B, 0);
analogWrite(A_1A, speed);
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
Сізге қажет болуы мүмкін нәрселер
-
Амазонка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