Robototexnikadan boshlang’ich bilimlar
O’quv qo’llanma
Boxodir Xoshimovich Karimov
Akmaljon Olloberdiyevich Kuchkarov

Redaktor Ibratjon Xatamovich Aliyev

Redaktor Obbozjon Xokimovich Qo'ldashov

Redaktor Salim Madraximovich Otajonov

Muqova dizayneri Boxodir Xoshimovich Karimov

Muqova dizayneri Ibratjon Xatamovich Aliyev

Illustrator Boxodir Xoshimovich Karimov

Illustrator Ibratjon Xatamovich Aliyev

Taqrizchi, Farg'ona Politexnika Instituti Enegetika fakulteti "Fizika" kafedrasi professori, fizika-matematika fanlari doktori Nomonjon Sultonovich Sultonov

Taqrizchi, Farg'ona Politexnika Instituti Energetika fakulteti "Fizika" kafedrasi dotsenti, fizika-matematika fanlari nomzodi Zokirjon Mirzajonovich Mirzajonov

Taqrizchi, Farg'ona Davlat Universiteti fizika-texnika fakulteti "Texnologik ta'lim" kafedrasi dotsenti, fizika-matematika fanlari nomzodi Tursun Axmedovich Axmedov

Korrektor Ibratjon Xatamovich Aliyev

Korrektor Sayora Boxodirovna Aripova

© Boxodir Xoshimovich Karimov, 2024

© Akmaljon Olloberdiyevich Kuchkarov, 2024

ISBN 978-5-0064-0146-4

Создано в интеллектуальной издательской системе Ridero

Tavsiya etilgan o’quv qollanmasi avtomatizasiya va robototexnika boyicha loyihalarda mikrokontrollerlarni tashqi muhit bilan aloqada bo’lishidan foydalanib, mikrokontrollerlarni dasturlashni o`rganayotgan o’quvchilarga mo’ljallangan.

O`quv qo`llanmasida Arduino IDE muhiti yordamida Arduino platasini dasturlash tili yoritilgan bo`lib, amaliyotda qo`llaniluvchi amaliy loyihalar keltirilgan. Qo`llanmada amaliyotda qo`llaniladigan, yechimi tugallangan Arduino asosidagi ko`plab amaliy loyihalar yoritilgan. Qollanmada keltirilgan loyihalardan o`quv jarayoni, sanoat, qishloq xo`jaligi, tibbiyot va boshqa sohalarda qo`llash imkonlari keltirilgan.

1-bob. ARDUINOGA KIRISH

1.1.Arduino nima

Arduino – bu ochiq kodli platforma bo`lib elektron loyihalarni yaratish uchun ishlatiladi. Arduino dasturlashtiriladigan elektron platadan va kompyuter kodini yozish hamda dasturni plataga yuklash uchun foydalaniladigan dasturiy ta`minot IDE (Integrated Development Environment, ya`ni, o`zbekchada «Integratsiyalashgan rivojlanish muhiti», -Integratsiya (lot. integratio – tiklash, to'ldirish) dan iborat.

Arduino platformasi elektronika bilan endigina shug`ullanayotgan o`rganuvchilar hamda ushbu sohadagi tajribali mutaxassislar tomonidan turli loyihalar tayyorlashda foydalanib kelinmoqda. Arduino platasiga yangi kodni yuklash uchun USB kabelidan foydalaniladi. Bundan tashqari, Arduino IDE C++ tilining soddalashtirilgan versiyasidan foydalanadi, bu esa dasturlashni o`rganishni osonlashtiradi.

Arduino mikrokontrolleriga yuklanadigan dastur qurilmalarni ma`lum bir algoritmga asosan boshqriladi yoki arifmetik amallarni bajaradi. Arduino dasturlash tilini tushunish juda oson, chunki bu platforma havaskorlar uchun yaratilgan. Arduino mikrokontrolleriga ko`rsatmalar to`plamini yuborish orqali kerakli vazifalarni berishingiz mumkin.

Arduinoda professional bo`lmagan foydalanuvchilar ham turli xil elektron qurilmalarni (avtomatlashtirish va robototexnika tizimlari) yaratishlari mumkin. Arduino asosidagi qurilmalar turli sensorlardan signallarni qabul qilish va turli actuator (Aktuator – bu mexanizm yoki tizimni harakatlantirish va boshqarish uchun moljallangan mashinaning tarkibiy qismi) larni boshqarish imkoniyatiga ega.

Yozilgan dastur Arduinoda mustaqil ishlashi mumkin yoki kompyuter hamda mobil qurilmalar bilan o`zaro aloqada bo`ladi.

Kompaniya asoschilari — Arduino platasini ishlab chiquvchilari italiyalik Massimo Banzi, Devid Kuartil, Tom Igo, Janluka Martino va Devid Mellislardir. Arduinoning nomlanishi ular uchrashgan Italyadagi bardan olingan. Arduino maxsus ochiq manba sifatida ishlab chiqilgan, bo’lib, faqat tovar nomi patentlangan.

Arduino o`zining protsessoriga va xotirasiga ega bo`lgan kichik plata bo`lib, atrof-muhit bilan chambarchas bog`liqdir. Arduino platasida barcha turdagi komponentlar (sensorlar, motorlar, aktuatorlar va kengaytirish platalari) ni ulash mumkin bo`lgan o`nlab pinlar mavjud. 1.1-rasmda Arduino UNO platasi keltirilgan.

1.1-rasm.Arduinono UNO platasi

Dasturlash uchun mo`ljallangan Arduino IDE dasturiy ta`minotida dasturlash tajribasiga ega bo`lmagan o`rganuvchi ham bu dasturni tushuna oladi. Arduino sizga ushbu sohada professional ko`nikmalar va ko`plab g`oyalarni amalga oshirish imkonini beradi.

Ushbu kutobda o`z loyihalaringizni yaratish uchun turli sensorlar va qurilmalarni Arduinoga ulash bo`yicha ko`plab qo`llanmalar mavjud. Kitobni o`qish jarayonida Arduino nima ekanligi hamda sensorlar va qurilmalar bo`yicha tushunchaga ega bo`lib borasiz. Agar Arduino nima ekanligini va nima uchun kerakligi haqida ko`proq bilmoqchi bo`lsangiz, unda ushbu kitobdagi amalga oshirilishi mumkin bo`lgan turli loyihalar bilan tanishishingiz kerak.

Omad tilaymiz va ajoyib Arduino olamiga xush kelibsiz!

1.2.Robototexnikada algoritmlarning turlari

Robotlashgan loyihalar uchun harakat algoritmini yaratish ijodiy fikrlashni talab qiladi, shuning uchun algoritmni faqat odam yaratishi yoki o`zgartirishi mumkin. Robotlar esa ko`rsatmalarni bajaradi. Robototexnikaning uchta qonunining algoritmlarini ishlab chiqish ko`p vaqt talab qiladigan vazifa bo`lib, robotlarga keng ko`lamli vazifalarni bajarishga imkon beradi.

Robototexnikaning uchta qonuni

1. Robot insonga shikast etkaza olmaydi yoki harakatsizlik orqali insonga zarar yetkazishi mumkin emas.

2. Robot odamlar tomonidan berilgan buyruqlarga bo’ysunishi kerak, agar bunday buyruqlar birinchi qonunga zid bo’lmasa.

3. Robot o’z mavjudligini himoya qilishi kerak, agar bunday himoya birinchi yoki Ikkinchi qonunga zid bo’lmasa.

Isaak Asimov

Dunyodagi barcha jarayonlar qonunlar va qoidalarga bo`ysunadi, olimlar tomonidani bugungi kunda juda ko`p formulalar va algoritmlar yozilgan bo`lib, ular orqali ko`plab harakatlarni hisoblashingiz va takrorlashingiz mumkin. Algoritm tushunchasi 783—850 yillarda yashab ijod qilgan vatandoshimiz matematik Muhammad ibn Muso al-Xorazmiy nomidan kelib chiqqan. Al-Xorazmiy yaratgan qo`llanmada keltirilgan o`nlik sanoq sistemasida arifmetik amallarni bajarish qoidalari soddaligi tufayliYevropada ham o`nlik sanoq sistemasi qo’llanishiga turtki bo’ldi. Bu qoidalartarjimasida bir qoida «Al-Xorazmiy aytadiki» deb boshlangan va bora-bora talaffuz tufayli «algoritm» tarzida ifodalanib kelgan.

1.2-rasm. Vatandoshimiz matematik Muhammad ibn Muso al-Xorazmiy

1.3.Algoritm nima?

Algoritm – bu masalani hal qilish yoki hisoblash uchun ishlatiladigan ketma-ketlik (protsedura). Algoritmlar apparati yoki dasturiy ta`minotga asoslangan tartiblarda harakatlarni bosqichma-bosqich bajaradigan ko`rsatmalarning aniq ro`yxati sifatida ishlaydi.

Algoritmlar IT (o`zb-AKT-axborot komunikatsion texnologiyalar) ning barcha sohalarida keng qo`llaniladi. Matematika va informatika fanlarida algoritm odatda takrorlanuvchi muammoni hal qiladigan kichik ketma- ketlikka (protseduraga) ishora qiladi. Algoritmlar ma`lumotlarni qayta ishlashni amalga oshirish uchun spetsifikatsiya sifatida ham qo`llaniladi va avtomatlashtirilgan tizimlarda katta rol o`ynaydi.

Algoritm raqamlar to`plamini saralash yoki ijtimoiy tarmoqlarda foydalanuvchi kontentini tavsiya qilish kabi murakkabroq vazifalar uchun ishlatilishi mumkin. Algoritmlar odatda dastlabki kiritish va ma`lum bir hisoblashni tavsiflovchi ko`rsatmalar bilan boshlanadi. Hisoblash amalga oshirilganda, jarayonning chiqish natijasi ko’rinadi.

Algoritmlar qanday ishlaydi?

Biz quyida kutubxonadan foydalanamiz, bu dasturni sezilarli darajada soddalashtirishga imkon beradi. Boshlash uchun HCSR04.h kutubxonasini o`rnating. Ultrasonik sensordan LEDlarni boshqarish uchun dasturda if shartli operatoridan foydalaniladi. Sxemani yig`gandan so`ng, mikrokontrollerga quyidagi dasturni yuklang.

Misol uchun, qidiruv algoritmi qidiruv so`rovini kirish sifatida qabul qiladi va uni so`rovga tegishli indikatorlarni ma`lumotlar bazasi orqali qidirish bo`yicha ko`rsatmalar to`plami orqali boshqaradi. Avtomatlashtirish dasturlari algoritmlarning yana bir misoli sifatida ishlaydi, chunki avtomatlashtirish vazifalarni bajarish uchun bir qator qoidalarga amal qilinadi. Ko`pgina algoritmlar avtomatlashtirish dasturini tashkil qiladi va ularning barchasi berilgan jarayonni avtomatlashtirish uchun ishlaydi.

2-bob. ARDUINO OILASI MIKROKONTROLLERLARINING VERSIYALARI

2.1. Arduino platsining versiyalari

Arduino platasining bir qotor versiyalari mavjud. Arduino platasining asosiy versiyalarining modellari quyidagilar:

Ø Due – Cortex-M3 ARM SAM3U4E mikroprotsessori 32-bit ARM bazasi asosidagi plata;

Ø Leonardo —ATmega32U4 mikrokontrolleri asosidagi plata;

Ø UNO —Arduinoplatformasi asosidagi eng ko‘p qo‘llaniladigan versiya;

Ø Duemilanove – ATmega168 yoki ATmega328 mikrokontrolleri asosidagi plata;

Ø Diecimila – Arduino USB platformasi asosidagi versiya;

Ø Nano – maket sifatida ishlovchi kompakplatforma. Nano kompyuteri USB Mini – B kabelya orqali ulanadi;

Ø Mega ADK – na Android telefoni va boshqa USB interfeysli qurilmalarda aloqani USB-host interfeysini qo‘llovchi Mega 2560 versiyali plata;

Ø Mega 2560 – USB-port orqali ketma ket ulanuvchichi ATMega8U2 chipi asosidagi ATmega 2560 mikrokontrolleri bazasidagi plata;

Ø Mega – ATmega1280 mikrokontrolleri bazasidagi Mega seriyali versiyasi;

Ø ArduinoBT – programmalashtirish va sim aloqa uchun Bluetooth modulli platformasi;

Ø LilyPad – tabiiy tola materiallariga biriktiriluvchi platforma;

Ø Fio – simuzatish uchun mo‘ljallangan platforma. Fio XBeeradio uchun ulash uyasi, LiPo batareyasi zaryadlash uchun ulash uyasi mavjud;

Ø Min i— eng kichik Arduino platformasi;

Ø Pro – tajribali qo‘llanuvchilar uchun yaratilgan platforma bo‘lib, katta proektlarni yaratish imkoni mavjud;

Ø Pro Min i— Pro platformai singani, tajribali qo‘llanuvchilar uchun ishlab chiqilgan bo‘lib, uning narxi arzon, o‘lchami kichik va qo‘shimcha funksiyalari mavjud.

2.1.1. Pro Mini Arduinosi

2.1-rasm. Pro Mini Arduino platasi

Pro Mini Arduinosi (2.1-rasm) ATmega168 mikrokontrolleri asosida tayyorlangan.

2.1-jadvalda Pro Mini Arduino platasinig xarakteristikalari keltirilgan.

Arduino ProMiniFTD Ikabel orqali ta’minlanadi, yoki VCC chiqish orqali

3,3 Volt yoki 5V kuchlanish bilan va RAW chiqishi boshqarilmaydigan manba orqali taminlanadi.

Ta’minlash chiqishlari

Ø RAW – boshqarilmaydigan kuchlanish orqali ulash;

Ø VCC -3,3 V yoki 5V boshqariladigan kuchlanishni ulash;

Ø GND – yrga ulash chiqishlari.

2.1.2. Nano Arduinosi

Nano platformasi (2.2-rasm), ATmega 328 (Arduino Nano 3.0) yoki ATmega168 (Arduino Nano2.x) mikrokontrolleri asosida tuzilgan, bo‘lib kichik o‘lchamga ega bo’lib u laboratoriya ishlarida qo‘llaniladi.

2.2-rasm. Nano Arduino platasi

Nano Arduino platasi kompyuterga ulangan USB Mini orqali kuchlanish oladi yoki boshqariluvchi 5V, tashqi ta’minlash manbasidan oladi. Yuqori kuchlanshli manba avtomatik tanlanadi.

Nano Arduino platasining xarakteristikalari 2.2.jadvalda keltirilgan.

2.1.3. ArduinoUNO

2.3-rasm. ArduinoUNO (DIP) platasi

UNO Arduino platformasi ATmega328 (2.3-rasm) mikrokontrolleri asosida tuzilgan. Kompyuter bilan aloqa qilish uchun FTDI USB mikrokontroller USB orqali ulanadi. Yangi UNO Arduinosida ATmega8U2 mikrokontrollerdan foydalaniladi.

Arduino UNO platasining xarakteristikalari 2.3-jadvalda keltirilgan.

2.1.4. Mega Arduinosi

Mega Arduinosi Atmega2560 (2.4-rasm) mikrokontrolleri asosida tuzilgan.

2.4-rasm. Mega Arduino platasi

Mega Arduino platasining xarakteristikalari 2.4-jadvalda keltirilgan.

3-bob. ARDUINONI QUVVATLANTIRISH VA PWM, ANALOG, RAQAMLI PINLAR

3.1.Arduino raqamli va analog pinlari

Ushbu bo`limda Arduinoda analog va raqamli, hamda PWM (pulse-width modulation), o`zbek tilida IKM (impuls kengligi modulyatsiyasi), rus tilida ШИМ (широтно-импульсная модуляция) pinlarini va analog signalni raqamliga qanday o`zgarishini ko’rib o’tamiz.

3.1.rasm. Signallarning ko’rinishi

Analog signal – vaqt o`tishi bilan doimiy ravishda o`zgaradi. Tabiatdagi barcha ma`lumotlar analog-suvdagi to`lqinlar, simli tebranishlar va boshqalar. Dastlab, odam analog qurilmalar yordamida ma`lumotni (tovushlar, tasvirlar, videolar) yozib oldi. Ammo analog signallar shovqin va uning ta`siriga sezgir.

Raqamli signal – bir va nol (signal bor yoki yo`q) ko`rinishida uzatiladi, kompyuterlar va raqamli texnologiyalar uchun uni amalga oshirish osonroq (3.1-rasm).

Arduino Nano, Arduino UNO, Arduino Mega 2560 larning pinlarini bir necha turga bo`lish mumkin, farqi turli platalardagi pinlar sonida bo`ladi. Misol uchun, Arduino Mega 2560-da plata o`lchami va mikrokontrollerning ishlashi tufayli UNO yoki Nanoga qaraganda sezilarli darajada ko`proq raqamli va analog portlar mavjud. Aslida, pinlarni dasturlashning xarakteristikalari va usullari bir – biridan farq qilmaydi.

1. Quvvat pinlari – quvvat portlari, ularning ishlash rejimini dasturlash yoki o`zgartirish mumkin emas. Ular 5V yoki 3,3V stabillashtirilgan kuchlanishni beradi, Vin quvvat manbayidan kuchlanishni beradi va GND umumiy minus (3.2-rasm).

3.2-rasm. Arduino UNO

Arduinoni quvvatlantirish bir necha yo`l bilan amalga oshiriladi:

a. USB kabel orqali quvvatlantirish;

b. Plataga ulangan ba`zi komponentlarni alohida quvvatlantirish;

c. Tashqi manbadan quvvatlantirish.

3.2.Arduino platasini quvvatlantirish

Arduino platasini quvvatlantirish uchun turli xil variantlar mavjud. Birinchisi, Arduino platangizni USB kabeli yordamida kompyuterga ulanadi.

Shuningdek, Arduino platasida servo motorlardan foydalanganda 7—12V kuchlanish bilan quvvatlantirish uchun DC quvvat ulagichidan foydalaniladi. USB kabelidan keladigan quvvat kamroq. Bu plata va kompyuter o`rtasidagi aloqa uchun juda yaxshi, lekin ba`zi motorlarni quvvatlantirish uchun yetarli bo`lmaydi.

Arduino platangizni quvvatlantirishning keyingi usuli bor. Arduinodagi quvvat Vin pindan platani 7—12V kuchlanish bilan ta`minlash uchun foydalanish mumkin. Tashqi quvvat manbaidan foydalanish va uni to`g`ridan-to`g`ri plataga ulash kerak, agar Vindan foydalanganda, uni tashqi quvvat manbaiga ulab, GNDni ham to`g`ri ishlatish kerak.

Komponentlarni Arduino UNOni quvvatlantirish

1.Har doim tashqi komponentni Arduino UNO platasiga ulaganda, avval uni GNDga ulash kerak. Keyin uni yoqish uchun bir nechta turli pinlardan foydalaniladi. Ular orasida 3,3V va 5V kuchlanishli pinlar mavjud.

Esda tutingki, Arduino UNO 5V kuchlanishda ishlaydi. Shunday qilib, agar 3,3V komponentni 5V quvvat manbaiga ulansa, komponentga zarar yetkazish mumkin. Buning ikkita varianti mavjud: Arduinodan 3,3V quvvat manbaidan foydalanish, yoki kuchlanish qiymatini o`zgartirgich bilan 5V dan foydalaniladi. Rezistorlar yoki to`g`ridan-to`g`ri kuchlanishni o`zgartirish komponenti yordamida ular orasidagi kuchlanishni o`zgartirish, 5Vni 3,3V komponentiga osongina ulash mumkin.

2. Arduino UNOda raqamli pinlar – Arduino UNO platasida 0 dan 13 gacha bo`lgan 14 ta raqamli pin bor.

3. PWM pinlari – raqamli chiqish/kirish sifatida dasturlashtirilishi mumkin bo`lgan PWM modulyatsiyalangan portlar. Bu portlar Arduino platasida (˜) bilan belgilangan;

4. Analog kirish pinlari – sensorlardan analog signalni qabul qiluvchi portlar kirish sifatida ishlaydi. Arduino UNO platasida 6ta analog pinlar bo`lib ular A0-A5 gacha bo`ladi.Ushbu portlar raqamli kirish/chiqish sifatida ham dasturlashtirilish mumkin. Ushbu pinlar PWM modulyatsiyasini qo`llab-quvvatlaydi.

pin rejimi pinMode () yordamida void setup protsedurasida tayinlanadi, masalan:

void setup () {

pinMode (10, OUTPUT); //10-pinni chiqish sifatida e`lon qilish

pinMode (A2, OUTPUT); //A2 pinini chiqish sifatida e`lon qilish

pinMode (12, INPUT); //12-pinni kirish sifatida e`lon qilish

pinMode (A1, INPUT); //A1 pinini kirish sifatida e`lon qilish

}

Tushuntirish:

1. Svetodiodni 10 va A2 chiqish piniga ulash mumkin, bu dasturda buyruq chaqirilganda yoqiladi va o`chadi;

2. Pin 10 PWM signali uchun ishlatilishi mumkin, masalan, svetodiodni yoqish uchun. A2 pin esa faqat raqamli signalni (0 yoki 1) chiqarishi mumkin;

3. Raqamli sensor 12 va A1 kirishiga ulanishi mumkin va mikrokontroller ushbu pinlarda signal borligini tekshiradi (mantiqiy nol yoki bir);

4.Analog sensor A1 kirishiga ulanishi mumkin, shu bilan birga mikrokontroller nafaqat signalni oladi, balki signal xarakteristikasini ham o`rganadi.

PWM pinlari va analog pinlarini ajratganimizga sabab shuki, PWM pinlari analog signal yaratadi, ular servo, step motor boshalar qurilmalar ulanadi shu bilab birga turli xil xususiyatlarga ega signallarni yetkazib beradi. Analog pinlar (Analog In) analog sensorlarni ulash uchun ishlatiladi, ulardan kiruvchi signal o`rnatilgan ADC yordamida raqamli signalga aylanadi.

ADC nima? Analog signal har qanday miqdordagi qiymatlarni qabul qilishi mumkin. Raqamli signal esa faqat ikkita qiymatga ega: HIGH va LOW. Arduinoda analog signallarning qiymatini o`lchash uchun o`rnatilgan analog-raqamli konvertor (ADC) mavjud. ADC analog kuchlanishni raqamli qiymatga aylantiradi. Analog signalning qiymatini olish uchun ishlatiladigan funksiya analogRead (pin) dir. Ushbu funksiya analog kirish pinining kuchlanish qiymatini o`zgartiradi va mos yozuvlar qiymatiga nisbatan 0 dan 1023 gacha raqamli qiymatni qaytaradi. Aksariyat Arduino UNOda A5gacha, Arduino Mega-da A15gacha va Arduino Mini va Nanoda A7 gacha pinlar mavjud. Pin raqami uning yagona parametridir.

PWM signalini chiqarish uchun analogWrite (pin, qiymat) funksiyasidan foydalaniladi. Qiymat =0 bo`lsa, signal har doim o`chirilgan bo`ladi. Qachonki qiymat=255 bo`lsa, signal har doim yoqilgan bo`ladi. PWM funksiyasi ko`plab Arduino platalarida 3, 5, 6, 9, 10 va 11-pinlarda ishlaydi. Ko`pgina pinlarda PWM signalining chastotasi taxminan 490 Gers ni tashkil qiladi. UNO va shunga o`xshash platalarda 5 va 6-pinlar taxminan 980 Gers chastotaga ega. Analog kirish qiymatini kerakli qurilmalar qiymatlariga moslashtirish uchun quyidagi funktsiyadan foydalanishingiz mumkin: map (qiymat, pastdan, yuqoridan, pastga, yuqoriga). Bu 0 dan 1023 gacha bo`lgan PWM chiqish signaligacha yani 0—255 oralig`ida bo`ladi. Bu funksiya beshta parametrga ega, birinchisi analog qiymat o`zgaruvchisidir, qolganlari esa mos ravishda 0, 1023, 0 va 255.

3.3.Arduino UNOda PWM, analog, raqamli pinlar

PWM (PWM) pinlarlari (Analog chiqish) 3, 5, 6, 9, 10, 11.

Analog pinlarlari (Analog kirish/chiqish) A0, A1, A2, A3, A4, A5.

Raqamli pinlarlari (Raqamli kirish/chiqish) 0 dan 13 gacha barcha portlar, foydalanish mumkin:

A0 – A5 gacha Analog pinlarlari raqamli pin sifatida ishlatiladi, agar umumiy maqsadli portlar yetarli bo`lmasa, masalan, plataga 15 ta svetodiodni ulashni xohlasangiz. Bundan tashqari, Arduino UNO va Nano platalarida A4 va A5 portlari I2C protokoli (SDA va SCL pinlari) uchun ishlatiladi – ular A4 va A5 pinlari bilan parallel ishlaydi.

Agar chiqish kuchlanishini tartibga solmoqchi bo`lsangiz, "~" belgisi bilan belgilangan pinlarni ishlatishingiz kerak. Arduino UNO uchun bular 3, 5, 6, 9, 10, 11. Analog portlar yordamida 0 dan 5 voltgacha bo`lgan har qanday kuchlanishni chiqarish mumkin va raqamli chiqishlarni faqat yoqish va o`chirish mumkin. Analog portlar PWM (pulse-width modulation), o`zbek tilida IKM (impuls kengligi modulyatsiyasi), rus tilida (широтно-импульсная модуляция) dan foydalanadi, bu analog signalni simulyatsiya qiladi.

Arduinoda analog pinlarni raqamli sifatida ishlatish

Ko`p qurilmalarni ulashda umumiy maqsadli pinlar etarli bo`lmasligi mumkin. Bunda dasturda analog pinlarni raqamli pinlar sifatida ishlatish mumkin.

void setup () {

pinMode (A3, OUTPUT); //A3 pinini raqamli chiqish sifatida e`lon qilish

}

Raqamli signal va analog signal o`rtasidagi farqni tushunish uchun, LED va rezistorli sxemani amaliyot taxtasida o`rnating. Analog chiqishni

~ 9 ga ulang. Chiqish portini Pin 9 ga ulang. Dasturni Arduino NANO yoki UNO platasiga yuklang.

Port 9 raqamli chiqish sifatida ishlashi mumkin. Agar digitalWrite funksiyasi analogWrite ga o`zgartirilsa, HIGH (1) va LOW (0) qiymatlari o`rniga 0 dan 255 gacha bo`lgan istalgan qiymatni qabul qiladi. Aynan shu oraliqda analog chiqishlardagi kuchlanish o`zgartiriladi. LEDni yoqish va o`chirish uchun dasturni yuklab oling. Ushbu dasturning ishlashining batafsil tavsifi quyida kodda berilgan.

3.4.Arduino UNOdagi analog portlar (A0-A5 pinlari)

Ushbu bo’limda Arduinoning analog A0-A5 portlarini ko`rib chiqamiz. Analog portlarning ishlash printsipini tahlil qilinadi, ularga nima ulanishi mumkinligi ko`rib chiqiladi. Amaliyot taxtasidan foydalanib, boshqariladigan yorug`lik bilan yoritgich sxemasini yig`amiz, shunda potensiyometr (o`zgaruvchan qarshilik) yordamida LEDning yorqinligini o`zgartirish mumkin bo`ladi. Arduino IDE tilida #define va analogRead direktivasini ko`rib chiqing.

3.3-rasm. Arduinoga potensiometrni ulash sxemasi

Arduinoda potensiometr uchun dastur:

void setup () {

Serial.begin (9600);

pinMode (A0, INPUT); // potansiometrni A0 kirishiga ulang

}

void loop () {

int qiymat = analogRead (A0); // A0 portidan ma`lumotlarni o`qish

Serial.print («Potensiometr qiymati ->»);

Serial.println (qiymat);

}

Arduinoda analog kirishlar

Arduinoning Atmega mikrokontrolleri olti kanalli analog-raqamli konvertorni (ADC) o`z ichiga oladi. Konvertorning ruxsati 10 bit bo`lib, 0 dan 1023 gacha qiymatlarni olish imkonini beradi. Arduino analog kirishlari vasifasi (Arduino UNOda (A0-A5) analog sensorlardan asosiy foydalanish qiymatlarni o`qish. Potansiyometrdan ko`rsatkichlarni olish uchun analog kirishdan foydalaniladi.

O`lchov bo`linmasining kichik qiymati deyarli har qanday miqdorning qiymatlarini katta aniqlik bilan olish imkonini beradi. Analog kiritishni o`qish uchun analogRead funksiyasidan foydalaning. Analog portlar digitalRead buyrug`i yordamida amalga oshirilishi mumkin, bu buyruq tugmachadan ma`lumotlarni o`qish uchun ishlatiladi. digitalWrite buyrug`i bilan esa LEDni boshqarishingiz mumkin.

3.5. Arduinoda analog signal va LED

int LED = 0; //LEDning dastlabki yorqinligi

int fade = 5; //LED yorqinligini o`zgartirish bosqichi

void setup () {

pinMode (9, OUTPUT); // chiqish ishlashi uchun Pin 9 dan foydalaning

}

void loop () {

//LED yorqinligini Pin 9ga o`rnating

analogWrite (9, LED); //har bir siklda berilgan so`ng miqdorini qo`shish orqali yorqinlikni o`zgartiring;

LED = LED + fade; //minimal va maksimal yorqinlikda o`chirish tartibini o`zgartiring;

if (LED == 0 || LED == 255) {

fade=-fade;

}

delay (20); //effektni pauza qilish

}

Tushuntirish:

1.AnalogWrite funksiyasi (pin, qiymat), bu yerda pin – signal qo`llaniladigan chiqish porti, qiymat-0 (to`liq o`chirilgan) va 255 (to`liq yoqilgan) orasidagi qiymat, LEDning yorqinligini yoki tezligini impuls kengligi modulyatsiyasi (PWM) yordamida boshqariladi.

2.LED o`zgaruvchi sikli har gal bajarilganda «0» boshlang`ich qiymatiga ega bo`ladi, fade ning berilgan qiymati LED qiymatiga qo`shiladi (bu dasturda fade =5).

LED o`zgaruvchisi maksimal qiymati 255 ga yetganda, fade -5 manfiy qiymatni oladi. Endi, har safar sikl bajarilganda, LED qiymatiga -5 qo`shiladi, ya`ni, har safar fade LEDdan ayriladi.

Arduinoda LEDning yorqinligini o`zgartirish

Ushbu bo’limda LEDning yorqinligini o`zgartiriladigan qurilmaning elektr sxemasini yig`amiz. Potensiometr yordamida 9-pinga ulangan LEDning yorqinligini o`zgartirishimiz mumkin. Potensiometrning ikki tarafdagi oyoqlari 5V va GND portlariga ulanadi, kuchlanish qiymati o`rta oyoqdan olinadi va Arduinoning A0 analog kirishiga ulanadi.

Elektr zanjirini ko`rsatilganidek yig`ing. Potensiometrning o`rta oyog`i kuchlanish ko`rsatkichlarini olish uchun A0 analog portiga ulanadi. Arduinoning 5V va GND portlariga ulash uchun, potensiometrni ikki tarafidagi oyoqlarini qay biriga ulanishi muhim emas. LEDning yorqinligini oshirish uchun faqat htugmachasining aylanish yo`nalishi o`zgartiriladi. Sxema tayyor bo`lgandan so`ng, Arduinoni kompyuterga ulab va dasturni yuklang.

3.4-rasm. Arduinoga led va potensiyometr ulash sxemasi

Arduinoda led va potensiyometr uchun dastur

#define LED_PIN 9 // LED bilan pinga nom bering

#define POT_PIN A0 // Potensiometr piniga nom bering

void setup () {

// LED pin chiqish

pinMode (LED_PIN, OUTPUT);

//potensiometrli pin kirish bo`ladi

pinMode (POT_PIN, INPUT);

// Serial port monitorini ishga tushiring

Serial.begin (9600);

}

void loop () {

//2 ta o`zgaruvchidan foydalanishimizni e`lon qilamiz – aylanish va yorqinlik

//o`zgaruvchilarda faqat butun sonlarni saqlaymiz (ing. «integer»)

int aylanish, yorqinlik;

//aylanish 0 dan 1023 gacha bo`lgan potentsiometr qiymatlariga teng

aylanish = analogRead (POT_PIN);

// o`zgaruvchan brightness 4 ga bo`lingan aylanishga teng bo`ladi

//yorqinlik faqat butun son bo`lishi mumkin, kasr qismi o`chiriladi

//natijada yorqinlik o`zgaruvchisi 0 dan 255 gacha bo`lgan oraliqda bo`ladi

yorqinlik = aylanish / 4;

//yorqinlik=aylanish/4 formulasi bo`yicha hisoblangan kuchlanish

analogWrite (LED_PIN, yorqinlik);

//aylanish qiymatini ketma-ket monitor portga yuboring

Serial.println (yorqinlik);

delay (500);

}

Tushuntirish: #define direktivasidan foydalanib, 9-pin raqamini LED_PIN nomi bilan almashtirdik, A0 analog kirishiga POT_PIN nomini berdik. Mahalliy o`zgaruvchi“aylanish“ kuchlanishga mutanosib va 0 dan 1023 gacha (ADC ning minimal va maksimal qiymatlari) oralig`ida bo`ladi. „yorqinlik“ o`zgaruvchisi esa 4 ga bo`lingan „aylanish”ga teng ya`ni 0 dan 255 gacha (analog kirishning minimal va maksimal qiymati).

4-bob. DASTURLASHNING TARKIBI

Arduinoda AVR mikrokontrollerlar uchun maxsus C/C++ dasturidan foydalaniladi.

4.1. setup () va loop () funksiyasi

Arduino dasturining bazaviy tarkibi ikkita majburiy qism setup () va loop () funksiyasidan iborat. setup () funksiyasidan o’zgaruvchi va kutubhonani ulash e`lon qilinadi. setup () funksiyasi bir marta ishga tushiriladi. U o’zgaruvchilarni inisializasiya qilishda, portlarni ishlash rejimini o`rnatishda va dasturning asosiy siklini tayyorlashda qo’llaniladi. U biror amalni bajarmasa ham dasturga bo`lishi kerak. loop () funksiyasi Arduinoda yozilgan buyruqni cheksiz ketma ketlikda bajaradi. Bu funksiya asosiy ishni siklik ravishda bajaradi.

Quyida sodda yozilgan dastur keltirilgan.

void setup ()

{

Serial.begin (9600);

}

void loop ()

{

Serial.println (millis ());

delay (1000);

}

4.2. Boshqaruvchi operatorlar

4.2.1. If shart operatori

Bugungi darsda If shart operatori bilan tanishamiz. Arduinoda har bir dasturlash tilida muntazam ishlatiladigan operatorlardan biri – if hisoblanadi. Aynan bu operatorsiz, biror bir mukammal dastur tuzishning umuman iloji yo`q. Shart operatori biror bir qo`yilgan shartni tekshirib, uning rost yoki yolg`onligidan kelib chiqqan holda biror bir amal yoki funksiyani bajarishiga yordam beruvchi vosita hisoblanadi.

Shart operatorining ikki xil ko`rinishi ya`ni, umumiy ko`rinishi va qisqa ko`rinishi mavjud.

Shart operatorining qisqa ko`rinishi:

if (shart) {bajariladigan operatsiya;}

Bu yerda if – agar, (shart) – tekshirilishi kerak bo`lgan yoki jarayon ishga tushishi uchun bajarilishi shart bo`lgan jarayon, {bajariladigan operatsiya;} – (shart) bajarilganda ishlashi kerak bo`lgan operatsiya.

Dastur yozayotganda shartdan so`ng; qo`yish mumkin emas. Agar shartdan so`ng qo`ysak jarayon shu yerning o`zida to`xtaydi va shartdan keyingi operatorga murojaat qilmaydi.

Operator-o`ziga yuklangan ma`lum bir shart asosida vazifani bajaruvchi vosita hisoblanadi va u dastur tuzishimizda bir qator qulayliklarga ega hisoblanadi.

Misol uchun jamiyatimizdagi insonlarni olsak, har bir insonni o`zi bajaradigan vazifasi bo`ladi. O`quvchining vazifasi o`qish bo`lsa, o`qituvchining vazifasi anashu o`quvchilarga bilim berishdan iborat.

Elektronika sohasida lampochka yoritish vazifasini bajarsa, sim ana shu lampochkani elektr ta`minotiga ulash vazifasini bajaradi.

4.2.2.O‘zlashtirish operatori – =.

O«zlashtirish operatori: = belgisidan chap tomonda turgan qiymatni = belgisidan o‘ng tomondagilarni hisoblangan qiymatiga almashtiradi. Masalan, x = a+b; ifodasi. Bu yerda“x»: a va b o‘zgaruvchining qiymatlarini qo‘shishdan hosil bo‘lgan natijani o‘zlashtiradi.

4.2.3.Tenglashtirish operatori. = =.

Tenglashtirish operatori== belgisidan o`ng tomonda turgan qiymat bilan chap tomonda turgan son qiymatini solishtirib, tenglashtirib ko`radi. Masalan, y==a+b; ifoda. Bu yerda «y»: a va b o‘zgaruvchilarnngi qiymatlarini qo‘shishdan hosil bo‘lgan natija bilan o`zining qiymatini tekshiradi. Agar tenglashtirilgan qiymat shartni qanoatlantirsa u holda operatsiyani bajaradi, agar tenglashtirilgan qiymat shartni qanoatlantirmasa shartning ichidan chiqib ketadi.

Bularga qo`shimcha tarzda <,> katta va kichik belgilaridan foydalanamiz.

Shart operatorining umumiy ko`rinishi:

if (shart) {bajariladigan operatsiya 1;}

else {bajariladigan operatsiya 2;}

bu yerda else-aks holda.

Shart 2 hil ko`rinishda boladi: rost (1) va yolg`on (0)

{bajariladigan operatsiya 1;} – Agar (shart) bajarilsa ya`ni rost (1) qiymatga ega bo`lsa bajarilishi kerak bo`lgan jarayon.

{bajariladigan operatsiya 2;} – bu jarayon else ya`ni shart bajarilmaganda yoki yolg`on (0) qiymatga ega bo`lganda bajarilishi kerak bo`lgan jarayon.

Misol: quyidagi keltirgan misolimizga qarang! U yerda aks holda to`p darvozaning yonidan o`tib ketadi deyilgan. Ana shu operatsiya shart operatorining umumiy ko`rinishiga misol bo`lishi mumkin.

if (to`pni to`g`ri tepsak) {to`p darvozaga borib tushadi;}

else {to`p darvoza yonidan o`tib ketadi;}

4.2.4.Arduinoda mantiqiy operatorlar- if va else

Arduinodagi if operatori shartni tekshiradi, agar u rost bo`lsa, jingalak qavslardagi kod bloki bajariladi. Jingalak qavslar shartli operatordan keyingi kodning faqat bitta qatori bajariladi. Har doim jingalak qavslardan foydalanishni tavsiya qilamiz. Shartlar, shartlar tartibi va Arduino taqqoslash operatorlarini quyidagi misollar bilan ko`rib chiqamiz.

Arduinoda if shartlari to`g`ri yoki noto`g`riligini tekshirish uchun taqqoslash operatorlari ishlatiladi. Jingalak qavslar mantiqiy ravishda bir nechta qatorlarni bitta blokda guruhlaydi. O`zgaruvchining qiymati berilgan raqamdan katta yoki kichikligini tekshiradigan dastur:

if (qiymat> 500) {digitalWrite (8, HIGH); digitalWrite (7, LOW);}

if (qiymat <500) {digitalWrite (8, LOW); digitalWrite (7, HIGH);}

If va else konstruksiyasi bitta if operatoridan ko`ra dasturni yaxshiroq boshqarish imkonini beradi. Bu ifoda to`g`ri bo`lgan holat uchun emas, balki qarama-qarshi holat uchun ham harakatlarni aniqlashga imkon beradi (ifoda qiymati noto`g`ri bo`lsa ham).

Arduinoga fotorezistorni ulashda if else operatoriga misol:

#define SENSOR A0

unsigned int qiymat = 0;

void setup () {

pinMode (LED, OUTPUT);

pinMode (SENSOR, INPUT);

}

void loop () {

//A0 analog kirishidagi fotorezistordan qiymatni o`qing

qiymat = analogRead (SENSOR);

//Agar A0 kirishidagi qiymat 500 dan kam bo`lsa, svetodiodni yoqing

if (qiymat <500) {digitalWrite (LED, HIGH);}

//Aks holda (agar qiymat> 500), svetodiodni o`chiring

if (qiymat> 500) {digitalWrite (LED, LOW);}

}

Arduinoda taqqoslash operatorlari:

x == y (x y ga teng)

x!= y (x y ga teng emas)

x <y (x y dan kichik)

x> y (x y dan katta)

x <= y (x y dan kichik yoki teng)

x> = y (x y dan katta yoki teng)

Tenglik belgisi `=` va `==` taqqoslash operatorini chalkashtirmang. If operatorida tenglik belgisidan foydalanish dastur (dastur) bajarilganda boshqacha natija berishi mumkin. Masalan, if (y = 100) if (y==100) bilan bir xil emas. Tenglik belgisi – o`zgaruvchining qiymatini 100 ga tekshirish o`rniga, o`zgaruvchining qiymatini 100 ga o`zgartiruvchi tayinlash operatori.

Bir nechta mantiqiy qiymatlarni bog`lash uchun mantiqiy operatorlar qo`llaniladi:

!(not) – EMAS, inkor

&& (and) – VA

|| (or) – YOKI

if (raqam> 500 && qiymat> 500)

{digitalWrite (7, HIGH); digitalWrite (8, LOW);

}

else {digitalWrite (7, LOW); digitalWrite (8, HIGH);}

Shartlar tartibi

Kodni optimallashtirish va dastur tezroq yozishga harakat qilishda shartlarning tartibi muhim rol o`ynaydi. Mantiqiy iboralar/qiymatlar chapdan o`ngga qarab tekshiriladi va agar birinchi tekshirishda ifoda noto`g`ri bo`lsa, shartlarni keyingi tekshirish to`xtatiladi. Misol uchun, agar raqam> 500 sharti noto`g`ri bo`lsa, keyingi ifoda qiymat> 500 tekshirilmaydi va amal bajarilmaydi.

4.2.5.Arduinoda for va while sikllari

Ushbu bo`limda Arduino IDE da for, while va do while sikllarining qanday ishlashini, dasturlarda to`g`ri foydalanishni va qanday xatolardan qochish kerakligini ko`rib chiqamiz. Oddiy misollar yordamida siklni qanday to`xtatishingiz yoki bir sikldan ikkinchisiga o`tishingiz mumkinligini ko`rsatamiz. Yozish sikllarining to`g`riligini tushunish uchun, avvalo, robototexnikadagi algoritmlarning turlari va xossalarini o`rganish kerak.

Arduinoda C++dasturlash tilidagi har qanday sikl ko`p yoki chek takrorlanadigan harakatdir. Arduino mikrokontrolleri uchun biron bir dastur looplar ishlay olmaydi, masalan, void loop cheksiklda chaqiriladi. Uch xil sikl operatorlari mavjud: for, while va do while – har bir operatorga to`xtalib o`tamiz, ularning qanday ishlashini misollar bilan ko`rib chiqamiz.

for va while ishlash prinspini quyidagi oddiy misollar bilan tushuntirish mumkin. for sikli chekli marta bajariladi (operator holatida ko`rsatilgan), u dastur, masalan, svetodiodni bir necha marta miltillashini talab qilganda ishlatiladi. while sikli chek muddatda bajarilishi mumkin, masalan, sensordan olingan ma`lumotlar o`zgarmaguncha Arduinodagi svetodiod yonib-o`chib turadi.

Arduinoda for operatori quyidagicha yoziladi:

for (boshlash; shart; o`zgartirish) {

// takrorlanadigan buyruqlar

}

For tsikli jingalak qavslar ichiga olingan ma`lum buyruqlarni takrorlash uchun ishlatiladi. Ushbu sikl har qanday takroriy harakatlarni bajarish uchun javob beradi.

Initializatsiya o`zgaruvchini yaratadi va boshlang`ich qiymatni belgilaydi. Shartda sikl bajariladigan o`zgaruvchining qiymati mavjud.

O`zgartirish siklning har bir bosqichi bilan o`zgaruvchining qanday o`zgarishini belgilaydi.

for (byte i=0; i <=5; i++) {digitalWrite (13, HIGH);

delay (500);

digitalWrite (13, LOW);

delay (500);}

Dastur misolida i=0 boshlang`ich qiymati bilan o`zgaruvchi o`rnatilgan, shart o`zgaruvchi besh i <=5 ga teng yoki undan katta bo`lgunga qadar sikl bajarilishini bildiradi. O`zgartirish siklning har bir bosqichidagi o`zgaruvchining bittaga oshirilishini bildiradi. Nihoyat, o`zgaruvchi beshga teng bo`lganda for tsikli chiqadi, shuning uchun svetodiod sikl tugashidan oldin besh marta miltillaydi.

O`zgaruvchan qadam (o`zgartirish) har qanday bo`lishi mumkin. Agar o`zgaruvchini birdaniga ikki birlikka oshirish zarur bo`lsa, u holda hisoblagich o`zgarishi quyidagicha yozilishi kerak: i=i+2. for tsikli void setup protsedurasi ichida ishlatilishi mumkin, masalan, bir vaqtning o`zida bir nechta pinlar uchun ish rejimini belgilash uchun. Shuningdek, void loop protsedurasida, masalan, Arduinoda svetodiodlarni ketma-ket yoqish dasturida qo’llaniladi.

Arduinoda while sikli quyidagicha aniqlanadi:

while (shart) {

// takrorlanadigan buyruqlar

}

Qavs ichidagi shart rost ekan, while sikli uzluksiz va cheksiz ishlaydi. Sikldan chiqishga while holatidagi o`zgaruvchi o`zgarganda erishiladi, shuning uchun biror narsa uning qiymatini o`zgartirishi kerak. O`zgaruvchini o`zgartirish dastur kodida sikl ichidagi yoki har qanday sensordan, masalan, HC-SR04 ultratovush diapazoni o`lchagichidan qiymatlarni o`qishda sodir bo`lishi mumkin.

byte i=0; //tsikldan oldin o`zgaruvchi yaratishingiz kerak

while (i <5) {//tsikli while i 5 dan kichik

digitalWrite (13,HIGH);

delay (500);

digitalWrite (13, LOW);

delay (500);

i++; // o`zgaruvchini o`zgartirish}

while funktsiyasidan foydalanilganda, o`zgaruvchi tsikl boshlanishidan oldin yaratilishi kerak. Misol uchun dasturida, svetodiod sikl tugashidan oldin besh marta miltillaydi. Agar jingalak qavslar ichidagi i++ o`zgaruvchini o`zgartirmasangiz, sikl chek takrorlanadi. Arduino UNOning while siklidan chiqishning ikkinchi usuli – sensordan ma`lumotlarni o`qish va o`zgaruvchini o`zgartirish uchun if iborasidan foydalanishdir.

Arduino IDE-da ishlatilishi mumkin bo`lgan yana bir sikl bu do… while siklidir. Bu konstruksiyadan foydalanilganda sikldagi buyruqlar shartdan qat`iy nazar kamida bir marta bajariladi, chunki shart sikl bajarilgandan keyin tekshiriladi. Quyidagi kod misolida, svetodiod sensor o`qilishidan qat`iy nazar yonadi va shundan keyingina keyingi holat tekshiruvi amalga oshiriladi.

int suv; //tsikldan oldin o`zgaruvchi yarating

do {digitalWrite (13, HIGH);

suv = analogRead (AO);

}

while (suv <5) //sensorni tekshiring

digitalWrite (13, LOW);

Agar ko`rsatilgan shartlardan qat`i nazar, sikldan chiqish kerak bo`lsa, break yoki goto iborasi qo`llaniladi. break operatori sikldan chiqish imkonini beradi va dastur quyidagi buyruqlarni bajarishda davom etadi. goto iborasi nafaqat sikldan chiqishga, balki dasturni kerakli joydan belgilangan tartibda bajarilishini davom ettirishga imkon beradi.

4.2.6.Arduinoda tanlash operatorlari – switch va case

Switch operatori if operatori kabi, turli sharoitlarda bajarilishi kerak bo`lgan muqobil kodni berib, dasturni boshqaradi. Agar ikkitadan ortiq shartlardan birini tanlashingiz kerak bo`lsa, if… else if yoki switch… case bayonotidan bir necha marta foydalanish mumkin. Keling, bir nechta diskret shartlar orasidan tanlashda switch iborasidan foydalanish misollarini ko`rib chiqaylik.

Arduinoda switch case tanlash operatori o`zgaruvchining qiymatiga qarab dasturning harakatlarini tarmoqlanadigan dasturda qulay konstruktsiyani yaratishga imkon beradi. Ushbu konstruktsiyada standart operatorning mavjudligi ixtiyoriy, uzilish operatorining mavjudligi esa majburiydir. If… else shartli operatorlar va switch… case tanlash operatorlari yordamida dasturning butun mantig`i quriladi.

Switch operatori o`zgaruvchining qiymatini case iboralaridagi qiymat bilan taqqoslaydi. Qiymati o`zgaruvchining qiymatiga teng bo`lgan case operatori topilsa, bu operatordagi dastur kodi bajariladi. Dasturga misol:

int malumot = 2;

swich (malumot) {

case 1: Serial.println («1»); break;

case 2: Serial.println («2»); break;

case 3: Serial.println («3»); break;

}

Arduino IDE-dagi break, agar switch operatoridagi oldingi shart to`g`ri bo`lmasa, keyingi holatga o`tish uchun ishlatiladi. default esa agar barcha almashtirish shartlari to`g`ri bo`lmasa, kodni bajarish uchun ishlatiladi:

int malumot = 5;

swich (malumot) {

case 1:Serial.println («1»); break

case 2:Serial.println («2»); break

case 3:Serial.println («3»); break

default:Serial.println (»_»); break

}

Xulosa. Barcha dasturlash tillarida bir xil kodning bir necha marta bajarilishini ta`minlovchi boshqaruv buyruqlari to`plami (while sikli), tegishli kodni tanlash (if shartlarida) va joriy kod qismidan chiqish bo`yicha ko`rsatmalar mavjud. Arduino IDE dasturlash tilida C/C++ tilidan kerakli boshqaruv indikatorlarining ko`pini olgan, shuning uchun ularning sintaksisi deyarli bir xil.

4.3. Sintaksis

4.3.1.; (nuqta vergul); (semicolon)

;(nuqta vergul) operatorning tugaganini bildiradi.

int a = 13;

4.3.2. {} (figurali qavs) {} (curly braces)

Figurali qavs {} – - C dasturinig asosiu elemenlaridan biri

Qavsni ochilgandan song (albatta qavs berkilishi zarur)

Figurali qavsni qollanilishining asosiy usullari:

Funksiya:

• void funksiya nomi (argumentning turlari)

{operatorlar};

sikllar: • while (mantiqiy ifoda) {operatorlar};

• do {operatorlar} while (mantiqiy ifoda);

• for (inisializasiya; siklning shartli tugallanishi);

{operatorlar};

_ shartl operatorlar :

• if (mantiqiy ifoda) {operatorlar}.

4.4.Funksiyalar

4.4.1.Raqamli kirish/chiqish. Arduinoda pinMode funktsiyasi

Arduino IDE-ning pinMode () funktsiyasi berilgan pinning rejimini kirish yoki chiqish sifatida o`rnatadi.

4.1-rasm. Raqamli pin

Arduino raqamli pin ikki holatda bo`lishi mumkin. Kirish rejimida pin 0 dan 5 voltgacha bo`lgan kuchlanishni o`qiydi va chiqish rejimida pinda bir xil kuchlanishni chiqaradi.

digitalWrite () buyrug`i yordamida raqamli chiqish signal hosil qilish

Mikrokontrollerning pin rejimi pinMode (pin, mode) funksiyasi yordamida tanlanadi, bu erda pin- pin raqami va mode rejim yoki usul degan ma`noni anglatadi.

Arduinoda pinMode OUTPUT (chiqish sifatida tuzilgan pinlar)

OUTPUT (porti chiqish sifatida ishlaydi) – pin maksimal 40 mA tok bilan boshqariladigan quvvat manbaiga aylanadi. digitalWrite () buyrug`iga qarab, pin bir yoki nol qiymatini oladi. Misol:

pinMode (10,OUTPUT);

4.4.2.digitalWrite () va analogWrite () funksiyalari

Raqamli pin digitalWrite () buyrug`i yordamida raqamli chiqish signal hosil qilishi mumkin. Raqamli signal ikkita qiymatga ega bo`ladi; – 0 yoki 1 (0 volt yoki 5 volt).

void setup () {

pinMode (11, OUTPUT);

digitalWrite (11, HIGH); delay (500);

digitalWrite (11, LOW); delay (500);}

40 mA dan ortiq quvvat sarflaydigan qurilmalarni Arduino pinlariga ulash mumkin emas, chunki mikrokontrollerning asosiy maqsadi mantiqiy signallar yordamida boshqa qurilmalarni boshqarishdir. Agar qurilmani belgilangan qiymatdan ko`proq iste`mol qiladigan pinga ulasangiz, u holda pinga zarar etishi mumkin. Bu holda relelardan foudalaniladi.

4.5.VAQT BILAN ISHLASH

4.5.1.Arduino kechikishi: delay ()

Arduinoda delay () funksiyasi muhim rol o`ynaydi va bu buyruq aksariyat dasturni yozish deyarli mumkin emas. Arduino dasturlashda vaqtni kechiktirishning delay () buyrug`ining maqsadi va ishlatilishini quyida ko`rib chiqamiz. Hozir biz faqat delay kechiktirish funksiyasining asosiy xususiyatlarini ko`rib chiqamiz va kichik dasturlar shaklida foydalanish misolini keltiramiz. Ishlash uchun sizga faqat Arduino platasining o`zi kerak bo`ladi.

Arduinoda delay ()

delay buyrug`i belgilangan millisekundlar (1 soniyada 1000 millisekund) uchun dasturning bajarilishini to`xtatadi. delay () funksiyasidan foydalangan holda dasturning kechikishi paytida plataga ulangan sensorlarni o`qib bo`lmaydi yoki boshqa operatsiyalarni bajarish mumkin emas.

Dastur:

// Svetodiodni miltillashi uchun delay () dan foydalanish misoli

void setup () {

pinMode (13, OUTPUT);

}

void loop () {

digitalWrite (13, HIGH);//chiqishga YUQORI signal yuboring

delay (100); // 100 millisekundga kechikish vaqti

digitalWrite (13, LOW);//chiqishga PAST signalni yuboring

delay (100);} //100 millisekundga kechikish vaqti

4.6.MATEMATIK FUNKSIYALAR

4.6.1.Arduinoda map () funksiyasi

Arduinodagi map funksiyasi qiymatni joriy diapazondan parametrlar bilan ko`rsatilgan qiymatlarning yangi diapazoniga o`tkazadi – map qiymat, fromLow (pastdan), fromHigh (yuqoridan), toLow (pastga), toHigh (yuqoriga). map () buyrug`i faqat butun sonlarda ishlaydi. Raqamning kasr qismi proportsional uzatishda matematika qoidalariga ko`ra yaxlitlanmaydi, balki shunchaki o`chiriladi. Arduino IDE-da map funksiyasidan misollar bilan foydalanishni ko`rib chiqamiz.

Arduino IDE-da map funktsiyasi

map (qiymat, fromLow, fromHigh, toLow, toHigh)

*qiymat: belgilangan qiymat

*fromLow: joriy diapazonning pastki chegarasi

*fromHigh: joriy diapazonning yuqori chegarasi

*toLow: yangi diapazonning pastki chegarasi

*toHigh: yangi diapazonning yuqori chegarasi

Arduinoda map funksiyasiga misol:

void setup () {

pinMode (A1, INPUT); // analog sensorni ulang

pinMode (10, OUTPUT); //LEDni ulang

}

void loop () {

// «qiymat» o`zgaruvchisi 0 dan 1023 gacha

int qiymat = analogRead (A1);

//analog qiymatni 8 bitli raqamga o`zgartiring (0 dan 255 gacha)

qiymat = map (qiymat, 0, 1023, 0, 255);

//yangi «qiymat» qiymati bilan svetodiodni yoqing

analogWrite (10, qiymat);

}

map funktsiyasi diapazonni o`zgartirishi mumkinligini unutmang, ya`ni «pastki chegara» «yuqori chegara» dan kattaroq bo`lishi ham mumkin. Misol:

qiymat = map (qiymat, 0, 1023, 255, 0);

Eslatib o`tamiz, map () funksiyasi yordamida o`zgartirilganda raqamning kasr qismi yaxlitlanmaydi, balki o`chiriladi (hisobga olinmaydi). Arduino dasturlash tilida float ma`lumotlar turi bilan ishlashda bu faktni hisobga olish kerak.

4.7.TASODIFIY KATTALIKLAR GENERATORI

4.7.1.Arduinoda random va random Seed funksiyasi

Arduino rondom funksiyasi psevdo-tasodifiy raqamni qaytaradi, ya`ni tasodifiy sonlarni yaratish ketma-ketligi hali ham oldindan aytib bo`ladi. Random Seed funksiyasi ko`proq tasodifiy qiymatlarni yaratish uchun tasodifiy funksiyaga o`zgaruvchi yoki doimiyni qo`yish imkonini beradi. Arduino IDE dasturlash tilida ma’lum bir diapazondagi tasodifiy sonni qanday qilib to`g`ri belgilashni aniqlaymiz.

random – Arduinoda tasodifiy sonlar yaratish

Random (min, max) funksiyasi min va maksimal qiymatlar bilan belgilangan diapazonda psevdo-tasodifiy raqamni qaytarish imkonini beradi. Keling, turli xil ma`lumotlar turlariga ega misollarni ko`rib chiqaylik.

Taqdim etilgan misolda 0 dan 250 gacha bo`lgan oraliqda butun sonlarni saqlaydigan byte ma`lumotlar turi tanlanadi. Boshqa ma`lumotlar turlaridan foydalanish mumkin: int, long, unsigned long, unsigned int va boshqalar. Shunga ko`ra, kerakli diapazon (min, max) o`rnatiladi.

byte malumotlar;

void setup () {

Serial.begin (9600);

}

void loop () {

malumotlar = random (100, 200); //diapazondagi arduino tasodifiy soni Serial.println (malumotlar);

delay (250);

}

4.7.2.Arduinoda random float

Mikrokontroller faqat butun sonlarni yaratishi mumkin. Shuning uchun, ikkita kasrli float ma`lumotlar turini olish uchun alohida butun son hosil qilishingiz va unga o`nli kasrlar qo`shishingiz kerak. Bunday dasturga misol:

float malumotlar;

float malumotlar1;

float malumotlar2;

void setup () {

Serial.begin (9600);

}

void loop () {

malumotlar1=random (10); //butun sonlarni yarating malumotlar1=random (100); //kasrdan keyin raqamlar hosil qilish

malumotlar=malumotlar1 + malumotlar2/100;// qiymatlarni qo`shing

Serial.println (malumotlar);

delay (250);

}

4.7.3.Arduinoda random bool

Agar sizga tasodifiy boolen o`zgaruvchi kerak bo`lsa, u faqat ikkita rost (true) yoki yolg`on (false) qiymatni qabul qilishi mumkin. Keyin berilgan ehtimollik bilan tasodifiy rost/yolg`on hosil qilishingiz mumkin. Shunchaki tasodifiy funksiya natijasini bool o`zgaruvchisiga belgilaymiz, bunda yolg`on bo`lish ehtimolining o`zaro nisbatini ko`rsatamiz. Misol:

bool malumotlar;

void setup () {

Serial.begin (9600);

}

void loop () {

//o`zgaruvchan ma`lumotlar 1/5 ehtimollik bilan 0 qiymatini oladi

malumotlar = random (5);

Serial.println (malumotlar);

delay (250);

}

4.7.4.Arduinoda random Seed tasodifiy raqamlari

E`tibor bering, yuqoridagi barcha misollarda, dastur har safar qayta ishga tushirilganda, raqamlarning tasodifiy ketma-ketligi takrorlanadi. Buni Arduinoning random Seed funksiyasidan foydalanib oldini olish mumkin. random Seed tasodifiy funksiyaga o`zgaruvchini qo`yish imkonini beradi. Buni amalga oshirish uchun raqamlarni yaratishni tasodifiy qilish uchun millis, analogRead yoki boshqa variantlardan foydalaning.

int malumotlar;

void setup () {

Serial.begin (9600);

randomSeed (analogRead (A1)); //A1 piniga hech narsa ulanmagan

}

void loop () {

malumotlar = random (100, 200); //diapazondagi Arduino tasodifiy soni

Serial.println (malumotlar);

delay (250);

}

Dastur har safar qayta ishga tushirilganda, psevdo-tasodifiy raqamlar generatori random Seed (analogRead (A1)) funksiyasi bilan ishga tushiriladi (portdagi «shovqin» tufayli tasodifiy qiymat bilan). Buning uchun har qanday bo`sh portdan foydalanishingiz mumkin, chunki barcha analog chiqishlar atrof-muhitdan tasodifiy shovqinlar-radio to`lqinlari, kompyuterlar, uyali telefonlar va boshqalarning elektromagnit shovqinlarini oladi.

5-bob. ARDUINO PLATFORMASIDA AMALIY MASHG’ULOTLAR

5.1.Serial funksiyasi va Monitor port haqida tushuncha

Monitor port – bu Arduino mikrokontrollerini kompyuter yoki boshqa qurilmalar bilan ma`lumot almashishiga xizmat qiladigan funksiya (bajarilish, sodir bo`lish) bo`lib, u yordamida yozgan dasturlar qanday tartibda bajarilayotgani haqida ma`lumotlar chiqaradi.

Arduinodan kelgan ma`lumotlar Arduino sketchining (Arduinoda yozilgan dasturning nomi) Monitor portiga chiqadi. Monitor port-bu Arduino va kompyuter o`rtasida aloqa almashish oynasi bo`lib Arduinodan kelgan ma`lumotlar shu yerda chiqadi va shu yerdan Arduinoga ma`lumotlar jo`natiladi.

Yordamchi dastur uch qismga bo`lingan oynadan iborat. Yuqori qismida ma`lumotlarni kompyuterdan ketma-ket portga yuborishingiz mumkin bo`lgan kirish maydoni mavjud. Markaz ketma-ket portdan olingan ma`lumotlarni ko`rsatadi. Oynaning pastki qismida (yangi versiyalarda yuqori qismida) sozlamalar menyusi joylashgan. Arduino monitor porti bitta ketma-ket port bilan ishlashi mumkin, shuning uchun dastur yuklashda va Monitor portni ochishda xatolikka yo`l qo`ymaslik uchun aniqlangan COM portini tanlashingiz kerak.

5.1.rasm. COM portni tanlash

Yordamchi dasturni ochish uchun Arduino IDE-ning yuqori o`ng burchagidagi belgini bosishingiz kerak, Ctrl + Shift + M tugmalar birikmasidan foydalaning yoki menyu panelidan tanlang: Tools (Инструменты) -> Serial Monitor (Monitor porta). Arduino uchun Monitor port tezligi 9600 bit/s ga o`rnatiladi, shuning uchun ko`plab dasturlarda bu tezlikdan foydalanadi. Agar dasturda va port monitor sozlamalarida ma`lumotlarni uzatish tezligi boshqacha bo`lsa, unda barcha ma`lumotlar ierogliflar (so`zlar ma`nosini raqamlar va belgilar bilan ifodalaydigan yozuv turi) ko`rinishida ko`rsatiladi.

5.2. Monitor portga matnni qabul qilish va yuborish

Yordamchi dastur bilan ishlash uchun quyidagi buyruqlardan foydalaning: Serial.begin (); – buyruq ketma-ket portni ishga tushiradi

Serial. end (); – ketma-ket portni to`xtatadi va tozalaydi

Serial.print (); – ma`lumotlarni ketma-ket portga yuboradi

Serial.println (); – ushbu buyruqdan keying ma`lumot keyingi satrdan boshlanadi

Serial.read (); – ketma-ket portdan ma`lumotlarni qabul qiladi

Serial.parseInt (); – port monitoridan katta raqamlarni o`qish

5.3. Serial.begin () – buyruq

Arduino IDEda Monitor portni quyidagicha ochiladi:

5.2.rasm. Monitor portni ochish

5.3.rasm. Monitor portni chiqish oynasi

Ma`lumotlarni Monitor portga chiqarish uchun birinchi Arduino bilan kompyuter o`rtasida aloqa o`rnatish kerak. Buning uchun void setup () ning ichiga Serial.begin () buyrug`ini yozishimiz kerak.

Serial.begin () —bu Arduino bilan biror qurilma o`rtasida aloqa o`rnatish uchun xizmat qiladigan buyruq.

5.4-rasm. Serial.begin () Arduino bilan qurilma o`rtasida aloqa o`rnatish uchun xizmat qiladigan buyruq.

Serial.begin () ichida yozilgan «9600» ma`lumot almashish tezligi bo`lib, u 1sekundda 9600 bit ma`lumot almashishini bildiradi. Bundan tashqari malumot almashish tezliklarining boshqa qiymatlari 300, 1200, 2400, 4800, 9600, 19200, 115200 va hokazo mavjud (5.5-rasm).

Arduino va kompyuter uchun eng ko`p ishlatiladigan malumot almashish tezlik 9600 hisoblanadi. Qolaversa ko`plab qurilmalar ham 9600 tezilik bilan ma`lumot almashadi.

Monitor portga malumot chiqarilganda Serial.begin () da berilgan tezlik bilan monitor portning tezligi bir xil bo`lish kerak aks xolda malumotlar to`liq yetib kelmasligi yoki umuman kelmasligi mumkin.

5.5.rasm.Serial.begin () da 1sekund ichida 9600 bit ma`lumot almashish

5.6.rasm.Serial.begin () da 1sekund 300, 1200, 2400, 4800, 9600, 19200, 115200 va hokazo bit ma`lumot almashish

Ma`lumotlarni monitor potrga chiqarish uchun esa Serial.print () buyrug`i ishlatialadi.

Serial.print (); -bu ma`lumotlarni monitor portga chiqarish buyrug`i bo`lib, ma`lumotlarni gorizontal ravishda chiqaradi (5.7-rasm).

Monitor portga ma`lumotlarni vertikal holatda chiqarish uchun Serial.println (); buyrug`idan foydalanish kerak (5.8-rasm). So`zlarni serial portga chiqarish sonlarni ekranga chiqarishdan boshqacha bo`lib, chiqarilmoqchi bo`lgan so`z ikkita qo`shtirnoq ichida yoziladi. Misol uchun Assalomu alaykum so`zini chiqarish uchun Serial.println («Assalomu alaykum»); ko`rinishida yoziladi.

5.8.rasm.Monitor portga ma`lumotlarni vertikal ravishda chiqarish buyrug`iga misoli

5.9.rasm. Monitor portga so`zlarni ekranga chiqarish

6-bob.ARDUINO VA SVETODIODLAR

6.1.Svetodiodni Arduinoga ulash sxemasi va dasturi

Ushbu bo`limda svetodiodni rezistor orqali Arduino UNO-ga qanday ulashni ko`rib chiqamiz. Svetodiodni miltillashi – bu mikrokontroller bilan ishlashni boshlash uchun eng oddiy dastur. Quyida svetodiod va rezistorli sxemani yig`ish, Arduino UNO-da svetodiodni miltillashi uchun dastur, uni Arduino UNO platasiga yuklash qoidalari va izohlar bo`yicha batafsil ko`rsatma keltirilgan.

Svetodiodlar – ko`rsatkich va yoritish uchun xizmat qiluvchi yarim o`tkazgichli indikatorlardir. Ular anod (+) va katod (-) ga ega va doimiy tok oqimning yo`nalishini sezadi (6.1-rasm). Agar svetodiodni noto`g`ri ulasangiz, u holda to`g`ridan to`g`ri tok o`tmaydi va u yonmaydi. Svetodiod noto`g`ri ulangan bo`lsa, ishlamay qolishi mumkin. Anod (svetodiodning uzun oyog`i) manbaning plyusga ulangan. Katod (svetodiodning kalta oyog`i) manbaning minusga ulanadi.

6.1- rasm. Svetodiod: a-anod, k-katod

Boshlashda svetodiodni Arduino mikrokontrollerining raqamli chiqishiga ulash orqali amaliyot taxtasida oddiy sxemani yig`amiz (Arduino platasi yonidagu uyachalar kirish va chiqishlar Pin deb ham ataladi). Dastur (Arduino uchun dastur deb ataladigan) yuklab olish orqali Arduino UNO platasidan qanday foydalanish va u bilan ishlashni o’rganamiz.

Qurilmalarni ishonchli yig`ish uchun bosilgan (pechat) elektron platalar yaratish ko`p vaqt talab etadi. Elektr zanjirlarini tez yig`ish uchun amaliyot taxtasi (6.2-rasm) ishlatiladi. Amaliyot taxtasidagi plastmassa qatlami ostida oddiy printsipga muvofiq yotqizilgan mis plitalar – relslar (yo`llar) mavjud.

6.2.Amaliyot taxtasida sxemalarni tez yig`ish

Конец ознакомительного фрагмента.

Текст предоставлен ООО «Литрес».

Прочитайте эту книгу целиком, купив полную легальную версию на Литрес.

Безопасно оплатить книгу можно банковской картой Visa, MasterCard, Maestro, со счета мобильного телефона, с платежного терминала, в салоне МТС или Связной, через PayPal, WebMoney, Яндекс.Деньги, QIWI Кошелек, бонусными картами или другим удобным Вам способом.