24/31-сабақ: Ақылды көлік 2-бөлім: Алға, артқа, солға және оңға жүру және көлік жылдамдығын басқару
Бұл сабақ сіздің ақылды көлігіңізді құрудың екінші кезеңіне бағытталған: Arduino коды арқылы оның қозғалысын басқару. Бірінші жоба көлікті қарапайым түрде қозғалтқан болса да, бұл нұсқаулық көлікті алға, артқа, солға, оңға бұруды және дәл тоқтатуды қалай басқаруға болатынын үйретеді. Сондай-ақ, оның жылдамдығын басқаруды үйренесіз, бұл тегіс үдеу мен баяулатуға мүмкіндік береді. Бұл кез-келген робототехника жобасы үшін іргелі қадам, өйткені ол күрделі автономды мінез-құлықтарды жасауға негізгі логиканы береді.
Осы қозғалыс басқару элементтерін меңгеру мүмкіндіктер әлемін ашады. Міне, осы білімнің бірнеше практикалық қолданылуы:
- Сызықты қадағалайтын роботтар: Роботты тректе ұстау үшін солға және оңға бұрылу функцияларын қолданыңыз.
- Кедергілерді болдырмайтын көліктер: Көлікті алға жылжуға, тоқтауға және жолында нысанды анықтаған кезде бұрылуға бағдарламалаңыз.
- Қашықтан басқарылатын зерттеу: Осы пәрмендерді сымсыз модульмен біріктіріп, көлікті үйіңізде немесе аулаңызда жүргізіңіз.
- Автоматтандырылған жеткізу жүйелері: Белгіленген нүктелер арасында қозғала алатын, қажетінше тоқтайтын және іске қосылатын шағын робот жасаңыз.
Аппараттық құралдар мен компоненттер
Бұл жоба SunFounder 3-в-1 Arduino жинағына негізделген. Негізгі жинақтан басқа қосымша компоненттер қажет емес, бірақ қозғалтқыш драйверін басқару үшін Arduino-ға төрт қосымша сымды қосу қажет болады. Негізгі компоненттер:
- Arduino Uno (немесе үйлесімді плата)
- Қозғалтқыштары бар SunFounder Smart Car шассиі
- Қозғалтқыш драйвер платасы (жинаққа кіреді)
- Джампер сымдар
- Көлікке арналған батарея пакеті
- Бағдарламалауға арналған USB кабелі
Сымдарды қосу нұсқаулығы
Бұл жобадағы сымдарды қосу әр қозғалтқыштың бағытын басқару үшін өте маңызды. Бейнеде драйвер платасының төрт қозғалтқышты басқару сымы Arduino-ның 5, 6, 9 және 10 пиндеріне қосылатыны түсіндіріледі. Бұл пиндер ерекше, өйткені олар жылдамдықты басқару үшін маңызды Pulse Width Modulation (PWM) қолдайды.
Бейнеде нұсқаушы оларды төмендегі диаграммада көрсетілгендей сары және көк сымдарды қолданып белгілі бір ретпен қосады.
Бейнеде айтылған маңызды қауіпсіздік ескертуі - Arduino-ны USB арқылы бағдарламалау кезінде көліктің батарея қуатын (қызыл сымды 5V және қара сымды GND) ажырату. Бұл USB портының шамадан тыс жүктелуін және өшіп қалуын болдырмайды.
Кодты түсіндіру
Бұл сабақтың коды өзгертуге және түсінуге оңай болатындай құрылымдалған. Көлікті басқарудың кілті скетчтің жоғарғы жағындағы пин анықтамаларында жатыр. Arduino-да басқа пиндерді қолдануды шешсеңіз, оларды өзгерте аласыз.
const int in1 = 5;
const int in2 = 6;
const int in3 = 9;
const int in4 = 10;
Бұл жолдар қозғалтқыш драйверінің кірістеріне қосылған Arduino пиндерін анықтайды. in1 және in2 бір қозғалтқышты басқарады, ал in3 және in4 екіншісін басқарады. Осы пиндерді HIGH немесе LOW етіп орнату арқылы әр қозғалтқыштың айналу бағытын басқарасыз.
Көліктің жылдамдығын басқару үшін код екі арнайы функцияны қолданады: moveForward(int speed) және moveBackwards(int speed). Бұл функциялар аргумент ретінде 0 мен 255 арасындағы бүтін мәнді қабылдайды. 0 мәні қозғалтқышты тоқтатады, ал 255 - максималды жылдамдық. Мысалы, көлікті толық жылдамдықпен алға жылжыту үшін moveForward(255) шақырасыз. Оны баяу артқа жылжыту үшін moveBackwards(100) қолданасыз.
Бейне сонымен қатар for циклдарын қолданатын "жылдамдату" және "баяулату" тізбегін көрсетеді. Бұл тегіс үдеу үшін күшті әдіс.
for(int i=0;i<=255;i+=5){
moveForward(i);
delay(100);
}
Бұл цикл i мәнін 0-ден бастап, 255-ке жеткенше әр өтуде 5-ке арттырады. Әр жолы ол moveForward(i) шақырады, көліктің жылдамдығын біртіндеп арттырады. delay(100) әр жылдамдық қадамында 100 миллисекундтық үзіліс береді, бұл үдеуді көрнекі етеді. i мәнін кемітетін ұқсас цикл көлікті баяулату үшін қолданылады.
Тірі жоба демонстрациясы
Бейнеде нұсқаушы жобаны екі негізгі кезеңде көрсетеді. Біріншіден, ол көліктің негізгі қозғалыстарын көрсетеді. "move" кодын жүктеу арқылы көлік алдын-ала бағдарламаланған тізбекті орындайды: екі секунд алға жылжу, тоқтау, екі секунд артқа жылжу, тоқтау, солға бұрылу, содан кейін оңға бұрылу. Бұл сымдардың қосылуы мен логиканың дұрыс екенін көрнекі түрде растайды.
Екінші демонстрация жылдамдықты басқаруға бағытталған. Нұсқаушы "speed up" кодын жүктейді, ол көлікті біртіндеп алға қарай үдетеді, максималды жылдамдыққа жеткенше, содан кейін тегіс баяулап тоқтайды. Содан кейін ол тұрақты жылдамдықтағы нұсқаны көрсетеді, мұнда көлік 255 жылдамдықпен алға жүреді, тоқтайды, содан кейін 100-ге тең баяу жылдамдықпен кері қозғалады, мәндер тексеру үшін Serial Monitor-ге басып шығарылады.
Тараулар
- [00:00] Көлік қозғалысын басқаруға кіріспе
- [01:44] Кодты басқару үшін сымдарды қосу
- [02:07] Алға және артқа қозғалысты көрсету
- [03:18] Солға және оңға бұрылыстарды көрсету
- [05:05] Arduino түйреуіштеріне сымдарды қосу
- [07:00] Бағытты басқару кодын түсіндіру
- [11:44] Жылдамдықты басқаруға кіріспе
- [12:16] Жылдамдықты арттыру кодын түсіндіру
- [14:45] Қателерді жою үшін Serial Monitor қолдану
- [17:10] Жылдамдықты басқаруды тікелей демонстрациялау
- [19:45] Қорытынды сыртқы сынақ және қорытынды
/*
Lesson 24/31: Smart code speeds up
Get this code and watch video Download and resource page https://robojax.com/RJT607
YouTube video https://www.youtube.com/watch?v=QzcUig2L3dM
*/
const int in1 = 5;
const int in2 = 6;
const int in3 = 9;
const int in4 = 10;
void setup() {
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
Serial.begin(9600);
Serial.println("SunFounder Arduino Course");
Serial.println("Lesson 3: Speed up");
Serial.println("www.Robojax.com");
}
void loop() {
moveForward(255);
Serial.print("Forward at: ");
Serial.println(255);
delay(5000);//for 5 seconds
Serial.println("Stopped ");
moveForward(0);//stop the car
delay(2000);//for 2 seconds
moveBackwards(100);
Serial.print("Reverse at: ");
Serial.println(100);
delay(5000);//for 5 seconds
Serial.println("Stopped ");
moveForward(0);//stop the car
delay(2000);//for 2 seconds
}
void moveForward(int speed) {
analogWrite(in1, 0);
analogWrite(in2, speed);
analogWrite(in3, speed);
analogWrite(in4, 0);
}
void moveBackwards(int speed) {
analogWrite(in1, speed);
analogWrite(in2, 0);
analogWrite(in3, 0);
analogWrite(in4, speed);
}
/*
Lesson 24/31: Smart code speeds up (custom code)
Get this code and watch video Download and resource page https://robojax.com/RJT607
YouTube video https://www.youtube.com/watch?v=QzcUig2L3dM
*/
const int in1 = 5;
const int in2 = 6;
const int in3 = 9;
const int in4 = 10;
void setup() {
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
Serial.begin(9600);
Serial.println("SunFounder Arduino Course");
Serial.println("Lesson 3: Speed up");
Serial.println("www.Robojax.com");
}
void loop() {
Serial.println("Loop 1: Speeding Up");
for(int i=0;i<=255;i+=5){
moveForward(i);
Serial.print("i= ");
Serial.println(i);
delay(100);
}
Serial.println("Loop 2: Slowing down ");
for(int i=255;i>=0;i-=5){
moveForward(i);
Serial.print("i= ");
Serial.println(i);
delay(100);
}
}
void moveForward(int speed) {
analogWrite(in1, 0);
analogWrite(in2, speed);
analogWrite(in3, speed);
analogWrite(in4, 0);
}
Common Course Links
Common Course Files
Сізге қажет болуы мүмкін нәрселер
-
Амазонка5V DC motor on Amazonamzn.to
-
Амазонка5V DC motor on eBayebay.us
-
АмазонкаSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
Амазонка
-
Амазонка
-
Амазонка
-
Амазонка
-
AliExpress5V DC motor 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