Sadržaj:

Arduino RF senzor dekoder: 5 koraka
Arduino RF senzor dekoder: 5 koraka

Video: Arduino RF senzor dekoder: 5 koraka

Video: Arduino RF senzor dekoder: 5 koraka
Video: Урок 101. Использование ИК-пульта дистанционного управления для управления телевизором, лампочкой переменного тока с реле, двигателем постоянного тока и серводвигателем. 2024, Novembar
Anonim
Arduino RF senzorski dekoder
Arduino RF senzorski dekoder

Moja prethodna kuća je imala unaprijed instaliran sigurnosni sistem koji je imao senzore za vrata, senzor pokreta i kontrolnu ploču. Sve je bilo čvrsto spojeno na veliku kutiju s elektronikom u ormaru i bilo je uputstava za ožičenje fiksnog telefona za automatsko biranje u slučaju alarma. Kada sam se pokušao igrati s njim otkrio sam da je jedan od senzora vrata nepotpuno instaliran, a drugi je isprekidan zbog nepravilnog poravnanja. Toliko o profesionalnoj instalaciji istaknuto na posjetnici zaštitarske kompanije. Moje tadašnje rješenje je bilo kupiti par internetskih sigurnosnih kamera i jeftin bežični sigurnosni alarm.

Premotajmo na danas i taj bežični alarm sedi u kutiji u mom podrumu. Nakon što sam nabavio jeftini RF prijemnik, odlučio sam provjeriti mogu li dekodirati poruke koje prenose različiti senzori i daljinski upravljači koje imam. Shvatio sam da budući da su svi radili s jeftinom kutijom za alarm, svi moraju koristiti isti format poruke s samo različitim ID -om. Ubrzo sam saznao da su slične samo u općoj strukturi poruka. Tako je projekt brzo prešao iz trivijalnog u vrlo zanimljiv.

Korak 1: Senzorski moduli

Senzorski moduli
Senzorski moduli
Senzorski moduli
Senzorski moduli
Senzorski moduli
Senzorski moduli
Senzorski moduli
Senzorski moduli

Kao što možete vidjeti na gornjim slikama, odašiljači uključuju senzore za otvaranje vrata, detektore pokreta, daljinske upravljače i bežičnu tastaturu koja se koristi za programiranje alarmne kutije. Kako se ispostavilo, nijedan od ovih uređaja ne koristi istu dužinu sinhronizacije ili trajanje bita. Jedina zajednička karakteristika, osim dužine poruke, je osnovni format bitova. Svaki bit zauzima fiksni vremenski period s razlikom između nule i jedinice koja je radni ciklus visokih/niskih dijelova.

Gore prikazani lijepi valni oblik NIJE ono što sam prvi put primio. Budući da postoji toliko prometa u frekvencijskom pojasu 433-MHz, morao sam se pobrinuti da aktiviram senzor neposredno prije nego što sam namjestio opseg za pokretanje jednog okidača. Srećom, senzori su aktivirali nekoliko kopija podatkovne poruke kada se aktivira, a daljinski upravljači i tastatura nastavljaju slati poruke sve dok je pritisnut taster. Pomoću opsega uspio sam odrediti dužinu sinkronizacije i trajanje bita podataka za svaku stavku. Kao što je ranije spomenuto, vremena sinkronizacije su različita, a vrijeme bitova različito, ali svi formati poruka imaju nisku razinu sinkronizacije koju slijede 24 bita podataka i jedan zaustavni bit. To mi je bilo dovoljno da uspijem napraviti softverski generički dekoder bez potrebe da kodiram sve različite detalje za svaki uređaj.

Korak 2: Hardver

Hardver
Hardver
Hardver
Hardver

Prvobitno sam napravio senzorski dekoder pomoću PIC mikrokontrolera i asemblerskog jezika. Nedavno sam se igrao s Arduino varijantama pa sam mislio da ću vidjeti mogu li to ponoviti. Jednostavna shema prikazana je gore, a tu je i slika mog prototipa. Sve što sam učinio bilo je koristiti tri uobičajene kratkospojne žice za prelazak s Arduino Nanoa na ploču RF prijemnika. Napajanje i jedna linija podataka su sve što je potrebno.

Ako pročitate moj Instructable na “3-u-1 prikazu vremena i vremena” vidjet ćete da koristim uobičajeni RXB6, 433-MHz prijemnik. Možda ćete uspjeti postići da zaista jeftini prijemnici rade na kratkom dometu potrebnom za ovaj projekt, ali ipak preporučujem upotrebu super-heterodinskog prijemnika.

Korak 3: Softver

Softver pretvara primljene bitove u ASCII znakove koji se mogu prikazati. On emituje vrijednost dužine sinhronizacije i dužine bita 1 i 0. Budući da sam već znao duljinu sinkronizacije i formate bitova, mogao sam napisati softver posebno za njih. Umjesto toga, odlučio sam provjeriti mogu li to napisati kako bih sredio dužine sinkronizacije i automatski shvatio bitove podataka. To bi trebalo olakšati izmjenu u slučaju da u neko vrijeme želim pokušati otkriti druge formate. Važno je napomenuti da softver ne zna je li prvi bit poruke 1 ili 0. Pretpostavlja da je 1, ali, ako shvati da je trebala biti nula, obrnut će bitova u dovršenoj poruci prije slanja putem serijskog porta.

Vremena impulsa sinhronizacije i bitovi podataka određuju se korištenjem vanjskog ulaza prekida INT0 za pokretanje rukovatelja prekida. INT0 se može aktivirati pri podizanju, padu ili na obje rubove ili na stabilnom niskom nivou. Softver se prekida na obje rubove i mjeri vrijeme dok puls ostane nizak. To pojednostavljuje stvari jer je početak/sinkronizacija poruke impuls niskog nivoa i bitovi se mogu odrediti na osnovu njihovog vremena na niskom nivou.

Rukovalac prekida prvo utvrđuje je li uhvaćeni broj dovoljno dug da bude impuls pokretanja/sinhronizacije. Razni uređaji koje imam koriste impulse sinhronizacije od 4, 9, 10 i 14 milisekundi. Izrazi definicije za minimalne/maksimalno dozvoljene vrijednosti sinhronizacije su unaprijed u softveru i trenutno su postavljeni na 3 i 16 milisekundi. Vremena bitova se također razlikuju među senzorima pa algoritam za dekodiranje bitova to mora uzeti u obzir. Vrijeme bita prvog bita se sprema kao i vrijeme sljedećeg bita koji ima značajnu razliku od prvog bita. Direktno poređenje naknadnih bitova nije moguće, pa se koristi definicija „faktora“(„Varijacija“). Dekodiranje bita počinje pretpostavkom da se prvi bit podataka uvijek bilježi kao logička 1. Ta vrijednost se sprema i zatim koristi za testiranje sljedećih bitova. Ako je sljedeći broj bitova podataka unutar prozora varijance spremljene vrijednosti, tada se bilježi i kao logika 1. Ako je izvan prozora varijance spremljene vrijednosti, tada se bilježi kao logička 0. Ako je logička 0 vrijeme bita je kraće od prvog bita, tada se postavlja zastavica koja govori softveru da bajtove treba preokrenuti prije prikaza. Jedini slučaj kada ovaj algoritam ne uspije je kada su svi bitovi u poruci 0. To ograničenje možemo prihvatiti jer je takva poruka besmislena.

Svi senzori koji me zanimaju imaju dužinu poruke od 24 bita podataka, ali softver nije ograničen na tu dužinu. Postoji bafer za do sedam bajtova (moglo bi se dodati više) i definira minimalnu i maksimalnu dužinu poruke u bajtovima. Softver je postavljen tako da prikuplja bitove, pretvara ih u bajtove, privremeno ih pohranjuje i zatim ispisuje u ASCII formatu putem serijskog porta. Događaj koji pokreće izlaz poruke je prijem novog impulsa pokretanja/sinhronizacije.

Korak 4: Zapisivanje podataka

Zapisivanje podataka
Zapisivanje podataka

Softver je postavljen za izlaz pretvorenih podataka kao ASCII znakova putem serijskog (TX) izlaza Arduina. Kada sam napravio PIC verziju, morao sam se povezati s terminalnim programom na računaru kako bih prikazao podatke. Jedna od prednosti Arduino IDE -a je ta što ima ugrađenu funkciju Serial Monitor. Postavio sam brzinu serijskog porta na 115,2k, a zatim prozor Serial Monitor postavio na istu brzinu. Snimak ekrana ovdje prikazuje tipičan ekran sa izlazima iz različitih senzora koje imam. Kao što vidite, podaci ponekad nisu savršeni, ali možete lako odrediti koja bi stvarna vrijednost svakog senzora trebala biti.

Korak 5: Uzorak softvera prijemnika

Uzorak softvera prijemnika
Uzorak softvera prijemnika

Uključio sam primjer softverskog popisa koji pokazuje kako možete koristiti prikupljene podatke za primanje određenog skupa kodova za svoju aplikaciju. Ovaj primjer je postavljen tako da oponaša jednu od mojih udaljenih utičnica Etekcity. Jedna naredba uključuje LED diodu ugrađenu u Nano (D13), a druga naredba isključuje LED. Ako nemate LED ugrađenu u vaš Arduino, dodajte otpornik i LED kao što je prikazano na dijagramu. U stvarnoj primjeni ova bi funkcija uključivala/isključivala napajanje za električnu utičnicu (pomoću releja ili trijaka). Vremena sinhronizacije, vremena bitova i očekivani bajti podataka su unaprijed definirani radi lakše izmjene. Možete koristiti bilo koji od preostalih redaka podataka za uključivanje/isključivanje itd. Za svoju specifičnu aplikaciju. Samo dodajte primjenjive definicije naredbenog koda i zamijenite logiku uključivanja/isključivanja LED -a u „petlji“prema vašim potrebama.

Preporučuje se: