Eksperimentai su radijo ryšio moduliais

Prieš kelis metus nusipirkau 433 MHz radijo ryšio modulius. Siųstuvą ir imtuvą. Tada Lietuvoje buvo galima rasti tik vienos rūšies tokius modulius, dabar jau yra daugiau. Norėjau pabandyt padaryt radijo ryšį tarp kompiuterio ir mikrokontrolerio, arba tarp dviejų mikrokontrolerių. Pirmas bandymas buvo toks: siųstuvas pajungtas prie kompiuterio COM porto (ne tiesiai, per lygių suderinimo schemą), imtuvas prie mikrokontrolerio. Bandžiau siuntinėti duomenis per RS232.

wireless7.jpg

Šiaip jau iš karto tikėjausi, kad ryšys bus ne per geriausias. Tačiau rezultatas buvo net blogesnis nei aš tikėjausi. Perduoti beveik nieko nebuvo įmanoma. Išbandžiau įvairius greičius, tačiau geriausia ką pasiekiau tai perduoti keletą baitų, tačiau ir tai pavykdavo toli gražu ne visada.

Kodėl taip yra galima numanyt. RS232 duomenys netinka perdavimui radijo ryšiu. Bent jau su amplitudine moduliacija. Reikalas tame, kad negalima perduoti pvz. baito, kuriame yra visi nuliai. Toks signalas išsikreipia, nes jame yra pastovi dedamoji. RS232 šiek tiek taiso tokią situaciją, nes yra start ir stop bitai. Bet normaliam ryšiui reikia, kad keitimasis tarp 0 ir 1 būtų kuo pastovesnis. T.y., net jei baite visi nuliai (arba vienetai), perdavimo metu signalas turi pastoviai kaitaliotis. Tai galima matyti pažiūrėjus oscilografu į pvz. mašinos signalizacijų pultų perduodamą signalą. Tam naudojami specialūs kodavimo būdai. Vienas iš tokių – vadinamasis manchester kodavimas. Nerašysiu kaip ten koduojama, apie tai galima paskaityti internete.

Dar viena blogo veikimo priežastis – triukšmas imtuvo išėjime, kai nieko neperduodama. Nuo to RS232 kraustosi iš proto.

Norint šiuos modulius panaudot kokiam nors valdymui, galima būtų naudot tokias mikroschemas kaip PT2272(Encoder) ir PT2262(Decoder). Neliktų problemos su RS232, net ir mikrokontrolerių nereikėtų.

Ilgą laiką tie moduliai taip ir gulėjo. Bet prisiruošiau pabandyt dar kartą. Pasijungiau kiek kitaip. Principas išliko tas pats, tik prie kompiuterio pasijungiau per USB, naudodamas savos gamybos USB-RS232 konverterį.

wireless2.jpg

Keista, bet veikė šiek tiek geriau. Tačiau klaidų vis tiek buvo labai daug. Geriausiai veikė 2400 greičiu. Tiesa, buvo galima pastebėti, kad kai kurie baitai perduodami patikimiau. Pažiūrėjus kaip jie atrodo dvejetainėje sistemoje paaiškėjo, kad stabiliau perduodami tie baitai, kuriuose daugiau kaitaliojasi nuliai ir vienetai. Be to, pirmas baitas beveik visada buvo perduodamas neteisingai. Matomai RS232 būdavo užsikimšęs triukšmais. Pabandžius specialiai perduoti kelis baitus sinchronizacijai (būtent 01010101), reikalai pagerėjo. Po jų einantys baitai būdavo perduodami teisingai daug dažniau. Tada pabandžiau padaryti tokį ne visai tikrą manchester kodavimą. Kiekvienas baitas būdavo verčiamas dviem baitais būtent šiuo kodavimo principu. Ne visai tikru vadinu todėl, kad tikrą bitų seką pažeisdavo start ir stop bitai. Šiaip jau taip daryt nesąmonė, bet visgi reikalai dar labiau pagerėjo. Jau galėdavau perduoti neilgas baitų sekas (iki ~40-50 simbolių, kurios ganėtinai dažnai būdavo perduodamos be klaidų. Dar padidinti patikimumą galima skaičiuojant kontrolines sumas, tačiau tai tik neleis nueiti klaidingiems duomenims, tačiau pačio perdavimo tikimybės nepadidins. Bandžiau dar panaudoti tokį būdą: kiekvieną baitą perduodavau tris kartus paeiliui, ir jei du iš jų būdavo vienodi, baitą skaitydavau teisingu. Tai veikia tikrai neblogai. Visos šios priemonės leido pasiekti gana patikimą perdavimą. Padariau paprastai – perdavinėjau 30-40 baitų sekas (ilgesnių teisingo perdavimo tikimybė mažėja). Jei seka teisinga – uždegamas šviesos diodas imtuve. Penkios skirtingos sekos – penki šviesos diodai. Paleidus tokį perdavimą pastoviai galima žiūrėti kaip paeiliui užsideginėja šviesos diodai. Jei kuris neužsidegė – reiškia seka buvo su klaida. Matėsi, kad kartais perdavinėjama visai stabiliai ilgą laiką. Bandžiau nueiti apie 50 m atstumu – veikė normaliai. Tačiau kartai būdavo tokių užplaukimų – pasipildavo daug klaidų. Po kiek laiko vėl viskas gerai. Matomai atsirasdavo trukdžiai. Čia nieko keisto – būtent 433,92 MHz dirba mašinų signalizacijos. Jei pats paspausdavau signalizacijos pultelį, ryšys dingdavo visiškai.

wireless3.jpg

Norint ryšį padaryt dar patikimesnį, reiktų atsisakyti RS232. Reikia pačiam daryti nuoseklų protokolą. Tačiau tai nėra taip paprasta, todėl kol kas neprisiruošiau pabandyt. Bet reikia suprast, kad tokie moduliai netinka nors kiek rimtesniam duomenų perdavimui. Tačiau jei reikia perdavinėti nedidelius informacijos kiekius – pilnai galima panaudot. Pvz. mano hobyje tai tiktų kokiam nors telemetrijos perdavimui iš lėktuvo. Ten būtų beveik nepastebima net jei kas antra seka ateis su klaidomis.

Neseniai eBay nusipirkau porą šiek tiek rimtesnių modulių. Tai kinų firmelės „Sure electronics“ produkcija.

wireless1.jpg

Gamina jie galybes visokių reikalingų ir nereikalingų dalykų ir pardavinėja eBay. Šie moduliai – transceiver‘iai, t.y. ir siųstuvas, ir imtuvas kiekviename modulyje. Prie mikrokontrolerio arba kompiuterio jungiami per RS232, gali perdavinėti iki 64 baitų sekas, ir turi 64 dažnio kanalus (keičiami programiškai). Pagrindinis skirtumas nuo anksčiau mano aprašytų modulių tame, kad čia jau yra padarytas apsikeitimo protokolas. Numetam duomenis į modulį per RS232, ir visiškai nereikia galvot, kokiu būdu jis juos perduoda.

wireless4.jpg

wireless5.jpg

Bandymai parodė, kad perdavimo patikimumas puikus. Klaidos pasitaiko labai retai. Tiesa, atstumo kol kas neišbandžiau, bet buto ribose veikia idealiai. Padariau programėlę, kuri organizuoja dvikryptį ryšį. Bandžiau taip: išsiunčiu iš kompiuterio kokią nors baitų seką, o mikrokontroleris išsiunčia tai ką gavo atgal. Kompiuterio programoje matau, buvo klaidų ar nebuvo. Taip pat iš kompiuterio galiu pasiųsti komandą, kuri uždega norimą šviesos diodą ar pakeičia abiejų modulių dažnio kanalą. Įdomu tai, kad net nustačius dažnį maksimaliai artimą signalizacijos pultui, jokio poveikio nėra. Duomenys vaikšto be klaidų. Specialiai išbandžiau daugumą kanalų – veikia vienodai gerai. Artimiausiu metu reikės išbandyt veikimo atstumą.

This entry was posted in Elektronika, Programavimas. Bookmark the permalink.

5 Responses to Eksperimentai su radijo ryšio moduliais

  1. ReM says:

    Išbandžiau 200 m (patikrinka pagal google maps) atstumu – veikia be klaidų. Toliau eiti nebuvo kur – Nemunas. Bandžiau perdavinėti 50 simbolių paketus abiem kryptimis. Perdavinėjau iš kompo su kontroline suma. Priiminėjo mikrokontroleris – jei kontrolinė suma sutampa, siunčia atgal. Taip matėsi ryšio kokybė abiem kryptimis. Įdomu tai, kad antenos padėtis visai neturėjo jokios reikšmės. Reiškia galima būtų eit toliau…

  2. susidomjes,elektronika says:

    kur butu galima pritaikiti ?

  3. ReM says:

    Bet kur, kur reikia perdavinėti kokius nors duomenis dvipusiu ryšiu.
    Beje, dar bandžiau atstumą. Prie 300 m jau pradeda atsirast klaidos. Reiškia gamintojo deklaruojamas atstumas – teisybė.

  4. Mauzeris says:

    Gal gali pasidalinti tu “protingesniu” moduliu jungimo schemomis, nes atrodo, kad truputi kitaip pajunges nei nurodo gamintojas?

  5. ReM says:

    Pajungta taip, kaip rekomenduoja gamintojas. Tiksliau jis nieko nerekomenduoja, bet parašyta kur kas yra. To pilnai pakanka.

Leave a Reply

Your email address will not be published. Required fields are marked *