Cuprins:

Decodor senzor RF Arduino: 5 pași
Decodor senzor RF Arduino: 5 pași

Video: Decodor senzor RF Arduino: 5 pași

Video: Decodor senzor RF Arduino: 5 pași
Video: Discovering the 433MHz RF Transmitter/Receiver: Unpacking and First Impressions 😲😲 #diy #arduino 2024, Noiembrie
Anonim
Decodator senzor Arduino RF
Decodator senzor Arduino RF

Casa mea anterioară venea cu un sistem de securitate preinstalat care avea senzori de ușă, un senzor de mișcare și un panou de control. Totul era conectat greu la o cutie electronică mare dintr-un dulap și existau instrucțiuni pentru conectarea unui telefon fix pentru a forma automat în caz de alarmă. Când am încercat să mă joc cu el, am descoperit că unul dintre senzorii ușii era instalat incomplet, iar altul era intermitent din cauza alinierii necorespunzătoare. La fel de mult pentru instalarea profesională menționată pe cartea de vizită a companiei de securitate. Soluția mea de atunci era să cumpăr câteva camere de securitate pe internet și o alarmă de securitate wireless ieftină.

Înainte până astăzi și alarma fără fir stă într-o cutie din subsolul meu. După achiziționarea unui receptor RF ieftin, am decis să văd dacă pot decoda mesajele transmise de varietatea de senzori de alarmă și telecomenzi pe care le am. M-am gândit că, deoarece toți au lucrat cu caseta de alarmă ieftină, toți trebuie să folosească același format de mesaj cu doar un alt ID. Curând am aflat că sunt similare doar în structura generală a mesajelor. Așadar, proiectul a trecut rapid de la banal la foarte interesant.

Pasul 1: Module senzor

Module senzoriale
Module senzoriale
Module senzoriale
Module senzoriale
Module senzoriale
Module senzoriale
Module senzoriale
Module senzoriale

După cum puteți vedea în imaginile de mai sus, emițătoarele includ senzori de ușă deschisă, detectoare de mișcare, telecomandă de armare și o tastatură wireless utilizată pentru programarea cutiei de alarmă. Se pare că niciunul dintre aceste dispozitive nu utilizează aceeași lungime de sincronizare sau durată de biți. Singura comunitate, în afară de lungimea mesajului, este formatul de bază al biților. Fiecare bit ocupă o perioadă de timp fixă, diferența dintre un zero și unul fiind ciclul de funcționare al porțiunilor înalte / mici.

Forma de undă frumoasă prezentată mai sus NU este ceea ce am primit prima dată. Deoarece există atât de mult trafic în banda de frecvență de 433 MHz, a trebuit să mă asigur că activez senzorul chiar înainte de a seta scopul pentru a face un singur declanșator. Din fericire, senzorii publică mai multe copii ale mesajului de date când sunt activate și telecomandele și tastatura continuă să trimită mesaje atâta timp cât este apăsată o tastă. Prin utilizarea scopului am putut determina lungimea sincronizării și duratele bitului de date pentru fiecare element. După cum sa menționat anterior, timpii de sincronizare sunt diferiți și timpii de biți sunt diferiți, dar formatele mesajelor au toate o sincronizare de nivel scăzut, urmată de 24 de biți de date și un bit de oprire. Acest lucru mi-a fost suficient pentru a putea construi un decodor generic în software, fără a fi nevoie să codez toate detaliile diferite pentru fiecare dispozitiv.

Pasul 2: Hardware

Hardware
Hardware
Hardware
Hardware

Am construit inițial un decodor senzor folosind un microcontroler PIC și un limbaj de asamblare. M-am jucat recent cu variantele Arduino, așa că m-am gândit să văd dacă aș putea să o reproduc. Schema simplă este prezentată mai sus și există, de asemenea, o imagine a prototipului meu. Tot ce am făcut a fost să folosesc trei fire comune pentru a merge de la Arduino Nano la placa receptorului RF. Este necesară puterea și o singură linie de date.

Dacă citiți Instructabilul meu pe „Afișajul timpului și vremii 3-în-1”, veți vedea că folosesc un receptor comun RXB6, 433 MHz. Este posibil să puteți obține receptoarele cu adevărat ieftine pentru a funcționa la distanța scurtă necesară pentru acest proiect, dar totuși vă recomand să utilizați un receptor super-heterodin.

Pasul 3: Software

Software-ul convertește biții primiți în caractere ASCII afișabile. Se afișează valoarea lungimii de sincronizare și lungimile celor 1 și 0 biți. Deoarece știam deja lungimile de sincronizare și formatele de biți, aș fi putut scrie software-ul special pentru ele. În schimb, am decis să văd dacă pot să-l scriu pentru a rezolva lungimile de sincronizare și pentru a afla automat biții de date. Acest lucru ar trebui să ușureze modificarea în cazul în care vreau să încerc să detectez alte formate la un moment dat. Este important să rețineți că software-ul nu știe dacă primul bit al unui mesaj este 1 sau 0. Acesta presupune că este 1, dar, dacă își dă seama că ar fi trebuit să fie zero, va inversa biți în mesajul completat înainte de a-l trimite pe portul serial.

Timpii impulsului de sincronizare și biții de date sunt determinați utilizând intrarea de întrerupere externă INT0 pentru a declanșa un handler de întrerupere. INT0 se poate declanșa la creșterea, scăderea sau ambele margini sau la un nivel scăzut constant. Software-ul este întrerupt pe ambele margini și măsoară perioada de timp în care pulsul rămâne scăzut. Acest lucru simplifică lucrurile, deoarece mesajul de pornire / sincronizare este un impuls de nivel scăzut și biții pot fi determinați pe baza timpului lor de nivel scăzut.

Handlerul de întrerupere determină mai întâi dacă numărul capturat este suficient de lung pentru a fi un impuls de pornire / sincronizare. Diferitele dispozitive pe care le folosesc folosesc impulsuri de sincronizare de 4, 9, 10 și 14 milisecunde. Instrucțiunile de definire pentru valorile de sincronizare permise min / max sunt în față în software și sunt setate în prezent pentru 3 și 16 milisecunde. Timpii de biți variază, de asemenea, între senzori, astfel încât algoritmul pentru decodarea biților trebuie să ia în considerare acest lucru. Timpul de bit al primului bit este salvat la fel ca și timpul unui bit ulterior care are o diferență semnificativă față de primul bit. O comparație directă a timpilor de biți ulteriori nu este posibilă, astfel încât este utilizat un „factor fudge” definit („Variație”). Decodarea biților începe prin presupunerea că primul bit de date este întotdeauna înregistrat ca o logică 1. Această valoare este salvată și apoi utilizată pentru a testa biții următori. Dacă un număr de biți de date ulterior se află în fereastra de varianță a valorii salvate, atunci este, de asemenea, înregistrat ca o logică 1. Dacă se află în afara ferestrei de varianță a valorii salvate, atunci este înregistrat ca o logică 0. Dacă logica 0 timpul de biți este mai scurt decât primul timp de biți, apoi este setat un semnalizator pentru a spune software-ului că octeții trebuie inversați înainte de afișare. Singurul caz în care acest algoritm eșuează este când biții dintr-un mesaj sunt toți 0. Putem accepta această limitare deoarece acest tip de mesaj nu are sens.

Senzorii de care mă interesează au o lungime a mesajului de 24 de biți de date, dar software-ul nu este limitat la acea lungime. Există un buffer pentru până la șapte octeți (se pot adăuga mai mulți) și definește lungimea minimă și maximă a mesajului în octeți. Software-ul este configurat pentru a colecta biții, a le converti în octeți, a le stoca temporar și apoi a le scoate în format ASCII prin portul serial. Evenimentul care declanșează ieșirea mesajului este primirea unui nou impuls de pornire / sincronizare.

Pasul 4: înregistrarea datelor

Înregistrarea datelor
Înregistrarea datelor

Software-ul este configurat pentru a transmite datele convertite ca caractere ASCII prin ieșirea serială (TX) a Arduino. Când am realizat versiunea PIC, trebuia să mă conectez la un program terminal de pe computer pentru a afișa datele. Un avantaj al Arduino IDE este că are o funcție Serial Monitor încorporată. Am stabilit rata portului serial la 115,2k și apoi setez fereastra Serial Monitor la aceeași rată. Captura de ecran de aici arată un afișaj tipic cu ieșiri dintr-o varietate de senzori pe care îi am. După cum puteți vedea, datele nu sunt uneori perfecte, dar puteți determina cu ușurință care ar trebui să fie valoarea reală a fiecărui senzor.

Pasul 5: Exemplu de software pentru receptor

Software de recepție de probă
Software de recepție de probă

Am inclus un exemplu de listă de software care arată cum puteți utiliza informațiile colectate pentru a primi un set specific de coduri pentru aplicația dvs. Acest exemplu este configurat pentru a emula una dintre prizele mele la distanță Etekcity. O comandă pornește LED-ul încorporat în Nano (D13), iar cealaltă comandă stinge LED-ul. Dacă nu aveți un LED încorporat în Arduino, adăugați rezistorul și LED-ul așa cum se arată în diagramă. Într-o aplicație reală, această funcție ar porni / opri alimentarea pentru o priză electrică (folosind un releu sau un triac). Timpii de sincronizare, timpii de biți și octeții de date așteptați sunt definiți pentru a facilita modificarea. Puteți utiliza oricare dintre liniile de date rămase pentru a activa / dezactiva lucrurile etc. pentru aplicația dvs. specifică. Doar adăugați codurile de comandă aplicabile definite și înlocuiți LED-ul on / off logic în „buclă” pentru a se potrivi nevoilor dumneavoastră.

Recomandat: