Sisällysluettelo:

Arduino RF -anturidekooderi: 5 vaihetta
Arduino RF -anturidekooderi: 5 vaihetta

Video: Arduino RF -anturidekooderi: 5 vaihetta

Video: Arduino RF -anturidekooderi: 5 vaihetta
Video: Как создать NAS из старых жестких дисков 2024, Heinäkuu
Anonim
Arduinon RF -anturidekooderi
Arduinon RF -anturidekooderi

Edellisessä talossani oli esiasennettu turvajärjestelmä, jossa oli ovianturit, liikeanturi ja ohjauspaneeli. Kaikki oli kiinteästi kytketty kaapin suureen elektroniikkalaatikkoon, ja siellä oli ohjeet lankapuhelimen kytkemiseen soittamaan automaattisesti hälytyksen sattuessa. Kun yritin leikkiä sen kanssa, huomasin, että yksi oviantureista oli asennettu puutteellisesti ja toinen oli ajoittainen virheellisen kohdistuksen vuoksi. Niin paljon turva -alan yrityksen käyntikortissa mainitusta ammattimaisesta asennuksesta. Ratkaisuni tuolloin oli ostaa pari Internet -turvakameraa ja halpa langaton turvahälytys.

Nopeasti eteenpäin tänään ja tuo langaton hälytys istuu laatikossani kellarissani. Halvan RF -vastaanottimen hankinnan jälkeen päätin katsoa, voinko purkaa eri hälytysanturien ja kaukosäätimien lähettämät viestit. Ajattelin, että koska he kaikki työskentelivät halvan hälytyslaatikon kanssa, heidän on käytettävä samaa viestimuotoa vain eri tunnuksella. Pian huomasin, että ne ovat samanlaisia vain viestien yleisessä rakenteessa. Joten projekti muuttui nopeasti triviaalista erittäin mielenkiintoiseksi.

Vaihe 1: Anturimoduulit

Anturimoduulit
Anturimoduulit
Anturimoduulit
Anturimoduulit
Anturimoduulit
Anturimoduulit
Anturimoduulit
Anturimoduulit

Kuten yllä olevista kuvista näkyy, lähettimet sisältävät oven auki -anturit, liiketunnistimet, virityskauko -ohjaimet ja langattoman näppäimistön, jota käytetään hälytyslaatikon ohjelmointiin. Kuten käy ilmi, kaksi näistä laitteista ei käytä samaa synkronointipituutta tai bittiaikaa. Ainoa yhteinen asia, paitsi viestin pituus, on bittien perusmuoto. Jokainen bitti kestää kiinteän ajanjakson nollan ja yhden välisen eron ollessa korkean/matalan osan käyttöjakso.

Edellä esitetty kaunis aaltomuoto EI ole se, mitä sain ensimmäisenä. Koska 433 MHz: n taajuusalueella on niin paljon liikennettä, minun täytyi aktivoida anturi juuri ennen kuin asetin laajuuden yhdelle laukaisimelle. Onneksi anturit lähettävät useita kopioita dataviestistä, kun ne aktivoidaan, ja kaukosäätimet ja näppäimistö jatkavat viestien lähettämistä niin kauan kuin painiketta painetaan. Käyttämällä laajuutta pystyin määrittämään kunkin kohteen synkronoinnin pituuden ja tietobittien kestot. Kuten aiemmin mainittiin, synkronointiajat ovat erilaisia ja bittiajat ovat erilaisia, mutta kaikissa sanomamuodoissa on matalan tason synkronointi, jota seuraa 24 databittiä ja yksi pysäytysbitti. Se riitti minulle, jotta pystyin rakentamaan yleisen dekooderin ohjelmistoon ilman, että tarvitsin koodata kaikki eri tiedot jokaiselle laitteelle.

Vaihe 2: Laitteisto

Laitteisto
Laitteisto
Laitteisto
Laitteisto

Rakensin alun perin anturidekooderin käyttäen PIC -mikrokontrolleria ja kokoonpanokieltä. Olen pelannut Arduinon muunnelmilla äskettäin, joten ajattelin nähdä, voisinko kopioida sen. Yksinkertainen kaavio on esitetty yllä, ja siellä on myös kuva prototyypistäni. Tein vain kolme tavallista hyppyjohtoa siirtyäkseni Arduino Nanosta RF -vastaanotinkorttiin. Virta ja yksi datalinja ovat kaikki mitä tarvitaan.

Jos luet ohjeistani”3-in-1 aika- ja säänäytössä”, huomaat, että käytän yleistä RXB6, 433 MHz: n vastaanotinta. Saatat saada todella halvat vastaanottimet toimimaan tällä projektilla tarvittavalla lyhyellä kantamalla, mutta suosittelen silti käyttämään superheterodyne-vastaanotinta.

Vaihe 3: Ohjelmisto

Ohjelmisto muuntaa vastaanotetut bitit näytettäviksi ASCII -merkeiksi. Se antaa synkronoinnin pituuden arvon sekä 1 ja 0 bitin pituudet. Koska tiesin jo synkronointipituudet ja bittimuodot, olisin voinut kirjoittaa ohjelmiston nimenomaan niitä varten. Sen sijaan päätin katsoa, voisinko kirjoittaa sen selvittääksesi synkronointipituudet ja selvittääksesi automaattisesti databitit. Tämän pitäisi helpottaa muokkaamista, jos haluan yrittää havaita muita formaatteja jossain vaiheessa. On tärkeää huomata, että ohjelmisto ei tiedä, onko viestin ensimmäinen bitti 1 vai 0. Se olettaa, että se on 1, mutta jos se havaitsee, että sen olisi pitänyt olla nolla, se kääntää bittiä valmiissa viestissä ennen sen lähettämistä sarjaportista.

Synkronointipulssin ja databittien ajat määritetään käyttämällä ulkoista INT0 -keskeytystuloa syöttämällä keskeytyksenkäsittelijä. INT0 voi laukaista nousussa, laskussa tai molemmissa reunoissa tai tasaisesti matalalla tasolla. Ohjelmisto keskeytyy molemmilta reunoilta ja mittaa ajan, jonka pulssi pysyy alhaisena. Tämä yksinkertaistaa asioita, koska viestin aloitus/synkronointi on matalan tason pulssi ja bitit voidaan määrittää niiden matalan tason ajan perusteella.

Keskeytyksen käsittelijä määrittää ensin, onko tallennettu luku tarpeeksi pitkä aloitus/synkronointipulssiksi. Käytettävissä olevat eri laitteet käyttävät synkronointipulsseja 4, 9, 10 ja 14 millisekuntia. Sallittujen min/max -synkronointiarvojen määrittelylauseet ovat ohjelmiston edellä ja ovat tällä hetkellä asetettu 3 ja 16 millisekunniksi. Bittiajat vaihtelevat myös antureiden välillä, joten bittien dekoodausalgoritmin on otettava tämä huomioon. Ensimmäisen bitin bittiaika tallennetaan, kuten myös seuraavan bitin aika, jolla on merkittävä ero ensimmäiseen bittiin. Seuraavien bittiaikojen suora vertailu ei ole mahdollista, joten käytetään "fudge factor" -määritystä ("Variation"). Bittien dekoodaus alkaa olettaen, että ensimmäinen databitti tallennetaan aina loogisena 1. Tämä arvo tallennetaan ja sitä käytetään seuraavien bittien testaamiseen. Jos myöhempi databittien lukumäärä on tallennetun arvon varianssi -ikkunassa, se tallennetaan myös logiikaksi 1. Jos se on tallennetun arvon varianssiajan ulkopuolella, se tallennetaan logiikkana 0. Jos logiikka 0 bittiaika on lyhyempi kuin ensimmäinen bittiaika, jolloin lippu ilmoittaa ohjelmistolle, että tavut on käännettävä ennen näyttämistä. Ainoa tapaus, jossa tämä algoritmi epäonnistuu, on silloin, kun viestin bitit ovat kaikki 0. Voimme hyväksyä tämän rajoituksen, koska tällainen viesti on merkityksetön.

Kaikista kiinnostuneista antureista viestin pituus on 24 databittiä, mutta ohjelmisto ei rajoitu tähän pituuteen. Puskuri on enintään seitsemälle tavulle (lisää voitaisiin lisätä) ja määrittelee viestin vähimmäis- ja enimmäispituuden tavuina. Ohjelmisto on määritetty keräämään bitit, muuntamaan ne tavuiksi, tallentamaan ne väliaikaisesti ja tulostamaan ne sitten ASCII -muodossa sarjaportin kautta. Tapahtuma, joka laukaisee viestin, on uuden käynnistys-/synkronointipulssin vastaanotto.

Vaihe 4: Tietojen kirjaaminen

Tietojen kirjaaminen
Tietojen kirjaaminen

Ohjelmisto on asetettu lähettämään muunnetut tiedot ASCII -merkeinä Arduinon sarjaportin (TX) kautta. Kun tein PIC -version, minun oli liitettävä tietokoneen pääteohjelmaan tietojen näyttämiseksi. Yksi Arduino IDE: n eduista on se, että siinä on sisäänrakennettu Serial Monitor -toiminto. Asetin sarjaportin nopeudeksi 115,2 k ja asetan sitten Serial Monitor -ikkunan samaan nopeuteen. Tässä kuvakaappauksessa näkyy tyypillinen näyttö, jossa on lähtöjä erilaisista antureista. Kuten näette, tiedot eivät joskus ole täydellisiä, mutta voit helposti määrittää kunkin anturin todellisen arvon.

Vaihe 5: Näytevastaanotinohjelmisto

Näytevastaanotinohjelmisto
Näytevastaanotinohjelmisto

Olen lisännyt esimerkkiohjelmistoluettelon, joka osoittaa, kuinka voit käyttää kerättyjä tietoja saadaksesi tietyn koodisarjan sovelluksellesi. Tämä esimerkki on asetettu matkimaan yhtä Etekcity -etäpistorasioistani. Yksi komento kytkee päälle nanoon sisäänrakennetun LED -valon (D13) ja toinen komento sammuttaa LED -valon. Jos sinulla ei ole LED -valoa Arduinossa, lisää vastus ja LED kuten kaaviossa. Todellisessa sovelluksessa tämä toiminto kytkeisi virran päälle/pois päältä pistorasiasta (käyttämällä relettä tai triacia). Synkronointiajat, bittiajat ja odotetut datatavut on määritetty etukäteen muokkaamisen helpottamiseksi. Voit käyttää mitä tahansa jäljellä olevista tietoriveistä kytkeäksesi asiat päälle/pois tms. Tietylle sovelluksellesi. Lisää vain soveltuva komentokoodi ja vaihda LED -on/off -logiikka silmukkaan tarpeidesi mukaan.

Suositeltava: