Satura rādītājs:

Arduino RF sensora dekodētājs: 5 soļi
Arduino RF sensora dekodētājs: 5 soļi

Video: Arduino RF sensora dekodētājs: 5 soļi

Video: Arduino RF sensora dekodētājs: 5 soļi
Video: DIY Radar With Ultrasonic Sensor And Chat-GPT Generated Arduino Code | Coders Cafe 2024, Jūlijs
Anonim
Arduino RF sensora dekodētājs
Arduino RF sensora dekodētājs

Manā iepriekšējā mājā bija iepriekš instalēta drošības sistēma, kurā bija durvju sensori, kustības sensors un vadības panelis. Viss bija cieši pieslēgts pie lielas elektronikas kastes skapī, un tur bija norādījumi, kā pieslēgt fiksēto tālruni, lai tas automātiski izsauktu signālu. Mēģinot spēlēties ar to, es atklāju, ka viens no durvju sensoriem bija nepilnīgi uzstādīts, bet otrs - ar pārtraukumiem nepareizas izlīdzināšanas dēļ. Tik daudz par profesionālu instalāciju, kas norādīta apsardzes uzņēmuma vizītkartē. Mans risinājums tajā laikā bija nopirkt pāris interneta drošības kameras un lētu bezvadu drošības signalizāciju.

Ātri pāriet uz šodienu un šī bezvadu signalizācija sēž kastē manā pagrabā. Pēc lēta RF uztvērēja iegādes es nolēmu noskaidrot, vai es varu atšifrēt ziņojumus, ko pārraida dažādi trauksmes sensori un tālvadības pultis. Es sapratu, ka, tā kā viņi visi strādāja ar lēto trauksmes lodziņu, viņiem visiem ir jāizmanto viens un tas pats ziņojuma formāts tikai ar citu ID. Drīz es uzzināju, ka tie ir līdzīgi tikai vispārējā ziņojumu struktūrā. Tāpēc projekts ātri pārvērtās no triviāla līdz ļoti interesantam.

1. solis: Sensora moduļi

Sensora moduļi
Sensora moduļi
Sensora moduļi
Sensora moduļi
Sensora moduļi
Sensora moduļi
Sensora moduļi
Sensora moduļi

Kā redzat attēlos virs raidītājiem ir durvju atvēršanas sensori, kustības detektori, tālvadības pultis un bezvadu tastatūra, ko izmanto trauksmes kastes programmēšanai. Kā izrādās, divas no šīm ierīcēm neizmanto vienādu sinhronizācijas garumu vai bitu ilgumu. Vienīgais kopīgais, izņemot ziņojuma garumu, ir bitu pamatformāts. Katrs bits aizņem noteiktu laika periodu, starpība starp nulli un vienu ir augstās/zemās daļas darbības cikls.

Iepriekš parādītā skaistā viļņa forma NAV tā, ko es pirmo reizi saņēmu. Tā kā 433 MHz frekvenču joslā ir tik daudz trafika, man bija jāaktivizē sensors tieši pirms darbības jomas iestatīšanas, lai veiktu vienu sprūdu. Par laimi, kad sensori aktivizē vairākus datu ziņojuma eksemplārus, un tālvadības pults un tastatūra turpina izvadīt ziņojumus, kamēr tiek nospiests taustiņš. Izmantojot darbības jomu, es varēju noteikt katra vienuma sinhronizācijas garumu un datu bitu ilgumu. Kā minēts iepriekš, sinhronizācijas laiki ir atšķirīgi un bitu laiki ir atšķirīgi, taču visiem ziņojumu formātiem ir zema līmeņa sinhronizācija, kam seko 24 datu biti un viens pieturas bits. Ar to man pietika, lai varētu programmatūrā izveidot vispārēju dekodētāju, nepārkodējot visu informāciju par katru ierīci.

2. darbība. Aparatūra

Aparatūra
Aparatūra
Aparatūra
Aparatūra

Es sākotnēji izveidoju sensora dekodētāju, izmantojot PIC mikrokontrolleru un montāžas valodu. Nesen spēlēju ar Arduino variantiem, tāpēc domāju, ka redzēšu, vai varu to atkārtot. Vienkāršā shēma ir parādīta iepriekš, un ir arī mana prototipa attēls. Viss, ko es darīju, bija izmantot trīs parastos džemperu vadus, lai pārietu no Arduino Nano uz RF uztvērēja dēli. Nepieciešama jauda un viena datu līnija.

Ja jūs izlasīsit manu pamācību “3-in-1 laika un laika displejā”, jūs redzēsit, ka izmantoju parastu RXB6, 433 MHz uztvērēju. Jūs, iespējams, varēsit panākt, ka patiešām lēti uztvērēji darbojas īsā diapazonā, kas vajadzīgs šim projektam, taču es joprojām iesaku izmantot super-heterodīna uztvērēju.

3. darbība: programmatūra

Programmatūra pārvērš saņemtos bitus parādāmās ASCII rakstzīmēs. Tas izvada sinhronizācijas garuma vērtību un 1 un 0 bitu garumus. Tā kā es jau zināju sinhronizācijas garumus un bitu formātus, es varēju uzrakstīt programmatūru tieši tiem. Tā vietā es nolēmu noskaidrot, vai es varētu to uzrakstīt, lai sakārtotu sinhronizācijas garumus un automātiski izdomātu datu bitus. Tam vajadzētu atvieglot modificēšanu gadījumā, ja vēlos kādu laiku mēģināt atklāt citus formātus. Ir svarīgi atzīmēt, ka programmatūra nezina, vai ziņojuma pirmais bits ir 1 vai 0. Tā pieņem, ka tas ir 1, bet, ja tiek noskaidrots, ka tam vajadzēja būt nullei, tas apvērsīs bitiem pabeigtajā ziņojumā, pirms to izsūtāt no seriālā porta.

Sinhronizācijas impulsa un datu bitu laikus nosaka, izmantojot INT0 ārējās pārtraukšanas ievadi, lai aktivizētu pārtraukuma apstrādātāju. INT0 var izraisīt pacelšanos, krišanu vai abas malas, vai vienmērīgu zemu līmeni. Programmatūra tiek pārtraukta abās malās un mēra laiku, kamēr impulss paliek zems. Tas vienkāršo lietas, jo ziņojuma sākšana/sinhronizācija ir zema līmeņa impulss, un bitus var noteikt, pamatojoties uz to zemā līmeņa laiku.

Pārtraukuma apstrādātājs vispirms nosaka, vai uzņemtais skaits ir pietiekami ilgs, lai tas būtu sākuma/sinhronizācijas impulss. Dažādas manas ierīces izmanto sinhronizācijas impulsus 4, 9, 10 un 14 milisekundēs. Minētās/maksimālās atļautās sinhronizācijas vērtību definēšanas paziņojumi ir programmatūrā iepriekš un pašlaik ir iestatīti uz 3 un 16 milisekundēm. Bitu laiki atšķiras arī starp sensoriem, tāpēc bitu atšifrēšanas algoritmam tas ir jāņem vērā. Tiek saglabāts pirmā bita bitu laiks, tāpat kā nākamā bita laiks, kuram ir būtiska atšķirība no pirmā bita. Turpmāko bitu laiku tieša salīdzināšana nav iespējama, tāpēc tiek izmantota definīcija “izplūdes koeficients” (“Variation”). Bitu dekodēšana sākas, pieņemot, ka pirmais datu bits vienmēr tiek ierakstīts kā loģika 1. Šī vērtība tiek saglabāta un pēc tam izmantota, lai pārbaudītu nākamos bitus. Ja nākamais datu bitu skaits atrodas saglabātās vērtības dispersijas logā, tas tiek ierakstīts arī kā loģika 1. Ja tas ir ārpus saglabātās vērtības dispersijas loga, tas tiek ierakstīts kā loģika 0. Ja loģika 0 bitu laiks ir īsāks nekā pirmais bitu laiks, tad tiek iestatīts karodziņš, kas programmatūrai norāda, ka baiti pirms attēlošanas ir jāapgriež. Vienīgais gadījums, kad šis algoritms neizdodas, ir tad, ja ziņojuma biti ir visi 0. Mēs varam pieņemt šo ierobežojumu, jo šāda veida ziņām nav nozīmes.

Mani interesējošo sensoru ziņojuma garums ir 24 datu biti, taču programmatūra nav ierobežota ar šo garumu. Ir buferis līdz septiņiem baitiem (var pievienot vairāk) un nosaka minimālo un maksimālo ziņojuma garumu baitos. Programmatūra ir iestatīta, lai savāktu bitus, pārvērstu tos baitos, īslaicīgi saglabātu un pēc tam izvadītu tos ASCII formātā, izmantojot seriālo portu. Notikums, kas aktivizē ziņojuma izvadi, ir jauna sākuma/sinhronizācijas impulsa saņemšana.

4. solis: datu reģistrēšana

Datu reģistrēšana
Datu reģistrēšana

Programmatūra ir iestatīta, lai pārveidotos datus izvadītu kā ASCII rakstzīmes, izmantojot Arduino sērijas (TX) izvadi. Kad es izveidoju PIC versiju, man vajadzēja saslēgties ar datora termināļa programmu, lai parādītu datus. Viena no Arduino IDE priekšrocībām ir tā, ka tajā ir iebūvēta Serial Monitor funkcija. Es iestatīju seriālā porta ātrumu uz 115,2 k un pēc tam iestatīju Serial Monitor logu uz tādu pašu ātrumu. Šeit redzamajā ekrānuzņēmumā ir redzams tipisks displejs ar dažādu man pieejamo sensoru izejām. Kā redzat, dati dažkārt nav perfekti, taču jūs varat viegli noteikt katra sensora patieso vērtību.

5. solis: uztvērēja programmatūras paraugs

Uztvērēja programmatūras paraugs
Uztvērēja programmatūras paraugs

Esmu iekļāvis programmatūras saraksta paraugu, kas parāda, kā jūs varat izmantot savākto informāciju, lai saņemtu noteiktu kodu kopu savai lietojumprogrammai. Šis piemērs ir izveidots, lai atdarinātu vienu no manām Etekcity tālvadības vietām. Viena komanda ieslēdz Nano iebūvēto gaismas diodi (D13), bet otra komanda izslēdz LED. Ja jūsu Arduino nav iebūvēts gaismas diode, pievienojiet rezistoru un LED, kā parādīts diagrammā. Reālā lietojumā šī funkcija ieslēgtu/izslēgtu elektrības kontaktligzdu (izmantojot releju vai triac). Sinhronizācijas laiki, bitu laiki un paredzamie datu baiti ir noteikti iepriekš, lai atvieglotu modificēšanu. Jūs varat izmantot jebkuru no atlikušajām datu rindām, lai ieslēgtu/izslēgtu utt. Savai konkrētai lietojumprogrammai. Vienkārši pievienojiet piemērojamo komandu kodu un nomainiet LED ieslēgšanas/izslēgšanas loģiku cilpā atbilstoši savām vajadzībām.

Ieteicams: