Tartalomjegyzék:

Arduino RF érzékelő dekódoló: 5 lépés
Arduino RF érzékelő dekódoló: 5 lépés

Videó: Arduino RF érzékelő dekódoló: 5 lépés

Videó: Arduino RF érzékelő dekódoló: 5 lépés
Videó: 433MHz RF Transmitter and Receiver without Arduino | 433MHz Transmitter and Receiver HT12E Encoder 2024, Július
Anonim
Arduino RF érzékelő dekóder
Arduino RF érzékelő dekóder

Az előző házam egy előre telepített biztonsági rendszerrel érkezett, amely ajtóérzékelőket, mozgásérzékelőt és vezérlőpanelt tartalmazott. Minden keményen csatlakoztatva volt egy nagy elektronikai dobozhoz a szekrényben, és utasítások voltak a vezetékes telefon bekötésére, hogy riasztás esetén automatikusan tárcsázzon. Amikor megpróbáltam játszani vele, rájöttem, hogy az egyik ajtóérzékelő hiányosan van felszerelve, a másik pedig szakaszos a helytelen beállítás miatt. Ennyit a biztonsági cég névjegykártyáján meghirdetett professzionális telepítésről. Akkoriban az volt a megoldásom, hogy vettem pár internetes biztonsági kamerát és egy olcsó vezeték nélküli biztonsági riasztót.

Gyors előretekerés a mai napra, és ez a vezeték nélküli riasztó az alagsorom dobozában ül. Miután megvásároltam egy olcsó RF vevőt, úgy döntöttem, hogy meg tudom -e dekódolni a különféle riasztóérzékelők és távirányítók által továbbított üzeneteket. Arra gondoltam, hogy mivel mindannyian az olcsó riasztóberendezéssel dolgoztak, ezért ugyanazt az üzenetformátumot kell használniuk, csak más azonosítóval. Hamar rájöttem, hogy csak az üzenetek általános szerkezetében hasonlítanak. Így a projekt gyorsan triviálisból nagyon érdekes lett.

1. lépés: Érzékelő modulok

Érzékelő modulok
Érzékelő modulok
Érzékelő modulok
Érzékelő modulok
Érzékelő modulok
Érzékelő modulok
Érzékelő modulok
Érzékelő modulok

Amint az a fenti képeken látható, a távadók ajtónyitás -érzékelőket, mozgásérzékelőket, élesítő távirányítókat és a riasztóberendezés programozásához használt vezeték nélküli billentyűzetet tartalmaznak. Mint kiderült, ezek közül az eszközök közül kettő nem ugyanazt a szinkronizálási vagy bitidőtartamot használja. Az üzenetek hosszán kívül az egyetlen közös vonás a bitek alapformátuma. Minden bit rögzített időtartamot vesz igénybe, a nulla és az 1 közötti különbség a magas/alacsony részek működési ciklusa.

A fent látható csinos hullámforma NEM az, amit először kaptam. Mivel olyan nagy forgalom van a 433 MHz-es frekvenciasávban, meg kellett győződnöm arról, hogy aktiválnom kell az érzékelőt, mielőtt beállítottam a hatókört egyetlen trigger aktiválására. Szerencsére az érzékelők, amikor aktiválják őket, több példányt adnak ki az adatüzenetből, a távirányítók és a billentyűzet pedig továbbítja az üzeneteket, amíg le nem nyom egy gombot. A hatókör használatával meg tudtam határozni az egyes elemek szinkronizálási hosszát és az adatbit időtartamát. Amint azt korábban említettük, a szinkronizálási idők különbözőek, és a bitsejtek eltérőek, de az üzenetformátumok mindegyike alacsony szintű szinkronizálással rendelkezik, amelyet 24 adatbit és egy stopbit követ. Ez elég volt ahhoz, hogy generálhassak egy általános dekódolót a szoftverekben anélkül, hogy minden egyes eszközhöz külön kódolnom kellene.

2. lépés: Hardver

Hardver
Hardver
Hardver
Hardver

Eredetileg PIC mikrokontrollert és összeszerelési nyelvet használó érzékelő dekódolót építettem. Nemrég játszottam Arduino változatokkal, ezért gondoltam megnézem, meg tudom -e ismételni. Az egyszerű vázlat a fent látható, és van egy kép a prototípusomról. Csak annyit tettem, hogy három közös áthidaló vezetéket használtam az Arduino Nano -ról az RF vevőlapra. Teljesítményre és egyetlen adatvonalra van szükség.

Ha elolvassa az utasításokat a „3 az 1-ben idő- és időjárás-kijelzőn”, látni fogja, hogy közös RXB6, 433 MHz-es vevőt használok. Lehet, hogy az igazán olcsó vevőkészülékeket a projekthez szükséges rövid hatótávolságon belül működtetni tudja, de továbbra is javaslom a szuperheterodin vevőkészülék használatát.

3. lépés: Szoftver

A szoftver a fogadott biteket megjeleníthető ASCII karakterekké alakítja. Kimeneti a szinkronhossz értékét, valamint az 1 és 0 bit hosszát. Mivel már tudtam a szinkronizálás hosszát és a bitformátumokat, kifejezetten nekik írtam volna a szoftvert. Ehelyett úgy döntöttem, hogy megnézem, meg tudom -e írni a szinkronizálási hosszok rendezéséhez, és automatikusan kitalálom az adatbiteket. Ez megkönnyítheti a módosítást, arra az esetre, ha más formátumokat szeretnék felderíteni valamikor. Fontos megjegyezni, hogy a szoftver nem tudja, hogy az üzenet első bitje 1 vagy 0. Feltételezi, hogy 1, de ha rájön, hogy nullának kellett volna lennie, akkor megfordítja az bit a befejezett üzenetben, mielőtt elküldi a soros portot.

A szinkronizációs impulzus és az adatbitek idejét az INT0 külső megszakítási bemenet segítségével határozzák meg a megszakításkezelőt. Az INT0 elindulhat emelkedő, eső vagy mindkét szélén, vagy állandóan alacsony szinten. A szoftver mindkét szélén megszakad, és méri azt az időt, amíg az impulzus alacsony marad. Ez leegyszerűsíti a dolgokat, mert az üzenet indítása/szinkronizálása alacsony szintű impulzus, és a bitek alacsony szintű idejük alapján határozhatók meg.

A megszakításkezelő először meghatározza, hogy a rögzített szám elég hosszú -e ahhoz, hogy indítási/szinkronizációs impulzus legyen. A különböző eszközök 4, 9, 10 és 14 milliszekundumos szinkronimpulzusokat használnak. A min/max szinkronizálási értékek definiáló utasításai a szoftver elején vannak, és jelenleg 3 és 16 milliszekundumra vannak beállítva. A bitsidők is változnak az érzékelők között, ezért a bitek dekódolásának algoritmusának ezt figyelembe kell vennie. Az első bit bitideje mentésre kerül, akárcsak egy következő bit ideje, amely jelentősen eltér az első bithez képest. A későbbi bitidők közvetlen összehasonlítása nem lehetséges, ezért „fudge factor” definíciót („Variation”) használnak. A bit dekódolása abból indul ki, hogy feltételezzük, hogy az első adatbit mindig logikailag 1 kerül rögzítésre. Ezt az értéket elmenti, majd a későbbi bitek tesztelésére használja. Ha egy későbbi adatbit -szám a mentett érték varianciaablakán belül van, akkor azt logikaként is rögzíti 1. Ha a mentett érték varianciaablakán kívül van, akkor a logika 0 -ként kerül rögzítésre. Ha a logika 0 A bitidő rövidebb, mint az első bitidő, majd egy jelző jelzi a szoftvernek, hogy a bájtokat meg kell fordítani a megjelenítés előtt. Ez az algoritmus csak akkor sikertelen, ha az üzenetben szereplő bitek mindegyike 0. Elfogadhatjuk ezt a korlátozást, mert az ilyen üzenet értelmetlen.

Az engem érdeklő szenzorok üzenethossza 24 adatbit, de a szoftver nem korlátozódik erre a hosszúságra. Van egy puffer, amely legfeljebb hét bájtra terjed ki (több is hozzáadható), és meghatározza az üzenetek minimális és maximális hosszát bájtban. A szoftver úgy van beállítva, hogy összegyűjti a biteket, bájtokba konvertálja, ideiglenesen tárolja, majd ASCII formátumban adja ki a soros porton keresztül. Az üzenet kimenetét kiváltó esemény az új indítási/szinkronizációs impulzus fogadása.

4. lépés: Adatnaplózás

Adatnaplózás
Adatnaplózás

A szoftver úgy van beállítva, hogy az átalakított adatokat ASCII karakterként adja ki az Arduino soros (TX) kimenetén keresztül. Amikor elkészítettem a PIC verziót, csatlakoznom kellett a PC terminálprogramjához az adatok megjelenítéséhez. Az Arduino IDE egyik előnye, hogy beépített Serial Monitor funkcióval rendelkezik. A soros port sebességét 115,2 k -ra állítottam, majd a Serial Monitor ablakot ugyanarra a sebességre állítottam be. Az itt látható képernyőképen egy tipikus kijelző látható, amely különböző érzékelőim kimeneteivel rendelkezik. Amint láthatja, az adatok néha nem tökéletesek, de könnyen meghatározhatja az egyes érzékelők valós értékét.

5. lépés: Minta vevő szoftver

Minta vevő szoftver
Minta vevő szoftver

Mellékeltem egy minta szoftverlistát, amely bemutatja, hogyan használhatja fel az összegyűjtött információkat az adott kódkészlet fogadásához az alkalmazásához. Ez a példa az egyik Etekcity távoli konnektoromat emulálja. Az egyik parancs bekapcsolja a Nano -ba épített LED -et (D13), a másik pedig a LED -et. Ha nincs beépített LED -je az Arduino -ba, akkor adja hozzá az ellenállást és a LED -et az ábra szerint. Valódi alkalmazásban ez a funkció be-/kikapcsolja az elektromos aljzatot (relé vagy triac segítségével). A szinkronizálási idők, a bitidők és a várható adatbájtok a módosítás megkönnyítése érdekében előre definiáltak. A fennmaradó adatsorok bármelyikét használhatja az adott alkalmazás be-/kikapcsolására, stb. Csak adja hozzá az alkalmazandó parancskódot, és cserélje ki a LED be/ki logikáját „hurokban” az Ön igényeinek megfelelően.

Ajánlott: