Taula de continguts:

Descodificador de sensor RF Arduino: 5 passos
Descodificador de sensor RF Arduino: 5 passos

Vídeo: Descodificador de sensor RF Arduino: 5 passos

Vídeo: Descodificador de sensor RF Arduino: 5 passos
Vídeo: Arduino + Baofeng Project: APRS Mode 2024, Desembre
Anonim
Descodificador de sensor RF Arduino
Descodificador de sensor RF Arduino

La meva casa anterior venia amb un sistema de seguretat preinstal·lat que tenia sensors de porta, un sensor de moviment i un tauler de control. Tot estava connectat a una gran caixa electrònica d’un armari i hi havia instruccions per connectar un telèfon fix per marcar automàticament en cas d’alarma. Quan vaig intentar jugar amb ell, vaig descobrir que un dels sensors de la porta estava instal·lat de forma incompleta i un altre era intermitent a causa d’un alineament incorrecte. Tant és la instal·lació professional que apareix a la targeta de la companyia de seguretat. La meva solució en aquell moment era comprar un parell de càmeres de seguretat a Internet i una alarma de seguretat sense fils econòmica.

Avança ràpidament fins avui i aquesta alarma sense fil està asseguda en una caixa del meu soterrani. Després d’adquirir un receptor de RF de baix preu, vaig decidir veure si podia descodificar els missatges transmesos per la varietat de sensors d’alarma i comandaments a distància que tinc. Vaig pensar que, ja que tots treballaven amb la caixa d'alarma barata, tots havien d'utilitzar el mateix format de missatge amb només un identificador diferent. Aviat em vaig assabentar que només són similars en l’estructura general dels missatges. Per tant, el projecte va passar ràpidament de trivial a molt interessant.

Pas 1: mòduls de sensor

Mòduls sensorials
Mòduls sensorials
Mòduls sensorials
Mòduls sensorials
Mòduls sensorials
Mòduls sensorials
Mòduls sensorials
Mòduls sensorials

Com podeu veure a les imatges anteriors, els transmissors inclouen sensors d’obertura de porta, detectors de moviment, comandaments a distància d’armament i un teclat sense fils que s’utilitza per programar la caixa d’alarma. Resulta que cap d'aquests dispositius utilitza la mateixa longitud de sincronització o durada de bits. L’únic punt en comú, que no sigui la longitud del missatge, és el format bàsic dels bits. Cada bit ocupa un període de temps fixat, la diferència entre un zero i un és el cicle de treball de les porcions alta / baixa.

La bonica forma d'ona que es mostra a sobre NO és la que vaig rebre per primera vegada. Com que hi ha molt de trànsit a la banda de freqüència de 433 MHz, em vaig haver d’assegurar d’activar el sensor just abans d’establir l’abast per fer un sol activador. Afortunadament, els sensors publiquen diverses còpies del missatge de dades quan s’activen i els comandaments a distància i el teclat continuen emetent missatges mentre es prem una tecla. En utilitzar l’abast, vaig poder determinar la durada de la sincronització i la durada del bit de dades per a cada element. Com es va esmentar anteriorment, els temps de sincronització són diferents i els temps de bits són diferents, però tots els formats de missatge tenen una sincronització de nivell baix seguida de 24 bits de dades i un bit de parada. Això va ser suficient per a mi per poder construir un descodificador genèric en programari sense haver de codificar tots els detalls de cada dispositiu.

Pas 2: maquinari

Maquinari
Maquinari
Maquinari
Maquinari

Originalment vaig construir un descodificador de sensors mitjançant un microcontrolador PIC i un llenguatge de muntatge. Fa poc que he estat jugant amb variants d’Arduino, així que vaig pensar si podia replicar-lo. A la part superior es mostra l’esquema senzill i també hi ha una imatge del meu prototip. Tot el que vaig fer va ser utilitzar tres cables de pont comuns per anar des de l’Arduino Nano a la placa de recepció de RF. L'alimentació i una única línia de dades són només els que es necessiten.

Si llegiu la meva instrucció a la pantalla de temps i temps 3 en 1, veureu que faig servir un receptor RXB6 comú de 433 MHz. És possible que pugueu aconseguir que els receptors realment econòmics funcionin al curt abast necessari per a aquest projecte, però us recomano utilitzar un receptor superheterodí.

Pas 3: programari

El programari converteix els bits rebuts en caràcters ASCII visualitzables. Emet el valor de la longitud de sincronització i les longituds dels bits 1 i 0. Com que ja sabia les longituds de sincronització i els formats de bits, podria haver escrit el programari específicament per a ells. En el seu lloc, vaig decidir veure si podia escriure-ho per ordenar les longituds de sincronització i esbrinar automàticament els bits de dades. Això hauria de facilitar la modificació en cas que vull intentar detectar altres formats en algun moment. És important tenir en compte que el programari no sap si el primer bit d'un missatge és un 1 o un 0. Suposa que és un 1 però, si esbrina que hauria d'haver estat un zero, invertirà el bits del missatge completat abans d’enviar-lo al port sèrie.

Els temps del pols de sincronització i els bits de dades es determinen mitjançant l’entrada d’interrupció externa INT0 per activar un controlador d’interrupcions. INT0 es pot activar en pujades, baixades o ambdues vores, o en un nivell baix constant. El programari s’interromp a les dues vores i mesura el temps que el pols continua baix. Això simplifica les coses perquè l’inici / sincronització del missatge és un impuls de baix nivell i els bits es poden determinar en funció del seu temps de baix nivell.

El controlador d’interrupcions primer determina si el recompte capturat és prou llarg per ser un impuls d’inici / sincronització. Els diversos dispositius que tinc fan servir impulsos de sincronització de 4, 9, 10 i 14 mil·lisegons. Les sentències de definició dels valors de sincronització mínims / màxims permesos es mostren per primera vegada al programari i actualment estan configurades per a 3 i 16 mil·lisegons. Els temps de bits també varien entre els sensors, de manera que l’algorisme per descodificar bits ha de tenir-ho en compte. El temps de bit del primer bit es guarda, així com el temps d’un bit posterior que té una diferència significativa respecte al primer bit. No és possible una comparació directa dels temps de bits posteriors, de manera que s'utilitza una definició de "factor fudge" ("Variació"). La descodificació de bits comença assumint que el primer bit de dades sempre s’enregistra com a lògica 1. Aquest valor es desa i després s’utilitza per provar els bits posteriors. Si un recompte de bits de dades posterior es troba dins de la finestra de variància del valor desat, també es registra com a lògica 1. Si es troba fora de la finestra de variància del valor desat, es registra com a lògica 0. Si la lògica 0 el temps de bits és més curt que el primer temps de bits; aleshores es marca un indicador per indicar al programari que cal invertir els bytes abans de mostrar-los. L’únic cas en què falla aquest algorisme és quan els bits d’un missatge són tots 0. Podem acceptar aquesta limitació perquè aquest tipus de missatge no té sentit.

Els sensors que m’interessen tenen una longitud de missatge de 24 bits de dades, però el programari no es limita a aquesta longitud. Hi ha un buffer de fins a set bytes (es poden afegir més) i defineix la longitud mínima i màxima del missatge en bytes. El programari està configurat per recollir els bits, convertir-los en bytes, emmagatzemar-los temporalment i, a continuació, enviar-los en format ASCII a través del port sèrie. L’esdeveniment que activa la sortida del missatge és la recepció d’un nou impuls d’inici / sincronització.

Pas 4: registre de dades

Registre de dades
Registre de dades

El programari està configurat per generar les dades convertides com a caràcters ASCII mitjançant la sortida serial (TX) de l'Arduino. Quan vaig fer la versió PIC, necessitava connectar-me a un programa terminal del PC per mostrar les dades. Un dels avantatges de l'IDE Arduino és que té una funció de monitor sèrie integrada. He establert la velocitat del port sèrie a 115,2 k i, a continuació, he configurat la finestra del monitor sèrie a la mateixa velocitat. La captura de pantalla aquí mostra una pantalla típica amb sortides d'una gran varietat de sensors que tinc. Com podeu veure, les dades de vegades no són perfectes, però podeu determinar fàcilment quin ha de ser el valor real de cada sensor.

Pas 5: programari del receptor de mostra

Programari de receptors de mostra
Programari de receptors de mostra

He inclòs una llista de programes de mostra que mostra com podeu utilitzar la informació recopilada per rebre un conjunt específic de codis per a la vostra aplicació. Aquest exemple està configurat per emular un dels meus punts de venda remots Etekcity. Una ordre encén el LED integrat al Nano (D13) i l'altra ordre apaga el LED. Si no teniu un LED integrat a l'Arduino, afegiu la resistència i el LED tal com es mostra al diagrama. En una aplicació real, aquesta funció activaria / apagaria una presa de corrent (mitjançant un relé o un triac). Els temps de sincronització, els temps de bits i els bytes de dades esperats es defineixen per avançat per facilitar la modificació. Podeu utilitzar qualsevol de les línies de dades restants per activar / desactivar les coses, etc. per a la vostra aplicació específica. Només cal afegir la definició de codi d’ordre aplicable i substituir la lògica d’encès / apagat del LED en “bucle” per adaptar-la a les seves necessitats.

Recomanat: