Mündəricat:

Arduino RF Sensor Dekoderi: 5 addım
Arduino RF Sensor Dekoderi: 5 addım

Video: Arduino RF Sensor Dekoderi: 5 addım

Video: Arduino RF Sensor Dekoderi: 5 addım
Video: 7 segment display decoder 2024, Iyul
Anonim
Arduino RF Sensor Dekoderi
Arduino RF Sensor Dekoderi

Əvvəlki evimdə qapı sensorları, hərəkət sensoru və idarəetmə paneli olan əvvəlcədən quraşdırılmış bir təhlükəsizlik sistemi vardı. Hər şey bir dolabdakı böyük bir elektronik qutusuna bağlandı və həyəcan siqnalı olduqda avtomatik olaraq söndürmək üçün sabit bir telefonun bağlanması üçün təlimatlar var idi. Onunla oynamağa çalışanda qapı sensörlərindən birinin tam quraşdırılmadığını, digərinin isə uyğun olmayan hizalanma səbəbindən aralıq olduğunu gördüm. Təhlükəsizlik şirkətinin vizit kartında göstərilən peşəkar quraşdırma üçün. O vaxtki həllim bir neçə internet təhlükəsizlik kamerası və ucuz bir simsiz təhlükəsizlik siqnalı almaq idi.

Bu günə qədər irəli və simsiz həyəcan zirzəmimdəki bir qutuda oturur. Ucuz bir RF alıcısı aldıqdan sonra əlimdə olan müxtəlif siqnal sensorlar və pultların ötürdüyü mesajları deşifr edə biləcəyimi öyrənməyə qərar verdim. Düşündüm ki, hamısı ucuz siqnalizasiya qutusu ilə işlədikləri üçün hamısı eyni mesaj formatını fərqli bir identifikatorla istifadə etməlidirlər. Tezliklə mesajların ümumi quruluşunda oxşar olduqlarını öyrəndim. Beləliklə, layihə tez bir zamanda əhəmiyyətsizdən çox maraqlıya keçdi.

Addım 1: Sensor Modulları

Sensor Modulları
Sensor Modulları
Sensor Modulları
Sensor Modulları
Sensor Modulları
Sensor Modulları
Sensor Modulları
Sensor Modulları

Yuxarıdakı şəkillərdə gördüyünüz kimi ötürücülərə qapı açıq sensorlar, hərəkət detektorları, silahlanma pultları və siqnalizasiya qutusunun proqramlaşdırılması üçün istifadə olunan simsiz klaviatura daxildir. Göründüyü kimi, bu cihazlardan heç biri eyni sinxronizasiya uzunluğunu və ya bit müddətini istifadə etmir. Mesaj uzunluğundan başqa yeganə ümumi cəhət bitlərin əsas formatıdır. Hər bir bit, yüksək/aşağı hissələrin vəzifə dövrü olan sıfır ilə bir arasındakı fərqlə sabit bir zaman dövrü alır.

Yuxarıda göstərilən gözəl dalğa forması ilk aldığım şey deyil. 433 MHz tezlik diapazonunda çox trafik olduğu üçün, tək bir tətik etmə sahəsini təyin etməzdən əvvəl sensoru işə salmağım lazım idi. Xoşbəxtlikdən, sensorlar işə salındıqda məlumat mesajının bir neçə nüsxəsini çıxarır və bir düyməyə basıldığı müddətcə uzaqdan idarəetmə və klaviatura mesajları verməyə davam edir. Sahəni istifadə edərək, hər bir maddə üçün sinxronizasiya uzunluğunu və məlumat bit müddətlərini təyin edə bildim. Daha əvvəl qeyd edildiyi kimi, sinxronizasiya vaxtları fərqlidir və bit vaxtları fərqlidir, lakin mesaj formatlarının hamısı aşağı səviyyəli bir sinxronizasiyaya malikdir, sonra 24 məlumat biti və bir dayanma biti var. Bu, hər bir cihaz üçün fərqli detalların hamısını kodlaşdırmadan proqramda ümumi bir dekoder qura bilməyim üçün kifayət idi.

Addım 2: Avadanlıq

Avadanlıq
Avadanlıq
Avadanlıq
Avadanlıq

Əvvəlcə bir PIC mikro nəzarətçi və montaj dilindən istifadə edərək bir sensor dekoder qurdum. Bu yaxınlarda Arduino variantları ilə oynadım, buna görə də bunu təkrarlaya biləcəyimi düşündüm. Sadə sxem yuxarıda göstərilmişdir və mənim prototipimin şəkli də var. Etdiyim şey Arduino Nanodan RF alıcı lövhəsinə keçmək üçün üç ümumi keçid teli istifadə etmək idi. Güc və tək bir məlumat xətti lazım olan hər şeydir.

Təlimatçımı "3-ü-1-də Zaman və Hava Göstərişində" oxusanız, ümumi bir RXB6, 433-MHz qəbuledici istifadə etdiyimi görəcəksiniz. Həqiqətən ucuz alıcıları bu layihə üçün lazım olan qısa müddətdə işləməyə məcbur edə bilərsiniz, amma yenə də super heterodin qəbuledicisindən istifadə etməyi məsləhət görürəm.

Addım 3: Proqram təminatı

Proqram, alınan bitləri görünən ASCII simvollarına çevirir. Sinxronizasiya uzunluğunun dəyərini və 1 və 0 bit uzunluqlarını çıxarır. Sinxronizasiya uzunluqlarını və bit formatlarını artıq bildiyim üçün proqramı onlar üçün xüsusi olaraq yaza bilərdim. Bunun əvəzinə, sinxronizasiya uzunluqlarını sıralamaq və məlumat bitlərini avtomatik olaraq anlamaq üçün yaza biləcəyimi görməyə qərar verdim. Bir anda digər formatları aşkar etməyə çalışmaq istəsəm, bu, dəyişdirməyi asanlaşdırmalıdır. Proqramın mesajın ilk bitinin 1 və ya 0 olduğunu bilmədiyini qeyd etmək vacibdir. Bunun 1 olduğunu zənn edir, ancaq sıfır olması lazım olduğunu başa düşsə, mesajı tərsinə çevirəcək. bit portunu göndərməzdən əvvəl tamamlanmış mesajı bit.

Sinxronlaşdırma nəbzinin və məlumat bitlərinin vaxtları INT0 xarici kəsmə girişindən istifadə edərək müəyyən edilir. INT0 yüksələn, düşən və ya hər iki kənarda və ya sabit aşağı səviyyədə tetikleyebilir. Proqram hər iki kənarda kəsilir və nəbzin aşağı qalma müddətini ölçür. Mesajın başlaması/sinxronizasiyası aşağı səviyyəli bir nəbzdir və bitlər aşağı səviyyəli vaxtlarına görə müəyyən edilə biləcəyi üçün işləri asanlaşdırır.

Kəsmə işçisi əvvəlcə tutulan sayın başlanğıc/sinxronizasiya nəbzi olmaq üçün kifayət qədər uzun olub -olmadığını müəyyən edir. Sahib olduğum müxtəlif qurğular 4, 9, 10 və 14 milisaniyəlik sinxron pulslardan istifadə edir. Min/maksimum icazə verilən sinxronizasiya dəyərləri üçün təyin olunan ifadələr proqramın ön tərəfindədir və hazırda 3 və 16 milisaniyəyə təyin olunur. Bit vaxtları da sensorlar arasında dəyişir, buna görə bitlərin deşifr edilməsi alqoritmi bunu nəzərə almalıdır. İlk bitin bit vaxtı, ilk bitdən əhəmiyyətli dərəcədə fərqlənən sonrakı bit zamanı kimi saxlanılır. Sonrakı bit vaxtlarının birbaşa müqayisəsi mümkün deyildir, buna görə də "fudge faktoru" müəyyən edir ("Variasiya"). Bitin deşifr edilməsi, ilk məlumat bitinin hər zaman 1 məntiq olaraq qeyd edildiyini güman etməklə başlayır. Bu dəyər saxlanılır və sonrakı bitləri yoxlamaq üçün istifadə olunur. Növbəti məlumat biti sayının saxlanılan dəyərin dispersiya pəncərəsində olması halında, o da məntiq 1 olaraq qeyd olunur. Əgər qeyd olunan dəyərin dispersiya pəncərəsinin xaricindədirsə, məntiq 0 olaraq qeyd olunur. Əgər məntiq 0 bit vaxtı ilk bit vaxtından daha qısadır, sonra bayrağın göstərilməzdən əvvəl baytların ters çevrilməsi lazım olduğunu bildirən bir bayraq qurulur. Bu alqoritmin uğursuz olduğu yeganə hal mesajdakı bitlərin hamısının 0 olmasıdır. Bu məhdudiyyəti qəbul edə bilərik, çünki bu cür mesajlar mənasızdır.

Hamısının maraqlandığı sensorlar 24 bitlik bir mesaj uzunluğuna malikdir, lakin proqram bu uzunluqla məhdudlaşmır. Yeddi bayta qədər bir tampon var (daha çoxu əlavə edilə bilər) və baytlarda minimum və maksimum mesaj uzunluğunu təyin edir. Proqram, bitləri toplamaq, baytlara çevirmək, müvəqqəti saxlamaq və sonra ardıcıl port vasitəsilə ASCII formatında çıxarmaq üçün qurulmuşdur. Mesajın çıxışını tetikleyen hadisə, yeni bir başlanğıc/sinxronlaşdırma nəbzinin alınmasıdır.

Addım 4: Məlumat Qeydiyyatı

Məlumat Qeydiyyatı
Məlumat Qeydiyyatı

Proqram, Arduinonun serial (TX) çıxışı vasitəsi ilə çevrilən məlumatları ASCII simvolu olaraq çıxarmaq üçün qurulmuşdur. PIC versiyasını hazırladığımda məlumatları göstərmək üçün kompüterdəki bir terminal proqramı ilə əlaqə saxlamalı oldum. Arduino IDE -nin bir üstünlüyü, Serial Monitor funksiyasına sahib olmasıdır. Serial port sürətini 115.2k olaraq təyin etdim və sonra Serial Monitor pəncərəsini eyni nisbətə qoydum. Buradakı ekran görüntüsü, sahib olduğum müxtəlif sensorlardan çıxan tipik bir ekranı göstərir. Gördüyünüz kimi, məlumatlar bəzən mükəmməl deyil, ancaq hər bir sensorun əsl dəyərinin nə olduğunu asanlıqla təyin edə bilərsiniz.

Addım 5: Nümunə Alıcı Proqramı

Nümunə Alıcı Proqramı
Nümunə Alıcı Proqramı

Tətbiqiniz üçün xüsusi bir kod dəsti əldə etmək üçün toplanmış məlumatlardan necə istifadə edə biləcəyinizi göstərən bir nümunə proqram siyahısı daxil etdim. Bu nümunə Etekcity uzaq satış nöqtələrimdən birini təqlid etmək üçün qurulmuşdur. Bir əmr Nano (D13) daxilində olan LED -i yandırır, digər əmr isə LED -i söndürür. Arduino -ya quraşdırılmış bir LED yoxdursa, diaqramda göstərildiyi kimi rezistoru və LED -i əlavə edin. Həqiqi bir tətbiqdə bu funksiya elektrik prizinin gücünü açar/söndürər (röle və ya triak istifadə edərək). Sinxronizasiya vaxtları, bit vaxtları və gözlənilən məlumat baytlarının hamısı modifikasiya asanlığı üçün əvvəlcədən təyin edilmişdir. Qalan məlumat xətlərindən hər hansı birini xüsusi tətbiqiniz üçün açmaq/söndürmək üçün istifadə edə bilərsiniz. Tətbiq olunan əmr kodunu təyin edin və ehtiyaclarınıza uyğun olaraq "loop" da LED açma/söndürmə məntiqini dəyişdirin.

Tövsiyə: