Radijo kanalas su grįžtamojo ryšio 433 MHz grandine. Naudojant RF modulius. RF modulių testavimas

Išorinis

Jau rašiau apie imtuvų ir siųstuvų, veikiančių 433 MHz diapazone, naudojimą, susijusį su mano amatais. Šį kartą norėčiau palyginti skirtingus jų variantus ir suprasti, ar jie skiriasi, ir kurie yra geresni. Po pjūviu yra bandymų stendo konstrukcija, pagrįsta arduino, nedideliu kodu, iš tikrųjų bandymais ir išvadomis. Elektroninių naminių gaminių mylėtojus kviečiu kat.

Turiu įvairių tokio diapazono imtuvų ir siųstuvų, todėl nusprendžiau apibendrinti ir suskirstyti šiuos įrenginius. Be to, gana sunku suprojektuoti įrenginius be radijo kanalo, ypač jei laivas neturėtų būti nejudančioje padėtyje. Kas nors gali ginčytis, kad wi-fi sprendimų dabar yra nemažai ir verta jais naudotis, tačiau pastebiu, kad ne visur patartina jais naudotis, be to, kartais nesinori trukdyti sau ir kaimynams toks vertingas dažnio šaltinis.

Apskritai, visa tai yra dainų tekstai, pereikime prie specifikos, galima palyginti šiuos įrenginius:
Labiausiai paplitęs ir pigiausias siųstuvo ir imtuvo rinkinys:


Galite nusipirkti, pavyzdžiui, imtuvas kartu su siųstuvu kainuoja 0,65 USD. Mano ankstesnėse apžvalgose tai buvo naudojama.

Šis rinkinys laikomas aukštesnės kokybės:


Parduodamas už 2,48 USD su šio diapazono antenomis ir spyruoklėmis.

Tikrasis šios apžvalgos objektas parduodamas atskirai kaip imtuvas:

Šis renginyje dalyvaujantis įrenginys yra siųstuvas:


Nepamenu, kur tiksliai pirkau, bet tai nėra taip svarbu.

Siekdami užtikrinti vienodas sąlygas visiems dalyviams, spiralės pavidalu lituojame vienodas:


Be to, litavau kaiščius, skirtus įkišti į duonos lentą.

Eksperimentams jums reikės dviejų arduino derinimo plokščių (aš paėmiau Nano), dviejų duonos lentų, laidų, LED ir ribojančio rezistoriaus. Gavau taip:

Testams nusprendžiau panaudoti biblioteką, ją reikia išpakuoti į įdiegto arduino IDE katalogą „bibliotekos“. Parašykime paprastą siųstuvo kodą, kuris bus nejudantis:
#įtraukti RCSwitch mySwitch = RCSwitch(); void setup() ( Serial.begin(9600); mySwitch.enableTransmit(10); ) void loop() ( mySwitch.send(5393, 24); delay(5000); )
Šių siųstuvų kaištį prijungsime prie 10 arduino išvesties. Siųstuvas transliuos numerį 5393 kas 5 sekundes.

Imtuvo kodas yra šiek tiek sudėtingesnis dėl išorinio diodo prijungimo per ribojantį rezistorių prie arduino 7 kaiščio:
#įtraukti #define LED_PIN 7 RCSwitch mySwitch = RCSwitch(); void setup() ( Serial.begin(9600); pinMode(LED_PIN, OUTPUT); digitalWrite (LED_PIN, 0); mySwitch.enableReceive(0); ) void loop() ( if (mySwitch.available()) ( int value = mySwitch.getReceivedValue(); if (reikšmė == 0) ( Serial.print("Nežinoma koduotė"); ) else ( Serial.print("Gauta "); uint16_t rd = mySwitch.getReceivedValue(); if(rd= =5393)( digitalWrite(LED_PIN, 1); delsa (1000); digitalWrite (LED_PIN, 0); delsa (1000); ) ) mySwitch.resetAvailable(); ) )
Imtuvas prijungtas prie arduino Nano 2 kaiščio (kodas naudoja mySwitch.enableReceive(0), nes 2 kaištis atitinka 0 pertraukimo tipą). Jei gautas išsiųstas numeris, sekundę mirksime išoriniu diodu.

Dėl to, kad visi siųstuvai turi tą patį kištuką, eksperimento metu juos galima tiesiog pakeisti:


Imtuvų situacija yra panaši:





Kad užtikrinčiau priimančios dalies mobilumą, panaudojau power banką. Visų pirma, surinkęs grandinę ant stalo, įsitikinau, kad imtuvai ir siųstuvai veikia bet kokiu deriniu. Bandomasis vaizdo įrašas:


Kaip matote, dėl mažos apkrovos maitinimo bankas po kurio laiko išjungia apkrovą ir reikia paspausti mygtuką, tai bandymams netrukdė.

Pirma, apie siųstuvus. Eksperimento metu paaiškėjo, kad tarp jų nėra jokio skirtumo, tik tiek, kad bevardis, mažas eksperimentinis veikė kiek prasčiau nei konkurentai, šis:


Jį naudojant patikimo priėmimo atstumas sumažėjo 1-2 metrais. Likę siųstuvai veikė lygiai taip pat.

Tačiau su imtuvais viskas pasirodė sudėtingiau. Garbingą 3 vietą užėmė šio rinkinio gavėjas:


Jis pradėjo prarasti ryšį jau 6 metrų atstumu nuo matomumo (5 metrų atstumu - kai tarp siųstuvų naudojamas pašalinis asmuo)

Antroji vieta atiteko dalyviui iš pigiausio rinkinio:


Užtikrintai gautas 8 metrų atstumu, bet nepavyko įvaldyti 9 metro.

Na, o rekordininkas buvo peržiūros objektas:


Turima matymo linija (12 metrų) jam buvo lengva užduotis. Ir perjungiau į priėmimą per sienas, iš viso 4 kietos betoninės sienos, maždaug 40 metrų atstumu - jau gavosi ant ribos (žingsnis į priekį priėmimas, vienas žingsnis atgal LED tyli). Taigi tikrai galiu rekomenduoti šios apžvalgos temą įsigyti ir naudoti amatuose. Jį naudodami galite sumažinti siųstuvo galią vienodais atstumais arba padidinti patikimo priėmimo atstumą esant vienodoms galioms.

Pagal rekomendacijas galite padidinti perdavimo galią (taigi ir priėmimo atstumą) padidindami siųstuvo maitinimo įtampą. 12 voltų leido padidinti pradinį atstumą 2-3 metrais matymo linijoje.

Baigiu čia, tikiuosi informacija kam nors bus naudinga.

Planuoju pirkti +125 Įtraukti į adresyną Man patiko apžvalga +121 +225

Šioje pamokoje išspręsime radijo signalo perdavimo tarp dviejų Arduino valdiklių, naudojant populiarų 433 MHz siųstuvą-imtuvą, problemą. Tiesą sakant, duomenų perdavimo įrenginį sudaro du moduliai: imtuvas ir siųstuvas. Duomenys gali būti perduodami tik viena kryptimi. Tai svarbu suprasti naudojant šiuos modulius. Pavyzdžiui, nuotoliniu būdu galite valdyti bet kurį elektroninį įrenginį, nesvarbu, ar tai mobilusis robotas, ar, pavyzdžiui, televizorius. Tokiu atveju duomenys bus perkelti iš valdymo pulto į įrenginį. Kitas variantas – perduoti signalus iš belaidžių jutiklių į duomenų rinkimo sistemą. Čia maršrutas keičiasi, dabar siųstuvas yra jutiklio pusėje, o imtuvas - surinkimo sistemos pusėje. Moduliai gali turėti skirtingus pavadinimus: MX-05V, XD-RF-5V, XY-FST, XY-MK-5V ir kt., tačiau visi jie turi maždaug vienodą išvaizdą ir kaiščių numeraciją. Taip pat dažni du radijo modulių dažniai: 433 MHz ir 315 MHz.

1. Ryšys

Siųstuvas turi tik tris kontaktus: Gnd, Vcc ir Data.
Juos jungiame prie pirmosios Arduino plokštės pagal tokią schemą: Surenkame abu įrenginius ant duonos lentos ir pradedame rašyti programas.

2. Programa siųstuvui

Norėdami dirbti su radijo moduliais, naudosime RCSwitch biblioteką. Parašykime programą, kuri kas sekundę paeiliui išsiųs du skirtingus pranešimus. #įtraukti RCSwitch mySwitch = RCSwitch(); void setup() ( mySwitch.enableTransmit(2); ) void loop() ( mySwitch.send(B0100, 4); delay(1000); mySwitch.send(B1000, 4); delay(1000); ) Išanalizuokime programa. Pirmas dalykas, kurį padarėme, paskelbėme objektą darbui su siųstuvu ir pavadinome jį mySwitch. RCSwitch mySwitch = RCSwitch(); Tada standartinės funkcijos viduje sąranka įjungė siųstuvą ir nurodė kaištį, prie kurio jis prijungtas: mySwitch.enableTransmit(2); Galiausiai pagrindinėje programos ciklo kilpoje pirmiausia išsiunčiame vieną pranešimą, o tada antrąjį, naudodami funkciją siųsti : mySwitch.send(B1000, 4); Funkcija siųsti turi du argumentus. Pirmasis yra išsiųstas pranešimas, kuris bus išsiųstas oru impulsų pliūpsnio pavidalu. Antrasis argumentas yra siunčiamo paketo dydis. Savo programoje pranešimus nurodėme dvejetainiu skaičių formatu. Tai nurodo angliška raidė „B“ kodo B1000 pradžioje. Dešimtainėje sistemoje šis skaičius tampa aštuonetu. Taigi galime pavadinti funkciją siųsti kaip tai: mySwitch.send(8, 4); Send taip pat gali priimti dvejetaines eilutes: mySwitch.send("1000", 4);

3. Programa imtuvui

Dabar parašykime programą imtuvui. Norėdami pademonstruoti perdavimo faktą, uždegsime šviesos diodą, prijungtą prie Arduino plokštės kaiščio Nr.3. Jei imtuvas užfiksavo kodą B1000, įjunkite šviesos diodą, o jei B0100 – išjunkite. #įtraukti RCSwitch mySwitch = RCSwitch(); void setup() ( pinMode(3, OUTPUT); mySwitch.enableReceive(0); ) void loop() ( if(mySwitch.available())( int value = mySwitch.getReceivedValue(); if(value == B1000) digitalWrite(3, HIGH); kitaip if(reikšmė == B0100) digitalWrite(3, LOW); mySwitch.resetAvailable(); ) ) Funkcija prieinama grąžina tiesa, jei siųstuvas gavo bent dalį duomenų: mySwitch.available() Funkcija getReceivedValue ištraukia vieną paketą iš duomenų srauto ir iššifruoja jį į skaičių. Programoje gautą skaičių priskiriame kintamajam vertė : int reikšmė = mySwitch.getReceivedValue();

Užduotys

Dabar galite pabandyti praktikuoti ir pasigaminti įvairių naudingų prietaisų. Štai keletas idėjų.
  1. Nuotolinio valdymo pultelis lempai. Imtuvo pusėje, prijungtas prie lempos maitinimo grandinės (atsargiai, 220 voltų!). Siųstuvo pusėje: . Parašykite programas imtuvui ir siųstuvui, kurie paspaudus mygtuką įjungs nuotolinę relę. Dar kartą paspaudus mygtuką, relė išsijungs.
  2. Lauko termometras su radijo kanalu. Padėkite ant siųstuvo pusės. Pateikite autonominį maitinimo šaltinį iš baterijų. Imtuvo pusėje: . Rašykite imtuvui ir siųstuvui programas, kurios leis ekrane rodyti nuotolinio jutiklio temperatūros rodmenis.

Išvada

Taigi dabar žinome paprastą ir nebrangų būdą perduoti duomenis per atstumą. Deja, tokiuose radijo moduliuose perdavimo greitis ir atstumas yra labai riboti, todėl pilnai valdyti, pavyzdžiui, keturkopterio, nepavyks. Tačiau radijo pulteliu galime pagaminti ir paprastą buitinį prietaisą: lempą, ventiliatorių ar televizorių. Dauguma radijo kanalų valdymo pultų veikia siųstuvų-imtuvų pagrindu, kurių dažnis yra 433 MHz ir 315 MHz. Turėdami Arduino ir imtuvą, galime iššifruoti valdymo signalus ir juos pakartoti. Daugiau apie tai, kaip tai padaryti, parašysime vienoje iš šių pamokų!

Sveiki visi! Darbe turiu automobilių stovėjimo aikštelę. Žinoma, šio straipsnio tikslas nėra girtis, atsižvelgiant į sudėtingą situaciją keliuose su automobilių stovėjimo vietomis, o ne viešai skelbti mano vadovybę, kad jie rūpinasi savo darbuotojais (nepaminėsiu savo darbo vietos!) , tai ne esmė. Esmė ta, kas trukdo kitiems, nesusijusiems su mano darbo vieta, stovėti šioje aikštelėje? O tai užtvara, ribojanti įvažiavimą ir išvažiavimą iš šios aikštelės.

Ir, kaip ir daugelyje organizacijų, į mano įmonę įeinama naudojant įprastus leidimus, kad būtų galima kontroliuoti mane ir visus kitus. Na, jie taip pat įvažiavo į automobilių stovėjimo aikštelę naudodamiesi tais pačiais leidimais. Tai yra, privažiuoji iki stovėjimo aikštelės, pateiki savo leidimą skaitytojui, jis veikia, užtvaras atsidaro (užsidaro automatiškai), įvažiuoji ir viskas. Taip jie manė. Tačiau mano aistra elektronikai ir natūralus tinginystė (tai reiškia, kad kiekvieną kartą privažiuoju, atidarau langą, ištraukiu ranką, uždarau langą, o jei lyja, o jei šalta) – priešinosi sistemai.

Taigi, pereikime prie esmės. Visų pirma, sužinojau, kad barjeras pasirodė esąs gana populiari Nicos įmonė, ir pradėjau ieškoti informacijos apie ją. Tačiau, nepaisant gamintojo populiarumo, informacijos apie jo kodų formatus buvo labai mažai. Paaiškėjo, kad yra 12 bitų ir 24 bitų kodų formatai. 12 bitų yra senesnis, 24 bitų yra modernesnis. Kadangi žinau, kad barjeras darbe stovi jau seniai, nusprendžiau pradėti nuo 12 bitų kodų (vėliau susitvarkiau). Taigi duomenų paketas susideda iš 12 bitų. Prieš 12 bitų kodą yra vadinamasis „pilotinis laikotarpis“ ir „pradžios impulsas“. „Pilotinis periodas“ susideda iš 36 žemo lygio intervalų, „pradžios impulsas“ – iš 1 aukšto lygio intervalo. Vieną duomenų paketą sudaro „pilotinis laikotarpis“, po kurio seka „pradžios impulsas“, o po jo seka 12 bitų kodas (kiekvienai barjerui skirtingas). Užtvariniai nuotolinio valdymo pultai vienu metu perduoda 4 duomenų paketus, bet aš įdiegiau daugiau, nes daugelis įrenginių veikia tokiu dažniu (ypač automobilių signalizacija) ir galimi trukdžiai. Nicos barjerų impulsų trukmė:

  • Loginis „1“ – 1400 µs žemas (du intervalai) ir 700 µs didelis (vienas intervalas)
  • Loginis „0“ yra 700 µs žemas (vienas intervalas) ir 1400 µs didelis (vienas intervalas)
  • „Bandomasis laikotarpis“ – 25200 μs (36 intervalai)
  • „Paleidimo impulsas“ – 700 µs (1 intervalas)
Kadangi nei aš, nei kas nors kitas neturi pultelių šiam užtvarui (tokiu atveju būtų galima tiesiog nuskaityti signalą iš esamo pultelio), tuomet teks atspėti tikrąjį kodą ieškant per visus įmanomus variantus, tačiau 4096.

Kaip apskritai visa tai galima realizuoti? Pastaruoju metu mano aistra Arduino platformoms neleido man ilgai galvoti apie šią problemą.

Komponentų sąrašas:

1. Arduino Uno,

2. 433 MHz radijo siųstuvas, savadarbė antena,

3. Baterija yra 9 voltų, populiariai „Krona“.

Šie radijo siųstuvai parduodami labai pigiai žinomose Kinijos parduotuvėse (apie 50 rublių), kartu su radijo imtuvais. Jie labai paprasti, trijų kontaktų: maitinimo, įžeminimo ir signalo kaiščio. Maitinimas nuo 5 iki 12 voltų, kuo didesnė maitinimo įtampa, tuo geresnis diapazonas. Iš tikrųjų todėl buvo pasirinkta 9 voltų baterija. Rekomenduojama „Arduino Uno“ maitinimo įtampa yra nuo 7 iki 12 voltų (Vin kaištis), todėl „Krona“ yra gana tinkama. Taip pat radijo siųstuvo diapazonas priklauso nuo antenos buvimo (be jos diapazonas bus apie 1 metrą). Visas komplektas kainavo apie 300 rublių.

Tiesą sakant, čia yra „Arduino Uno“ eskizas:

Int siuntimo_kodas_pin = 13; //int siuntimo_kodas = 3061; tai kodas, nustatytas brutalia jėga mano barjerui void setup() ( pinMode(send_code_pin, OUTPUT); ) void loop () ( for (int send_code = 0; send_code< 4096; send_code++) // этот цикл после того как код определен необходимо убрать { for (int j = 0; j <7; j++) // достаточно 4-х, но из-за помех поставил 7 { digitalWrite(send_code_pin, HIGH); // стартовый импульс delayMicroseconds(700); digitalWrite(send_code_pin, LOW); for (int i = 12; i >0; i--) ( loginis bito_kodas = bitRead(siųsti_kodas, i - 1); if (bit_code) ( digitalWrite(send_code_pin, LOW); // vieneto delsaMikrosekundės (1400); skaitmeninis rašymas (siųsti_kodas_pin, HIGH); delsa Mikrosekundės (700); ) else ( digitalWrite(send_code_pin, LOW); // nulis delsosMikrosekundės(700); digitalWrite(send_code_pin, HIGH); delayMicroseconds(1400); ) ) digitalWrite(send_code_pin, LOW); // bandomojo laikotarpio vėlavimasMicroseconds(25200); ) ) //delay(10000); apibrėžę kodą, nustatykite delsą)
Visų galimų variantų perėjimas užtruko apie 1 savaitę, atsižvelgiant į vieną išėjimą per dieną iki užtvaros. Greito teisingo kodo pasirinkimo technika buvo labai paprasta. Naudojant komandą mikros () nustatė vieno kodo perdavimo laiką. Tai buvo maždaug 0,25 sekundės. Visas laikas, per kurį reikia pereiti visas parinktis, yra apie 17 minučių. Priešais užtvarą paleidau Arduino ir pasižymėjau laiką. Maždaug 12,5 minutės barjeras atsidarė. Remdamasis tuo, iš karto atmečiau pirmuosius 2800 variantų. Ir taip toliau. Kai liko apie 30 variantų, po kiekvieno duomenų perdavimo nustatydavau 1 sekundės delsą. Kadangi duomenų perdavimo kontaktą įdiegiau kaip 13-ą (su LED lempute), buvo matomas kiekvienas perdavimo momentas, suskaičiavau ir nustačiau tikslų kodą.

Tai viskas! Kaip demonstracinis - skrodimo vaizdo įrašas.

Kartais reikia užmegzti belaidį ryšį tarp įrenginių. Pastaruoju metu šiam tikslui vis dažniau pradėti naudoti Bluetooth ir Wi-Fi moduliai. Tačiau vienas dalykas yra perkelti vaizdo įrašus ir didelius failus, o kitas dalykas yra valdyti mašiną ar robotą 10 komandų. Kita vertus, radijo mėgėjai dažnai kuria, koreguoja ir perdaro imtuvus ir siųstuvus, kad veiktų su jau paruoštais komandų kodavimo įrenginiais/dekoderiais. Abiem atvejais galite naudoti gana pigius RF modulius. Jų darbo ir naudojimo ypatybės po pjūviu.

Modulio tipai

Duomenų perdavimo RF moduliai veikia VHF juostoje ir naudoja standartinius 433 MHz, 868 MHz arba 2,4 GHz dažnius (rečiau 315 MHz, 450 MHz, 490 MHz, 915 MHz ir kt.) Kuo didesnis nešlio dažnis, tuo greitesnė informacija galima perduoti.
Paprastai gaminami RF moduliai yra skirti dirbti su tam tikru duomenų perdavimo protokolu. Dažniausiai tai yra UART (RS-232) arba SPI. Paprastai UART moduliai yra pigesni, taip pat leidžia naudoti nestandartinius (pasirinktinius) perdavimo protokolus. Iš pradžių galvojau kniedyti kažką panašaus, bet prisiminęs karčią patirtį gaminant radijo valdymo įrangą, pasirinkau gana pigius HM-T868 ir HM-R868 (60 UAH = mažiau nei 8 USD už komplektą). Taip pat yra modelių HM-*315 ir HM-*433, kurie nuo toliau aprašytų skiriasi tik nešlio dažniu (atitinkamai 315 MHz ir 433 MHz). Be to, yra daug kitų modulių, panašių į jų veikimo būdą, todėl informacija gali būti naudinga kitų modulių savininkams.

Siųstuvas

Beveik visi RF moduliai yra mažos spausdintinės plokštės su kaiščiais, skirti prijungti maitinimą, perduoti duomenis ir valdymo signalus. Apsvarstykite siųstuvą HM-T868
Jame yra trijų kontaktų jungtis: GND (bendras), DATA (duomenys), VCC (+ maitinimas), taip pat pleistras antenai lituoti (naudojau MGTF laido 8,5 cm - 1/4 bangos ilgio stuburą).

Imtuvas

HM-R868 imtuvas savo išvaizda yra labai panašus į atitinkamą siųstuvą

bet ant jo jungties yra ketvirtas kontaktas - ĮJUNGTI; kai jam tiekiama maitinimas, imtuvas pradeda veikti.

Darbas

Sprendžiant iš dokumentacijos, darbinė įtampa yra 2,5-5 V, kuo didesnė įtampa, tuo didesnis veikimo diapazonas. Iš esmės tai yra radijo plėtinys: įjungus įtampą į siųstuvo DATA įvestį, imtuvo DATA išėjime taip pat atsiras įtampa (su sąlyga, kad įtampa bus tiekiama ir į ENABLE). BET, yra keletas niuansų. Pirma: duomenų perdavimo dažnis (mūsų atveju jis yra 600-4800 bps). Antra: jei DATA įėjime nėra signalo ilgiau nei 70ms, tada siųstuvas pereina į miego režimą (iš esmės išsijungia). Trečia: jei imtuvo priėmimo zonoje nėra veikiančio siųstuvo, jo išvestyje atsiranda visokių triukšmų.

Atlikime nedidelį eksperimentą: prijunkite maitinimą prie siųstuvo GND ir VCC kontaktų. DATA kaištis yra prijungtas prie VCC per mygtuką arba trumpiklį. Taip pat jungiame maitinimą prie imtuvo GND ir VCC kontaktų, jungiame ENABLE ir VCC tarpusavyje. Prie DATA išvesties (geriausia per rezistorių) prijungiame šviesos diodą. Kaip antenas naudojame bet kokį tinkamą 1/4 bangos ilgio laidą. Diagrama turėtų atrodyti taip:


Iš karto įjungus imtuvą ir (arba) įjungus įtampą, šviesos diodas turi užsidegti ir degti nuolat (gerai arba beveik nuolat). Paspaudus siųstuvo mygtuką, šviesos diodui nieko nenutinka – jis šviečia toliau. Kai atleisite mygtuką, šviesos diodas mirksės (užgęsta ir vėl užsidega) ir toliau švies. Dar kartą paspaudus ir atleidus mygtuką, viskas turėtų kartotis. Kas ten vyko? Kai imtuvas buvo įjungtas, siųstuvas buvo miego būsenoje, imtuvas nerado normalaus signalo ir pradėjo priimti visokį triukšmą, atitinkamai ir išėjime atsirado visokių triukšmų. Iš akies neįmanoma atskirti nuolatinio signalo nuo triukšmo ir atrodo, kad šviesos diodas šviečia nuolat. Paspaudus mygtuką, siųstuvas išeina iš užmigdymo režimo ir pradeda siuntimą, imtuvo išvestyje pasirodo logiškas „1“ ir šviesos diodas šviečia tikrai nenutrūkstamai. Atleidus mygtuką, siųstuvas perduoda loginį „0“, kurį gauna imtuvas, o jo išvestyje taip pat pasirodo „0“ - šviesos diodas galiausiai užgęsta. Tačiau po 70 ms siųstuvas pamato, kad jo įėjime vis dar yra tas pats „0“ ir užmigo, nešlio dažnio generatorius išsijungia ir imtuvas pradeda gauti visokį triukšmą, triukšmą išėjime - užsidega LED vėl.

Iš to, kas išdėstyta aukščiau, darytina išvada, kad jei signalo siųstuvo įėjime nėra mažiau nei 70 ms ir jis yra teisingame dažnių diapazone, moduliai elgsis kaip įprastas laidas (kol kas nekreipiame dėmesio į trikdžius ir kitus signalus ).

Paketo formatas

Šio tipo RF modulius galima tiesiogiai prijungti prie aparatinės UART arba kompiuterio per MAX232, tačiau atsižvelgiant į jų veikimo ypatumus, patarčiau naudoti specialius programinėje įrangoje aprašytus protokolus. Savo tikslams naudoju tokio tipo paketus: pradžios bitai, baitai su informacija, valdymo baitas (ar keli) ir stop bitai. Pirmą paleidimą patartina padaryti šiek tiek ilgesnį, tai duos laiko siųstuvui pabusti, imtuvui prisiderinti, o priimančiam mikrovaldikliui (ar ką tik turit) pradėti priimti. Tada kažkas panašaus į „01010“, jei tai yra imtuvo išvestis, greičiausiai tai nėra triukšmas. Tada galite įdėti identifikavimo baitą – jis padės suprasti, kuriam įrenginiui skirtas paketas ir dar didesnė tikimybė atmesti triukšmą. Iki šio momento patartina informaciją skaityti ir tikrinti atskirais bitais, jei bent vienas iš jų neteisingas, užbaigiame priėmimą ir pradedame klausytis transliacijos iš naujo. Toliau perduodama informacija gali būti skaitoma vienu metu baitas po baito, įrašant į atitinkamus registrus/kintamuosius. Priėmimo pabaigoje vykdome kontrolinę išraišką, jei jos rezultatas lygus kontroliniam baitui, su gauta informacija atliekame reikiamus veiksmus, kitu atveju transliaciją klausomės dar kartą. Kaip kontrolinę išraišką galite laikyti kažkokią kontrolinę sumą, jei neperduodama daug informacijos arba nesate stiprus programavimo srityje, galite tiesiog apskaičiuoti kokią nors aritmetinę išraišką, kurios kintamaisiais bus perduoti baitai. Tačiau būtina atsižvelgti į tai, kad rezultatas turi būti sveikasis skaičius ir jis turi tilpti į kontrolinių baitų skaičių. Todėl vietoj aritmetinių operacijų geriau naudoti bitines logines operacijas: AND, OR, NOT ir ypač XOR. Jei įmanoma, būtina padaryti valdymo baitą, nes radijo transliacija yra labai užterštas dalykas, ypač dabar, elektroninių prietaisų pasaulyje. Kartais pats įrenginys gali sukelti trikdžius. Pavyzdžiui, aš turėjau takelį ant plokštės su 46 kHz PWM 10 cm atstumu nuo imtuvo, kuris labai trukdė priimti. Jau nekalbant apie tai, kad RF moduliai naudoja standartinius dažnius, kuriais šiuo metu gali veikti kiti įrenginiai: racijos, aliarmai, radijo valdymas, telemetrija ir kt.

Radijo moduliai: siųstuvas (FS1000A) ir imtuvas (MX-RM-5V) - yra skirti duomenims perduoti radijo kanalu nelicencijuotu 433,920 MHz dažniu, kuris patenka į LPD433 (Low Power Device) diapazoną, skirtą mažos galios įrenginiams.

FS1000A siųstuvo specifikacijos

  • Darbinis dažnis: 433,920 MHz (nurodytas ant metalinio modulio korpuso);
  • Perdavimo diapazonas: iki 100 m (matymo linijoje, be antenos);
  • Išėjimo galia: iki 40 mW;
  • Maitinimo įtampa: 3 ... 12 V;
  • Budėjimo režimo srovės suvartojimas: 0 mA;
  • Srovės suvartojimas perdavimo režimu: 20 .. 30 mA;
  • Darbinė temperatūra: -10 ... 70 °C;
  • Matmenys: 19x19x8 mm;
  • Svoris: 2 g;

Imtuvo specifikacijos MX-RM-5V

  • Darbinis dažnis: 433,920 MHz (nurodytas spausdintinės plokštės lentelėje, nebent tai yra šablonas 123456789);
  • Moduliacijos tipas: ASK - amplitudės poslinkio klavišai;
  • Priėmimo diapazonas: iki 100 m (matymo linijoje, be antenos);
  • Maitinimo įtampa: 5V;
  • Srovės suvartojimas: 4 mA;
  • Matmenys 30x14x17 mm;
  • Svoris: 4 g;

Ryšys

Jei norite lengvai prisijungti prie Arduino, naudokite arba .

Siųstuvas yra prijungtas prie bet kokių kontaktų, o imtuvo jungtis priklauso nuo naudojamos bibliotekos tipo:

  • Kai naudojate bibliotekas , RemoteSwitch, RCSwitch , imtuvas jungiamas tik prie kaiščio naudojant išorinį pertraukimą. Tačiau šios bibliotekos nenaudoja aparatinės įrangos laikmačių, o tai reiškia, kad jos neriboja jūsų PWM naudojimo.
  • Naudodamiesi biblioteka, imtuvas jungiasi prie bet kurios išvesties. Tačiau biblioteka naudoja pirmąjį aparatinės įrangos laikmatį, kuris nustato apribojimus tiek šio laikmačio, tiek jo PWM kaiščių naudojimui.

Mityba

  • Į siųstuvo Vcc ir GND gnybtus tiekiama 2 ... 12 V nuolatinė įtampa.
  • Į imtuvo Vcc ir GND kontaktus tiekiama 5 V nuolatinė įtampa.

Daugiau apie modulius

  • Siųstuvas naudoja skaitmeninę įvestį signalui perduoti naudodamas ASK (amplitudės poslinkio klavišą). Amplitudinis raktas (ASK) skiriasi nuo amplitudės moduliacijos (AM) tuo, kad moduliuojamas bet koks signalas (tiek skaitmeninis, tiek analoginis), tačiau manipuliuoti galima tik skaitmeniniu.
  • Duomenys radijo kanalu perduodami iki 100 m atstumu regėjimo linijoje (nurodyta gamintojo)
  • Patikimo priėmimo diapazoną galima padidinti prijungus antenas prie siųstuvo ir imtuvo.
  • Imtuvas turi du elektra sujungtus skaitmeninius išėjimus (galima naudoti bet kurį). Išvestis nustatomas į loginį lygį „1“, jei radijo kanale yra nešlio dažnis, ir loginį lygį „0“, jei jo nėra.
  • Imtuvas turi automatinį stiprinimo valdymo bloką (AGC – Automatic Gain Control), kuris padidina priėmimo diapazoną, tačiau nesant signalo iš siųstuvo imtuvo išėjime stebimi chaotiški loginių lygių kaitai.
  • Imtuvas yra labai svarbus net nedideliems maitinimo magistralės virpesiams. Jei tokių yra, imtuvas juos priima kaip informacinį signalą, sustiprina ir išveda loginių lygių pavidalu. Maitinimo magistralės bangavimą gali sukelti tokie įrenginiai kaip servo, LED indikatoriai, įrenginiai su savo generatoriais arba naudojant PWM ir kt.
  • Pulsacijos poveikį imtuvui galima sumažinti keliais būdais, štai keli iš jų:
    • „Arduino“ maitinimui naudokite išorinį šaltinį, o ne USB magistralę. Kadangi daugelio išorinių maitinimo šaltinių išėjimo įtampa yra valdoma arba išlyginama. Skirtingai nuo USB magistralės, kur įtampa gali žymiai „nukristi“.
    • Imtuvo maitinimo magistralėje sumontuokite išlyginamąjį kondensatorių.
    • Imtuvui naudokite atskirą stabilizuotą maitinimo šaltinį.
    • Įrenginiams, kurie į maitinimo magistralę įveda pulsaciją, naudokite atskirą maitinimą.

Antenos

Pirmasis bet kurio imtuvo stiprintuvas ir paskutinis bet kurio siųstuvo stiprintuvas yra antena. Paprasčiausia antena yra plakta antena (tam tikro ilgio vielos gabalas). Antenos (ir imtuvo, ir siųstuvo) ilgis turi būti kartotinis nešlio dažnio bangos ilgio ketvirtadaliu. Tai yra, plaktinės antenos gali būti ketvirčio bangos (L/4), pusės bangos (L/2) ir lygios bangos ilgiui (1L).