20 July 2015

Eshik oldidagi to’qnashuvlar uchun smart qurilma yoki arduinodan foydalanib nima yasaganim haqida

Oldingi semestrda bizning fakultetda arduino haqida fan o'tildi va oxirgi imtihon o'rniga biror g'oya asosida yangi qurilma yaratish kerak edi. Topshiriqning nozik joyi shunda ediki yaratilajak qurilma dunyoda yo'q bo'lishi yoki avval yaratilgan qurilmalardan nimasidir bilan farq qilishi kerak edi.

Qanday qilib yangi qurilma o'ylab topsam ekan deb xayol surib xona eshigiga yaqinlashib qolganimda eshik qo'qisdan ochilib bir domla shiddat bilan kirib keldi. Eshik ochilganigami, domlani badjahl ekanliginidanmi bilmadim birdan o'ylab turgan fikrlarim kapalakday uchdi ketti.

Shu eshiklar ochilishini oldindan ogohlantiruvchi qurilma qo'yishsa qo'rqib ketmasdim deb o'ylab qoldim va shu g'oya bilan shunday qurilmani o'zim yaratishim kerak degan xulosaga keldim. Devaysni yasash uchun arduinodan foydalandim, quyida uni qanday tuzilgani haqida texnik maqola yozdim.



Original maqola Asia Workshop on Information Technology Convergence of KSCI 2015 (AWITC 2015) da chop etildi (http://awitc.ksci.re.kr/)

Maqola uchun qilingan prezentatsiya, slidesharedan:


Kirish

Hayotimizga aqlli texnologiyalarning rivojlanishi, ularning hayotimizga kirib kelishi bilan insonlar uchun jismoniy tomondan ancha qulayliklar yaratilmoqda. Bunday texnologiylarning natijasida insonlar jismoniy mehnat turlaridan offis mehnatchiligiga o'tib borishmoqda. Davlatning iqtisodiy ko'rsatkichlarida kompaniyalar sonining oshib borishi va ularning asosan qanday sohalardagi ishlar bilan shu'gullanishi va ishchilarning qanday ishlarda ishlashi haqidagi reytinglari fikrimizning yaqqol isbotidir.

Offis ishchilar uchun eng qulay sharoitlarga boy va ishlash uchun eng qulay joydir. Ko'plab kompaniyalar ishchilarining foydali ish koeffitsentini oshirish maqsadida offislarini turli xil jihozlar bilan to'ldirish, ularga uylaridagi sharoitlarni yaratib berish uchun qo'llaridan kelgancha harakat qiladilar. Bu harakatlarning hammasi ularning psixologik xotirjamlikda bo'lishlari, ko'proq yangi g'oyalar o'ylab topishlari va ishga bo'lgan konsentratsiyalarini saqlab turishga qaratilgan bo'lib natijada ish unumdorligi oshirilishi ko'zda tutilgan. Ammo offislarda shunday to'satdan yuz beradigan kichik hodisalar borki ularni oldini olish mushkul vazifa va kichik bo'lishiga qaramasdan jiddiy ko'ngilsizliklarga ham olib kelishi mumkin.

Kuzatuvlarim natijasida kichik to'qnashuv hodisalari asosan orqasi ko'rinmaydigan eshiklar oldida ro'y berishini guvohi bo'ldim. Aytaylik eshikning tomonlarini A va B qarama qarshi tomonlari deb bellgilab olaylik. A tomondan kelayotgan odam shiddat bilan offis eshigini ochdi va xuddi shu paytda B tomondan ham eshikni ochish arafasida turgan ishchi turibdi. A tomondagi ishchi eshikni tez ochishi oqibatida B tomondagi ishchi kutilmagan hodisa tufayli qo'rqib, hayajonlanib qolishi, o'ylab turgan ideyalarini yo'qotishi mumkin, agar ishchining qo'llarida hujjatlari bo'lsa ularning sochilib ketishi, agar kofe bo'lsa kiyimlariga to'kilib ketishi va offis ishchilarining qimmatli vaqtlarini olishi tabiiy.

Nega aynan orqasi ko'rinmaydigan eshiklar oldida? Oynaband eshiklardan eshik ortida kim kelayotganligini ko'rib o'zbek urf-odatlariga binoan hurmat qilib eshikni ochib bir-birini o'tkazib qo'yishi tabiiy, orqasi ko'rinmaydigan eshiklarda esa aynan qarama-qarshi tomonidan nima bo'layotganini ko'rishning iloji yo'q.

Demak aynan eshikni ortida odam kelayotganligi haqida xabar beruvchi nimadur qurilma o'ylab topishimiz kerak. Birinchi xayolga kelgan yechim bo'lib eshikning har ikkala tomonlariga kamera va ekran bilan jihozlashtirish, ammo bu ancha qimmatga tushadi, ko'p energiya sarflaydi va kamera orqali hamma narsa ko'rinishi sababli maxfiylik siyosatiga ham to'g'ri kelmaydi. Bundan kelib chiqadiki yaratilajak qurilma kichkina, joylashtirish uchun qulay, ogohlantirishning eng qulay usulidan foydalanishi kerak. Biroz izlanish natijasida shundau qurilmani qilishga muvoffaq bo’ldim nazarimda, quyida shu qurilma haqida batafsil yozaman.

Qurilma go’yasi

Qulayroq umumiy tavsifi: aytaylik eshikning A tomoniga ultrasonic sensor, LED joylashtiriladi, eshikning B tomoniga ham ultrasonic sensor va LED o'rnatiladi. A tomonga odam kelganda B tomondagi B-LEDni yoqamiz, B tomonga odam yaqinlashganda esa A-LEDni yoqamiz. Qurilma yanada ko'proq ma'lumot berishi uchun odam yaqinlashgan sari LED balandroq porlaydigan qilamiz. Demak qurilmamizning g'oyasi shundan iborat, quyida uning texnik va dasturiy qismlariga alohida to'xtalib o'taman.

Texnik va dasturiy tuzilishi

Sensor va LED chiroqlarimizni Arduino Uno boshqarib boradi, uning avtonom ishlashi uchun esa 4 ta AA batareyka ulaymiz (hammasi bo’lib 6V), o’rniga bitta 5V li batareyka ulasak ham bo’ladi (1-rasm).
1-rasm. Qurilmaning umumiy tuzilishi

Bizga eshik oldiga obyekt qanchalik yaqinlashganini sezuvchi sensor sifatida faqat ultrasonic sensorni tasavvur qila oldim (agar boshqa yaxshiroq yechimini bilsangiz, iltimos izoh bildiring). 
Bu sensorlar ultra tovushlarni yuborib obyektlarga urilib qaytgan tovushlarni qabul qiladi,  tovushniyuborilgan va qabul qilingan vaqt oralig’iga qarab obyektning qanday uzoqlikda ekanligini hisoblanadi. 
2-rasm. Ultratovush (tarqatuvchi/qabul qiluvchi) sensorining ishlash prinsipi

Qo’limda bo’lgan sensorlar turli xil edi va hammasi turli xil natija qaytarish usuli va ishlatish usuliga ega edi. A tomonga DYP-ME007TX ultratovush sensorini tanladim. Bu sensor ishlashi davomida tovush yuborish, tovushni qabul qilish va masofani hisoblashni o’zi avtomatik amalga oshiradi va bizga yagona son, masofani 16 bitda, millimetrlarda qaytaradi. 

Ma’lumotni qabul qiish metodi esa oddiy sensor 4 baytli ma’lumotlar paketi yuboradi, 1-bayt: 0xFF, 2-bayt: masofaning boshlang’ich 8 biti, 3-bayt: masofaning ikkinchi 8 biti, 4-bayt: (0XFF + MSB + LSB) & 0xFF, xullas paketning oxirgi baytiligini bildirish uchun (checksum).

while (mySerial.available()) {
  if (bitpos < 4) {
    mybuffer[bitpos++] = mySerial.read();
  } else break;
}
mySerial.flush(); // keyingi ma’lumotlarni o’chirib tozalab qo’yish, tiqilib 
//qolmasligi va teskorlik uchun
mili = mybuffer[1]<<8 | mybuffer[2]; //ikkita baytni ketma-ket birlashtiramiz
Serial.print("distance: ");
Serial.print(mili/10);
Serial.println("cm");

Ikkinchi, B tomonga esa kichikroq ko’rinishi uchun LV-MAXSONAR-EZ0 ishlatamiz. Bu sensor orqali masofani hisoblash uchun pulseIn() funksiyasini ishlatamiz. LV-MAXSONAR-EZ0 masofani aniq o’lchab berishi bilan ajralib turadi, ammo qaytarayotgan sonlari orasida shovqinlar kuzatilib turarkan. Bu shovqinni bartaraf etish maqsadida sensor qaytargan natijalarni asosan tasvirlarga ishlov berish(image processing)da rasmlardagi shovqinlarni tozalashda ishlatiladigan Median yoki Mode filtrlar bilan tozalab olamiz[1].

Median filtr saralangan massivdan eng o’rtasida joylashgan elementni oladi. Mode filtr esa massivda eng ko’p uchragan sonni tanlab oladi. Buning uchun Nta (N - toq son bo’lgani ma’qul) ketma-ket hisoblangan oraliq masofani massivga yozib olinadi, shundan keyingina filtrlanadi va bitta son asosiy natija deb qabul qilinadi, navbatdagi natijalarni ham N tasini birlashtirib shu amal bajarilaveradi. Shovqinlashtirish aniqroq bo’lishi uchun agar bir xil ko’p uchragan sonlar mavjud bo’lsa shu guruhda uchragan son natijaviy son bo’ladi, agar bunday sonlar ko’p yoki bo’lmagan taqdirda median filtrdan o’tkazamiz ya’ni saralangan massivni o’rtasidagi sonni tanlab olamiz. Quyida natijalarni saralash va filtrlashning Arduino dasturlash tilidagi ko’rinishi:

int mode(int *x,int n){ //Mode function, returning the mode or median. 
  int i = 0; 
  int count = 0; 
  int maxCount = 0; 
  int mode = 0; 
  int bimodal; 
  int prevCount = 0; 
  while(i<(n-1)){ 
 prevCount=count; 
 count=0; 
 while(x[i]==x[i+1]){ 
   count++; 
   i++; 
 }
 if(count>prevCount&count>maxCount){ 
   mode=x[i]; 
   maxCount=count; 
   bimodal=0; 
 } 
 if(count==0) i++; 
 if(count==maxCount)//If the dataset has 2 or more modes. 
 bimodal=1; 
 if(mode==0||bimodal==1)//Return the median if there is no mode. 
 mode=x[(n/2)]; 
    return mode; 
  }
}

Osongina yechim qilib massivdagi sonlarning o’ta arifmetigini hisoblab qo’ysak ham bo’lardi, ammo bu real natijadan uzoqlashishga olib keladi xolos, ishlab chiqaruvchilar ham bunday qilmaslikni tavsiya qilishgan[2].

Qurilmani qo’llashga oson bo’lishi uchun unga quti yasadim (3-rasm). 

3-rasm. Qurilma qobig’i

Ishlash algoritmining Arduino dasturlash tilidagi ko’rinishi:

loop(){
distance1 = getDistanceFromA();
distance2 = getDistanceFromB();
light2 = map(distance1, 5, 100, 255, 50);
light1 = map(distance2, 5, 100, 255, 50);
analogWrite(LED_PIN_1, light1);
analogWrite(LED_PIN_2, light2);
}

Yuqorida yozganimdek LED chiroqlar eshikka yaqinlashgani qadar yaqinlashishi kerak edi, buning uchun bizga map(var, a, b, c, d) funksiyasi[4] yordam berdi. Uning vazifasi a va b sonlar oralig’idagi var o’zgaruvchisining qiymatini c va d oralig’iga o’zgartirish.

Xulosa

Ishni bajarish narijasida judayam qiziqarli qurilmani yasadik. Laboratoriyamiz eshigiga o’rnattik va testdan muvoffaqiyatli o’tti. Eshik oldiga to’qnash kelib qolish vaziyatlaridan bir necha bor saqlab qoldi. Buni keng ko’lamda ishlatish uchun esa arduinoni unoni o’rniga boshqa kichikroq sxemalardan masalan Olimexinodan foydalanishimiz mumkin, yoki umuman o’zimiz boshqa yasashimiz ham mumkin. Ultratovush sensorlarini ham kichikroqlariga almashtirishimiz mumkin.

Biroz qidirishlar natijasida ham bunaqa maqsadda yaratilgan birorta yechim topolmadim, ammo shunday bo’lsa ham bu qurilmani o’zini ishlarishdan ko’ra u bajaradigan “Eshik orqasidan odam kelishidan ogohlantirish” funksiyasini eshik dastaklariga yoki door lockerlarga qo’shimcha tarzida kiritsayana ham foydali bo’lardi nazarimda (4-rasm). 


4- rasm. a) c) Eshik dastasi+electron qulflagich     b) electron va kalitli qulflagich

G’oyani patentlaganim yo’q, bu ideyani biror eshik dastalarini yoki door lockerlarni ishlab chiqaruvchilar qo’llasalar ularga davo qilmayman.

Loyihani ishlab chiqish davomida ko’plab qiziqarli narsalarni o’rgandim va arduinoda yaxshi amaliy tajriba to’pladim, sizda ham qandaydir g’oya yoki qilingan ishlar bo’lsa yozing, share qiling va maqolamga fikringizni bildirishdan tortinmang.

Adabiyotlar


[1] William K. Pratt, “Digital image processing”, John Wiley & Sons, Inc., New York, 1978
[2] Arduino forum[online], Available: http://forum.arduino.cc/index.php/topic,20920.0.html#2
[3] Jeremy Blum, “Exploring Arduino”, John Wiley & Sons, Inc., New York
[4] Arduino preferences [internet], Available: https://www.arduino.cc/en/Reference/Map

3 comments:

  1. Replies
    1. rahmat katta, harakat qilyapman, arduino qiziq narsa ekan

      Delete
  2. Assalomu aleykum aka rahmat shunday yangiliklardan xabardor qilib turing oldindan rahmat!!!

    ReplyDelete