Kazalo:

Dekoder senzorja RF Arduino: 5 korakov
Dekoder senzorja RF Arduino: 5 korakov

Video: Dekoder senzorja RF Arduino: 5 korakov

Video: Dekoder senzorja RF Arduino: 5 korakov
Video: DIY Radar With Ultrasonic Sensor And Chat-GPT Generated Arduino Code | Coders Cafe 2024, Julij
Anonim
Arduino RF senzorski dekoder
Arduino RF senzorski dekoder

Moja prejšnja hiša je imela vnaprej nameščen varnostni sistem, ki je imel senzorje vrat, senzor gibanja in nadzorno ploščo. Vse je bilo trdo povezano z veliko elektronsko škatlo v omari in bila so navodila za ožičenje stacionarnega telefona za samodejno klicanje v primeru alarma. Ko sem se poskusil igrati z njim, sem odkril, da je bil eden od senzorjev vrat nepopolno nameščen, drugi pa je bil občasen zaradi nepravilne poravnave. Toliko o profesionalni namestitvi, objavljeni na vizitki varnostnega podjetja. Moja takratna rešitev je bila, da kupim nekaj internetnih varnostnih kamer in poceni brezžični varnostni alarm.

Hitro naprej v današnji dan in ta brezžični alarm sedi v škatli v moji kleti. Po nakupu poceni RF sprejemnika sem se odločil, da bom lahko dekodiral sporočila, ki jih posredujejo različni alarmni senzorji in daljinski upravljalniki, ki jih imam. Mislil sem, da morajo vsi, ker so delali s poceni alarmno omarico, vsi uporabljati isti format sporočila z samo drugačnim ID -jem. Kmalu sem ugotovil, da so si podobni le v splošni strukturi sporočil. Tako je projekt hitro prešel iz trivialnega v zelo zanimivega.

1. korak: Senzorski moduli

Senzorski moduli
Senzorski moduli
Senzorski moduli
Senzorski moduli
Senzorski moduli
Senzorski moduli
Senzorski moduli
Senzorski moduli

Kot lahko vidite na zgornjih slikah, oddajniki vključujejo senzorje za odpiranje vrat, detektorje gibanja, daljinske upravljalnike in brezžično tipkovnico, ki se uporablja za programiranje alarmnega polja. Izkazalo se je, da nobena od teh naprav ne uporablja enake dolžine sinhronizacije ali trajanja bitov. Edina skupna značilnost, razen dolžine sporočila, je osnovni format bitov. Vsak bit traja določeno časovno obdobje z razliko med ničlo in enoto delovnega cikla visokih/nizkih delov.

Zgoraj prikazana lepa valovna oblika NI tisto, kar sem prvič prejel. Ker je v 433-MHz frekvenčnem pasu toliko prometa, sem moral senzor aktivirati tik preden sem nastavil obseg za en sam sprožilec. Na srečo senzorji ob aktiviranju izdajo več kopij podatkovnega sporočila, daljinski upravljalniki in tipkovnica pa sporočila oddajajo, dokler je pritisnjena tipka. Z uporabo obsega sem lahko določil dolžino sinhronizacije in trajanje podatkovnih bitov za vsako postavko. Kot smo že omenili, so časi sinhronizacije različni, bitni časi pa različni, vendar imajo vsi formati sporočil nizko raven sinhronizacije, ki ji sledi 24 podatkovnih bitov in en zaustavitveni bit. To je bilo dovolj, da sem lahko zgradil generični dekoder v programski opremi, ne da bi moral trdo kodirati vse različne podrobnosti za vsako napravo.

2. korak: Strojna oprema

Strojna oprema
Strojna oprema
Strojna oprema
Strojna oprema

Prvotno sem zgradil senzorski dekoder z uporabo mikrokrmilnika PIC in montažnega jezika. Pred kratkim sem se igral z različicami Arduino, zato sem mislil, da bom videl, če ga lahko ponovim. Preprosta shema je prikazana zgoraj, na njej pa je tudi slika mojega prototipa. Vse, kar sem storil, je bilo, da sem uporabil tri običajne mostične žice za prehod od Arduino Nano do plošče RF sprejemnika. Potrebujete samo napajanje in eno podatkovno linijo.

Če preberete moj Instructable na “3-v-1 času in vremenskem prikazu”, boste videli, da uporabljam običajen sprejemnik RXB6, 433-MHz. Morda boste res poceni sprejemnike lahko dosegli na kratkem dosegu, ki je potreben za ta projekt, vendar vseeno priporočam uporabo superheterodinskega sprejemnika.

3. korak: Programska oprema

Programska oprema pretvori prejete bite v prikazane znake ASCII. Oddaja vrednost dolžine sinhronizacije in dolžine bitov 1 in 0. Ker sem že poznal dolžine sinhronizacije in formate bitov, bi lahko programsko opremo napisal posebej zanje. Namesto tega sem se odločil, da vidim, če ga lahko napišem, da uredim dolžine sinhronizacije in samodejno določim podatkovne bite. To bi moralo olajšati spreminjanje, če bom želel kdaj poskusiti zaznati druge formate. Pomembno je omeniti, da programska oprema ne ve, ali je prvi bit sporočila 1 ali 0. Predpostavlja, da je 1, če pa ugotovi, da bi morala biti nič, bo obrnila bitov v izpolnjenem sporočilu, preden ga pošljete prek serijskih vrat.

Časi impulza sinhronizacije in podatkovni bitovi se določijo z uporabo zunanjega vhodnega prekinitve INT0 za sprožitev upravljalnika prekinitev. INT0 se lahko sproži pri naraščajočem, padajočem ali obeh robovih ali na stabilni nizki ravni. Programska oprema se prekine na obeh robovih in meri čas, ko pulz ostane nizek. To poenostavlja stvari, ker je začetek/sinhronizacija sporočila impulz nizke ravni in bite je mogoče določiti glede na njihov čas nizke ravni.

Upravljavec prekinitev najprej ugotovi, ali je zajeto število dovolj dolgo, da je impulz zagona/sinhronizacije. Različne naprave, ki jih imam, uporabljajo sinhronizacijske impulze 4, 9, 10 in 14 milisekund. Stavki definicije za najmanjše/največje dovoljene vrednosti sinhronizacije so spredaj v programski opremi in so trenutno nastavljene na 3 in 16 milisekund. Tudi bitni časi se med senzorji razlikujejo, zato mora algoritem za dekodiranje bitov to upoštevati. Čas bita prvega bita se shrani kot čas naslednjega bita, ki se bistveno razlikuje od prvega bita. Neposredna primerjava naslednjih bitnih časov ni mogoča, zato se uporabi opredelitev "faktorja prevara" ("variacija"). Dekodiranje bitov se začne s predpostavko, da je prvi podatkovni bit vedno zabeležen kot logika 1. Ta vrednost se shrani in nato uporabi za testiranje naslednjih bitov. Če je naslednje število podatkovnih bitov znotraj okna variance shranjene vrednosti, se zabeleži tudi kot logika 1. Če je zunaj okna variance shranjene vrednosti, se zabeleži kot logika 0. Če je logika 0 bitni čas je krajši od prvega bitnega časa, nato se nastavi zastavica, ki programski opremi sporoči, da je treba pred prikazom obrniti bajte. Edini primer, ko ta algoritem ne uspe, je, ko so vsi biti v sporočilu 0. To omejitev lahko sprejmemo, ker je takšno sporočilo nesmiselno.

Vsi senzorji, ki me zanimajo, imajo dolžino sporočila 24 podatkovnih bitov, vendar programska oprema ni omejena na to dolžino. Obstaja medpomnilnik za do sedem bajtov (lahko bi jih dodali več) in določa najmanjšo in največjo dolžino sporočila v bajtih. Programska oprema je nastavljena za zbiranje bitov, njihovo pretvorbo v bajte, začasno shranjevanje in nato predvajanje v formatu ASCII prek zaporednih vrat. Dogodek, ki sproži izhod sporočila, je sprejem novega impulza zagona/sinhronizacije.

4. korak: beleženje podatkov

Zapisovanje podatkov
Zapisovanje podatkov

Programska oprema je nastavljena za oddajanje pretvorjenih podatkov kot znakov ASCII prek serijskega (TX) izhoda Arduina. Ko sem naredil različico PIC, sem se za prikaz podatkov moral povezati v terminalni program v računalniku. Ena prednost Arduino IDE je, da ima vgrajeno funkcijo Serial Monitor. Nastavil sem hitrost serijskih vrat na 115,2k in nato nastavil okno Serial Monitor na isto hitrost. Posnetek zaslona tukaj prikazuje tipičen zaslon z izhodi različnih senzorjev, ki jih imam. Kot lahko vidite, podatki včasih niso popolni, vendar lahko preprosto ugotovite, kakšna bi morala biti dejanska vrednost vsakega senzorja.

5. korak: Vzorčna programska oprema sprejemnika

Vzorec programske opreme sprejemnika
Vzorec programske opreme sprejemnika

Vključil sem vzorec seznama programske opreme, ki prikazuje, kako lahko z zbranimi informacijami prejemate določen nabor kod za vašo prijavo. Ta primer je nastavljen za posnemanje ene od mojih oddaljenih vtičnic Etekcity. En ukaz vklopi LED, vgrajeno v Nano (D13), drugi pa izklopi LED. Če v vaš Arduino nimate vgrajene LED, dodajte upor in LED, kot je prikazano na diagramu. V resnični aplikaciji bi ta funkcija vklopila/izklopila električno vtičnico (z uporabo releja ali triaka). Časi sinhronizacije, bitni časi in pričakovani podatkovni bajti so vnaprej določeni za lažje spreminjanje. Uporabite lahko katero koli od preostalih podatkovnih vrstic, da vklopite/izklopite stvari za svojo posebno aplikacijo. Samo dodajte veljavne ukazne kode in zamenjajte logiko vklopa/izklopa LED v "zanki", da ustreza vašim potrebam.

Priporočena: