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, Srpanj
Anonim
Arduino RF senzorski dekoder
Arduino RF senzorski dekoder

Moja prethodna kuća dolazila je s unaprijed instaliranim sigurnosnim sustavom koji je imao senzore vrata, senzor pokreta i upravljačku ploču. Sve je bilo čvrsto spojeno na veliku elektroničku kutiju u ormaru, a bile su i upute 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 tvrtke. Moje tadašnje rješenje bilo je kupiti par internetskih sigurnosnih kamera i jeftin bežični sigurnosni alarm.

Brzo naprijed do danas i taj bežični alarm sjedi 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 tipkovnicu koja se koristi za programiranje alarmne kutije. Kako se pokazalo, niti jedan od ovih uređaja ne koristi istu duljinu sinkronizacije ili trajanje bita. Jedina zajednička karakteristika, osim duljine poruke, je osnovni format bitova. Svaki bit zauzima fiksno vremensko razdoblje s razlikom između nule i jedinice radnog ciklusa 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 za aktiviranje senzora neposredno prije nego što sam namjestio opseg za jedan okidač. Na sreću, senzori su aktivirali nekoliko kopija podatkovne poruke kada se aktivira, a daljinski upravljači i tipkovnica nastavljaju slati poruke sve dok je pritisnuta tipka. Pomoću opsega uspio sam odrediti duljinu 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 mogu generirati generički dekoder u softveru, a da ne moram kodirati sve različite detalje za svaki uređaj.

Korak 2: Hardver

Hardver
Hardver
Hardver
Hardver

Izvorno 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 podatkovna linija su sve što je potrebno.

Ako pročitate moj Instructable na “3-u-1 vremenu i vremenskom prikazu” vidjet ćete da koristim uobičajeni RXB6, 433-MHz prijemnik. Možda ćete uspjeti doista jeftine prijamnike natjerati na rad u kratkom rasponu koji je potreban za ovaj projekt, ali ipak preporučujem korištenje super-heterodinskog prijemnika.

Korak 3: Softver

Softver pretvara primljene bitove u ASCII znakove koji se mogu prikazati. Ispisuje vrijednost duljine sinkronizacije i duljine bita 1 i 0. Budući da sam već znao duljinu sinkronizacije i formate bitova, mogao sam softver napisati posebno za njih. Umjesto toga, odlučio sam provjeriti mogu li to napisati kako bih odredio duljinu sinkronizacije i automatski shvatio bitove podataka. To bi trebalo olakšati izmjenu u slučaju da u nekom trenutku pokušam 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 utvrdi da je trebala biti nula, promijenit će bita u dovršenoj poruci prije slanja putem serijskog porta.

Vremena impulsa sinkronizacije i bitovi podataka određuju se pomoću vanjskog ulaza prekida INT0 za pokretanje rukovatelja prekida. INT0 se može aktivirati pri podizanju, padu ili na oba ruba ili na stabilnoj niskoj razini. Softver se prekida na oba ruba i mjeri vrijeme tijekom kojeg puls ostaje nizak. To pojednostavljuje stvari jer je početak/sinkronizacija poruke impuls niske razine i bitovi se mogu odrediti na temelju njihovog vremena niske razine.

Rukovalac prekida najprije utvrđuje je li snimljeni broj dovoljno dug da bude impuls pokretanja/sinkronizacije. Razni uređaji koje imam koriste impulse sinkronizacije od 4, 9, 10 i 14 milisekundi. Izrazi definiranja min/max dopuštenih vrijednosti sinkronizacije unaprijed su u softveru i trenutno su postavljeni na 3 i 16 milisekundi. Vrijeme bitova također varira između senzora 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. Izravna usporedba sljedećih bitova nije moguća pa se koristi definicija "faktora" ("Varijacija"). Dekodiranje bita počinje pretpostavkom da se prvi podatkovni bit uvijek bilježi kao logička 1. Ta se vrijednost 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 je potrebno preokrenuti bajtove 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 duljinu. Postoji međuspremnik za do sedam bajtova (moglo bi se dodati više) i definira minimalnu i maksimalnu duljinu 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 primanje novog impulsa početka/sinkronizacije.

Korak 4: Zapisivanje podataka

Zapisivanje podataka
Zapisivanje podataka

Softver je postavljen za izlaz pretvorenih podataka kao ASCII znakova putem serijskog (TX) izlaza Arduina. Kad sam napravio PIC verziju, morao sam se povezati s terminalnim programom na računalu kako bih prikazao podatke. Jedna od prednosti Arduino IDE -a je to što ima ugrađenu funkciju Serial Monitor. Postavio sam brzinu serijskog porta na 115,2k, a zatim prozor Serial Monitor postavio na istu brzinu. Snimka zaslona ovdje prikazuje tipičan zaslon s izlazima iz raznih 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 je primjer 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). Vrijeme sinkronizacije, vrijeme bita i očekivani bajti podataka su unaprijed definirani radi lakše izmjene. Možete upotrijebiti bilo koji od preostalih podatkovnih redaka za uključivanje/isključivanje itd. Za svoju aplikaciju. Samo dodajte primjenjive naredbene kodove i zamijenite logiku uključivanja/isključivanja LED -a u „petlji“prema vašim potrebama.

Preporučeni: