Cuprins:
- Pasul 1: Module senzor
- Pasul 2: Hardware
- Pasul 3: Software
- Pasul 4: înregistrarea datelor
- Pasul 5: Exemplu de software pentru receptor
Video: Decodor senzor RF Arduino: 5 pași
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:43
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
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
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
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
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:
Decodor RC5 Control de la distanță fără bibliotecă: 4 pași
RC5 Remote Control Protocol Decoder Fără bibliotecă: înainte de a decodifica rc5 discutăm mai întâi ce este comanda rc5 și care este structura acesteia. deci, practic, comanda rc5 utilizată în telecomenzile care sunt utilizate în televizoare, cd playere, d2h, sisteme home theater etc. are 13 sau 14 biți aranjați într-un
Cum se programează un decodor IR pentru controlul motorului cu curent alternativ cu mai multe viteze: 7 pași
Cum se programează un decodor IR pentru controlul motorului cu curent alternativ cu mai multe viteze: motoarele cu curent alternativ monofazate se găsesc în mod obișnuit în articolele de uz casnic, cum ar fi ventilatoarele, iar viteza lor poate fi controlată cu ușurință atunci când se utilizează un număr de înfășurări discrete pentru turațiile setate. În acest Instructable construim un controler digital care
Decodor IR cu telecomandă folosind Arduino: 7 pași
Decodor pentru telecomandă IR folosind Arduino: Hello Makers, Acesta este un tutorial complet despre cum să decodăm orice telecomandă IR. Urmează pașii mei de mai jos
Cum se utilizează receptorul IR (Decodor iR): 6 pași
Cum se utilizează receptorul IR (iR Decoder): În acest tutorial vă voi arăta pas cu pas cum să utilizați receptorul iR de la arduino. vă va arăta cum să instalați biblioteca, să primiți semnalul telecomenzii TV și să decodificați acest semnal. Receptorul iR poate fi folosit pentru a construi un contor infraroșu
Decodor Arduino cu bandă magnetică: 4 pași (cu imagini)
Decodor cu bandă magnetică Arduino: Acest instructabil arată cum să folosiți un cod disponibil gratuit, un arduino și un cititor de bandă magnetică standard pentru a scana și afișa datele stocate pe cardurile cu bandă magnetică, cum ar fi cardurile de credit, ID-urile studenților etc. Am fost inspirat să postează asta după