INHOUDSOPGAWE:

Arduino RF -sensor -dekodeerder: 5 stappe
Arduino RF -sensor -dekodeerder: 5 stappe

Video: Arduino RF -sensor -dekodeerder: 5 stappe

Video: Arduino RF -sensor -dekodeerder: 5 stappe
Video: Драм-секвенсор Arduino: 8 дорожек, 16 шагов на такт, 8 тактов на паттерн 2024, Julie
Anonim
Arduino RF -sensor -dekodeerder
Arduino RF -sensor -dekodeerder

My vorige huis het 'n vooraf geïnstalleerde sekuriteitstelsel met deursensors, 'n bewegingsensor en 'n bedieningspaneel. Alles was vasgemaak aan 'n groot elektroniese boks in die kas en daar was instruksies vir die bedrading van 'n vaste telefoon om outomaties te skakel in geval van 'n alarm. Toe ek probeer om daarmee te speel, het ek ontdek dat een van die deursensors onvolledig geïnstalleer is en dat 'n ander onderbreek is weens onbehoorlike belyning. Soveel vir die professionele installasie wat op die visitekaartjie van die veiligheidsmaatskappy verskyn. My oplossing destyds was om 'n paar internetbeveiligingskameras en 'n goedkoop draadlose sekuriteitsalarm te koop.

Vinnig vorentoe na vandag en die draadlose alarm sit in 'n boks in my kelder. Nadat ek 'n goedkoop RF -ontvanger aangeskaf het, het ek besluit om te kyk of ek die boodskappe wat deur die verskillende alarmsensors en afstandsbedienings is, kan dekodeer. Ek het gedink dat hulle almal dieselfde boodskapformaat met 'n ander ID moet gebruik, aangesien almal met die goedkoop alarmkas gewerk het. Ek het gou uitgevind dat hulle net dieselfde is in die algemene struktuur van die boodskappe. Die projek het dus vinnig van triviaal na baie interessant gegaan.

Stap 1: Sensormodules

Sensormodules
Sensormodules
Sensormodules
Sensormodules
Sensormodules
Sensormodules
Sensormodules
Sensormodules

Soos u op die foto's hierbo kan sien, bevat die senders deursensors, bewegingsdetektore, inskakelafstandsbedieners en 'n draadlose bedieningspaneel wat gebruik word om die alarmkas te programmeer. Soos dit blyk, gebruik nie twee van hierdie toestelle dieselfde sinkronlengte of bitduur nie. Die enigste gemeenskaplikheid, behalwe die boodskaplengte, is die basiese formaat van die stukkies. Elke bietjie neem 'n vaste tydsperiode in, met die verskil tussen 'n nul en 'n een die dienssiklus van die hoë/lae gedeeltes.

Die mooi golfvorm hierbo is NIE wat ek die eerste keer ontvang het nie. Omdat daar soveel verkeer in die frekwensieband van 433 MHz was, moes ek seker maak dat ek die sensor aktiveer net voordat ek die omvang stel om 'n enkele sneller te doen. Gelukkig het die sensors verskeie afskrifte van die databoodskap geplaas wanneer dit geaktiveer is, en die afstandsbedienings en die bedieningspaneel hou aan om boodskappe uit te stuur, solank 'n toets ingedruk word. Deur die omvang te gebruik, kon ek die sinchronisasielengte en die databitduur vir elke item bepaal. Soos voorheen genoem, is die sinkronisasie tye anders en die bytye is anders, maar die boodskapformate het almal 'n lae vlak sinchronisasie gevolg deur 24 databits en een stopbit. Dit was genoeg dat ek 'n generiese dekodeerder in sagteware kon bou sonder om al die verskillende besonderhede vir elke toestel hard te kodeer.

Stap 2: Hardeware

Hardeware
Hardeware
Hardeware
Hardeware

Ek het oorspronklik 'n sensor -dekodeerder gebou met 'n PIC -mikrobeheerder en monteringstaal. Ek het onlangs met Arduino -variante gespeel, so ek het gedink ek sal kyk of ek dit kan herhaal. Die eenvoudige skema word hierbo getoon en daar is ook 'n prentjie van my prototipe. Al wat ek gedoen het, was om drie gewone springdrade te gebruik om van die Arduino Nano na die RF -ontvangerbord te gaan. Krag en 'n enkele data lyn is al wat nodig is.

As u my instruksies op die '3-in-1 tyd- en weerweergawe' lees, sal u sien dat ek 'n gewone RXB6-ontvanger van 433 MHz gebruik. U kan moontlik die baie goedkoop ontvangers op die kort afstand wat vir hierdie projek benodig word, laat werk, maar ek beveel steeds aan om 'n super-heterodyne-ontvanger te gebruik.

Stap 3: sagteware

Die sagteware omskep die ontvangen stukkies in vertoonbare ASCII -karakters. Dit gee die waarde van die sinkronlengte en die lengtes van die 1 en 0 bisse uit. Omdat ek reeds die sinchronisasie lengtes en die bitformate geken het, kon ek die sagteware spesifiek daarvoor geskryf het. In plaas daarvan het ek besluit om te kyk of ek dit kan skryf om die sinchronisasie lengtes uit te sorteer en om outomaties die stukkies van die data uit te vind. Dit moet dit makliker maak om aan te pas as ek op 'n stadium ander formate wil opspoor. Dit is belangrik om daarop te let dat die sagteware nie weet of die eerste deel van 'n boodskap 'n 1 of 'n 0 is nie. Dit neem aan dat dit 'n 1 is, maar as dit uitvind dat dit 'n nul moes gewees het, sal dit die stukkies in die voltooide boodskap voordat dit deur die reekspoort gestuur word.

Die tye van die sinchronisasiepuls en die databits word bepaal deur die INT0 -eksterne onderbreekinvoer te gebruik om 'n onderbrekingshanteerder te aktiveer. INT0 kan lei tot stygende, dalende of albei kante, of op 'n konstante lae vlak. Die sagteware word aan beide kante onderbreek en meet die tyd wat die pols laag bly. Dit vergemaklik dinge omdat die begin/sinkronisering van die boodskap 'n lae-vlak pols is en die stukkies bepaal kan word op grond van hul lae-vlak tyd.

Die onderbrekingshanteerder bepaal eers of die vasgelegde telling lank genoeg is om 'n begin-/sinchronisasiepuls te wees. Die verskillende toestelle wat ek het, gebruik sinchronisasiepulse van 4, 9, 10 en 14 millisekondes. Die definisie -stellings vir die min/maksimum toegelate sinchronisasie waardes is vooraf in die sagteware en is tans ingestel op 3 en 16 millisekondes. Die bits tye wissel ook tussen die sensors, sodat die algoritme vir die dekodering van bisse hiermee rekening moet hou. Die bityd van die eerste bit word gestoor, net soos die tyd van 'n daaropvolgende bit wat 'n beduidende verskil van die eerste bit het. 'N Direkte vergelyking van die daaropvolgende bytye is nie moontlik nie, daarom word 'n "fudge factor" definisie ("variasie") gebruik. Die bit -dekodering begin deur te veronderstel dat die eerste databit altyd as 'n logika 1. aangeteken word. Die waarde word gestoor en dan gebruik om die volgende bisse te toets. As 'n daaropvolgende databitgetal binne die afwykingsvenster van die gestoorde waarde is, word dit ook as 'n logika aangeteken 1. As dit buite die afwykingsvenster van die gestoorde waarde is, word dit aangeteken as 'n logika 0. As die logika 0 bit tyd is korter as die eerste bit tyd dan word 'n vlag gestel om die sagteware te vertel dat die grepe omgekeer moet word voordat dit vertoon word. Die enigste geval waar hierdie algoritme misluk, is wanneer die stukkies in 'n boodskap almal 0's is. Ons kan die beperking aanvaar omdat die soort boodskap betekenisloos is.

Die sensors waarin ek belangstel, het 'n boodskaplengte van 24 databits, maar die sagteware is nie beperk tot die lengte nie. Daar is 'n buffer vir tot sewe grepe (meer kan bygevoeg word) en definieer die minimum en maksimum boodskaplengte in grepe. Die sagteware is ingestel om die stukkies te versamel, om te skakel in grepe, tydelik te stoor en dit dan in ASCII -formaat via die seriële poort uit te voer. Die gebeurtenis wat die uitset van die boodskap veroorsaak, is die ontvangs van 'n nuwe begin-/sinchronisasiepuls.

Stap 4: Data -aanmelding

Data -aanmelding
Data -aanmelding

Die sagteware is ingestel om die omgeskakelde data as ASCII -karakters uit te voer via die seriële (TX) uitset van die Arduino. Toe ek die PIC -weergawe maak, moes ek na 'n terminale program op die rekenaar koppel om die data te kan vertoon. Een voordeel van die Arduino IDE is dat dit 'n Serial Monitor -funksie ingebou het. Die skermkiekie hier toon 'n tipiese skerm met uitsette van 'n verskeidenheid sensors wat ek het. Soos u kan sien, is die data soms nie perfek nie, maar u kan maklik bepaal wat die werklike waarde van elke sensor moet wees.

Stap 5: Voorbeeldontvanger -sagteware

Voorbeeldontvanger -sagteware
Voorbeeldontvanger -sagteware

Ek het 'n voorbeeld van sagteware bevat wat wys hoe u die versamelde inligting kan gebruik om 'n spesifieke stel kodes vir u toepassing te ontvang. Hierdie voorbeeld is opgestel om een van my Etekcity -afsetpunte na te boots. Een opdrag skakel die LED ingebou in die Nano (D13) aan en die ander opdrag skakel die LED uit. As u nie 'n LED in u Arduino ingebou het nie, voeg dan die weerstand en LED by soos in die diagram getoon. In 'n werklike toepassing sal hierdie funksie die krag aan/af skakel vir 'n elektriese aansluiting (met 'n relais of 'n triac). Die sinchronisasie tye, bits tye en verwagte datagrepe word almal vooraf gedefinieer om dit maklik te verander. U kan enige van die oorblywende data lyne gebruik om dinge vir u spesifieke toepassing aan/uit te skakel. Voeg net die toepaslike opdragkode definieer en vervang die LED aan/af logika in 'lus' om aan u behoeftes te voldoen.

Aanbeveel: