Obsah:

Dekodér RF senzora Arduino: 5 krokov
Dekodér RF senzora Arduino: 5 krokov

Video: Dekodér RF senzora Arduino: 5 krokov

Video: Dekodér RF senzora Arduino: 5 krokov
Video: DIY Radar With Ultrasonic Sensor And Chat-GPT Generated Arduino Code | Coders Cafe 2024, Júl
Anonim
Dekodér RF senzora Arduino
Dekodér RF senzora Arduino

Môj predchádzajúci dom bol dodávaný s predinštalovaným bezpečnostným systémom, ktorý mal dverové senzory, snímač pohybu a ovládací panel. Všetko bolo pevne zapojené do veľkej elektronickej skrinky v skrini a boli tam pokyny na zapojenie pevného telefónu, ktorý sa má automaticky vytočiť v prípade alarmu. Keď som sa s tým pokúsil hrať, zistil som, že jeden z dverových senzorov nebol nainštalovaný úplne a druhý bol prerušovaný z dôvodu nesprávneho zarovnania. Toľko k profesionálnej inštalácii ponúkanej na vizitke bezpečnostnej spoločnosti. Moje riešenie v tej dobe bolo kúpiť pár internetových bezpečnostných kamier a lacný bezdrôtový bezpečnostný alarm.

Rýchlo dopredu k dnešku a ten bezdrôtový alarm sedí v krabici v mojej pivnici. Po získaní lacného RF prijímača som sa rozhodol zistiť, či môžem dekódovať správy prenášané rôznymi poplachovými senzormi a diaľkovými ovládačmi, ktoré mám. Zistil som, že keďže všetci pracovali s lacným alarmovým boxom, musia všetci používať rovnaký formát správy s iným ID. Čoskoro som zistil, že sú podobné iba vo všeobecnej štruktúre správ. Projekt sa teda rýchlo zmenil z triviálneho na veľmi zaujímavý.

Krok 1: Moduly senzora

Moduly senzorov
Moduly senzorov
Moduly senzorov
Moduly senzorov
Moduly senzorov
Moduly senzorov
Moduly senzorov
Moduly senzorov

Ako vidíte na obrázkoch vyššie, vysielače obsahujú snímače otvorených dverí, detektory pohybu, diaľkové zapnutie stráženia a bezdrôtovú klávesnicu používanú na programovanie poplachovej skrinky. Ako sa ukazuje, žiadne dve z týchto zariadení nepoužívajú rovnakú dĺžku synchronizácie ani bitové trvanie. Jedinou spoločnou črtou, okrem dĺžky správy, je základný formát bitov. Každý bit zaberá pevné časové obdobie, pričom rozdiel medzi nulou a jednotkou predstavuje pracovný cyklus vysokých/nízkych častí.

Pekný priebeh vlny uvedený vyššie NIE je to, čo som prvýkrát dostal. Pretože vo frekvenčnom pásme 433 MHz je taká veľká prevádzka, musel som sa uistiť, že som aktivoval snímač tesne predtým, ako som nastavil rozsah tak, aby vykonal jediné spustenie. Našťastie senzory po aktivácii vydajú niekoľko kópií dátovej správy a diaľkové ovládače a klávesnica pokračujú vo vydávaní správ, pokiaľ stlačíte kláves. Použitím rozsahu som bol schopný určiť dĺžku synchronizácie a trvanie dátových bitov pre každú položku. Ako bolo uvedené vyššie, synchronizačné časy sú rôzne a bitové časy sú rôzne, ale všetky formáty správ majú synchronizáciu na nízkej úrovni, po ktorej nasleduje 24 dátových bitov a jeden stop bit. To mi stačilo na to, aby som mohol vybudovať generický dekodér v softvéri bez toho, aby som musel tvrdo kódovať všetky rôzne detaily pre každé zariadenie.

Krok 2: Hardvér

Hardvér
Hardvér
Hardvér
Hardvér

Pôvodne som postavil dekodér senzora pomocou mikrokontroléra PIC a montážneho jazyka. Nedávno som hral s variantmi Arduino, takže som si myslel, že uvidíme, či to dokážem replikovať. Jednoduchá schéma je uvedená vyššie a je tu aj obrázok môjho prototypu. Jediné, čo som urobil, bolo použiť tri bežné prepojovacie vodiče na prechod z Arduino Nano na dosku RF prijímača. Všetko, čo potrebujete, je napájanie a jedna dátová linka.

Ak si prečítate môj návod na „Zobrazenie času a počasia 3 v 1“, uvidíte, že používam bežný prijímač RXB6, 433 MHz. Možno budete môcť dosiahnuť, aby skutočne lacné prijímače pracovali na krátkom dosahu potrebnom pre tento projekt, ale stále odporúčam používať superheterodynový prijímač.

Krok 3: Softvér

Softvér prevádza prijaté bity na zobraziteľné znaky ASCII. Na výstupe je hodnota synchronizačnej dĺžky a dĺžky 1 a 0 bitov. Pretože som už poznal dĺžky synchronizácie a bitové formáty, mohol som napísať softvér špeciálne pre ne. Namiesto toho som sa rozhodol zistiť, či by som to mohol napísať, aby som zoradil dĺžky synchronizácie a automaticky zistil dátové bity. To by malo uľahčiť úpravu v prípade, že sa budem chcieť pokúsiť zistiť iné formáty v určitom čase. Je dôležité poznamenať, že softvér nevie, či je prvý bit správy 1 alebo 0. Predpokladá, že je to 1, ale ak zistí, že mala byť nula, invertuje bity v dokončenej správe pred odoslaním na sériový port.

Časy synchronizačného impulzu a dátových bitov sa určujú pomocou vstupu externého prerušenia INT0 na spustenie obsluhy prerušenia. INT0 sa môže spustiť pri stúpaní, klesaní alebo na oboch hranách alebo pri stabilnej nízkej úrovni. Softvér sa preruší na oboch hranách a meria dobu, počas ktorej zostáva pulz nízky. To veci zjednodušuje, pretože štart/synchronizácia správy je impulzom nízkej úrovne a bity je možné určiť na základe ich času na nízkej úrovni.

Obslužný program prerušenia najskôr určí, či je zachytený počet dostatočne dlhý na to, aby bol impulzom na spustenie/synchronizáciu. Rôzne zariadenia, ktoré mám, používajú synchronizačné impulzy 4, 9, 10 a 14 milisekúnd. Definované príkazy pre minimálne/maximálne povolené hodnoty synchronizácie sú v softvéri vopred a sú v súčasnosti nastavené na 3 a 16 milisekúnd. Bitové časy sa tiež líšia medzi snímačmi, takže algoritmus pre dekódovanie bitov to musí vziať do úvahy. Bitový čas prvého bitu sa uloží, rovnako ako čas nasledujúceho bitu, ktorý má významný rozdiel od prvého bitu. Priame porovnanie následných bitových časov nie je možné, takže sa používa definícia „faktora fudge“(„variácia“). Bitové dekódovanie začína za predpokladu, že prvý dátový bit je vždy zaznamenaný ako logická 1. Táto hodnota je uložená a potom použitá na testovanie nasledujúcich bitov. Ak je nasledujúci počet dátových bitov v rozpätí okna uloženej hodnoty, potom je tiež zaznamenaný ako logika 1. Ak je mimo okna rozptylu uloženej hodnoty, potom je zaznamenaný ako logická 0. Ak je logická 0 bitový čas je kratší ako prvý bitový čas, potom je nastavený príznak, ktorý softvéru hovorí, že bajty je potrebné pred zobrazením invertovať. Jediný prípad, kedy tento algoritmus zlyhá, je, keď sú všetky bity v správe 0. Toto obmedzenie môžeme prijať, pretože tento druh správy nemá zmysel.

Všetky senzory, ktoré ma zaujímajú, majú dĺžku správy 24 dátových bitov, ale softvér nie je obmedzený na túto dĺžku. Existuje vyrovnávacia pamäť až pre sedem bajtov (je možné pridať viac) a definuje minimálnu a maximálnu dĺžku správy v bajtoch. Softvér je nastavený tak, aby zhromažďoval bity, prevádzal ich na bajty, dočasne ich ukladal a potom ich odosielal vo formáte ASCII cez sériový port. Udalosť, ktorá spustí výstup správy, je prijatie nového štartovacieho/synchronizačného impulzu.

Krok 4: Záznam údajov

Záznam údajov
Záznam údajov

Softvér je nastavený tak, aby prevádzal skonvertované údaje ako znaky ASCII prostredníctvom sériového (TX) výstupu Arduina. Keď som urobil verziu PIC, potreboval som na zobrazenie údajov prepojenie s terminálovým programom na počítači PC. Jednou z výhod Arduino IDE je, že má v sebe zabudovanú funkciu sériového monitora. Nastavil som rýchlosť sériového portu na 115,2 kB a potom nastavil okno Serial Monitor na rovnakú rýchlosť. Tu na obrázku obrazovky je zobrazené typické zobrazenie s výstupmi z rôznych senzorov, ktoré mám. Ako vidíte, údaje niekedy nie sú dokonalé, ale môžete ľahko určiť, aká by mala byť skutočná hodnota každého senzora.

Krok 5: Vzorový softvér prijímača

Ukážkový softvér prijímača
Ukážkový softvér prijímača

Zahrnul som ukážkový zoznam softvéru, ktorý ukazuje, ako môžete zozbierané informácie použiť na prijatie konkrétnej sady kódov pre vašu aplikáciu. Tento príklad je nastavený tak, aby emuloval jednu z mojich vzdialených zásuviek Etekcity. Jeden príkaz zapne LED diódu zabudovanú v Nano (D13) a druhý príkaz vypne LED. Ak vo svojom Arduine nemáte zabudovanú LED, pridajte odpor a LED podľa obrázku. V skutočnej aplikácii by táto funkcia zapínala/vypínala elektrickú zásuvku (pomocou relé alebo triaku). Synchronizačné časy, bitové časy a očakávané dátové bajty sú pre jednoduchú úpravu definované vopred. Môžete použiť ktorýkoľvek zo zostávajúcich dátových riadkov na zapnutie/vypnutie vecí atď. Pre vašu konkrétnu aplikáciu. Stačí pridať príslušný definujúci kód príkazu a nahradiť logiku zapnutia/vypnutia LED v „slučke“tak, aby vyhovovala vašim potrebám.

Odporúča: