Mundarija:

Arduino RF sensori dekoderi: 5 qadam
Arduino RF sensori dekoderi: 5 qadam

Video: Arduino RF sensori dekoderi: 5 qadam

Video: Arduino RF sensori dekoderi: 5 qadam
Video: Arduino project | IR remote decoder 2024, Noyabr
Anonim
Arduino RF sensori dekoderi
Arduino RF sensori dekoderi

Mening oldingi uyim eshik sensori, harakat sensori va boshqaruv paneli bo'lgan oldindan o'rnatilgan xavfsizlik tizimiga ega edi. Hamma narsa shkafdagi katta elektron qutiga ulangan edi va signal berilganda avtomatik ravishda qo'ng'iroq qilish uchun shahar telefonini ulash bo'yicha ko'rsatmalar bor edi. Men u bilan o'ynashga urinib ko'rganimda, eshik sensorlaridan biri to'liq o'rnatilmagan, ikkinchisi noto'g'ri hizalanish tufayli uzilib qolgan. Xavfsizlik kompaniyasining tashrif qog'ozida yozilgan professional o'rnatish uchun juda ko'p. O'sha paytda mening yechimim bir nechta internet xavfsizlik kameralari va arzon simsiz xavfsizlik signalini sotib olish edi.

Bugungi kunga va simsiz signal mening podvalimdagi qutida o'tiribdi. Arzon chastotali radio qabul qilgichni sotib olgandan so'ng, men signal sensorlar va masofadan boshqarish pultlari orqali uzatiladigan xabarlarni dekodlash mumkinmi yoki yo'qligini aniqlashga qaror qildim. Menimcha, ularning hammasi arzon signal qutisi bilan ishlaganligi uchun, ular bir xil xabarlar formatini boshqa identifikator bilan ishlatishi kerak. Tez orada bildimki, ular faqat xabarlarning umumiy tuzilishida o'xshash. Shunday qilib, loyiha tezda ahamiyatsizdan juda qiziqarli bo'lib ketdi.

1 -qadam: Sensor modullari

Sensor modullari
Sensor modullari
Sensor modullari
Sensor modullari
Sensor modullari
Sensor modullari
Sensor modullari
Sensor modullari

Yuqoridagi rasmlarda ko'rib turganingizdek, transmitterlarga eshikni ochish sensori, harakat detektori, qurolni boshqarish pulti va signal qutisini dasturlash uchun ishlatiladigan simsiz klaviatura kiradi. Ma'lum bo'lishicha, ushbu qurilmalarning ikkalasi ham bir xil sinxronizatsiya yoki bit davomiyligini ishlatmaydi. Xabar uzunligidan boshqa yagona umumiylik - bu bitlarning asosiy formati. Har bir bit ma'lum bir vaqt oralig'ini oladi va nol va bittaning farqi yuqori/past qismlarning ish tsikli hisoblanadi.

Yuqorida ko'rsatilgan chiroyli to'lqin shakli men birinchi qabul qilganim emas. 433 MGts chastotali diapazonda trafik juda ko'p bo'lgani uchun, men bitta tetikni ishga tushirish doirasini belgilashdan oldin, sensorni faollashtirishga ishonch hosil qilishim kerak edi. Yaxshiyamki, sensorlar ma'lumotlar xabarining bir nechta nusxasini ishga tushiradi va masofadan boshqarish pultlari va klaviatura tugma bosilganda xabarlarni chiqarishda davom etadi. Maydondan foydalanib, men sinxronizatsiya uzunligini va har bir element uchun ma'lumotlarning bit vaqtini aniqlay oldim. Yuqorida aytib o'tganimizdek, sinxronizatsiya vaqtlari boshqacha va bit vaqtlari boshqacha, lekin xabar formatlari past darajadagi sinxronizatsiyaga ega, so'ngra 24 ta ma'lumotlar biti va bitta to'xtash biti. Bu har bir qurilma uchun har xil tafsilotlarni qattiq kodlamasdan dasturiy ta'minotda umumiy dekoderni yaratishim uchun etarli edi.

2 -qadam: Uskuna

Uskuna
Uskuna
Uskuna
Uskuna

Men dastlab PIC mikrokontroller va yig'ish tili yordamida datchik dekoderini qurdim. Men yaqinda Arduino variantlari bilan o'ynadim, shuning uchun uni takrorlay olamanmi, deb o'yladim. Oddiy sxema yuqorida ko'rsatilgan va mening prototipimning surati ham bor. Men faqat Arduino Nano -dan RF qabul qilish platasiga o'tish uchun uchta oddiy o'tish simini ishlatishim kerak edi. Quvvat va bitta ma'lumot liniyasi kerak.

Agar siz "Mening yo'riqnomam" ni "Vaqt va ob-havoni 3-in-1da" o'qiganingizda, men umumiy RXB6, 433-MGtsli qabul qilgichdan foydalanayotganimni ko'rasiz. Siz haqiqatan ham arzon qabul qiluvchilarni ushbu loyiha uchun zarur bo'lgan qisqa diapazonda ishlashiga olib kelishingiz mumkin, lekin men baribir super heterodinli qabul qilgichdan foydalanishni tavsiya qilaman.

3 -qadam: dasturiy ta'minot

Dastur qabul qilingan bitlarni ko'rsatiladigan ASCII belgilariga o'zgartiradi. U sinxronizatsiya uzunligini va 1 va 0 bit uzunliklarini chiqaradi. Men sinxronizatsiya uzunligini va bit formatlarini allaqachon bilganim uchun dasturiy ta'minotni ular uchun maxsus yozgan bo'lardim. Buning o'rniga, men sinxronizatsiya uzunligini saralash va ma'lumotlar bitlarini avtomatik ravishda aniqlash uchun yozishim mumkinmi, ko'rishga qaror qildim. Agar men boshqa formatlarni aniqlashga harakat qilmoqchi bo'lsam, bu o'zgartirishni osonlashtiradi. Ta'kidlash joizki, dasturiy ta'minot xabarning birinchi biti 1 yoki 0 ekanligini bilmaydi, lekin u 1 deb taxmin qiladi, lekin agar u nol bo'lishi kerakligini aniqlasa, u teskari bo'ladi. bitli xabarni ketma -ket portni yuborishdan oldin.

Sinxronizatsiya pulsining vaqti va ma'lumotlar bitlari INT0 tashqi uzilish usuli yordamida uzilish ishlovchisini ishga tushirish orqali aniqlanadi. INT0 ko'tarilish, tushish yoki har ikki qirrada ham, past darajadagi ham tetik bo'lishi mumkin. Dastur ikkala chekkada ham uzilib qoladi va puls past bo'lgan vaqtni o'lchaydi. Bu ishni soddalashtiradi, chunki xabarni boshlash/sinxronlashtirish past darajadagi pulsdir va bitlarni past darajadagi vaqtiga qarab aniqlash mumkin.

To'xtatish ishlovchisi birinchi navbatda, olingan sonning boshlang'ich/sinxronlash pulsiga etarlicha uzunligini aniqlaydi. Menda mavjud bo'lgan turli xil qurilmalarda 4, 9, 10 va 14 millisekundlik sinxron impulslar ishlatiladi. Sinxronizatsiyaning ruxsat etilgan min/max qiymatlari uchun tavsiflar dasturiy ta'minot oldida joylashgan va hozirda 3 va 16 millisekundlarga o'rnatilgan. Bit vaqtlari ham sensorlar orasida farq qiladi, shuning uchun bitlarni dekodlash algoritmi buni hisobga olishi kerak. Birinchi bitning bit vaqti birinchi bitdan sezilarli farq qiladigan keyingi bitning vaqti kabi saqlanadi. Keyingi bit vaqtlarini to'g'ridan -to'g'ri taqqoslash mumkin emas, shuning uchun "fudge omil" ta'rifi ("Variatsiya") ishlatiladi. Bitni dekodlash birinchi ma'lumotlar biti har doim mantiq sifatida yoziladi deb taxmin qilishdan boshlanadi. Bu qiymat saqlanadi va keyinchalik keyingi bitlarni sinash uchun ishlatiladi. Agar keyingi ma'lumotlar biti saqlangan qiymatning dispersiya oynasida bo'lsa, u ham mantiq 1 sifatida yoziladi. Agar u saqlangan qiymatning dispersiya oynasidan tashqarida bo'lsa, u 0 mantiq sifatida yoziladi. bit vaqti birinchi bit vaqtidan ko'ra qisqaroq, keyin bayroq ko'rsatiladi, bu esa baytni ko'rsatishdan oldin teskari o'girish kerakligini bildiradi. Bu algoritm muvaffaqiyatsizlikka uchragan yagona holat - bu xabardagi bitlarning hammasi 0 bo'lsa. Biz bu cheklovni qabul qila olamiz, chunki bunday xabar ma'nosiz.

Menga qiziqadigan sensorlar 24 bitli xabar uzunligiga ega, lekin dasturiy ta'minot bu uzunlik bilan chegaralanmagan. Etti baytgacha bufer mavjud (ko'proq qo'shilishi mumkin) va baytlarda minimal va maksimal xabar uzunligini belgilaydi. Dastur bitlarni yig'ish, ularni baytlarga aylantirish, vaqtincha saqlash va keyin ketma -ket port orqali ASCII formatida chiqarish uchun mo'ljallangan. Xabarning chiqishiga turtki beradigan voqea - bu yangi boshlash/sinxronlashtirish pulsining olinishi.

4 -qadam: ma'lumotlarni ro'yxatga olish

Ma'lumotlar jurnali
Ma'lumotlar jurnali

Dastur Arduino -ning ketma -ket (TX) chiqishi orqali konvertatsiya qilingan ma'lumotlarni ASCII belgilar sifatida chiqarish uchun sozlangan. Men PIC versiyasini yaratganimda, ma'lumotlarni ko'rsatish uchun kompyuterdagi terminal dasturiga ulanishim kerak edi. Arduino IDE -ning bir afzalligi shundaki, u Serial Monitor funktsiyasiga ega. Men ketma -ket port tezligini 115.2k ga o'rnatdim va keyin Serial Monitor oynasini xuddi shu tezlikka qo'ydim. Bu erdagi skrinshotda menda mavjud bo'lgan turli xil sensorlardan chiqadigan odatiy displey ko'rsatilgan. Ko'rib turganingizdek, ma'lumotlar ba'zida mukammal emas, lekin har bir sensorning haqiqiy qiymati qanday bo'lishini osongina aniqlash mumkin.

5 -qadam: namuna oluvchi dasturiy ta'minoti

Namuna oluvchi dasturiy ta'minot
Namuna oluvchi dasturiy ta'minot

Men sizning ilovangiz uchun ma'lum kodlar to'plamini olish uchun to'plangan ma'lumotlardan qanday foydalanishingiz mumkinligini ko'rsatadigan namuna dasturiy ta'minot ro'yxatini qo'shdim. Bu misol Etekcity -dagi masofaviy savdo nuqtalarimdan biriga taqlid qilish uchun o'rnatilgan. Bir buyruq nano (D13) ga o'rnatilgan LEDni yoqadi, ikkinchisi esa LEDni o'chiradi. Agar sizda Arduino -ga o'rnatilgan LED bo'lmasa, diagrammada ko'rsatilgan qarshilik va LEDni qo'shing. Haqiqiy dasturda bu funksiya elektr rozetkasining quvvatini yoqadi/o'chiradi (o'rni yoki triak yordamida). O'zgartirish qulayligi uchun sinxronizatsiya vaqtlari, bit vaqtlari va kutilgan ma'lumotlar baytlari oldindan belgilanadi. Qolgan ma'lumotlar liniyalaridan har birini maxsus ilovangiz uchun narsalarni yoqish/o'chirish uchun ishlatishingiz mumkin. O'zingizning ehtiyojlaringizga mos keladigan "halqa" dagi LEDni yoqish/o'chirish mantig'ini belgilaydigan amaldagi buyruq kodini qo'shing.

Tavsiya: