Obsah:
- Krok 1: Moduly snímačů
- Krok 2: Hardware
- Krok 3: Software
- Krok 4: Protokolování dat
- Krok 5: Ukázka softwaru přijímače
Video: Dekodér RF senzoru Arduino: 5 kroků
2024 Autor: John Day | [email protected]. Naposledy změněno: 2024-01-30 08:21
Můj předchozí dům byl dodáván s předinstalovaným bezpečnostním systémem, který měl dveřní senzory, pohybový senzor a ovládací panel. Všechno bylo pevně zapojeno do velké skříně elektroniky ve skříni a byly tam pokyny pro zapojení pevného telefonu, aby se automaticky vytočil v případě alarmu. Když jsem si s tím zkusil hrát, zjistil jsem, že jeden ze dveřních senzorů nebyl nainstalován úplně a druhý byl přerušovaný kvůli nesprávnému vyrovnání. Tolik k profesionální instalaci nabízené na vizitce bezpečnostní společnosti. Moje řešení v té době bylo koupit pár internetových bezpečnostních kamer a levný bezdrátový bezpečnostní alarm.
Rychle vpřed k dnešku a ten bezdrátový alarm sedí v krabici v mém sklepě. Poté, co jsem získal levný RF přijímač, rozhodl jsem se zjistit, zda mohu dekódovat zprávy vysílané různými poplašnými senzory a dálkovými ovladači, které mám. Došlo mi, že jelikož všichni pracovali s levným alarmovým boxem, musí všichni používat stejný formát zprávy jen s jiným ID. Brzy jsem zjistil, že jsou podobné pouze v obecné struktuře zpráv. Projekt tedy rychle přešel od triviálního k velmi zajímavému.
Krok 1: Moduly snímačů
Jak vidíte na obrázcích výše, vysílače obsahují senzory otevřených dveří, detektory pohybu, dálkové ovládání zapnutí a bezdrátovou klávesnici používanou k programování poplachové skříňky. Jak se ukázalo, žádná z těchto dvou zařízení nepoužívají stejnou délku synchronizace nebo trvání bitů. Jedinou společnou věcí, kromě délky zprávy, je základní formát bitů. Každý bit zabírá pevné časové období, přičemž rozdíl mezi nulou a jedničkou je pracovní cyklus vysokých/nízkých částí.
Pěkná křivka uvedená výše NENÍ to, co jsem poprvé obdržel. Protože ve frekvenčním pásmu 433 MHz je tolik provozu, musel jsem se ujistit, že jsem aktivoval senzor těsně předtím, než jsem nastavil rozsah tak, aby provedl jedinou spoušť. Naštěstí senzory po aktivaci vydaly několik kopií datové zprávy a dálkové ovladače a klávesnice pokračovaly ve vydávání zpráv, dokud byla stisknuta klávesa. Použitím rozsahu jsem byl schopen určit délku synchronizace a trvání bitů dat pro každou položku. Jak již bylo zmíněno dříve, synchronizační časy jsou různé a bitové časy jsou různé, ale všechny formáty zpráv mají synchronizaci na nízké úrovni, po níž následuje 24 datových bitů a jeden stop bit. To mi stačilo na to, abych mohl v softwaru vybudovat generický dekodér, aniž bych musel napevno kódovat všechny různé detaily pro každé zařízení.
Krok 2: Hardware
Původně jsem postavil dekodér senzoru pomocí mikrokontroléru a montážního jazyka PIC. Nedávno jsem hrál s variantami Arduino, takže jsem si řekl, že uvidím, jestli to dokážu replikovat. Jednoduché schéma je uvedeno výše a je zde také obrázek mého prototypu. Jediné, co jsem udělal, bylo použít tři běžné propojovací vodiče k přechodu z Arduino Nano na desku RF přijímače. Vše, co potřebujete, je napájení a jedna datová linka.
Pokud si přečtete můj Instructable na „zobrazení času a počasí 3 v 1“, uvidíte, že používám běžný přijímač RXB6, 433 MHz. Možná budete schopni zajistit, aby skutečně levné přijímače fungovaly na krátký dosah potřebný pro tento projekt, ale přesto doporučuji použít superheterodynový přijímač.
Krok 3: Software
Software převádí přijaté bity na zobrazitelné znaky ASCII. Výstupem je hodnota délky synchronizace a délky 1 a 0 bitů. Protože jsem již znal délky synchronizace a bitové formáty, mohl jsem napsat software speciálně pro ně. Místo toho jsem se rozhodl zjistit, jestli bych to mohl napsat, abych vyřešil délky synchronizace a automaticky zjistil datové bity. To by mělo usnadnit úpravy v případě, že se chci pokusit detekovat jiné formáty v určitém čase. Je důležité si uvědomit, že software neví, zda je první bit zprávy 1 nebo 0. Předpokládá, že je to 1, ale pokud zjistí, že měla být nula, převrátí bitů v dokončené zprávě před odesláním sériového portu.
Časy synchronizačního impulsu a datových bitů se určují pomocí vstupu externího přerušení INT0 ke spuštění obsluhy přerušení. INT0 se může spouštět při stoupání, klesání nebo na obou hranách nebo při stabilní nízké úrovni. Software se přeruší na obou hranách a měří dobu, po kterou zůstává impuls nízký. To věci zjednodušuje, protože spuštění/synchronizace zprávy je nízkoúrovňový impuls a bity lze určit na základě jejich nízkoúrovňového času.
Obslužný program přerušení nejprve určí, zda je počet zachycených snímků dostatečně dlouhý na to, aby to byl impuls pro spuštění/synchronizaci. Různá zařízení, která mám, používají synchronizační impulsy 4, 9, 10 a 14 milisekund. Definiční příkazy pro minimální/maximální povolené hodnoty synchronizace jsou předem v softwaru a jsou aktuálně nastaveny na 3 a 16 milisekund. Bitové časy se také liší mezi senzory, takže algoritmus pro dekódování bitů to musí vzít v úvahu. Bitový čas prvního bitu je uložen stejně jako čas následujícího bitu, který má významný rozdíl od prvního bitu. Přímé srovnání následujících bitových časů není možné, proto se používá definice „faktoru fudge“(„variace“). Bitové dekódování začíná za předpokladu, že první datový bit je vždy zaznamenán jako logická 1. Tato hodnota je uložena a poté použita k testování následných bitů. Pokud je následný počet bitů dat v rozptylovém okně uložené hodnoty, pak je také zaznamenán jako logika 1. Pokud je mimo okno rozptylu uložené hodnoty, pak je zaznamenána jako logická 0. Pokud logická 0 bitový čas je kratší než první bitový čas, pak je nastaven příznak, který softwaru říká, že bajty je třeba před zobrazením převrátit. Jediným případem, kdy tento algoritmus selže, je, když jsou bity ve zprávě všechny 0. Můžeme přijmout toto omezení, protože tento druh zprávy nemá smysl.
Všechny senzory, které mě zajímají, mají délku zprávy 24 datových bitů, ale software není na tuto délku omezen. Existuje vyrovnávací paměť až pro sedm bajtů (lze přidat více) a definuje minimální a maximální délku zprávy v bajtech. Software je nastaven tak, aby sbíral bity, převáděl je na bajty, dočasně je ukládal a poté je odesílal ve formátu ASCII přes sériový port. Událost, která spouští výstup zprávy, je přijetí nového impulzu pro spuštění/synchronizaci.
Krok 4: Protokolování dat
Software je nastaven tak, aby přenášel převedená data jako znaky ASCII přes sériový (TX) výstup Arduina. Když jsem vytvořil verzi PIC, potřeboval jsem se připojit k terminálovému programu na PC, abych mohl zobrazit data. Jednou z výhod Arduino IDE je, že má vestavěnou funkci Serial Monitor. Nastavil jsem rychlost sériového portu na 115,2k a poté nastavil okno Serial Monitor na stejnou rychlost. Zde uvedený snímek obrazovky ukazuje typický displej s výstupy z různých senzorů, které mám. Jak vidíte, data někdy nejsou dokonalá, ale můžete snadno určit, jaká by měla být skutečná hodnota každého senzoru.
Krok 5: Ukázka softwaru přijímače
Zahrnul jsem ukázkový výpis softwaru, který ukazuje, jak můžete shromážděné informace použít k obdržení konkrétní sady kódů pro vaši aplikaci. Tento příklad je nastaven tak, aby emuloval jednu z mých vzdálených zásuvek Etekcity. Jeden příkaz zapne LED zabudovanou v Nano (D13) a druhý příkaz vypne LED. Pokud nemáte v Arduinu vestavěnou LED, přidejte odpor a LED podle obrázku. Ve skutečné aplikaci by tato funkce zapínala/vypínala elektrickou zásuvku (pomocí relé nebo triaku). Synchronizační časy, bitové časy a očekávané datové bajty jsou pro snadnou úpravu definovány předem. Můžete použít kteroukoli ze zbývajících datových linek k zapnutí/vypnutí věcí atd. Pro vaši konkrétní aplikaci. Stačí přidat příslušný definující kód příkazu a nahradit logiku zapnutí/vypnutí LED ve „smyčce“tak, aby vyhovovala vašim potřebám.
Doporučuje:
Počitadlo Arduino pomocí LED displeje TM1637 a senzoru vyhýbání se překážkám: 7 kroků
Čítač Arduino pomocí TM1637 LED displeje a senzoru vyhýbání se překážkám: V tomto tutoriálu se naučíme, jak vytvořit jednoduché číselné počítadlo pomocí LED displeje TM1637 a senzoru vyhýbání se překážkám a Visuino. Podívejte se na video
UV index měřič pomocí ML8511 ULTRAVIOLET senzoru Arduino: 6 kroků
UV indexový měřič pomocí ML8511 ULTRAVIOLET senzoru Arduino: V tomto tutoriálu se naučíme, jak měřit UV UV index pomocí ML8511 ULTRAVIOLET senzoru. Podívejte se na video! https://www.youtube.com/watch?v=i32L4nxU7_M
Měřič CO2, použití senzoru SCD30 s Arduino Mega: 5 kroků
Měřič CO2, použití senzoru SCD30 s Arduino Mega: Para medir la soustředěné de CO2, la humedad y la temperatura, el SCD30 required interaguar con el medio ambiente. la calibración ya no sea válida
Propojení teplotního senzoru DS18B20 s Arduino a ESP8266: 8 kroků
Propojení teplotního senzoru DS18B20 s Arduino a ESP8266: Hej, co se děje, lidi! Akarsh zde od CETech. Dnes přidáme do našeho arzenálu nový senzor známý jako teplotní senzor DS18B20. Jedná se o teplotní senzor podobný DHT11, ale má jinou sadu aplikací. Budeme to porovnávat s
Metody detekce vodní hladiny Arduino pomocí ultrazvukového senzoru a Funduino vodního senzoru: 4 kroky
Metody detekce hladiny vody Arduino pomocí ultrazvukového senzoru a Funduino senzoru vody: V tomto projektu vám ukážu, jak vytvořit levný detektor vody pomocí dvou metod: 1. Ultrazvukový senzor (HC-SR04) .2. Senzor vody Funduino