Përmbajtje:

Dekodues i sensorit Arduino RF: 5 hapa
Dekodues i sensorit Arduino RF: 5 hapa

Video: Dekodues i sensorit Arduino RF: 5 hapa

Video: Dekodues i sensorit Arduino RF: 5 hapa
Video: How to use 4 channel Relay to control AC load with Arduino code 2024, Korrik
Anonim
Dekodues i sensorit Arduino RF
Dekodues i sensorit Arduino RF

Shtëpia ime e mëparshme erdhi me një sistem sigurie të para-instaluar që kishte sensorë të dyerve, një sensor lëvizjeje dhe një panel kontrolli. Çdo gjë ishte e lidhur ngushtë me një kuti të madhe elektronike në një dollap dhe kishte udhëzime për lidhjen e një telefoni fiks për të telefonuar automatikisht në rast të një alarmi. Kur provova të luaja me të zbulova se një nga sensorët e derës ishte instaluar jo plotësisht dhe një tjetër ishte i ndërprerë për shkak të shtrirjes së pahijshme. Aq shumë për instalimin profesional të shpallur në kartën e biznesit të kompanisë së sigurisë. Zgjidhja ime në atë kohë ishte të blija disa kamera sigurie në internet dhe një alarm të lirë sigurie pa tel.

Shpejt përpara sot dhe ai alarm pa tel është ulur në një kuti në bodrumin tim. Pas marrjes sime të një marrësi të lirë RF, vendosa të shikoja nëse mund t'i deshifroja mesazhet e transmetuara nga shumëllojshmëria e sensorëve të alarmit dhe telekomandave që kam. Kuptova se meqenëse të gjithë ata punuan me kutinë e lirë të alarmit, ata të gjithë duhet të përdorin të njëjtin format mesazhi me vetëm një ID të ndryshme. Së shpejti zbulova se ato janë të ngjashme vetëm në strukturën e përgjithshme të mesazheve. Kështu që projekti shpejt kaloi nga i parëndësishëm në shumë interesant.

Hapi 1: Modulet e sensorit

Modulet e sensorit
Modulet e sensorit
Modulet e sensorit
Modulet e sensorit
Modulet e sensorit
Modulet e sensorit
Modulet e sensorit
Modulet e sensorit

Siç mund ta shihni në fotot e mësipërme, transmetuesit përfshijnë sensorë të hapjes së derës, detektorë lëvizjeje, telekomandë të armatosjes dhe një tastierë pa tel të përdorur për programimin e kutisë së alarmit. Siç doli, asnjë nga këto pajisje nuk përdor të njëjtën gjatësi sinkronizimi ose kohëzgjatje të bitit. E vetmja gjë e përbashkët, përveç gjatësisë së mesazhit, është formati bazë i pjesëve. Çdo bit merr një periudhë të caktuar kohore me ndryshimin midis një zero dhe një është cikli i punës i pjesëve të larta/të ulëta.

Forma e bukur e valës e treguar më sipër NUK është ajo që kam marrë për herë të parë. Për shkak se ka kaq shumë trafik në brezin e frekuencave 433-MHz, më duhej të sigurohesha që të aktivizoja sensorin pak para se të vendosja qëllimin për të bërë një shkas të vetëm. Për fat të mirë sensorët nxjerrin disa kopje të mesazhit të të dhënave kur aktivizohen dhe telekomandat dhe tastiera vazhdojnë të nxjerrin mesazhe për sa kohë që shtypet një çelës. Duke përdorur fushën, unë kam qenë në gjendje të përcaktoj gjatësinë e sinkronizimit dhe kohëzgjatjen e bitit të të dhënave për secilin artikull. Siç u përmend më herët, kohët e sinkronizimit janë të ndryshme dhe kohët e bitit janë të ndryshme, por formatet e mesazheve kanë të gjitha një sinkronizim të nivelit të ulët të ndjekur nga 24 bit të dhënash dhe një bit stop. Kjo ishte e mjaftueshme për mua që të isha në gjendje të ndërtoja një dekoder të përgjithshëm në softuer pa pasur nevojë të kodoja të gjitha detajet e ndryshme për secilën pajisje.

Hapi 2: Pajisje kompjuterike

Hardware
Hardware
Hardware
Hardware

Fillimisht ndërtova një deshifrues të sensorit duke përdorur një mikrokontrollues PIC dhe gjuhën e montimit. Kohët e fundit kam luajtur me variantet Arduino kështu që mendova se do të shihja nëse do ta kopjoja. Skema e thjeshtë është treguar më lart dhe ka edhe një fotografi të prototipit tim. E tëra që bëra ishte të përdorja tre tela të zakonshëm të kërcyesit për të shkuar nga Arduino Nano në bordin e marrësit RF. Fuqia dhe një linjë e vetme e të dhënave janë gjithçka që nevojitet.

Nëse e lexoni Instructable tim në "3-në-1 Koha dhe Paraqitja e Motit" do të shihni që unë përdor një marrës të zakonshëm RXB6, 433-MHz. Ju mund të jeni në gjendje t'i bëni marrësit vërtet të lirë të punojnë në një distancë të shkurtër të nevojshme për këtë projekt, por unë ende rekomandoj përdorimin e një marrës super-heterodine.

Hapi 3: Softuer

Softueri i konverton pjesët e marra në karaktere të afishueshme ASCII. Ajo nxjerr vlerën e gjatësisë së sinkronizimit dhe gjatësinë e 1 dhe 0 bitëve. Meqenëse tashmë i njihja gjatësitë e sinkronizimit dhe formatet e bitit, mund ta kisha shkruar softuerin posaçërisht për ta. Në vend të kësaj, vendosa të shoh nëse mund ta shkruaj për të zgjidhur gjatësinë e sinkronizimit dhe për të kuptuar automatikisht pjesët e të dhënave. Kjo duhet ta bëjë më të lehtë modifikimin në rast se dua të provoj të zbuloj formate të tjera në një kohë. It'sshtë e rëndësishme të theksohet se softueri nuk e di nëse pjesa e parë e një mesazhi është 1 ose 0. Ai supozon se është 1, por, nëse kupton se duhet të ishte një zero, do të përmbysë pjesë në mesazhin e përfunduar para se ta dërgoni atë nga porti serik.

Kohët e pulsit të sinkronizimit dhe bitët e të dhënave përcaktohen duke përdorur hyrjen e jashtme të ndërprerjes INT0 për të shkaktuar një mbajtës ndërprerjeje. INT0 mund të shkaktojë ngritje, rënie ose të dyja skajet, ose në një nivel të ulët të qëndrueshëm. Softueri ndërpritet në të dy skajet dhe mat sasinë e kohës që pulsi mbetet i ulët. Kjo thjeshton gjërat sepse fillimi/sinkronizimi i mesazhit është një impuls i nivelit të ulët dhe pjesët mund të përcaktohen bazuar në kohën e tyre të nivelit të ulët.

Trajtuesi i ndërprerjes së pari përcakton nëse numërimi i kapur është mjaft i gjatë për të qenë një impuls fillimi/sinkronizimi. Pajisjet e ndryshme që kam përdorin impulse sinkronizimi prej 4, 9, 10 dhe 14 milisekonda. Deklaratat e përcaktuara për vlerat e lejuara të sinkronizimit min/max janë paraprakisht në softuer dhe aktualisht janë vendosur për 3 dhe 16 milisekonda. Kohët e bitit ndryshojnë gjithashtu midis sensorëve, kështu që algoritmi për dekodimin e bitëve duhet ta marrë parasysh atë. Koha e bitit të bitit të parë ruhet ashtu siç është koha e një biti pasues që ka një ndryshim domethënës nga biti i parë. Një krahasim i drejtpërdrejtë i kohëve të mëvonshme të bitit nuk është i mundur, kështu që përdoret një përcaktim i "faktorit të trullosjes" ("Variacioni"). Dekodimi i bitit fillon duke supozuar se biti i parë i të dhënave regjistrohet gjithmonë si logjikë 1. Kjo vlerë ruhet dhe më pas përdoret për të testuar bitët pasues. Nëse një numër bit i të dhënave pasuese është brenda dritares së variancës së vlerës së ruajtur, atëherë regjistrohet edhe si logjikë 1. Nëse është jashtë dritares së variancës së vlerës së ruajtur, atëherë regjistrohet si logjikë 0. Nëse logjika 0 koha e bitit është më e shkurtër se koha e parë bit, atëherë një flamur është vendosur për t'i treguar softuerit se bajtët duhet të përmbysen para se të shfaqen. Rasti i vetëm ku ky algoritëm dështon është kur bitet në një mesazh janë të gjitha 0. Ne mund ta pranojmë atë kufizim sepse ai lloj mesazhi është i pakuptimtë.

Sensorët për të cilët jam i interesuar të gjithë kanë një gjatësi mesazhi prej 24 bit të të dhënave, por softueri nuk është i kufizuar në atë gjatësi. Ekziston një tampon deri në shtatë bajt (mund të shtohen më shumë) dhe përcakton gjatësinë minimale dhe maksimale të mesazhit në bajt. Softueri është krijuar për të mbledhur bitët, për t'i kthyer ato në byte, për t'i ruajtur ato përkohësisht dhe më pas për t'i nxjerrë ato në formatin ASCII përmes portit serik. Ngjarja që shkakton daljen e mesazhit është marrja e një impulsi të ri të fillimit/sinkronizimit.

Hapi 4: Regjistrimi i të dhënave

Regjistrimi i të dhënave
Regjistrimi i të dhënave

Softueri është krijuar për të nxjerrë të dhënat e konvertuara si karaktere ASCII përmes daljes serike (TX) të Arduino. Kur bëra versionin PIC më duhej të ndërhyja me një program terminal në PC në mënyrë që të shfaqja të dhënat. Një avantazh i Arduino IDE është se ai ka një funksion Serial Monitor të integruar. Unë vendosa normën e portit serik në 115.2k dhe pastaj vendosa dritaren e Serial Monitor në të njëjtën normë. Ekrani i shfaqur këtu tregon një ekran tipik me dalje nga një sërë sensorësh që kam. Siç mund ta shihni, të dhënat ndonjëherë nuk janë perfekte, por lehtë mund të përcaktoni se cila duhet të jetë vlera reale e secilit sensor.

Hapi 5: Shembull i Marrësit të Softuerit

Shembull Softueri Marrës
Shembull Softueri Marrës

Unë kam përfshirë një listë të mostrave të softuerëve që tregon se si mund t'i përdorni informacionet e mbledhura për të marrë një grup specifik kodesh për aplikimin tuaj. Ky shembull është krijuar për të imituar një nga prizat e mia të largëta të Etekcity. Njëra komandë ndez LED -in e integruar në Nano (D13) dhe komanda tjetër fik LED -in. Nëse nuk keni një LED të integruar në Arduino tuaj, atëherë shtoni rezistencën dhe LED siç tregohet në diagram. Në një aplikim të vërtetë ky funksion do të ndizte/fikte fuqinë për një prizë elektrike (duke përdorur një stafetë ose një triac). Kohët e sinkronizimit, bitët dhe bajtët e të dhënave të pritura përcaktohen të gjitha paraprakisht për lehtësinë e modifikimit. Ju mund të përdorni ndonjë nga linjat e mbetura të të dhënave për të aktivizuar/çaktivizuar gjërat, etj. Për aplikacionin tuaj specifik. Thjesht shtoni përcaktimet e kodit të zbatueshëm të komandës dhe zëvendësoni logjikën e ndezjes/fikjes së LED -it në "lak" që i përshtatet nevojave tuaja.

Recommended: