Turinys:
- 1 žingsnis: teoriniai svarstymai
- 2 žingsnis: praktinis diegimas - aparatinė įranga
- 3 žingsnis: praktinis diegimas - programinė įranga
- 4 žingsnis: bandymo rezultatai
- 5 žingsnis: paskutinės mintys
Video: Pigių belaidžių jutiklių tinklas 433 MHz juostoje: 5 žingsniai (su nuotraukomis)
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:47
Labai ačiū Teresa Rajba už tai, kad ji man davė sutikimą naudoti duomenis iš jų publikacijų šiame straipsnyje
* Aukščiau esančiame paveikslėlyje - penki jutiklių siųstuvai, kuriuos naudoju bandymui
Kas yra belaidžiai jutiklių tinklai?
Paprastas apibrėžimas būtų toks: belaidžiai jutiklių tinklai reiškia tam tikroje srityje platinamų elektroninių prietaisų, skirtų aplinkos duomenims stebėti ir įrašyti, grupę, kurie belaidžiu būdu perduodami į centrinę vietą, kad būtų apdorojami ir saugomi.
Šiuo metu belaidžiai jutiklių tinklai gali būti naudojami keliais būdais, žemiau pateikiami tik keli pavyzdžiai:
- Miškų, upių, ežerų, jūrų ir vandenynų ekologinės priežiūros sritys;
- Galimybė įspėti apie teroristinius, cheminius, biologinius, epideminius išpuolius;
- Vaikų, pagyvenusių žmonių, pacientų ar specialiųjų poreikių žmonių stebėjimo sistemos;
- Žemės ūkio ir šiltnamių stebėjimo sistemos;
- Orų prognozių stebėjimo sistema;
- Miesto eismo, mokyklų, automobilių stovėjimo aikštelių priežiūra;
Ir daug, daug kitų programų.
Šiame darbe noriu parodyti eksperimento su belaidžiais jutiklių tinklais, kurie buvo naudojami temperatūros ir drėgmės duomenims stebėti, rezultatus, lėtai ir gana nuspėjamai. Šiam eksperimentui aš pasirinkau naudoti jutiklių siųstuvus, kuriuos sukūriau pats, naudodamas prieinamus modulius. Imtuvas taip pat yra „pasidaryk pats“, ryšys yra vienpusis (433 MHz radijo juostoje), o tai reiškia, kad jutikliai perduoda tik duomenis, o centrinė vieta tik priima. Nėra ryšio tarp jutiklių ir iš imtuvo į jutiklius.
Bet kodėl verta rinktis kelis siųstuvus ir tik vieną imtuvą? Akivaizdu, kad pirmoji priežastis būtų „padaryti tai paprasta“. Kuo paprastesnis surinkimas, tuo mažesnė tikimybė, kad jis nepavyks, ir tikrai yra daug lengviau pataisyti ir pakeisti atskirus komponentus, jei jie sugenda. Energijos sąnaudos taip pat yra mažesnės, baterijos tarnaus ilgiau (jutikliai sunaudos tik stebėdami ir priimdami, likusį laiką prietaisas veiks gilaus miego režimu). Dėl to, kad jis yra paprastas, prietaisas taip pat yra pigus. Kitas aspektas, kurį reikia nepamiršti, yra aprėpties sritis. Kodėl? Daug lengviau sukurti ir naudoti jautrų imtuvą, nei turėti jautrų imtuvą ir galingą siųstuvą tiek prie jutiklių, tiek prie centrinio modulio (tai būtina geram dvikrypčiam ryšiui). Su jautriu ir geros kokybės imtuvu galima gauti duomenis iš didelio atstumo, tačiau to paties atstumo duomenims skleisti reikia didelės išmetamųjų teršalų galios, o tai reiškia dideles išlaidas, elektros energijos suvartojimą ir (nepamirškime) galimybę viršyti leistina maksimali siųstuvo galia 433 MHz juostoje. Naudodami vidutinės kokybės imtuvą, pigų, bet su aukštos kokybės antena (net pasidaryk pats) ir pigius siųstuvus su geros kokybės antena, galime pasiekti puikių rezultatų už nedidelę esamų belaidžių jutiklių tinklų kainą.
1 žingsnis: teoriniai svarstymai
Idėja sukurti belaidį jutiklių tinklą, skirtą stebėti oro ir dirvožemio temperatūrą ir drėgmę skirtingose šiltnamio vietose, man kilo seniai, beveik 10 metų. Norėjau sukurti 1 laidų tinklą ir naudoti 1 laidų temperatūros ir drėgmės jutiklius. Deja, prieš 10 metų drėgmės jutikliai buvo reti ir brangūs (nors temperatūros jutikliai buvo plačiai paplitę) ir kadangi laidų paskleidimas visame šiltnamyje neatrodė tinkamas variantas, gana greitai atsisakiau šios idėjos.
Tačiau dabar situacija kardinaliai pasikeitė. Mes galime rasti pigių ir geros kokybės jutiklių (temperatūra ir drėgmė), taip pat turime prieigą prie pigių siųstuvų ir imtuvų 433 MHz juostoje. Yra tik viena problema: jei turime daugiau jutiklių (tarkime, 20), kaip išspręsti susidūrimus (atminkite, kad tai yra vienpusis ryšys), tai reiškia, kad sutampa 2 ar daugiau jutiklių spinduliavimas? Ieškodamas galimo sprendimo, susidūriau su šiuo labai įdomiu straipsniu:
Belaidžio jutiklio konvergencija, pagrįsta atsitiktinių operacijų procedūra - pateikė RAJBA, T. ir RAJBA, S.
ir
Susidūrimų belaidžio jutiklių tinkle tikimybė atsitiktinai siunčiant - RAJBA S. ir RAJBA. T
Iš esmės autoriai mums parodo, kad susidūrimų belaidžio jutiklių tinkle tikimybę galima apskaičiuoti, jei paketai yra išleidžiami tam tikrais laiko momentais pagal poissoninį (eksponentinį) pasiskirstymą.
Aukščiau pateikto darbo ištraukoje išvardytos tiriamo tinklo charakteristikos.
- gana daug jutiklių siųstuvų vienetų N;
- jutiklių siųstuvai išlieka visiškai nepriklausomi ir jų įjungimas ar išjungimas neturi įtakos tinklo veikimui;
- visi jutiklių siųstuvai (arba jų dalis) gali būti mobilūs, jei jie yra priimančiosios radijo diapazone;
- matuojami lėtai besikeičiantys fiziniai parametrai, o tai reiškia, kad nereikia labai dažnai perduoti duomenų (pvz., kas kelias minutes ar kelias dešimtis minučių);
- perdavimas yra vienpusis, ty nuo jutiklio siųstuvo iki priėmimo taško T vidutiniais laiko intervalais. Informacija protokole perduodama tp trukmė;
- bet kuris pasirinktas jutiklis pradeda perduoti atsitiktinai Puasono laiku. PASTA (Poisson Arrivals See Time Average) bus naudojama pateisinant zondų siuntimą Poisson epochose;
- visi jutiklių siųstuvai išlieka atsitiktinai nepriklausomi ir perduos informaciją atsitiktinai pasirinktu laiko momentu tp trukmė ir T vidutinis kartojimo laikas;
- jei vienas ar keli jutikliai pradeda perduoti t protokolo metup trukmė perduodama iš kito jutiklio, tokia situacija vadinama susidūrimu. Dėl susidūrimo centrinė bazinė stotis negali gauti informacijos teisingai.
Jis beveik puikiai tinka jutiklių tinklui, kurį noriu išbandyti …
Beveik.
Nesakau, kad visiškai supratau darbo matematiką, tačiau, remdamasis pateiktais duomenimis ir išvadomis, galėjau šiek tiek suprasti, apie ką kalbama. Vienintelis dalykas, kad popieriuje naudojama vertė mane šiek tiek jaudino:). Tai kintamasis tp - duomenų perdavimo trukmė, kuri, kaip manoma, yra 3,2x10-5 s. Taigi surinktų duomenų perdavimo laikas būtų 3,2 mūsų! To negalima padaryti 433 MHz juostoje. Noriu programuoti siųstuvo jutiklius naudodami „rcswitch“arba radijo galvutę. Studijuodamas dviejų bibliotekų kodus padariau išvadą, kad mažiausias perdavimo laikas būtų 20 ms, gerokai didesnis už 3,2 mūsų vertę. Naudojant 2,4 GHz siųstuvus, galima tp laikas toks mažas … bet tai jau kita istorija.
Jei taikysime šio straipsnio autorių pasiūlytą formulę, rezultatas bus toks:
Pradiniai duomenys (pavyzdys):
- Jutiklių skaičius N = 20;
- Duomenų perdavimo trukmė tp= 20x10-3 s (0,020 s)
- Vidutinis perdavimo intervalas T = 180s
Formulė:
Susidūrimo tikimybė per T intervalą yra
jei atsižvelgsime į pradinius duomenis, susidūrimo tikimybė T intervale bus 0,043519
Ši vertė, kuri rodo 4,35 susidūrimo tikimybę 100 matavimų, mano nuomone, yra gana gera. Tikimybė galėtų pagerėti, jei padidintume vidutinį perdavimo laiką, taigi, esant 300s vertei, tikimybė būtų 0,026332, ty 2,6 susidūrimo per 100 matavimų. Jei manome, kad sistemos veikimo metu vis tiek galime tikėtis paketinių duomenų praradimo (pavyzdžiui, priklausomai nuo oro sąlygų), tai šis skaičius yra tikrai puikus.
Norėjau imituoti tokio tipo tinklą, bet ir savotišką dizaino asistentą, todėl sukūriau nedidelę programą C, šaltinio kodą galite rasti „github“(taip pat sudaryta dvejetainė programa, kuri veikia „Windows“komandų eilutėje - išleidimas).
Įvesties duomenys:
- sensor_number - jutiklių skaičius tinkle;
- matavimų_skaičius - imituotų matavimų skaičius;
- vidutinis_transmission_interval -vidutinis laikas tarp nuoseklių duomenų perdavimų;
- transfer_time - faktinė duomenų perdavimo trukmė.
Išėjimas:
- apskaičiuotas maksimalus matavimo laikas;
- dviejų jutiklių susidūrimų sąrašas;
- susidūrimų skaičius;
- teorinė susidūrimų tikimybė.
Rezultatai visai įdomūs:)
Užteks teorijos, nenorėčiau daugiau primygtinai reikalauti teorinės dalies, straipsniai ir šaltinio kodas yra gana iškalbingi, todėl geriau pereinu prie praktinio, efektyvaus belaidžio jutiklių tinklo diegimo ir bandymų rezultatų.
2 žingsnis: praktinis diegimas - aparatinė įranga
Siųstuvų jutikliams mums reikės šių komponentų:
- ATtiny85 mikrovaldiklis 1,11 $;
- Integruoto grandyno lizdas 8DIP 0,046 $;
- Temperatūros/drėgmės jutiklis DHT11 0,74 $;
- 433MHz H34A siųstuvo modulis 0,73 $;
- 4xAA baterijos laikiklis su jungikliu 1 $;
Iš viso 3,63 USD;
Bandymams naudojamas imtuvas yra „Arduino UNO“(tik bandymams) ir „H3V4F“priėmimo modulis (0,66 USD) su pigaus lanko antena (0,32 USD).
Jutiklio-siųstuvo schemos
Siųstuvo-jutiklio blokai maitinami 3xAA, 1,5 V baterijomis (ketvirtame baterijų laikiklio skyriuje yra elektroninis mazgas). Kaip matote, siųstuvo maitinimo šaltinis ir temperatūros ir drėgmės jutiklis yra prijungti prie mikrovaldiklio PB0 kištuko (siųstuvas ir jutiklis yra maitinami, kai kaištis yra nustatytas į HIGH). Taigi, kai mikrovaldiklis veikia gilaus miego režimu, jis gali pasiekti 4,7uA srovės suvartojimą. Atsižvelgiant į tai, kad siųstuvo-jutiklio žadinimo laikas būtų apie 3 s (matavimas, perdavimas ir kt.), O vidutinis laikas tarp perdavimų-180 sekundžių (kaip pavyzdys ankstesniame skyriuje), baterijos turėtų gana daug atsispirti. Naudojant kai kurias geros kokybės šarmines baterijas (ty 2000 mAh), autonomija gali trukti daugiau nei 10 mėnesių, kaip apskaičiuota omnicalculator.com (kur bendras srovės suvartojimas yra: jutiklis - 1,5 mA, siųstuvo modulis - 3,5 mA, o ATtiny85 mikrovaldiklis - 5 mA, iš viso 10 mA).
Žemiau esančioje nuotraukoje galite pamatyti beveik baigtą jutiklio ir siųstuvo surinkimą.
Žemiau yra bandymo imtuvo bloko nuotrauka.
3 žingsnis: praktinis diegimas - programinė įranga
Įkeltos programinės įrangos, veikiančios naudojant mikrovaldiklį „attiny85“, pagrindinį jutiklių siuntėjo blokų komponentą, tikslas yra nuskaityti jutiklio pateiktus duomenis, konvertuoti juos į radiją ir perduoti per Puasono laiko intervalus (eksponentinis pasiskirstymas arba PASTA - Poisson Arrivals See Time Average). Be to, naudodama paprastą funkciją, ji stebi baterijų būseną ir įspėja, jei jutikliui nebeteikiama reikalinga įtampa. Šaltinio kodą galima rasti „github“. Bandymo imtuvo kodas yra labai paprastas, aš jį paskelbiu žemiau.
// modifikuota rcswitch biblioteka iš https://github.com/Martin-Laclaustra/rc-switch/tree/protocollessreceiver// kodas yra modifikuota versija iš originalios rcswitch bibliotekos pavyzdžių #include RCSwitch mySwitch = RCSwitch (); nepasirašyti ilgi duomenys = 0; void setup () {Serial.begin (9600); mySwitch.enableRecept (0); // Imtuvas pertraukimo metu 0 => tai yra PIN #2} void loop () {if (mySwitch.available ()) {unsigned long data = mySwitch.getReceivedValue (); // output (mySwitch.getReceivedValue (), mySwitch.getReceivedBitlength (), mySwitch.getReceivedDelay (), mySwitch.getReceivedRawdata (), mySwitch.getReceivedProtocol ()); int drėgmė = bitExtracted (duomenys, 7, 1); // mažiau reikšmingi 7 bitai iš 1 pozicijos - dešinysis pirmasis bitas int temperatūra = bitExtracted (duomenys, 7, 8); // kiti 7 bitai iš 8 pozicijos į dešinę ir pan int v_min = bitExtracted (duomenys, 1, 15); int packet_id = bitExtracted (duomenys, 3, 16); // 3 bitai - 8 paketų ID nuo 0 iki 7 int sensor_id = bitExtracted (duomenys, 6, 19); // 6 bitų 64 jutiklių ID - iš viso 24 bitai Serial.print (sensor_id); Serial.print (","); Serial.print (packet_id); Serial.print (","); Serial.print (temperatūra); Serial.print (","); Serial.print (drėgmė); Serial.println (); mySwitch.resetAvailable (); }} // kodas iš https://www.geeksforgeeks.org/extract-k-bits-given-position-number/ int bitExtracted (nepasirašytas ilgas skaičius, int k, int p) {return ((((1 (p- 1)));}
Stengiausi įtraukti kuo daugiau komentarų, kad būtų lengviau suprasti.
Derinimui naudoju programinės įrangos biblioteką ir „attiny85“kūrimo plokštę su „USBasp“programuotoju (taip pat žr. Mano instrukciją). Serijinė nuoroda buvo sukurta naudojant serijinį į TTL keitiklį (su PL2303 lustu), prijungtą prie sulenktų kūrimo plokštės kaiščių (3 ir 4) (žr. Paveikslėlį žemiau). Visa tai buvo neįkainojama pagalba užbaigiant kodą.
4 žingsnis: bandymo rezultatai
Sukūriau 5 jutiklių siuntimo įrenginius, kurie renka ir siunčia DHT11 jutiklių išmatuotas vertes. Įrašiau ir išsaugojau matavimus, naudodamas bandymo imtuvą ir terminalo emuliacijos programą (foxterm), per tris dienas. Studijoms pasirinkau 48 valandų intervalą. Mane nebūtinai domino išmatuotos vertės (pavyzdžiui, 2 jutiklis, man rodomos neteisingos vertės), bet susidūrimų skaičius. Be to, imtuvas labai arti (4-5 m) pastatė jutiklius, kad pašalintų kitas paketų praradimo priežastis. Bandymo rezultatai buvo išsaugoti cvs faile ir įkelti (žiūrėkite žemiau esantį failą). Taip pat įkėliau „Excel“failą pagal šį csv failą. Aš padariau keletą ekrano kopijų, kad parodyčiau, kaip atrodo susidūrimas (žinoma, mano bandymuose), taip pat pridėjau komentarų prie kiekvienos ekrano kopijos.
Jums gali kilti klausimas, kodėl aš nesinaudojau duomenų įkėlimo paslauga, pvz., „ThingSpeak“. Faktas yra tas, kad turiu daug įrašų, daug jutiklių ir duomenų, kurie dažnai gaunami nereguliariais intervalais, o internetinės interneto paslaugos leidžia duomenis tik tam tikru jutiklių skaičiumi ir tik gana dideliais intervalais. Ateityje galvoju įdiegti ir sukonfigūruoti savo „IoT“serverį.
Galiausiai 4598 matavimai 5 jutiklių siųstuvuose (apie 920/jutiklis) iš viso sudarė 5 susidūrimus 48 valandas (0,5435 susidūrimai/100 matavimų). Darant matematiką (naudojant programą wsn_test su pradiniais duomenimis: 5 jutikliai, vidutinis laikas 180 s, perdavimo laikas 110 ms) susidūrimo tikimybė būtų 0,015185 (1,52 susidūrimo/100 matavimų). Praktiniai rezultatai yra dar geresni nei teoriniai, ar ne?:)
Šiaip ar taip, per šį laikotarpį prarasta 18 paketų, todėl susidūrimai šiuo atžvilgiu iš tikrųjų neturi per daug reikšmės. Žinoma, bandymas turėtų būti atliekamas ilgesnį laiką, kad būtų gauti įtikinamiausi rezultatai, tačiau, mano nuomone, jis yra sėkmingas net ir tokiomis sąlygomis ir visiškai patvirtina teorines prielaidas.
5 žingsnis: paskutinės mintys
Nedelsiant pritaikyti
Dideliame šiltnamyje auginami keli augalai. Jei laistymas atliekamas rankiniu būdu be klimato stebėjimo, be automatikos, be duomenų įrašų, yra pavojus, kad drėkinimas bus per didelis arba nepakankamas, o vandens suvartojimas yra didelis, nėra įrodymų, kad būtų optimizuotas vandens suvartojimas, kyla pavojus pasėliams. bendras. Norėdami to išvengti, galime naudoti belaidį jutiklių tinklą:)
Temperatūros jutikliai, oro drėgmės jutikliai, dirvožemio drėgmės jutikliai gali būti dedami aplink šiltnamį, o perduodamų duomenų pagalba galima atlikti kelis veiksmus: paleisti-sustabdyti elektrinius vožtuvus, leidžiančius vandeniui tekėti ten, kur reikia, paleisti-sustabdyti elektrinius ventiliatorius siekiant sumažinti temperatūrą skirtingose srityse, prireikus įjunkite ir sustabdykite šildytuvus ir visus duomenis galite archyvuoti būsimai analizei. Be to, sistema gali pateikti žiniatinklio sąsają, prieinamą visur, ir el. Pašto ar SMS signalus nenormalios būklės atveju.
Kas toliau?
- Bandymai su didesniu jutiklių skaičiumi;
- Tikrinimas realiuoju laiku naudojant nuotolinius jutiklius aprėpties zonoje;
- Vietinio daiktų interneto serverio diegimas ir konfigūravimas (pavyzdžiui, „Raspberry Pi“);
- Taip pat bandoma su 2,4 GHz siųstuvo (siųstuvo-imtuvo) jutikliais.
taigi … tęsinys …:)
ATSISAKYMAS: 433MHz dažnių juostos naudojimui jūsų regione gali būti taikomos radijo dažnių taisyklės. Prieš išbandydami šį projektą, patikrinkite savo teisėtumą
Antroji vieta jutiklių konkurse
Rekomenduojamas:
Darbo su belaidžiu belaidžiu temperatūros ir vibracijos jutikliu pradžia: 7 žingsniai
Darbo su belaidžiu belaidžiu temperatūros ir vibracijos jutikliu pradžia: kartais vibracija sukelia rimtų problemų daugelyje programų. Nuo mašinos velenų ir guolių iki kietojo disko veikimo vibracija sukelia mašinos pažeidimus, ankstyvą pakeitimą, mažą našumą ir daro didelę įtaką tikslumui. Stebima
LTE CAT -M1 GSM IoT jutiklių tinklas T - 15 minučių .: 5 žingsniai
LTE CAT -M1 GSM IoT jutiklių tinklas. pirmoji ir kompaktiškiausia daiktų interneto plokštė, apimanti ARM0 mikrovaldymo universalumą
„Arduino“sąsaja su ultragarso jutikliu ir bekontakčiu temperatūros jutikliu: 8 žingsniai
„Arduino“sąsaja su ultragarso jutikliu ir bekontakčiu temperatūros jutikliu: Šiuo metu kūrėjai ir kūrėjai teikia pirmenybę „Arduino“, norėdami greitai plėtoti projektų prototipus. „Arduino“yra atviro kodo elektronikos platforma, pagrįsta lengvai naudojama aparatine ir programine įranga. „Arduino“turi labai gerą vartotojų bendruomenę. Šiame projekte
Temperatūros jutiklių tinklas: 6 žingsniai
Temperatūros jutiklių tinklas: temperatūra ir drėgmė yra gyvybiškai svarbūs jūsų laboratorijos, virtuvės, gamybos linijos, biuro, žudikų robotų ir net jūsų namų duomenys. Jei jums reikia stebėti kelias vietas, kambarius ar erdves, jums reikia kažko patikimo, kompaktiško, tikslaus ir tinkamo
Apšvietimo ir saugumo valdymo jutiklių stočių tinklas: 5 žingsniai (su nuotraukomis)
Apšvietimo ir saugumo valdymo jutiklių stočių tinklas: naudodami šį jutiklių stočių tinklą, sukonfigūruotą pagrindinio/pavaldinio režimu, galėsite atlikti apšvietimą ir saugumą namuose. Šios jutiklių stotys (šiame projekte „Node01“, „Node02“) yra prijungtos prie pagrindinės stoties („Node00“), prijungtos prie jūsų