Sisukord:

Arduino RF -anduri dekooder: 5 sammu
Arduino RF -anduri dekooder: 5 sammu

Video: Arduino RF -anduri dekooder: 5 sammu

Video: Arduino RF -anduri dekooder: 5 sammu
Video: Discovering the 433MHz RF Transmitter/Receiver: Unpacking and First Impressions 😲😲 #diy #arduino 2024, Juuli
Anonim
Arduino RF -anduri dekooder
Arduino RF -anduri dekooder

Minu eelmine maja oli varustatud eelinstallitud turvasüsteemiga, millel olid ukseandurid, liikumisandur ja juhtpaneel. Kõik oli kõvasti ühendatud kapi suure elektroonikakastiga ja seal olid juhised lauatelefoni ühendamiseks, et häire korral automaatselt välja helistada. Kui proovisin sellega mängida, avastasin, et üks ukseanduritest oli puudulikult paigaldatud ja teine ebaõige joondamise tõttu katkendlik. Niipalju siis turvafirma visiitkaardil reklaamitud professionaalsest paigaldusest. Minu tollane lahendus oli osta paar interneti turvakaamerat ja odav traadita valvehäire.

Edasi tänasele päevale ja see traadita äratus istub minu keldris kastis. Pärast odava raadiosagedusvastuvõtja ostmist otsustasin uurida, kas suudan dekodeerida mitmesuguste häiresensorite ja kaugjuhtimispultide edastatud sõnumeid. Arvasin, et kuna nad kõik töötasid odava häirekarbiga, peavad nad kõik kasutama sama sõnumivormingut ja lihtsalt teist ID -d. Peagi avastasin, et need on sarnased ainult sõnumite üldise ülesehituse poolest. Nii läks projekt kiiresti tühisest väga huvitavaks.

Samm: andurimoodulid

Andurimoodulid
Andurimoodulid
Andurimoodulid
Andurimoodulid
Andurimoodulid
Andurimoodulid
Andurimoodulid
Andurimoodulid

Nagu ülaltoodud piltidel näha, on saatjate hulgas ukse avamise andurid, liikumisandurid, kaugjuhtimispuldid ja traadita klahvistik, mida kasutatakse häirekasti programmeerimiseks. Nagu selgub, ei kasuta kaks neist seadmetest sama sünkroonimispikkust või biti kestust. Ainus ühine joon peale sõnumi pikkuse on bittide põhivorming. Iga bit võtab kindla ajavahemiku, kusjuures null- ja ühevaheline erinevus on kõrge/madala osa töötsükkel.

Ülaltoodud ilus lainekuju EI ole see, mille ma esimest korda sain. Kuna 433 MHz sagedusribas on nii palju liiklust, pidin anduri aktiveerima vahetult enne, kui seadsin ulatuse ühe päästiku tegemiseks. Õnneks andsid andurid pärast aktiveerimist välja mitu andmesõnumi koopiat ning kaugjuhtimispuldid ja klahvistik jätkavad sõnumite väljastamist seni, kuni klahvi vajutatakse. Kasutades ulatust, sain kindlaks määrata iga üksuse sünkroonimise pikkuse ja andmebittide kestuse. Nagu varem mainitud, on sünkroonimisajad erinevad ja bittiajad erinevad, kuid kõik sõnumivormingud on madala taseme sünkroonimisega, millele järgneb 24 andmebitti ja üks stopp. Sellest piisas, et saaksin tarkvara koostada üldise dekoodri, ilma et peaksin iga seadme kõiki üksikasju kõvasti kodeerima.

Samm: riistvara

Riistvara
Riistvara
Riistvara
Riistvara

Algselt ehitasin PIC mikrokontrolleri ja koostamiskeele abil andurite dekoodri. Olen hiljuti mänginud Arduino variantidega, nii et arvasin, et näen, kas saaksin seda korrata. Lihtne skeem on näidatud ülal ja seal on ka minu prototüübi pilt. Kõik, mida ma tegin, oli kasutada kolme tavalist hüppajatraati, et minna Arduino Nano juurest RF vastuvõtjaplaadile. Toide ja üks andmeliin on kõik, mida vaja.

Kui loete minu juhendit „3-in-1 aja- ja ilmakuva”, näete, et kasutan tavalist RXB6, 433 MHz vastuvõtjat. Võib-olla saate tõeliselt odavad vastuvõtjad tööle selle projekti jaoks vajaliku lühikese vahemaa tagant, kuid soovitan siiski kasutada super-heterodüünvastuvõtjat.

Samm: tarkvara

Tarkvara teisendab vastuvõetud bitid kuvatavateks ASCII märkideks. See väljastab sünkroonimispikkuse väärtuse ning 1 ja 0 bitti pikkused. Kuna ma juba teadsin sünkroonimispikkusi ja bitivorminguid, oleksin võinud tarkvara spetsiaalselt nende jaoks kirjutada. Selle asemel otsustasin vaadata, kas saan selle kirjutada, et sortida sünkroonimispikkused ja saada automaatselt aru andmebittidest. See peaks muutmise hõlbustama, kui soovin proovida mõnda aega teisi vorminguid tuvastada. Oluline on märkida, et tarkvara ei tea, kas sõnumi esimene bit on 1 või 0. See eeldab, et see on 1, kuid kui selgub, et see oleks pidanud olema null, pöörab see bitti valmis sõnumis enne jadaporti välja saatmist.

Sünkroonimisimpulsi ja andmebittide ajad määratakse katkestuste käitleja käivitamiseks välise katkestussisendi INT0 abil. INT0 võib käivitada tõusmisel, langemisel või mõlemal serval või ühtlaselt madalal tasemel. Tarkvara katkeb mõlemast servast ja mõõdab aega, mille jooksul pulss jääb madalaks. See lihtsustab asju, sest sõnumi käivitamine/sünkroonimine on madala taseme impulss ja bitte saab määrata nende madala taseme aja alusel.

Katkestuste käitleja teeb kõigepealt kindlaks, kas jäädvustatud arv on piisavalt pikk, et olla käivitus-/sünkroonimisimpulss. Erinevad seadmed kasutavad 4, 9, 10 ja 14 millisekundilist sünkroonimisimpulssi. Min/max lubatud sünkroonimisväärtuste defineerimisavaldused on tarkvaras ees ja praegu on need määratud 3 ja 16 millisekundiks. Bittiajad varieeruvad ka andurite vahel, nii et bittide dekodeerimise algoritm peab seda arvesse võtma. Esimese biti bitiaeg salvestatakse, nagu ka järgmise bitti aeg, millel on märkimisväärne erinevus esimesest bitist. Järgnevate bitiaegade otsene võrdlemine ei ole võimalik, seega kasutatakse „fudge factor“definitsiooni („Variation”). Biti dekodeerimine algab eeldusega, et esimene andmebitt salvestatakse alati loogika 1. See väärtus salvestatakse ja seejärel kasutatakse järgnevate bittide testimiseks. Kui järgnev andmebittide arv jääb salvestatud väärtuse dispersiooniaknasse, registreeritakse see ka loogikana 1. Kui see on väljaspool salvestatud väärtuse dispersiooniakent, registreeritakse see loogikana 0. Kui loogika 0 bittiaeg on lühem kui esimene bittiaeg, seejärel määratakse lipp, mis ütleb tarkvarale, et baitid tuleb enne kuvamist ümber pöörata. Ainus juhtum, kus see algoritm ebaõnnestub, on see, kui sõnumi bitid on kõik 0. Me võime selle piiranguga nõustuda, sest selline sõnum on mõttetu.

Mind huvitavatel anduritel on sõnumi pikkus 24 andmebitti, kuid tarkvara pole selle pikkusega piiratud. Seal on puhver kuni seitsme baidi jaoks (neid võib lisada rohkem) ja see määrab sõnumi minimaalse ja maksimaalse pikkuse baitides. Tarkvara on seadistatud koguma bitte, teisendama need baitideks, ajutiselt salvestama ja seejärel väljastama need jadapordi kaudu ASCII -vormingus. Sündmus, mis käivitab sõnumi väljundi, on uue alguse/sünkroonimise impulsi saamine.

4. samm: andmete logimine

Andmete logimine
Andmete logimine

Tarkvara on seadistatud väljastama teisendatud andmed ASCII märkidena Arduino jada (TX) väljundi kaudu. PIC -versiooni koostamisel oli mul vaja andmete kuvamiseks liituda arvuti terminaliprogrammiga. Üks Arduino IDE eelis on see, et sellel on sisseehitatud jadamonitori funktsioon. Seadistasin jadapordi kiiruseks 115,2 k ja seejärel seadsin seeriamonitori akna samale kiirusele. Siin oleval ekraanipildil on tüüpiline ekraan, millel on väljundid erinevatest anduritest, mis mul on. Nagu näete, pole andmed mõnikord täiuslikud, kuid saate hõlpsalt kindlaks teha, milline peaks olema iga anduri tegelik väärtus.

Samm 5: näidisvastuvõtja tarkvara

Vastuvõtja tarkvara näidis
Vastuvõtja tarkvara näidis

Olen lisanud tarkvara näidisloendi, mis näitab, kuidas saate kogutud teavet kasutada oma rakenduse jaoks kindla koodikomplekti saamiseks. See näide on loodud ühe minu Etekcity kaugväljundi jäljendamiseks. Üks käsk lülitab sisse Nano sisseehitatud LED -i (D13) ja teine käsk lülitab LED -i välja. Kui teil pole Arduino sisse ehitatud LED -i, lisage takisti ja LED, nagu on näidatud skeemil. Reaalses rakenduses lülitaks see funktsioon pistikupesa toite sisse/välja (relee või triatsi abil). Sünkroonimisajad, bitiajad ja eeldatavad andmebaidid on modifitseerimise hõlbustamiseks ette määratud. Saate kasutada mis tahes ülejäänud andmeridu, et oma konkreetse rakenduse jaoks asju sisse/välja lülitada jne. Lihtsalt lisage kehtiv käsukood ja asendage LED -i sisse/välja loogika ahelas vastavalt oma vajadustele.

Soovitan: