Kazalo:

Nizkocenovno brezžično senzorsko omrežje na pasu 433MHz: 5 korakov (s slikami)
Nizkocenovno brezžično senzorsko omrežje na pasu 433MHz: 5 korakov (s slikami)

Video: Nizkocenovno brezžično senzorsko omrežje na pasu 433MHz: 5 korakov (s slikami)

Video: Nizkocenovno brezžično senzorsko omrežje na pasu 433MHz: 5 korakov (s slikami)
Video: Na Odseku za komunikacijske sisteme IJS rešujejo problem omejenosti radijskega spektra 2024, Julij
Anonim
Nizkocenovno brezžično senzorsko omrežje na pasu 433MHz
Nizkocenovno brezžično senzorsko omrežje na pasu 433MHz

Najlepša hvala Terezi Rajba, ki mi je prijazno podala soglasje k uporabi podatkov iz njihovih publikacij v tem članku

* Na zgornji sliki - pet senzorsko -oddajnih enot, ki sem jih uporabil za testiranje

Kaj so brezžična senzorska omrežja?

Preprosta opredelitev bi bila: brezžična senzorska omrežja se nanašajo na skupino elektronskih naprav, razporejenih na določenem območju za spremljanje in snemanje okoljskih podatkov, ki se brezžično pošiljajo na osrednjo lokacijo za obdelavo in shranjevanje.

Danes je mogoče brezžična senzorska omrežja uporabljati na več načinov, spodaj je le nekaj primerov:

  • Območja ekološkega nadzora gozdov, rek, jezer, morij in oceanov;
  • Možnost opozarjanja v primeru terorističnih, kemičnih, bioloških, epidemičnih napadov;
  • Sistemi za spremljanje otrok, starejših, pacientov ali oseb s posebnimi potrebami;
  • Nadzorni sistemi v kmetijstvu in rastlinjakih;
  • Sistem za spremljanje vremenske napovedi;
  • Nadzor mestnega prometa, šol, parkirišč;

In veliko, veliko drugih aplikacij.

V tem prispevku želim prikazati rezultate poskusa z brezžičnimi senzorskimi omrežji, ki so bili uporabljeni za spremljanje podatkov o temperaturi in vlažnosti, s počasnimi in relativno predvidljivimi variacijami. Za ta poskus sem se odločil uporabiti senzorje-pošiljatelje, ki sem jih sam izdelal z uporabo cenovno dostopnih modulov. Sprejemnik je tudi DIY, komunikacija je enosmerna (v radijskem pasu 433 MHz), kar pomeni, da senzorji samo prenašajo podatke, centralna lokacija pa samo sprejema. Med senzorji in od sprejemnika do senzorjev ni komunikacije.

Toda zakaj bi se odločili za uporabo več oddajnikov in samo enega sprejemnika? Očitno bi bil prvi razlog "poenostavitev". Enostavnejša je montaža, manjša je verjetnost neuspeha, vsekakor pa je veliko lažje popraviti in zamenjati posamezne komponente v primeru napak. Manjša je tudi poraba energije, baterije bodo trajale dlje (senzorji bodo porabili le med spremljanjem in sprejemanjem, preostali čas bo naprava v načinu globokega spanja). Zaradi enostavnosti je naprava tudi poceni. Drug vidik, ki ga morate upoštevati, je območje pokritosti. Zakaj? Veliko lažje je zgraditi in uporabiti občutljiv sprejemnik kot imeti občutljiv sprejemnik in močan oddajnik tako pri senzorjih kot pri osrednjem modulu (to je potrebno za dobro dvosmerno komunikacijo). Z občutljivim in kakovostnim sprejemnikom je mogoče sprejemati podatke z velike razdalje, vendar oddajanje podatkov za isto razdaljo zahteva visoko emisijsko moč, kar pa prinaša visoke stroške, porabo električne energije in (ne pozabimo) možnost, da presežete zakonsko največja moč oddajnika v pasu 433 MHz. Z uporabo srednje kakovostnega sprejemnika, poceni, vendar z visoko kakovostno anteno (tudi DIY) in poceni oddajnikov s kakovostno anteno, lahko dosežemo odlične rezultate za delček stroškov obstoječih brezžičnih senzorskih omrežij.

1. korak: Teoretični premisleki

Ideja o izgradnji brezžičnega senzorskega omrežja za spremljanje temperature in vlažnosti zraka in zemlje na različnih območjih rastlinjaka se mi je porodila že davno, skoraj 10 let. Želel sem zgraditi 1-žično omrežje in uporabiti 1-žična senzorja temperature in vlažnosti. Na žalost so bili senzorji vlažnosti pred desetimi leti redki in dragi (čeprav so bili temperaturni senzorji razširjeni) in ker se širjenje žic po rastlinjaku ni zdelo kot možnost, sem idejo kar hitro opustil.

Zdaj pa so se razmere korenito spremenile. Lahko najdemo poceni in kakovostne senzorje (temperature in vlažnosti), imamo pa tudi dostop do poceni oddajnikov in sprejemnikov v pasu 433 MHz. Obstaja le ena težava: če imamo več senzorjev (recimo 20), kako rešimo trke (ne pozabite, da je to enosmerna komunikacija), torej prekrivanje emisije 2 ali več senzorjev? Med iskanjem možne rešitve sem naletel na zelo zanimive prispevke:

Brezžični senzor konvergira oddajanje na podlagi postopka naključnih operacij - avtorja RAJBA, T. in RAJBA, S.

in

Verjetnost trkov v brezžičnem senzorskem omrežju z naključnim pošiljanjem - RAJBA S. in RAJBA. T

V osnovi nam avtorji kažejo, da je verjetnost trkov v brezžičnem senzorskem omrežju mogoče izračunati, če se paketi oddajajo v določenih časovnih točkah v skladu s poissonovo (eksponentno) porazdelitvijo.

Izvleček iz zgornjega prispevka navaja značilnosti preučevane mreže.

  • precej veliko senzorsko-oddajnih enot N;
  • enote oddajnikov senzorjev ostanejo popolnoma neodvisne in njihov vklop ali izklop ne vpliva na delovanje omrežja;
  • vse enote oddajnikov senzorjev (ali njihov del) so lahko mobilne, če se nahajajo v radijskem dosegu sprejemne postaje;
  • počasi spreminjajoči se fizični parametri se merijo, kar pomeni, da ni treba zelo pogosto prenašati podatkov (npr. vsakih nekaj minut ali več deset minut);
  • prenos je enosmerni, to je od enote senzorja-pošiljatelja do sprejemne točke v povprečnih časovnih intervalih T. Informacije se v protokolu prenašajo pri tstr trajanje;
  • kateri koli izbrani senzor začne oddajati naključno ob Poissonovih časih. PASTA (Poissonovi prihodi glej časovno povprečje) bo uporabljen za utemeljitev pošiljanja sond v Poissonovih obdobjih;
  • vse enote senzorja-pošiljatelja ostanejo naključno neodvisne in bodo informacije prenašale v naključno izbranem trenutku tstr trajanje in povprečni čas ponavljanja T;
  • če začne oddajati eden ali več senzorjev, medtem ko protokol tstr trajanje se prenaša z drugega senzorja, takšno stanje imenujemo trk. Zaradi trka centralna bazna postaja nemogoče prejeti informacije na pravilen način.

Skoraj popolnoma se prilega senzorskemu omrežju, ki ga želim preizkusiti …

Skoraj.

Ne pravim, da sem popolnoma razumel matematiko v prispevku, vendar sem na podlagi predstavljenih podatkov in zaključkov lahko nekoliko razumel, za kaj gre. Edina stvar je, da me je vrednost, uporabljena v prispevku, nekoliko zaskrbela:). Gre za spremenljivko tstr - trajanje prenosa podatkov, ki naj bi bilo 3,2x10-5 s. Torej bi bil čas prenosa zbranih podatkov 3,2 us! Na pasu 433 MHz tega ni mogoče storiti. Za programiranje senzorjev oddajnika želim uporabiti rcswitch ali radiohead. Ob preučevanju kod obeh knjižnic sem prišel do zaključka, da bi bil najmanjši čas prenosa 20 ms, kar je precej nad vrednostjo 3,2 us. Pri oddajnikih 2,4 GHz je možno tstr tako majhen čas … ampak to je že druga zgodba.

Če uporabimo formulo, ki so jo predlagali avtorji tega prispevka, bo rezultat:

Začetni podatki (primer):

  • Število senzorjev N = 20;
  • Trajanje prenosa podatkov tstr= 20x10-3 s (0,020 s)
  • Povprečni interval prenosa T = 180 s

Formula:

Verjetnost trčenja na intervalu T je

Slika
Slika

če upoštevamo začetne podatke, bo verjetnost trka na intervalu T 0,043519

Ta vrednost, ki kaže na verjetnost 4,35 trkov na 100 meritev, je po mojem mnenju precej dobra. Verjetnost bi se lahko izboljšala, če bi povečali povprečni čas prenosa, zato bi imeli pri vrednosti 300 s verjetnost 0,026332, to je 2,6 trka na 100 meritev. Če menimo, da vseeno lahko pričakujemo izgubo paketnih podatkov med delovanjem sistema (odvisno na primer od vremenskih razmer), je to število res odlično.

Želel sem narediti simulacijo te vrste omrežja, pa tudi nekakšnega pomočnika pri oblikovanju, zato sem naredil majhen program v jeziku C, izvorno kodo najdete na githubu (tudi prevedeno binarno datoteko, ki se izvaja v ukazni vrstici windows - sprostitev).

Vhodni podatki:

  • sensor_number - število senzorjev v omrežju;
  • število_mer - število meritev za simulacijo;
  • povprečen_prenos_intervala_prenosa -povprečni čas med zaporednimi prenosi podatkov;
  • transmit_time - efektivno trajanje prenosa podatkov.

Izhod:

  • izračunani največji čas merjenja;
  • seznam trkov med dvema senzorjema;
  • število trkov;
  • teoretična verjetnost trkov.

Rezultati so zelo zanimivi:)

Dovolj s teorijo, ne bi želel bolj vztrajati pri teoretičnem delu, članki in izvorna koda so precej zgovorni, zato se raje lotim praktične, učinkovite implementacije brezžičnega senzorskega omrežja in rezultatov preskusov.

2. korak: Praktična implementacija - strojna oprema

Za senzorje oddajnikov potrebujemo naslednje komponente:

  • Mikrokrmilnik ATtiny85 1,11 $;
  • Vtičnica za integrirano vezje 8DIP 0,046 $;
  • Senzor temperature/vlažnosti DHT11 0,74 $;
  • 433MHz oddajni modul H34A 0,73 $;
  • Držalo baterije 4xAA s stikalom 1 $;

Skupaj 3,63 $;

Sprejemnik, uporabljen za preskuse, je Arduino UNO (samo za testiranje) in sprejemni modul H3V4F (0,66 $) s poceni ločno anteno (0,32 $).

Sheme pošiljatelja senzorja

Slika
Slika

Enote oddajnika-senzorja se napajajo s 3xAA, 1,5v baterijami (v četrtem predelu držala za baterije je elektronski sklop). Kot lahko vidite, je napajanje oddajnika in senzor temperature-vlažnosti priključen na pin PB0 mikrokrmilnika (oddajnik in senzor se napajata, ko je pin nastavljen na HIGH). Torej, ko je mikrokrmilnik v načinu globokega spanja, lahko doseže porabo toka 4,7uA. Glede na to, da bi bil čas prebujanja senzorja oddajnika približno 3 sekunde (merjenje, prenos itd.) In povprečni čas med oddajami 180 s (kot je primer v prejšnjem poglavju), bi se morale baterije precej upirati. Pri nekaterih kakovostnih alkalnih baterijah (tj. 2000 mAh) bi lahko bila avtonomija več kot 10 mesecev, izračunano na omnicalculator.com (kjer je skupna poraba toka: senzor - 1,5 mA, oddajniški modul - 3,5 mA in mikrokrmilnik ATtiny85 - 5 mA, skupaj 10 mA).

Na spodnji fotografiji si lahko ogledate skoraj končan sklop senzorja-pošiljatelja.

Slika
Slika

Spodaj je fotografija enote testnega sprejemnika.

Slika
Slika

3. korak: Praktična implementacija - programska oprema

Programska oprema, naložena na mikrokrmilnik attiny85, glavni sestavni del enote senzorja-pošiljatelja, ima namen prebrati podatke, ki jih posreduje senzor, jih pretvoriti za prenos po radiu in jih poslati v časovnih okvirih Poisson (eksponentna porazdelitev oz. PASTA - Poissonovi prihodi, glej časovna povprečja). Prav tako s preprosto funkcijo spremlja stanje baterij in opozori, če napetost senzorja ni več zagotovljena. Izvorna koda je na voljo na githubu. Koda za testni sprejemnik je zelo preprosta, objavljam jo spodaj.

// spremenjena knjižnica rcswitch iz https://github.com/Martin-Laclaustra/rc-switch/tree/protocollessreceiver// koda je spremenjena različica iz primerov izvirne knjižnice rcswitch #include RCSwitch mySwitch = RCSwitch (); podpisani dolgi podatki = 0; void setup () {Serial.begin (9600); mySwitch.enableReceive (0); // sprejemnik ob prekinitvi 0 => to je pin #2} void loop () {if (mySwitch.available ()) {unsigned long data = mySwitch.getReceivedValue (); // izhod (mySwitch.getReceivedValue (), mySwitch.getReceivedBitlength (), mySwitch.getReceivedDelay (), mySwitch.getReceivedRawdata (), mySwitch.getReceivedProtocol ()); int vlažnost = bitExtracted (podatki, 7, 1); // manj pomembnih 7 bitov s položaja 1 - skrajni desni prvi bit int temperatura = bitExtracted (podatki, 7, 8); // naslednjih 7 bitov od položaja 8 na desno in tako naprej int v_min = bitExtracted (podatki, 1, 15); int packet_id = bitExtracted (podatki, 3, 16); // 3bit - 8 ID -jev paketov od 0 do 7 int sensor_id = bitExtracted (podatki, 6, 19); // 6bit za 64 ID -jev senzorjev - skupaj 24 bitov Serial.print (sensor_id); Serial.print (","); Serial.print (packet_id); Serial.print (","); Serial.print (temperatura); Serial.print (","); Serial.print (vlažnost); Serial.println (); mySwitch.resetAvailable (); }} // koda iz https://www.geeksforgeeks.org/extract-k-bits-given-position-number/ int bitExtracted (nepodpisano dolgo število, int k, int p) {return (((1 (p- 1)));}

Poskušal sem vključiti čim več komentarjev, da bi bilo stvari lažje razumeti.

Za odpravljanje napak sem s programerjem USBasp uporabil serijsko knjižnico programske opreme in razvojno ploščo attiny85 (glej tudi moja navodila o tem). Serijska povezava je bila narejena s pretvornikom Serial to TTL (s čipom PL2303), povezanim z upognjenimi zatiči (3 in 4) razvojne plošče (glej sliko spodaj). Vse to je bilo v neprecenljivi pomoči pri dokončanju kode.

Slika
Slika

4. korak: Rezultati testa

Rezultati testov
Rezultati testov
Rezultati testov
Rezultati testov

Ustvaril sem 5 senzorsko-oddajnih enot, ki zbirajo in pošiljajo vrednosti, merjene s senzorji DHT11. S pomočjo preskusnega sprejemnika in terminalskega programa za emulacijo (foxterm) sem v treh dneh snemal in shranjeval meritve. Za študij sem izbral 48 -urni interval. Mene niso nujno zanimale izmerjene vrednosti (senzor 2, na primer kaže napačne vrednosti), ampak število trkov. Poleg tega je senzor postavil sprejemnik zelo blizu (na 4-5 m), da bi odpravil druge vzroke za izgubo paketov. Rezultati testa so bili shranjeni v datoteki cvs in naloženi (poglejte spodnjo datoteko). Naložil sem tudi datoteko excel, ki temelji na tej datoteki csv. Naredil sem nekaj posnetkov zaslona, da vam pokažem, kako izgleda trk (v mojih testih seveda), vsakemu posnetku zaslona sem dodal tudi komentarje.

Morda se sprašujete, zakaj nisem uporabil storitve nalaganja podatkov, na primer ThingSpeak. Dejstvo je, da imam veliko zapisov, veliko senzorjev in podatkov, ki prihajajo pogosto v nepravilnih časovnih presledkih, spletne storitve interneta stvari pa dovoljujejo podatke le pri določenem številu senzorjev in le v precej velikih intervalih. V prihodnosti razmišljam o namestitvi in konfiguraciji lastnega strežnika IoT.

Na koncu je 4598 meritev na 5 senzorsko-oddajnih enotah (približno 920/senzor) povzročilo skupno 5 trkov v obdobju 48 ur (0,5435 trkov/100 meritev). Nekaj matematike (z uporabo programa wsn_test z začetnimi podatki: 5 senzorjev, povprečni čas 180 s, čas prenosa 110 ms) bi bila verjetnost trka 0,015185 (1,52 trka/100 meritev). Praktični rezultati so še boljši od teoretičnih, kajne?:)

Slika
Slika

Kakorkoli že, v tem obdobju je izgubljenih tudi 18 paketov, zato trki v zvezi s tem v resnici niso preveč pomembni. Seveda bi moral preskus trajati dlje časa, da bi dobili najbolj prepričljive rezultate, vendar menim, da je tudi v teh razmerah uspešen in v celoti potrjuje teoretične predpostavke.

5. korak: Zadnje misli

Takojšnja uporaba

V velikem rastlinjaku gojijo več pridelkov. Če se namakanje ročno izvaja brez spremljanja podnebja, brez kakršne koli avtomatizacije, brez evidenc podatkov obstaja nevarnost prekomernega ali premajhnega namakanja in je tudi poraba vode velika, ni dokazov za optimizacijo porabe vode, obstaja tveganje za pridelke v splošno. Da bi se temu izognili, lahko uporabimo brezžično senzorsko omrežje:)

Senzorje temperature, senzorje vlažnosti zraka, senzorje vlažnosti tal lahko postavite povsod v rastlinjak in s pomočjo posredovanih podatkov lahko izvedete več dejanj: električni ventili za zagon-zaustavitev, ki omogočajo pretok vode, kjer je to potrebno, zagon-zaustavitev električnih ventilatorjev za znižanje temperature na različnih območjih po potrebi zaženite grelnike start-stop in vse podatke lahko arhivirate za prihodnjo analizo. Sistem lahko nudi tudi spletni vmesnik, ki je dostopen povsod, in alarme po e -pošti ali SMS v primeru nenormalnega stanja.

Kaj je naslednje?

  • Testiranje z večjim številom senzorjev;
  • Testiranje v realnem času z daljinskimi senzorji na območju pokritosti;
  • Namestitev in konfiguriranje lokalnega strežnika IoT (na primer na Raspberry Pi);
  • Preizkusi tudi s senzorji oddajnika (oddajnika) na 2,4 GHz.

torej … se nadaljuje …:)

OPOZORILO: Za uporabo frekvenčnega pasu 433MHz v vaši regiji lahko veljajo predpisi o radijskih frekvencah. Preden poskusite ta projekt, preverite svojo zakonitost

Natečaj senzorjev
Natečaj senzorjev
Natečaj senzorjev
Natečaj senzorjev

Podprvak na tekmovanju senzorjev

Priporočena: