Analogni signalni raqamlashtirish deganda uni maxsus modul yoki mikrokontroller yordamida analog holatidan raqamli holatga o’tkazish jarayoni tushuniladi. Mikrokontrollerda bunday vazifani maxsus ichki konverter (ADC) bajaradi va bunday imkoniyatga ega bo’lgan pinlar analog pinlar deb yuritiladi. Bundan tashqari ba’zi analog modullarning o’zi ham analog signalni raqamli formatga o’tkazish imkoniyatiga (mustaqil ADC ga) ega bo’ladi. Odatda bunday modullarda ham analog ham raqamli signal chiqish kontaktlari mavjud bo’ladi.
Arduinoda analog signalni raqamlashtirish uchun analogRead() funksiyasi qo’llaniladi. Uning qo’llanilishi formati quyidagicha:
analogRead(<argument>);
Bu yerda funksiyaning argumenti sifatida analog pin nomi yoki uning tartib raqami ko’rsatiladi. Funksiyaning o’zi esa, mikrokontroller turiga qarab, asosan 0…1023 oralig’ida qiymat qabul qiladi. Masalan:
int pinHolati = analogRead(A0);
// A0 analog pini holati int qiymat turidagi pinHolati o’zgaruvchisiga o’zlashtirilmoqda.
“analogRead()” funksiyasining qo’llanilishini Arduinoning “AnalogReadSerial” namunaviy sketchi yordamida ko’rib chiqamiz (Menyuning “Примеры/01. Basics” bo’limi).Sketchning vazifasi A0 analog portiga ulangan analog datchikning qiymatini o’lchash, uni o’zgaruvchiga o’zlashtirish va ketma-ket portga yuborish hisoblanadi. Natijani port orqali kuzatish mumkin. Analog datchik sifatida o’zgaruvchan rezistor, fotodatchik, termodatchik va hokazolar bo’lishi mumkin. Analog datchiklar turli xil shakldagi signallarni elektr signaliga aylantirishiga qaramay, yuqorida keltirilganidek, barcha analog datchiklarning signallari mikrokontroller ADC konverteri yordamida odatda 0…1023 oralig’idagi qiymatlarga aylantiriladi.
Sketchning original izohlari o’rniga o’zbek tilidagi izohlar keltiriladi.
1-variant. Dastlab, o’zgarmas qarshilikka ega bo’lgan rezistorlarni qulaylik uchun plataga quyidagi sxemaga (kuchlanishni bo’lgich sxemasiga) asosan ulaymiz. Shu yo’l bilan rezistorlarning qiymatiga qarab, A0 piniga kiruvchi kuchlanish cheklanadi va unga mos raqamlashgan qiymat hosil qilinadi. Turli qarshilikka ega bo’lgan rezistorlar uchun turli raqamlashgan qiymatlar to’g’ri keladi va ular 0 dan 1023 gacha oraliqda bo’ladi.

Natija:
(Material to’ldirish jarayonida)
Yuqoridagi sxema hech qanday amaliy loyihalarda qo’llanilmasligi mumkin. Lekin, qarshiligi turlicha bo’lgan bir nechta rezistorlarni qo’llab va ularga bir nechta tugmalarni ketma-ket ulab, amaliy hamiyatga ega bo’lgan ko’plab loyihalarni yaratish mumkin. Ya’ni, bunda har xil tugma bosilishi natijasida, analog pinda ham shunga mos turli darajadagi signallar hosil bo’lishiga e’tibor beriladi. Bundan tashqari, ayrim tugmalarni baravar bosib ham, natijaviy qarshilik qiymatini pasaytirib, yana boshqa raqamlashgan ko’rsatkichlarni olish mumkin.

2-variant. Dastlab, qulaylik uchun maksimal qarshiligi 10 kOm bo’lgan potensiometr (o’zgaruvchan rezistor)ni plataga quyidagi sxemaga asosan ulaymiz (o’rtadagi kontakt A0 piniga, qolgan kontaktlar +5V va GND pinlariga ulanadi. Shu yo’l bilan potensiometr yordamida “kuchlanish bo’lgichi” (“делитель напряжения”) hosil qilinadi. Chetki kontaktlar o’rni almashsa, qarshilik qiymati o’zgarishi yo’nalishi qarama-qarshisiga almashadi). Potensiometrning o’rtadagi kontakti regulirovka natijasida Arduinoning +5V va GND (0V) qutblari orasidagi oraliq kuchlanishni tanlash vazifasini bajaradi. Shu kuchlanishga mos qiymat esa, A0 pinida hosil bo’ladi.

Sketch yuklansa, potensiometr regulirivka qilinishi jarayonida port monitori va plotter orqali quyidagi natijalarni kuzatishimiz mumkin:

1-rasm. Potensiometrda regulirovka natijasi port monitorida.

2-rasm. Potensiometrda regulirovka natijasi plotterda.
Potensiometrning ushbu xususiyati yordamida Arduinoga ulangan tashqi yuklamani ham boshqarish mumkin.
3-variant. Endi quyidagi sxema asosida plataga analog datchik sifatida fotorezistor (R2) ulaymiz.
Sxemadagi R1 rezistor, R2 fotorezistor bilan birgalikda kuchlanishni bo’lgich vazifasini bajaradi. Ulardan biri musbat qutbga (+5V), ikkinchisi manfiy qutbga (GND), o’zaro birlashgan umumiy kontakt esa, Arduino UNO ning A0 piniga ulangan.

Sketch yuklanganidan so’ng, port monitorini ochsak, hududdagi yorug’likdan kelib chiqib, port monitorida sonlar o’zgarayotganini kuzatish mumkin (3-rasm). Ushbu o’zgarishni yanada vizuallashtirish uchun, natijalarni plotterda kuzatishimiz mumkin (4-rasm).

3-rasm. O’qilgan qiymatlar o’zgarishi port monitorida.

4-rasm. O’qilgan qiymatlar o’zgarishi grafigi plotterda.
Kelgusida ushbu sketchni takomillashtirib, yorug’lik darajasi asosida qurilmani boshqarish loyihalarini yaratishimiz mumkin bo’ladi.
4-variant. Sxemani o’zgartiramiz. Bunda yorug’lik datchigi o’rniga MAX9814 mikrofonli modul (tovush datchigi)ni ulaymiz. Sketchga hech qanday o’zgartirish kiritish talab etilmaydi. Ulansi sxemasi quyidagicha bo’ladi:

Natija (mos ravishda port monitori orqali va plotter orqali kuzatilganda):


Rasmlardan ko’rish mumkinki, signaldagi qisqa muddatli “sakrash”lar tovush yuqori bo’lgan (qarsak, gapirish) paytlarni anglatadi. Qolgan paytdagi o’zgarvuchan sonlar (port monitori) va shunga mos zigzagsimon chiziqlar (plotter) turli shovqinlar darajasini bildiradi. Aynan signaldagi “sakrash”lar qiymatlariga asoslanib, boshqa qurilmani tovush orqali boshqarish shartlarini belgilash mumkin bo’ladi.
Quyidagi rasmdagi KY-038 mikrofonli modulidan foydalanilganda ham, yuqoridagi sketchdan foydalanish mumkin:

5-variant. HC-SR501 infraqizil harakat detektorini A0 analog piniga ulaymiz (ushbu detektorni analog datchik sifatida analog pinga ham, raqamli datchik sifatida raqamli pinga ham ulash mumkin, chunki harakat sezilganda detektor chiqish kontaktida yuqori signal hosil qiladi, kutish rejimida yana chiqish pinida LOW signali hosil bo’ladi).


HC-SR501 harakat detektorining oldingi analog datchiklardan farqli jihati bor. U mustaqil (Arduinosiz) ham foydalanish mumkin bo’lgan datchik bo’lib, uning chiqish kontaktini rele moduliga ulansa, to’g’ridan-to’g’ri yuklamani (chiroqni) boshqarish mumkin. Bundan tashqari, detektor ishga tushirilganda taxminan 1 daqiqa davomida o’zini o’zi initsializatsiya qiladi va bu paytda harakatni aniqlamaydi. Bundan tashqari, harakat aniqlanganib, yuklama ulanganidan so’ng ma’lum vaqtdan keyin yana uni o’chiradi va kutish rejimiga o’tadi. Kutish rejimiga o’tishdan oldin ham 3-4 sekund initsializatsiyadan o’tadi va bu vaqtda ham harakatni sezmaydi. Datchik bilan ishlaganda bu holatlarni hisobga olinishi zarur.
Datchikning chetida 2 ta o’zgaruvchan rezistor o’rnatilgan bo’lib, ulardan biri (plataning o’rtarog’ida joylashgan) detektorning sezgirligini (3-7 metr), 2-chisi HIGH chiqish signalini ushlab turish vaqtini (5-300 sekund) sozlash uchun ishlatiladi. Platadagi “H”, “L” rejimlari uyasi detektor yuklamani ulagan paytda ham harakatni sezishni davom ettirishi (“H” rejimi) yoki harakat sezilishidan qat’iy nazar yuklamani belgilangan vaqtda uzishi (“L” rejimi) uchun tanlanadi.

Bundan tashqari, datchikning qopqog’i ochilsa, plataga qo’shimcha fotorezistor va termorezistor o’rnatish uchun joylar ajratilganini ko’rish mumkin. Fotorezistor o’rnatilsa (RL kontaktlari) detektor yorug’ paytda ishlamaydi (yuklamani ulamaydi). Termorezistor o’rnatilsa (RT kontaktlari), detektor ekstremal (juda sovuq, juda issiq) temperaturalarda ham ishlash qobiliyatiga ega bo’ladi.


Natija:
Datchik ulanganidan keyin 1 daqiqa o’tgach, uning holatini port monitorida va plotterda kuzatamiz:


Ko’rinib turibdiki, yuqoridagi 4 xil turdagi analog datchikni sxemaga ulash bilan sketchda umuman o’zgarish kiritish talab etilmadi. Shuningdek, datchiklarning sxemaga ulanishida ham katta o’zgarish bo’lgani yo’q. Boshqa turdagi analog datchiklarni ulanishi bilan ham sxemada jiddiy o’zgarish yuzaga kelmaydi. Barcha hollarda analog datchikning analog signal chiqish kontaktini Arduinoning analog kirish kontaktiga ulanishi, ta’minot kontaktlarini esa, mos ravishda +5V, GND kontaktlariga ulash zarur.
6-variant. Ushbu variantda analog datchik sifatida termistordan (NTC-termorezistordan) foydalanamiz. Termistor haqida elektron komponentlar haqidagi darsda batafsil ma’lumotlar keltirilgan. Mazkur darsda, termistor qarshiligidan kelib chiqib, temperaturani aniqlash formulalari hamda ayrim kontsantalar qiymatlari ham keltirilgan. Yuqoridagi sxemada R2 fotorezistor o’rniga analog termistordan (NTC-termorezistordan) foydalanamiz va sxemaga kichik o’zgartirish kiritamiz. Sxema quyidagi ko’rinishga keladi:

Raqamlashtirilgan signalni qayta ishlash
Biz yuqorida ayrim analog datchiklarning Arduinoga ulanishi va ularning raqamlashtirilgan qiymatlarini o’qish jarayonlari bilan tanishdik. Ma’lum bo’ldiki, datchiklar orqali qabul qilingan turli xil analog signallar analogWrite() funksiyasi yordamida 0…1023 oralig’idagi raqamli qiymatlarga aylantiriladi. Ularni qayta ishlash orqali turli xil tashqi qurilmalarni boshqaruvchi yoki natijalarni vizuallashtirib beruvchi qurilmalar loyihalarini yaratishmiz mumkin. Quyida shunday qurilmalardan biri – termistor asosidagi eng oddiy termometr sketchuni tuzamiz.
Natijalarni hozircha faqat port monitori orqali kuzatish bilan cheklanamiz (kelgusida sxemaga biron displey modulini ulash orqali, temperaturani u orqali kuzatishimiz ham mumkin bo’ladi).
Termistor asosidagi termometr sketchi:
Port monitori va plotterda natijani kuzatamiz:

Temperatura ko’rsatkichlari port monitorida.

Temperatura ko’rsatkichlari plotterda.
Kelgusida, xuddi shu termometrni turli xil hisoblashlarni bajarib o’tirmasdan, termodatchik qiymatlarini to’g’ridan-to’g’ri haroratni ifodalovchi qiymatlarga aylantirib beradigan bibliotekadan foydalanamiz va yuqoridagi sketchni soddalashtiramiz.
Kelgusida “Aqlli uy” o’quv loyihasini tayyorlash jarayonida, yuqoridagi kabi analog datchiklar va ularni raqamlashtirish funksiyalaridan keng foydalanishimiz mumkin.
Topshiriqlar:
1) Yuqoridagi barcha sketchlarni Arduino UNO va Wemos D1 mini platalari uchun bajaring.
2) Yuqoridagi ‘AnalogReadSerial’ sketchi yordamida, o’zingizda mavjud bo’lgan analog datchiklar qiymatlarini o’lchang.