20.04.2026

Blink sketchi [14+]

Ilgari ma’lum qilinganidek, Arduino IDE dasturi tarkibida namuna sifatida to’plangan tayyor sketchlar oldindan mavjud. Shunday sketchlardan biri – arduinochilar orasida eng ko’p qo’llaniladigan ‘Blink’ (“miltirash” ma’nosini bildiradi) sketchi hisoblanadi. Uning vazifasi Arduino platasida joylashgan ichki svertodiodni ma’lum chastotada o’chirib-yoqish hisoblanadi.

“Blink” sketchi

Kerakli materiallar:
1) USB-kabel
2) Arduino UNO platasi

Ko’rinib turibdiki, svetodiodni miltillatish loyihasi uchun bizga Arduino UNO platasi va uni kompyuter USB portiga bog’lovchi maxsus USB-kabelning o’zi yetarli bo’ladi. Ushbu sketchning oldingi darsdagi eng oddiy sketch bilan o’xshash va farqli tomonlari bor. O’xshashligi shundaki, “Blink” sketchida ham platadagi ichki svetodiod boshqariladi. Farqi esa, svetodiod bir sketchning o’zida ham yoqiladi va ma’lum vaqtdan keyin avtomatik ravishda o’chiriladi. Shundan so’ng to’xtovsiz takrorlanaveradi. Yana bir o’zgarish – pinMode() va digitalWrite() funksiyalari argumenti sifatida ilgari ko’rsatilgan 13-pin tartib raqami o’rniga “LED_BUILTIN” yozuvi qo’llanilgan (“ICHKI SVETODIOD” ma’nosida).

Quiyida “Blink” sekichining matnini keltiramiz (Qisqartirish uchun sketch boshidagi va ichidagi ingliz tilidagi izohlarni chiqarib tashlaymiz. Ma’lumot uchun: izohlarda sketchning vazifasi, plata ichki svetodiodi ulangan pin raqami, uning yaratilgan vaqti hamda muallifi haqidagi va boshqa ma’lumotlar keltirilgan).

'Blink' sketchi

void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
digitalWrite(LED_BUILTIN, HIGH);
delay(1000);
digitalWrite(LED_BUILTIN, LOW);
delay(1000);
}

Sketch faqat 2 ta funksiyadan tashkil topgan – “setup()” va “loop()” funksiyalari.

Sketchdagi barcha notanish tushunchalar (buyruq va finksiyalar) bilan batafsil tanishib chiqamiz (Arduini IDE barcha buyruqlari ro’yxati bilan ushbu havola orqali qisqacha tanishish mumkin).

LED_BUILTIN – ichki svetodiod ulangan raqamli pinning shartli nomi. Uning o’rniga raqamli pinning platada keltirilgan tartib raqamini ko’rsatish mumkin. Turli platalarda ichki svetodiod bog’langan pin raqami bir-biridan farq qilishi mumkin. Masalan, Arduino oilasining aksariyat platalarida 13-pin, ESP8266 oilasining Wemos D1 mini platasida D4 piniga ulangan va hokazo. Aniq bir plataning ichki svetodiodi bog’langan pini raqamini aniqlash uchun, uning qo’llanmasidan foydalanish mumkin.

Arduino IDE dasturiga o’rnatilgan barcha platalar ma’lumotlari oldindan ma’lum bo’lganligi uchun, pin raqami o’rniga LED_BUILTIN yozuvi ko’rsatilgan hollarda dastur kerakli raqamli pinni o’zi aniqlab oladi.

digitalWrite(LED_BUILTIN, HIGH);

Bu yerdagi “digitalWrite()” funksiyasi yordamida ichki svetodiod (LED_BUILTIN) pini holati HIGH holatiga o’tkazilmoqda. Natijada, tegishli pinda kuchlanish paydo bo’lib, svetodiodni yoqadi (Wemos D1 mini platasida svetodiodni o’chiradi). Ma’lumki, raqamli pinlar odatda HIGH (“yuqori signal”, +5V yoki 3,3V) yoki LOW (“quyi signal”, 0V) holatlaridan birida bo’lishi mumkin.

delay(1000);

Bu yerdagi, “delay()” funksiyasi “pauza” ma’nosini bildiradi. Uning argumenti esa, pauzaning davomiyligini bildiradi va millisekundlarda ko’rsatiladi. 1000 millisekund 1 sekundga teng ekanligini hisobga olsak, yuqoridagi kod natijasida svetodiod yoqilganidan keyin uning ushbu holati 1 sekund saqlanib turadi.

digitalWrite(LED_BUILTIN, LOW);

Ushbu kod svetodiodni o’chirish kerakligini bildiradi.

Yana bir bor “delay(1000);” kodi qo’llanilishi, svetodiod o’chgandan keyin ham 1 sekund pauza o’rnatilishi kerakligini anglatadi.

“loop()” funksiyasi to’xtovsiz takrorlanishini hisobga olinsa, yuqoridagi dastur ishga tushirilganidan keyin, ya’ni u plataga yuklanganidan keyin undagi ichki svetodiod har sekundda 1 martadan to’xtovsiz yonib-o’chaveradi.

Sketchni mikrokontrollerga (plataga) yuklaymiz va svetodiodning holatini kuzatamiz.

Sketch mikrokontrollerga yuklanishi bilan, platadagi ichki svetodiod 1 gerts (ya’ni, sekundiga 1 marta) chastota bilan o’chib-yonayotganligini kuzatish mumkin.

Biz esa, “Blink” sketchi bilan tanishishni davom ettiramiz.

Har qanday boshlovchi arduinochiga dastlab aynan shu sketchni bilan yaqinroq tanishish tavsiya etiladi. Chunki, birinchidan u eng sodda sketchlardan biri, ikkinchidan, unda arduinochilarning aksariyat loyihalarida ko’p foydalaniladigan muhim funksiyalar qo’llanilgan, uchinchidan, plataga oddiy rele (yoki rele moduli)ni bog’lash orqali to’g’ridan-to’g’ri biron tashqi yuklamani boshqarish, ya’ni uni ulab-uzish (yoqib-o’chirish) mumkin.

Boshlovchilarda bu ma’lumotlarni svetodiodni yoqib-o’chirishiga nima aloqasi bor, degan savol tug’ilishi mumkin. To’g’ridan-to’g’ri aloqasi bor.

Birinchidan, yuqorida aytilganidek, platadagi svetodiod raqamli pinlaridan biriga parallel bog’langan. Bu esa, pinga yuborilgan signal parallel ravishda svetodiodga ham borishini anglatadi. Demak, agar aynan shu pinga rele va u orqali esa, tashqi yuklama (lampa, rozetka va boshqalar) ulansa, dastur ularning har ikkalasini parallel ravishda boshqara boshlaydi. Lekin qulaylik uchun, sketchni o’rganish, otkladka qilish va tahrirlash jarayonida plataga rele orqali asosiy yuklamani ulash tavsiya etilmaydi. Aksincha, bog’lanadigan tashqi yuklamani ishdan chiqarib qo’yish ehtimoli ortadi. Bundan tashqari, plataga rele orqali ulangan tashqi yuklama ko’picha 220 voltlik yuqori o’zgaruvchan kuchlanish ostida bo’ladi va maket plata yordamida sxema bilan islashdagi ozgina ehtiyotsizlik ham ko’plab elektron komponentlar (jumladan, asosiy mikrokontroller ham) ishdan chiqishiga olib kelishi, eng asosiysi, inson salomatligiga jiddiy ziyon yetkazib qo’yishi mumkin. Shuning uchun, yuklama vazifasini, vaqtincha aynan svetodiod bajarib turadi. Ya’ni, svetodiod yonib-o’chishi, tashqi yuklama uzib-ulanishini immitatsiya qiladi. Barcha tajribalar, tahrirlash ishlari tugaganidan keyin esa, oxirgi sinovlar uchun tashqi yuklamani plataga (rele orqali) qayta ulash mumkin.

Ikkinchidan, ushbu sketchni takomillashtirib borish orqali juda ko’plab murakkab va qiziqarli proyektlarni ham yaratish mumkin. Chunki sketchda Arduinoning qurilmani boshqarishga taalluqli bo’lgan dastlabki eng muhim “digitalWrite()” funksiyasi qo’llanilgan. Ushbu funksiya Arduino IDE yordamida foydalanuvchilar tomonidan yaratiladigan sketchlarining aksariyatida ishlatiladi.
Masalan, “Blink” sketching asosida “taymer” loyihasini, uning asosida esa, uzoqroq vaqtdan keyin yuklamani ulaydigan yoki uzadigan “vaqt relesi” qurilmasi loyihasini, sxemaga svetodiodlar qo’shish orqali esa, “svetofor” loyihasini yaratish mumkin va hokazo.
“Taymer”, “vaqt relesi” yoki “svetofor” loyihalarini kundalik hayotda ishlatiladigan, tugallangan qurilmaga aylantirish uchun esa, sxemaga kerakli tashqi qurilmalarni (taymer uchun displey yoki dinamik, vaqt relesi uchun elektromagnit rele, svetofor uchun esa, elektromagnit rele va kerakli led lampalarni), sketchga esa, ularni boshqaruvchi qo’shimcha kod hamda bibliotekalarni qo’shish qiyin bo’lmaydi (Kelgusida biz “Blink” sketchini asta-sekin takomillashtirish orqali, yuqorida sanab o’tilgan “taymer”, “vaqt relesi” va “svetofor” loyihalarining prototipini yaratamiz).

Tashqi svetodiod va releni boshqarish

Ma’lumki, yuqoridagi variantda qulaylik uchun biz yuklama indikatori sifatida Arduino platasining ichki svetodiodidan foydalandik. Keling, sketchni ozgina takomillashtiramiz. Buning uchun, ichki svetodiod o’rniga tashqi svetodioddan foydalanamiz. Ya’ni, Arduino patasining bironta raqamli piniga svetodiod ulaymiz. Svetodiod tushunchasi va undan Arduino loyihalarida foydalanish haqida qisqacha ma’lumotlar elektron komponentlar haqidagi alohida darsda keltirilgan. Ushbu ma’lumotlardan foydalansak, svetodiodning anod kontaktini Arduino platasining kerakli raqamli piniga, katod kontaktini esa, plataning GND kontaktiga ulanishi kerak. Lekin svetodiod kontaktiga platadagi pinlardan to’g’ridan-to’g’ri elektr signali yuborilishi svetodiodning “umrini” qisqartirib yuborishi mumkin. Shuning uchun svetodiod orqali o’tadigan tokni chegaralash uchun rezistordan foydalaniladi. Oxirgi komponentlarni bir-biriga bog’lashda esa, maket platasi va tegishli o’tkazgichlardan foydalanamiz.

Dastlab, tushunarliroq bo’lishi uchun, tashqi svetodiodni ham ichki svetodiodga parallel holda, ya’ni plataning 13-piniga ulaymiz. Natijada, dastur ishga tushganda, har ikki svetodiodlar baravar yonib-o’chishi kerak.

Shularni hisobga olinsa, navbatdagi loyihamiz uchun quyidagi materiallar kerak bo’ladi:

1) USB-kabel
2) Maket plata va o’tkazgichlar komplekti
3) Arduino UNO platasi
4) Svetodiod va unga boradigan tokni cheklovchi rezistor (220 Om)

Fritzing dasturida bo’lajak qurilma komponentlarining bo’g’lanish sxemalarini tayyorlab olamiz.

 

Svetodiod oxirgi sxemadagidek, anod (“+”) qutbi 270 Om rezistor orqali Arduino platasi 13-piniga, katodi (“-“) plataning GND pinlaridan biriga (UNO platasida ularning soni 3 ta) ulanadi. Sxema elektr ta’minoti USB-kabeldan olinayotgani sababli, sxemada ko’rsatilmagan.

Svetodiod ulangan pin (13-pin) o’zgarmaganligi sababli, oldingi sketchga hech qanday o’gartirish kiritish talab etilmaydi. Shuning uchun uni shunchaki mikrokontrollerga yuklash qoladi xolos. Agar, oldingi “blink” proshivkasi mikrokontrollerda saqlanib turgan bo’lsa, uni qayta yuklash ham shart emas.

Ko’rinib turibdiki, dastur avvalgidek ishlashni davom ettirmoqda – platadagi ichki svetodiod bilan parallel ravishda endi tashqi svetodiod ham o’chib-yonmoqda. Demak, biz o’zimiz kutgan natijani oldik.

Yuqorida aytib o’tilganidek, “Blink” sketchidan tashqi yuqori voltli yuklamalarni boshqarish uchun ham foydalanish mumkin. Biroq, Arduno platasi past quvvatli va faqat o’zgarmas kuchlanishda ishlaganligi sababli, uning signali yordamida to’g’ridan-to’g’ri yuklamani boshqarib bo’lmaydi. Bunday vaziyatlarda bizga elektromagnit rele yordam berishi mumkin. Uning kontaktlari tok o’tkazish qobiliyati ham odatda 10A gacha bo’ladi. Demak, rele quvvati taxminan 2 kW gacha (220V * 10A = 2200VA) bo’lgan yuklamalarni boshqarish imkonini beradi.

Rele tushunchasi, rele modullari va ulardan Arduino loyihalarida foydalanish haqidagi qisqacha ma’lumotlar ham elektron komponentlar haqidagi alohida darsda keltirilgan. Qulaylik uchun biz 5V kuchlanishda ishlashga mo’ljallangan rele modulidan foydalanamiz. Bundan tashqari, rele ko’proq tok talab qilishini hisobga olib, uning elektr ta’minotini alohida 5V li ta’minot blokidan olamiz. Modulning GND kontaktini Arduino platasining va ta’minot blokining GND kontaktlariga, modulning VCC kontaktini faqat ta’minot blokining VCC kontaktiga (Arduino platasiga ham parallel ulanishi uni ishdan chiqarishi mumkin), IN (IN1) signal kirish kontaktini esa, plataning 13-raqamli piniga ulanadi (rele bilan parallel ravishda platadagi ichki svetodiod ham yonib-o’chishi uchun). Rele modulini Arduino platasiga bog’lashda yana maket platasi va tegishli o’tkazgichlardan foydalanamiz. Rele moduliga hozircha yuklamani ulamaymiz. Tashqi svetodiod va rezistorni sxemadan chiqaramiz.

1 kanalli rele moduli xarakteristikalari va tashqi ko’rinishi.

Demak bizga quyidagi materiallar kerak bo’ladi:

1) USB-kabel
2) Maket plata va o’tkazgichlar komplekti
3) Arduino UNO platasi
4) Bir yoki ko’p kanalli rele moduli (ko’p kanalli rele modulining 1-kanalidan foydalanamiz)
5) 5V ta’minot bloki

Fritzing dasturidagi sxemamizga ham tegishli o’zgartirishlarni kiritamiz. Rele moduli 13-pinga ulangani sababli, sketchni yana o’zgarishsiz qoldiramiz.

Agar sxemadagi hamma bog’lanishlar to’g’ri bajarilgan bo’lsa, Arduino ichki svetodiodi va rele modulidagi svetodiod baravar yonib-o’chishi, shu bilan birga moduldagi relening kontaktlari ulab-uzilayotganini bildiruvchi tovush eshitilishi kerak:

Haqiqiy yuklamani boshqaramiz

Yuqorida biz dastur yordamida Arduino platasiya yuborilgan signal avval ichki svetodiodni, keyin unga parallel ulangan tashqi svetodiodni, 3-bosqichda releni boshqarishi mumkinligini kuzatdik. Relelarning vazifasi uning kontaktlariga ulangan yuklamani boshqarish ekanligini hisobga olsak, bizdan faqat relega kontaktlariga yuklamani ulash qolganini tushunamiz. Quyidagi videoda oxirgi bosqich – aynan yuklamani boshqarish jarayoni aks etgan (Xavfsizlik nuqtai nazaridan, sxema keltirilmaydi).

O’zgaruvchilardan foydalanamiz

“Blink” sketchining yuqoridagi original variantida u maksimal darajada sodda holatda taqdim etilgan va o’zgaruvchilardan foydalanilmagan. Bunday variantning yana bir ahamiyati – mikrokontroller tezkor xotirasidan joy talab etilmaydi. Ayniqsa, gap sketch past xarakteristikali mikrokonrollerlar haqida boradigan bo’lsa. Xususan, “Blink” sketchini olinadigan bo’lsa, unda haqiqatan ham o’zgaruvchilardan foydalanishga katta ehtiyoj ham yo’q.

Biroq har qanday boshqa dasturlash tillarida bo’lganidek, sketchni takomillashtirish va uning asosida yirikroq loyihalarni yaratish jarayonida baribir o’zgaruvchilarga bo’lgan ehtiyoj paydo bo’ladi va ular dasturning sezilarli darajada optimallashishiga olib keladi. Shuning uchun ham o’zgaruvchilardan foydalanishni o’rganishni faqat murakkabroq loyihalarda emas, aksincha eng sodda loyihadanoq boshlash zarur. Bundan tashqari, Blink sketchi asosida kelgusida yaratiladigan loyihalarda o’zgaruvchilar keng qo’llaniladi. Qiymat turlari va ularning o’zgarish oralig’i, o’zgaruvchi tushunchalari haqidagi ma’lumotlar bilan ushbu havola orqali qisqacha tanishishingiz mumkin.

“Blink”da qanday qiymatlarga nisbatan o’zgaruvchilarni qo’llash mumkinligini aniqlash qiyin emas: 1-variant – pauza davomiyligini belgilash uchun, 2-variant – raqamli pinni belgilash uchun.

O’zgaruvchilar haqida gap ketganda, ularning qiymat turini (qabul qilish sohasini) aniq ko’rsatish zarurligini unutmasligimiz kerak. “delay()” funksiyasining argumenti sifatida ko’rsatilgan son o’rniga qiymat turi butun son (int) bo’lgan “pauza” nomli o’zgaruvchidan foydalanamiz. “pinMode()” funksiyasi argumenti bo’lgan raqamli pinni ifodalovchi son o’rniga qiymat turi butun son (int) bo’lgan “pin” nomli o’zgaruvchidan foydalanamiz (xususiy holda, qiymat o’rniga LED_BUILTIN yozuvini ham qo’shtirnoqsiz qo’llash mumkin: pin = LED_BUILTIN kabi).

'Blink' sketchi. Tashqi svetodiod bilan

int pin = 2; //pin raqami. ichki svetodiod raqami – 13 yoki LED_BUILTIN

int pauza = 1000; //pauza qiymati, millisekundda

// “setup” funksiyasi faqat 1 marta bajariladi:
void setup() {
// “pin” o’zgaruvchi pinni OUTPUT (signal chiqarish) rejimiga o’tkazamiz:
pinMode(pin, OUTPUT);

pin = 13;

pauza = 500;

}

// “loop” funksiyasi to’xtovsiz bajariladi:
void loop() {
digitalWrite(pin, HIGH); // svetodiodni yoqamiz;
delay(pauza); // pauza o’rnatamiz
digitalWrite(pin, LOW); // svetodiodni o’chiramiz;
delay(pauza); // pauza o’rnatamiz
}

Sketch plataga yuklangach, yana ichki svetodiod 0,5 sekundlik pauza bilan miltirayotganini kuzatishimiz mumkin. Endi faqat o’zgaruvchilarning qiymatini o’zgartirish orqali, sxemaning ishlashida qanday o’zgarishlar yuz berishini o’rganish qoldi xolos.

E’tibor bering, dastlab global o’zgaruvchilari qiymati mos ravishda pin = 2 va pauza = 1000 bo’lgan, “setup()” funksiyasida ularnig qiymati qayta o’zgargan: pin = 13, pauza = 500. Ya’ni, agar o’zgaruvchi qiymatidan “loop()” funksiyasida foydalaniladigan taqdirda, uning qiymati oldinroq bir necha marta o’zgargan taqdirda ham, eng oxirgi o’zlashtirilgan qiymati qo’llaniladi. Chunki kompilyator o’zgaruvchini oldin global o’zgaruvchilar sohasidan, keyin “setup()” funksiyasidan, oxirida “loop()” funksiyasidan o’qiydi.

Svetodiod o’rniga zummer (spiker)ni qo’llaymiz.

Agar “Blink” sketchida ko’rsatilgan pinga svetodiod o’rniga zummer qo’llanilsa nima bo’ladi. 2 xil variantin ko’rib chiqamiz.

1-variantda, sketchga umuman o’zgartirish kiritmasdan, zummer qo’llanilsa, shunchaki har sekundda qisqa muddatli tiqqillagan tovushni eshitishimiz mumkin.

2-variantda, sketchga o’zgartirishlar kiritamiz va har xil tovush tonlarini chiqarishga va uni to’xtatishga xizmat qiladigan yangi funksiyalar (buyruqlar) – “tone()” va “noTone()” funksiyalarini qo’llaymiz. “tone” funksiyasi 3 ta argumentga ega bo’ladi. 1-argument – zummer ulangan raqamli pin, 2-argument – ton qiymati, 3-argument – tovushning uzunligi. “noTone” funksiyasi faqat 1 ta argment – zummer ulangan pin raqamidan iborat bo’ladi. Har sekundda 2 xil tondagi tovuchni chiqarish sketchi quyidagicha bo’ladi:

Tovushli 'Blink'

int pin = 2; //pin raqami.
int pauza = 1000; //pauza qiymati, millisekund
int tonUzunligi = 1000; //pauza qiymati, millisekund
int ton1 = 550; int ton2 = 150;
void setup() {
pinMode(pin, OUTPUT);
}

void loop() {
tone(pin, ton1, tonUzunligi); // ko’rsatilgan pinga ulangan zummer orqali har sekundda ton1 qiymatli ton chiqariladi
delay(pauza); // pauza
tone(pin, ton2, tonUzunligi); // ko’rsatilgan pinga ulangan zummer orqali har sekundda ton2 qiymatli ton chiqariladi
delay(pauza); // pauza
noTone(pin); // tonsiz tovush, majburiy emas
}

“tone()” va “noTone()” funksiyalarining qo’llanilishiga doir misollar bilan “Файл” menyusining “Примеры/02.Digital” bo’limidagi “toneKeyboard”, “toneMelody”, “toneMultiple”, “tonePitchFollower” nomli namunaviy sketchlar orqali mustaqil tanishish mumkin. Biz esa, yuqoridagi sketch bilan cheklanamiz.

Mustahkamlash uchun mashqlar:

1) Sketchni svetodiodning yonib turish vaqtini 100 millisekund, o’chiq turish vaqtini 900 millisekundga o’zgartirish va buni to’xtovsiz takrorlashga moslashtiring;
2) Sketchni svetodiodning yonib turish vaqtini 5 sekund, o’chiq turish vaqtini 1 sekundga o’zgartiring va buni to’xtovsiz takrorlashga moslashtiring;
3) Sketchni svetodiodni faqat 1 marta 1 sekundga yoqib, 1 sekundga o’chirishga moslashtiring (keyin takrorlanmasin);
4) Sketchni svetodiodning doimiy yoniq holda qolishiga moslashtiring (keyin takrorlanmasin);
5) Sketchni svetodiodning doimiy o’chiq holda qolishiga moslashtiring (keyin takrorlanmasin);
6) Barcha topshiriqlarni o’zgaruvchilarni qo’llab bajaring, o’zgaruvchilar qiymatlarini o’zgartirishni mashq qiling.
7
) Barcha topshiriqlarni ‘Wemos D1 mini’ platasi uchun bajaring.
8) Yuqoridagi topshiriqlarni ArduBlock dasturida bajarishni mashq qiling.

Добавить комментарий