Sisukord:

Odav traadita andurivõrk 433 MHz sagedusalal: 5 sammu (koos piltidega)
Odav traadita andurivõrk 433 MHz sagedusalal: 5 sammu (koos piltidega)

Video: Odav traadita andurivõrk 433 MHz sagedusalal: 5 sammu (koos piltidega)

Video: Odav traadita andurivõrk 433 MHz sagedusalal: 5 sammu (koos piltidega)
Video: 20 товаров для автомобиля с Алиэкспресс, автотовары №28 2024, November
Anonim
Odava hinnaga traadita andurivõrk 433 MHz sagedusalal
Odava hinnaga traadita andurivõrk 433 MHz sagedusalal

Suur tänu Teresa Rajbale, kes andis mulle lahkelt nõusoleku kasutada nende artiklite väljaannete andmeid

* Ülaltoodud pildil - viis anduri saatjaüksust, mida ma testimiseks kasutasin

Mis on traadita andurivõrgud?

Lihtne määratlus oleks järgmine: traadita andurivõrgud viitavad teatud piirkonnas levitatud elektrooniliste seadmete rühmale keskkonnaandmete jälgimiseks ja salvestamiseks, mis edastatakse juhtmevabalt kesksesse asukohta töötlemiseks ja säilitamiseks.

Tänapäeval saab traadita andurivõrke kasutada mitmel viisil, allpool on vaid mõned näited:

  • Metsade, jõgede, järvede, merede ja ookeanide ökoloogilise järelevalve alad;
  • Võimalus hoiatada terrorismi-, keemia-, bioloogiliste, epideemiarünnakute korral;
  • Laste, eakate, patsientide või erivajadustega inimeste seiresüsteemid;
  • Põllumajanduse ja kasvuhoonete seiresüsteemid;
  • Ilmaprognooside jälgimissüsteem;
  • Linnaliikluse, koolide, parklate jälgimine;

Ja palju -palju muid rakendusi.

Selles artiklis tahan näidata katse tulemusi, mis on tehtud traadita andurivõrkudega, mida on kasutatud temperatuuri ja niiskuse andmete jälgimiseks, aeglase ja suhteliselt etteaimatava variatsiooniga. Selle katse jaoks otsustasin kasutada andurite saatjaid, mille ehitasin ise, kasutades taskukohaseid mooduleid. Vastuvõtja on ka ise meisterdatud, side on ühesuunaline (433 MHz raadiosagedusalal), mis tähendab, et andurid edastavad ainult andmeid ja keskne asukoht võtab ainult vastu. Andurite ja vastuvõtja vahel andurite vahel puudub side.

Aga miks valida mitme saatja ja ainult ühe vastuvõtja kasutamine? Ilmselt oleks esimene põhjus "lihtsaks tegemine". Mida lihtsam on kokkupanek, seda väiksem on selle ebaõnnestumise tõenäosus ning rikke korral on üksikute komponentide parandamine ja asendamine kindlasti palju lihtsam. Energiatarve on samuti väiksem, patareid peavad kauem vastu (andurid tarbivad ainult jälgimise ja vastuvõtmise ajal, ülejäänud aja on seade sügavas unerežiimis). See, et see on lihtne, muudab seadme ka odavaks. Teine aspekt, mida meeles pidada, on leviala. Miks? Tundliku vastuvõtja ehitamine ja kasutamine on palju lihtsam kui tundliku vastuvõtja ja võimsa saatja olemasolu nii andurite kui ka keskse mooduli juures (see on vajalik hea kahesuunalise side jaoks). Tundliku ja kvaliteetse vastuvõtjaga on võimalik andmeid ka kaugelt vastu võtta, kuid sama kauguse andmete edastamine nõuab suurt heitgaasivõimsust ning sellega kaasnevad suured kulud, elektritarbimine ja (ärgem unustagem) võimalus ületada seaduslik maksimaalne saatja võimsus 433 MHz sagedusalal. Kasutades keskmise kvaliteediga vastuvõtjat, odavat, kuid kvaliteetset antenni (isegi DIY) ja odavaid saatjaid koos kvaliteetse antenniga, saame saavutada suurepäraseid tulemusi murdosa olemasolevate traadita andurivõrkude maksumusest.

Samm: teoreetilised kaalutlused

Idee rajada traadita andurivõrk kasvuhoone erinevatesse piirkondadesse õhu ja pinnase temperatuuri ja niiskuse jälgimiseks tekkis mul juba ammu, peaaegu 10 aastat. Tahtsin ehitada 1-juhtmelise võrgu ning kasutada 1-juhtmelist temperatuuri ja niiskuse andurit. Kahjuks olid kümme aastat tagasi niiskusandurid haruldased ja kallid (kuigi temperatuuriandurid olid laialt levinud) ning kuna juhtmete laialilaotamine üle kogu kasvuhoone ei tundunud valikuvõimalusena, loobusin sellest ideest üsna kiiresti.

Nüüd on aga olukord kardinaalselt muutunud. Meil on võimalik leida odavaid ja kvaliteetseid andureid (temperatuur ja niiskus), samuti on meil juurdepääs odavatele saatjatele ja vastuvõtjatele sagedusalal 433 MHz. On ainult üks probleem: kui meil on rohkem andureid (ütleme 20), kuidas lahendada kokkupõrkeid (pidage meeles, et see on ühesuunaline side), mis tähendab, et kahe või enama anduri emissioon kattub? Võimalikku lahendust otsides leidsin selle väga huvitava paberi:

Juhtmevaba anduri lähenemine juhuslike toimingute alusel - autorid RAJBA, T. ja RAJBA, S.

ja

Juhtmeta saatmisega juhtmevaba andurivõrgu kokkupõrgete tõenäosus - RAJBA S. ja RAJBA. T

Põhimõtteliselt näitavad autorid meile, et traadita andurivõrgu kokkupõrgete tõenäosust saab arvutada, kui pakette väljastatakse teatud ajahetkedel vastavalt poissonilisele (eksponentsiaalsele) jaotusele.

Väljavõte ülaltoodud paberist loetleb uuritud võrgu omadused.

  • üsna suur hulk andurite saatjaühikuid N;
  • andurite saatjad jäävad täiesti sõltumatuks ning nende sisse- ja väljalülitamine ei mõjuta võrgu tööd;
  • kõik andurite saatjaüksused (või osa neist) võivad olla mobiilsed, kui need asuvad vastuvõtjaama raadioulatuses;
  • aeglaselt muutuvaid füüsilisi parameetreid mõõdetakse, mis tähendab, et andmeid ei ole vaja väga sageli edastada (nt iga mitme minuti või kümne minuti järel);
  • ülekanne on ühesuunaline, st anduri saatjaüksusest kuni vastuvõtupunktini T keskmiste ajavahemike järel. Teavet edastatakse protokollis aadressil tlk kestus aeg;
  • mis tahes valitud andur hakkab saatma juhuslikult Poissoni aegadel. Sondide saatmist Poissoni ajastutel kasutatakse PASTA (Poisson Arrivals See Time Average);
  • kõik andurite saatjaüksused jäävad juhuslikult sõltumatuks ja nad edastavad teabe juhuslikult valitud ajahetkel tlk kestus ja T keskmine kordusaeg;
  • kui üks või mitu andurit hakkavad edastama protokolli t ajallk kestust edastatakse teisest andurist, nimetatakse sellist olukorda kokkupõrkeks. Kokkupõrke tagajärjel ei saa keskne tugijaam teavet õigesti vastu võtta.

See sobib peaaegu ideaalselt andurivõrguga, mida tahan testida …

Peaaegu.

Ma ei ütle, et olen paberi matemaatikast täielikult aru saanud, kuid esitatud andmete ja järelduste põhjal olen suutnud natuke aru saada, millest see räägib. Ainus asi on see, et paberis kasutatud väärtus pani mind veidi muretsema:). See on muutuja tlk - andmete edastamise kestus, mis eeldatavalt on 3,2x10-5 s. Seega oleks kogutud andmete edastamise aeg 3,2 meid! Seda ei saa teha sagedusalas 433 MHz. Soovin saatja andurite programmeerimiseks kasutada kas rcswitchi või raadiopea. Uurides kahe raamatukogu koode, jõudsin järeldusele, et väikseim edastusaeg oleks 20 ms, mis on tunduvalt kõrgem kui väärtus 3,2. 2,4 GHz saatjatega on võimalik tlk aeg on nii väike … aga see on teine lugu.

Kui rakendame selle artikli autorite pakutud valemit, on tulemus järgmine:

Lähteandmed (näide):

  • Andurite arv N = 20;
  • Andmeedastuse kestus tlk= 20x10-3 s (0,020 s)
  • Keskmine edastusintervall T = 180 s

Valem:

Kokkupõrke tõenäosus T intervallil on

Pilt
Pilt

kui me võtame arvesse algandmeid, on kokkupõrke tõenäosus T -intervallil 0,043519

See väärtus, mis näitab 4,35 kokkupõrke tõenäosust 100 mõõtmise kohta, on minu arvates üsna hea. Tõenäosus võib paraneda, kui suurendame keskmist edastusaega, seega 300s väärtuse korral oleks meil tõenäosus 0,026332 ehk 2,6 kokkupõrget 100 mõõtmise kohta. Kui arvestada, et süsteemi toimimise ajal (olenevalt näiteks ilmastikutingimustest) võime siiski oodata pakettandmeside kadu, on see arv tõesti suurepärane.

Tahtsin seda tüüpi võrku simuleerida, aga ka omamoodi disainiassistenti, nii et tegin väikese programmi C -s, leiate lähtekoodi githubist (ka kompileeritud binaar, mis töötab Windowsi käsureal - vabastamine).

Sisendandmed:

  • sensor_number - andurite arv võrgus;
  • mõõtmised_arv - simuleeritavate mõõtmiste arv;
  • keskmine_edastus_intervall -keskmine aeg järjestikuste andmeedastuste vahel;
  • transfer_time - andmeedastuse tegelik kestus.

Väljund:

  • arvutatud maksimaalne mõõtmisaeg;
  • kahe anduri kokkupõrgete loend;
  • kokkupõrgete arv;
  • kokkupõrgete teoreetiline tõenäosus.

Tulemused on päris huvitavad:)

Piisab teooriast, ma ei tahaks rohkem teoreetilist osa nõuda, artiklid ja lähtekood on üsna kõnekad, seega lähen parem traadita andurivõrgu praktilise ja tõhusa rakendamise juurde ning katsetulemustele.

2. etapp: praktiline rakendamine - riistvara

Saatja-andurite jaoks vajame järgmisi komponente:

  • Mikrokontroller ATtiny85 1,11 $;
  • Integreeritud vooluahela pesa 8DIP 0,046 $;
  • Temperatuuri/niiskuse andur DHT11 0,74 $;
  • 433MHz H34A saatja moodul 0,73 $;
  • 4xAA patareipesa koos lülitiga 1 $;

Kokku 3,63 $;

Testides kasutatud vastuvõtja on Arduino UNO (ainult testimiseks) ja H3V4F vastuvõtumoodul (0,66 $) koos odava kaareantenniga (0,32 $).

Andur-saatja skeemid

Pilt
Pilt

Saatja-anduri toiteallikaks on 3xAA, 1,5v patareid (patareipesa neljandas lahtris on elektrooniline komplekt). Nagu näete, on saatja toiteallikas ja temperatuuri-niiskuse andur ühendatud mikrokontrolleri PB0 tihvtiga (saatja ja andur saavad toite, kui pin on seatud HIGH). Nii et kui mikrokontroller on sügava une režiimis, võib see jõuda 4,7uA voolutarbeni. Arvestades, et saatja-anduri ärkamisaeg oleks umbes 3 s (mõõtmine, edastamine jne) ja keskmine saatmiste vaheline aeg 180s (nagu näide eelmises peatükis), peaksid patareid päris palju vastu pidama. Mõne hea kvaliteediga leelispatarei (st 2000 mAh) korral võib autonoomia olla üle 10 kuu, arvutatuna saidil omnicalculator.com (kus kogu voolutarve on: andur - 1,5 mA, saatemoodul - 3,5 mA ja ATtiny85 mikrokontroller - 5 mA, kokku 10 mA).

Alloleval fotol näete peaaegu valmis anduri-saatja koostu.

Pilt
Pilt

Allpool on katse vastuvõtja seadme foto.

Pilt
Pilt

3. samm: praktiline rakendamine - tarkvara

Anduri saatja põhikomponendiks olevasse mikrokontrollerisse attiny85 üles laaditud tarkvara eesmärk on lugeda anduri edastatud andmeid, teisendada need raadio teel edastamiseks ja edastada Poissoni ajavahemike jooksul (eksponentsiaalne jaotus või PASTA - Poissoni saabumised Vt ajakeskmised). Samuti jälgib see lihtsat funktsiooni kasutades patareide olekut ja annab hoiatuse, kui andurile vajalikku pinget enam ei anta. Lähtekood on saadaval githubis. Testi vastuvõtja kood on väga lihtne, postitan selle alla.

// muudetud rcswitchi teek saidilt https://github.com/Martin-Laclaustra/rc-switch/tree/protocollessreceiver// kood on muudetud versioon algse rcswitch raamatukogu näidetest #include RCSwitch mySwitch = RCSwitch (); allkirjastamata pikad andmed = 0; void setup () {Serial.begin (9600); mySwitch.enableRecept (0); // Vastuvõtja katkestusel 0 => see on pin #2} void loop () {if (mySwitch.available ()) {unsigned long data = mySwitch.getReceivedValue (); // väljund (mySwitch.getReceivedValue (), mySwitch.getReceivedBitlength (), mySwitch.getReceivedDelay (), mySwitch.getReceivedRawdata (), mySwitch.getReceivedProtocol ()); int niiskus = bitEkstraheeritud (andmed, 7, 1); // vähemtähtsad 7 bitti positsioonist 1 - parempoolne esimene bitt int temperatuur = bitExtracted (andmed, 7, 8); // järgmised 7 bitti positsioonist 8 paremale ja nii edasi int v_min = bitExtracted (andmed, 1, 15); int packet_id = bitExtracted (andmed, 3, 16); // 3 bitti - 8 paketi id 0 kuni 7 int sensor_id = bitExtracted (andmed, 6, 19); // 6bit 64 anduri ID puhul - kokku 24 bitti Serial.print (sensor_id); Serial.print (","); Serial.print (packet_id); Serial.print (","); Serial.print (temperatuur); Serial.print (","); Serial.print (niiskus); Serial.println (); mySwitch.resetAvailable (); }} // kood saidilt https://www.geeksforgeeks.org/extract-k-bits-given-position-number/ int bitExtracted (allkirjastamata pikk number, int k, int p) {return (((((1 (p- 1)));}

Olen püüdnud lisada võimalikult palju kommentaare, et asi oleks arusaadavam.

Silumiseks kasutasin tarkvarateeki ja arendusplaati attiny85 koos USBasp programmeerijaga (vt ka minu juhendit selle kohta). Seeriaühendus on loodud jada- ja TTL -muunduriga (PL2303 kiibiga), mis on ühendatud arendusplaadi painutatud tihvtidega (3 ja 4) (vt allolevat pilti). Kõik see on olnud väärtuslikuks abiks koodi täitmisel.

Pilt
Pilt

4. samm: testitulemused

Testi tulemused
Testi tulemused
Testi tulemused
Testi tulemused

Olen loonud 5 andur-saatja seadet, mis koguvad ja saadavad DHT11 anduritega mõõdetud väärtusi. Salvestasin ja salvestasin mõõtmised kolme päeva jooksul testvastuvõtja ja terminali emuleerimisprogrammi (foxterm) abil. Valisin õppimiseks 48 -tunnise intervalli. Mind ei huvitanud tingimata mõõdetud väärtused (näiteks andur 2, see näitab mulle valesid väärtusi), vaid kokkupõrgete arv. Lisaks paigutas vastuvõtja andurid väga lähedale (4-5 m), et kõrvaldada muud pakettide kadumise põhjused. Testitulemused on salvestatud cvs -faili ja üles laaditud (vaadake allolevat faili). Selle csv -faili põhjal laadisin ka Exceli faili üles. Tegin mõned ekraanipildid, et näidata teile, kuidas kokkupõrge välja näeb (muidugi minu testides), lisasin igale ekraanipildile ka kommentaare.

Teil võib tekkida küsimus, miks ma ei kasutanud andmete laadija teenust, näiteks ThingSpeak. Fakt on see, et mul on palju kirjeid, palju andureid ja andmeid tuleb sageli ebaregulaarsete ajavahemike järel ning Interneti -teenused Internetis lubavad andmeid ainult teatud arvu andurite ja ainult üsna suurte intervallidega. Mõtlen tulevikus oma IoT -serveri installimisele ja seadistamisele.

Lõpuks viis 4598 mõõtmist 5 andur-saatja üksusel (umbes 920/sensor) 48 tunni jooksul kokku 5 kokkupõrget (0,5435 kokkupõrget/100 mõõtmist). Mõne matemaatika tegemine (kasutades programmi wsn_test koos esialgsete andmetega: 5 andurit, keskmine aeg 180 s, edastusaeg 110 ms) oleks kokkupõrke tõenäosus 0,015185 (1,52 kokkupõrget/100 mõõtmist). Kas praktilised tulemused on isegi paremad kui teoreetilised?:)

Pilt
Pilt

Igatahes on sellel perioodil kaotatud ka 18 pakki, nii et kokkupõrgetel pole selles osas tegelikult liiga suurt tähtsust. Loomulikult peaks test toimuma pikema aja jooksul, et saada kõige veenvamad tulemused, kuid minu arvates on see isegi sellistes tingimustes edukas ja kinnitab täielikult teoreetilisi eeldusi.

Samm: viimased mõtted

Kohene rakendus

Suures kasvuhoones kasvatatakse mitmeid põllukultuure. Kui niisutamine toimub käsitsi ilma kliimaseireta, ilma automatiseerimiseta, ilma andmekirjeteta, on niisutamise oht üle või alla ja samuti on veetarbimine suur, veetarbimise optimeerimise kohta pole tõendeid, on oht põllukultuuridele üldine. Selle vältimiseks saame kasutada traadita andurivõrku:)

Kasvuhoonesse saab paigutada temperatuuriandureid, õhuniiskuse andureid, mulla niiskusandureid ja edastatud andmete abil saab teha mitmeid toiminguid: käivitus-seiskamisventiilid vee voolamiseks vajalikus kohas, elektriventilaatorite käivitamine-peatamine temperatuuri vähendamiseks erinevates piirkondades, vajadusel käivitage ja lõpetage kütteseadmed ning kõik andmed saab arhiveerida edaspidiseks analüüsiks. Samuti saab süsteem pakkuda veebiliidest, mis on igal pool kättesaadav, ja e -posti või SMS -i häireid ebanormaalse olukorra korral.

Mis järgmiseks?

  • Testimine suurema hulga anduritega;
  • Reaalajas testimine levialas asuvate kauganduritega;
  • Kohaliku IoT -serveri installimine ja konfigureerimine (näiteks Raspberry Pi -l);
  • Katsetatakse ka saatja (transiiveri) anduritega 2,4 GHz.

nii et jätkub …:)

TÄHELEPANU: 433MHz sagedusala kasutamine teie piirkonnas võib alluda raadiosageduslikele eeskirjadele. Enne selle projekti proovimist kontrollige oma seaduslikkust

Andurite võistlus
Andurite võistlus
Andurite võistlus
Andurite võistlus

Andurite võistluse teine koht

Soovitan: