Aš pati gražiausia

Naminis apsauginis ekranas oro stoties jutikliui. Projektas „meteorologinė stotis namuose“. Kaip veikia naminis barometras

Naminis apsauginis ekranas oro stoties jutikliui.  Projektas

Orų stotis yra pastatyta ant „Revolution Education Ltd“ mikrovaldiklio „Picaxe“ ir susideda iš dviejų pagrindinių dalių: lauko įrenginio, kuris siunčia duomenis kas 2 sekundes naudodamas 433 MHz siųstuvą. Ir vidinis blokas, kuris 20 x 4 LCD ekrane rodo gautus duomenis, taip pat atmosferos slėgį, kuris matuojamas lokaliai vidiniame bloke.

Stengiausi, kad dizainas būtų kuo paprastesnis ir funkcionalesnis. Įrenginys bendrauja su kompiuteriu per COM prievadą. Šiuo metu iš gautų verčių kompiuteryje nuolat kuriami grafikai, o reikšmės taip pat rodomos įprastuose indikatoriuose. Grafikai ir jutiklių rodmenys pasiekiami integruotame žiniatinklio serveryje, visi duomenys išsaugomi ir pan. Galite peržiūrėti bet kurio laikotarpio duomenis.

Meteorologinės stoties statyba užtruko kelis mėnesius nuo projektavimo iki užbaigimo, ir apskritai esu labai patenkintas rezultatu. Ypač džiaugiuosi, kad įprastomis priemonėmis pavyko viską sukonstruoti nuo nulio. Man tai visiškai tinka, tačiau tobulumui ribų nėra, o tai ypač pasakytina apie grafinę sąsają. Aš nebandžiau komercializuoti meteorologinės stoties, bet jei galvojate statyti meteorologinę stotį sau, tai yra geras pasirinkimas.

Lauko jutikliai

Jutikliai naudojami temperatūrai, drėgmei, kritulių kiekiui, vėjo krypčiai ir greičiui matuoti. Jutikliai yra mechaninių ir elektroninių prietaisų derinys.

Temperatūros ir santykinės drėgmės jutiklis

Išmatuoti temperatūrą turbūt lengviausia. Tam naudojamas DS18B20 jutiklis. HIH-3610 buvo naudojamas drėgmei matuoti, išvedant 0,8–3,9 V įtampą, kai drėgmė nuo 0% iki 100%.

Abu jutiklius sumontavau ant mažos PCB. Plokštė montuojama naminio dėklo viduje, kuris apsaugo nuo lietaus ir kitų išorinių veiksnių.

Žemiau parodytas supaprastintas kiekvieno jutiklio kodas. Tikslesnis kodas, nuskaitantis reikšmes iki vieno skaičiaus po kablelio, rodomas Peterio Andersono svetainėje. Jo kodas naudojamas galutinėje orų stoties versijoje.

Temperatūros jutiklis užtikrina ± 0,5 °C tikslumą. Drėgmės jutiklis užtikrina iki ± 2% tikslumą, todėl visiškai nesvarbu, kiek skaičių po kablelio yra!

Asmeniniame kompiuteryje veikiančios programinės įrangos siužeto pavyzdys.

Temperatūra

Pagrindinis: readtemp B.6, b1 ; skaityti reikšmę į b1, jei b1 > 127, tada neg ; neigiamo sertxd testas (#b1, cr, lf); perduoti reikšmę PE terminalui pauzė 5000 goto main neg: b1 = b1 - 128 ; koreguoti neg vertę sertxt("-") ; perduoti neigiamą simbolį sertxt (#b1, cr, lf) ; perduoti vertę į PE terminalą pauzė 5000 goto main

Drėgmė

Pagrindinis: readadc B.7,b1 ; nuskaityti drėgmės vertę b1 = b1 - 41 * 100 / 157 ; pakeisti į %RH sertxd (#b1, "%", cr, lf) pause 5000 ; palaukite 5 sekundes, pereikite prie pagrindinio

Drėgmės jutiklio skaičiavimas

Skaičiavimai paimti iš Honeywell HIH-3610 jutiklio dokumentacijos. Grafike parodyta standartinė kreivė esant 0 °C.

Jutiklio įtampa matuojama naudojant mikrovaldiklio Picaxe 18M2 ADC įvestį (B.7). Aukščiau pateiktame kode reikšmė, kuri pavaizduota kaip skaičius nuo 0 iki 255 (t. y. 256 reikšmės), saugoma b1 kintamajame.

Mūsų grandinė maitinama 5 V, todėl kiekvienas ADC žingsnis yra:
5/256 = 0,0195 V.

Diagramoje parodyta pradinė ADC 0,8 V vertė:
0.8 / 0.0195 = 41

Atsižvelgiant į grafiko reikšmes, grafiko nuolydis (atsižvelgiant į poslinkį) yra apytikslis:
Išėjimo įtampa / % RH arba
(2,65–0,8) / 60 = 0,0308 V, % RH
(Dokumentuose 0.0306)

Apskaičiuokime ADC žingsnių skaičių esant 1% drėgmei:
(V / % RH) / (ADC žingsnis)
0.0308 / 0.0195 = 1.57

%RH = ADC reikšmė – ADC poslinkis / (ADC žingsniai %RH), arba
%RH = ADC vertė – 41 / 1,57

Galutinė mikrovaldiklio skaičiavimo formulė atrodys taip: %RH = ADC vertė – 41 * 100/157

Apsauginis korpusas

Pradėkite perpjaudami kiekvieną plokštę į dvi dalis. Vienos dalies lentos bus tvirtai pritvirtintos iš abiejų pusių, o antroje - tik iš vienos pusės. Neišmeskite šių dalių – jos yra panaudotos.

Pritvirtinkite du 20 mm x 20 mm viršaus ir apačios medžio gabalus prie visų dalių, o kitas dalis prisukite prie jų.

Iškirpkite vieną iš gabalų su viena visa puse pagal dydį ir priklijuokite prie vienos iš kraštų vidinės pusės. Įsitikinkite, kad lentos yra priklijuotos taip, kad jos kartu sudarytų „^“ formą. Atlikite tai iš visų pusių.

Vėjo greičio ir krypties matuoklis

Mechaninis

Vėjo greičio ir krypties jutikliai yra mechaninių ir elektroninių komponentų derinys. Abiejų jutiklių mechaninė dalis yra identiška.

12 mm faneros įdėklas (jūrinis sluoksnis) dedamas tarp PVC vamzdžio ir nerūdijančio plieno disko viršutiniame vamzdžio gale. Guolis yra priklijuotas prie nerūdijančio plieno disko ir laikomas nerūdijančio plieno plokštės.

Kai viskas bus visiškai surinkta ir sumontuota, atviros vietos užsandarinamos sandarikliu, kad būtų užtikrintas vandens nepralaidumas.

Kitos trys skylutės nuotraukoje skirtos ašmenims. 80 mm ilgio peiliai suteikia 95 mm sukimosi spindulį. Puodeliai 50 mm skersmens. Šiems naudojau apkarpytus odekolono butelius, kurie yra beveik sferinės formos. Nesu tikras dėl jų patikimumo, todėl padariau juos lengvai keičiamus.

Elektroninė dalis

Vėjo greičio jutiklio elektronika susideda tik iš tranzistoriaus jungiklio, fotodiodo ir dviejų rezistorių. Jie sumontuoti ant mažos apvalios 32 mm skersmens PCB. Jie vamzdyje montuojami laisvai, kad drėgmė, jei patektų, nutekėtų žemyn, neliesdama elektronikos.

Anemometras yra vienas iš trijų jutiklių, kurį reikia sukalibruoti (kiti du yra kritulių skaitiklis ir barometrinio slėgio jutiklis)

Fotodiodas suteikia du impulsus per apsisukimą. Paprastoje „serijinėje“ sistemoje, kurios siekiau (visi jutikliai apklausiami paeiliui), turi būti kompromisas tarp laiko, praleisto apklausiant kiekvieną jutiklį (šiuo atveju skaičiuojant impulsus), ir sistemos reagavimo trukmės. kaip visas. Idealiu atveju visas visų jutiklių apklausos ciklas turėtų trukti ne ilgiau kaip 2–3 sekundes.

Aukščiau esančioje nuotraukoje jutiklio tikrinimas naudojant reguliuojamo greičio variklį.

; Specialios LCD komandos rodomos mėlynai hsersetup B9600_4, %10000 ; Naudokite LCD kaištį 1, be hserino hserout 0, (13) : pauzė 100 ; Inicijuoti LCD hserout 0, (13) : pauzė 100 hserout 0, (13) : pause 100 pause 500 hserout 0, ("ac1", 13) ; Išvalyti rodymo pauzę 50 hserout 0, ("acc", 13) hserout 0, ("ac81", 13, "adcount: ", 13) ; Spausdinkite antraštes pause 10 hserout 0, ("ac95", 13, "adpulsin: ", 13) ; Spausdinkite antraštes pauzė 10 suskaičiuokite C.2, 1000, w0 ; Suskaičiuokite impulsus (du per aps.) w1 = 0, kai b8 = 1–2; Išmatuokite impulso ilgį du kartus pulsin C.2, 1, w2 ; per aps. ir... w1 = w1 + w2 next w1 = w1 / 2 ; ...apskaičiuokite vidutinį hserout 0, ("ac89", 13, "ad", #w0, " ", 13) ;Spausdinkite skaičiavimo reikšmę hserout 0, ("ac9d", 13, "ad", #w1, " ", 13) ;Atspausdinkite impulso ilgio reikšmę pause 100 kilpa

Norėjau sukalibruoti važiuojant, bet tam nebuvo laiko. Gyvenu palyginti plokščioje vietovėje, už kelių mylių yra oro uostas, todėl jutiklį sukalibravau palygindamas vėjo greičio rodmenis su oro uosto rodmenimis.

Jei turėtume 100% efektyvumą ir ašmenys suktųsi vėjo greičiu, tada:
Rotoriaus spindulys = 3,75 colio
Rotoriaus skersmuo = 7,5" = 0,625 pėdos
Rotoriaus perimetras = 1,9642 pėdos

1 pėda/min = 0,0113636 m/h,
1,9642 pėdos/min = 1 aps./min = 0,02232 m/val.
1 m/h = 1 / 0,02232 aps

1 m/h = 44,8 aps./min
? m/h = aps. / 44,8
= (rpm * 60) / 44,8

Kadangi viename posūkyje yra du impulsai
? m/h = (impulsų per sekundę * 30) / 44,8
= (impulsų per sekundę) / 448

Vėjo krypties jutiklis - mechaninė dalis

Vėjo krypties jutiklyje vietoj aliuminio plokštės naudojamas magnetas, o vietoj optoelektroninio bloko – specialus AS5040 lustas (magnetinis koderis).

Žemiau esančioje nuotraukoje pavaizduotas 5 mm magnetas, sumontuotas ant centrinio varžto galo. Magneto sulygiavimas su lustu yra labai svarbus. Magnetas turi būti tiksliai centre maždaug 1 mm virš lusto. Kai viskas bus tiksliai suderinta, jutiklis veiks tinkamai.

Vėjo krypties jutiklis - elektroninė dalis

Yra įvairių vėjo krypties matavimo schemų. Iš esmės jie susideda iš 8 nendrinių jungiklių, išdėstytų 45 laipsnių kampu besisukančio magneto arba potenciometro, kurį galima visiškai pasukti.

Abu metodai turi savo privalumų ir trūkumų. Pagrindinis privalumas yra tai, kad juos abu lengva įgyvendinti. Trūkumas yra tas, kad jie gali susidėvėti, ypač potenciometrai. Alternatyva nendrinių jungiklių naudojimui būtų naudoti Hall efekto jutiklį, kad būtų galima susidoroti su mechaniniu nusidėvėjimu, tačiau jie vis tiek yra ribojami iki 8 skirtingų padėčių... Idealiu atveju aš pabandyčiau ką nors kito ir galiausiai apsispręsčiau dėl rotacinio magnetinio IC jutiklio. Nors tai paviršinio montavimo įrenginys (to stengiuosi vengti), jis turi nemažai privalumų, dėl kurių jį naudoti patrauklu!

Jis turi keletą skirtingų išvesties formatų, iš kurių du yra tinkamiausi mūsų tikslui. Geriausias tikslumas pasiekiamas naudojant SSI sąsają. AS5040 duoda impulsus nuo 1 µs 0° kampu iki 1024 µs 359,6° kampu

Vėjo krypties jutiklio kalibravimo patikrinimas:

Do readadc10 B.3, w0 ;Skaityti iš AS5040 magnetinio guolio pauzė 100 w0 = w0 * 64 / 182 ; Konvertuoti į 0 – 360 (laipsniai) derinimas ; Rodyti derinimo lango programoje / redagavimo cikle

Kritulių matuoklis

Kiek įmanoma, lietaus matuoklį gaminau iš plastiko ir nerūdijančio plieno, pagrindas – 3 mm storio aliuminis dėl standumo.

Lietaus matuoklyje yra du kibirai. Kiekviename kibirėlyje yra iki 6 ml vandens, kol jis pasislenka savo svorio centre, todėl jis pila vandenį į kibirą ir signalizuoja jutiklį. Kai kaušas apvirsta, aliuminio vėliavėlė praeina per optinį jutiklį, kuris siunčia signalą į lauko bloko elektroniką.

Kol kas jį palikau su permatomomis sienelėmis (nes smagu žiūrėti kaip veikia!). Tačiau įtariu, kad ją reikia nudažyti baltai, kad vasarą atspindėtų šilumą, kad neišgaruotų. Neradau mažo piltuvėlio, todėl turėjau pasigaminti savo. Atkreipkite dėmesį į laidą piltuvo viduje ir latako centre. Tai padės sustabdyti vandens paviršiaus įtempimą piltuvėlyje ir padės vandeniui lašėti. Be laido lietus būtų linkęs „suktis“, o jo trajektorija būtų nenuspėjama.

Optiniai jutikliai iš arti:

Elektroninė lietaus matuoklio dalis

Dėl atsitiktinio jutiklio pobūdžio programinės įrangos pertraukimas lauko bloko MCU atrodė logiškas būdas. Deja, kai kurios programos instrukcijos išjungia pertraukimo mechanizmą, kol jos yra vykdomos. yra tikimybė, kad signalas niekur nedings. Dėl šių priežasčių lietaus matuoklis turi savo 08M Picaxe mikrovaldiklį.

Naudojant atskirą lustą, galima sukurti 1 valandos delsą, pakankamai tikslią, kad būtų galima skaičiuoti kibirus per valandą.

Kalibravimas

Picaxe 18m2 gauna esamą kaušų skaičių per valandą ir rodo jį ekrane bei kompiuteryje.

Iš pradžių naudoju šiuos duomenis:
Piltuvo skersmuo 120 mm, o konteinerio plotas 11 311 mm2
1 mm lietaus = 11,311 mm3 arba 11,3 ml.
Kiekvienas kibiras yra 5,65 ml. Taigi, 2 kibirai 2 x 5,65 = 11,3 ml (arba 1 mm) kritulių. Vienas kibiras = 0,5 mm kritulių.

Palyginimui nusipirkau pigų lietaus matuoklį.

Aukščiau pateiktoje grandinėje ir 08M Picaxe grandinėje jutikliui naudojamas tas pats PCB išdėstymas. Įrenginys maitinamas 12V 7Ah baterija per 7805 stabilizatorių.
Naudojau RF Connect rinkinį 433 MHz belaidžiam ryšiui. Rinkinyje yra pora specialiai suprogramuotų PIC valdiklių. Belaidžių modulių rinkinys bandymų metu pasirodė gana patikimas.

PP yra įdiegta 08M Picaxe ir 18m2. Kiekvienas iš jų turi savo programavimo jungtį. Kiekvienam davikliui skirtos atskiros jungtys, kurių kiekviena turi savo +5V – išskyrus temperatūros ir drėgmės.

Atkreipkite dėmesį, kad piešinį nupiešiau programoje „Paintshop Pro“, todėl negaliu garantuoti tarpų tarp kaiščių tikslumo.

vidinis blokas

Vidinis blokas naudoja 18m2 Picaxe, slėgio jutiklį ir LCD ekraną. Taip pat yra 5V įtampos reguliatorius.

Slėgio matuoklis

Po kelių nesėkmingų bandymų apsistojau ties MPX4115A. Nors kiti jutikliai turi šiek tiek didesnį matavimo diapazoną, juos sunku pasiekti. Be to, kiti jutikliai dažniausiai veikia 3,3 V įtampa ir reikalauja papildomo reguliatoriaus. MPX4115A suteikia analoginę įtampą nuo 3,79 V iki 4,25 V, proporcingą slėgiui. Nors tai yra beveik pakankama skiriamoji geba, norint aptikti 1 mbar slėgio pokytį, po diskusijų forume pridėjau MCP3422 ADC. Jis gali veikti 16 bitų režimu (arba naujesniu), palyginti su Picaxe 10 bitų režimu. MCP3422 galima prijungti (kaip ir mūsų grandinėje) diferencialiniu režimu su analoginiu jutiklio įėjimu. Pagrindinis privalumas yra tas, kad tai leidžia koreguoti jutiklio išvestį, taip lengvai kompensuojant MPX4115A klaidas ir suteikiant paprastą būdą kalibruoti jutiklį.

MPC3422 iš tikrųjų turi du diferencinius įėjimus, bet kadangi vienas nenaudojamas, jie yra trumpinami. MCP3422 išvestis turi I2C sąsają ir jungiasi prie 18m2 Picaxe SDA ir SCL kaiščių – atitinkamai B.1 ir B.4 kaiščių. Mano požiūriu, vienintelis MCP3422 naudojimo trūkumas yra tai, kad tai nedidelis paviršiaus montavimo įrenginys, tačiau aš jį prilitavau prie adapterio. Be I2C sąsajos, MCP3422 18m2 tiesiog apdoroja gaunamus duomenis iš 433MHz belaidžio imtuvo, rodo duomenis ekrane ir perduoda duomenis į kompiuterį. Siekiant išvengti patalpų bloko klaidų, kai kompiuteris neveikia, kompiuteris neatsako. Vidinis blokas perduoda duomenis ir juda toliau. Jis perduoda duomenis maždaug 2 sekundžių intervalais, kad kitą kartą būtų greitai kompensuojamas duomenų praradimas. Priekinio skydelio mygtukui prijungti naudojau nenaudojamus 18m2 prievadus. Jungiklis S1 (įvestis C.5) naudojamas LCD foniniam apšvietimui įjungti. Jungiklis S2 (įvestis C.0) iš naujo nustato slėgio vertę (mbar) LCD ekrane. Jungiklis S3 (įvestis C.1) perjungia skystųjų kristalų ekrane rodomą kritulių kiekį tarp ankstesnės valandos sumos ir dabartinės. Mygtukai turi būti nuspausti ilgiau nei 1 sekundę, kad jie reaguotų.

Vidinio bloko surinkimas

Kaip ir lauko bloko PCB, maketą braižiau ranka naudojant Paintshop Pro, todėl atstumuose gali būti klaidų.

Plokštė yra šiek tiek didesnė nei būtina, kad tilptų į aliuminio korpuso angas.
Programavimo jungtį sąmoningai padariau šiek tiek "į vidų" nuo plokštės krašto, kad ji neliestų korpuso. Skystųjų kristalų ekrano išpjova yra išgręžta ir supjaustyta tiksliais matmenimis.

Nuotraukoje matosi viskas, kas jau sumontuota korpuse.

Plokštėje esantys kaiščiai apsunkina jos montavimą į korpusą, todėl teko juos išlituoti ir ekraną prie plokštės prilituoti laidais.

Lauko blokas – Picaxe kodas

; ================================================== = =============== ; Pagrindinis 18M2 kodas, skirtas Picaxe meteorologinės stoties lauko (siųstuvo) blokui ; Dešimtainės tikslumo drėgmės ir temperatūros režimai, ; autorių teisės, Peter H Anderson, Baltimorė, MD, sausio 4 d. ; ================================== =============================== #Picaxe 18M2 simbolis HValue = w0 Simbolis HighWord = w1 Simbolis LowWord = w2 simbolis RH10 = w3 Simbolis HQuotient = b0 Simbolis HFract = b1 Simbolis X = b0 Simbolis aDig = b1 Simbolis TFaktorius = b2 Simbolis Tc = b3 Simbolis SignBit = b4 Simbolis TV vertė = w4 Simbolis TQuotient = b10 Simbolis TFract = b11 Simbolis TempC_100 = Simbolis MagDir = w6 = b14 Simbolis MagDirHi = b15 Simbolis WindSpeed ​​​​= w8 Simbolis WindSpeedLo = b16 Simbolis WindSpeedHi = b17 Simbolis ThisHour = b18 Simbolis LastHour = b19 Simbolis RainRequest = b20 Aparatūros simbolis DiržRaw = B.7 Simbolis B. TempR = B.7 Simbolis B TempR. 3 Simbolio greitis = B.0 do ;Skaitykite drėgmę ReadADC10 HumidRaw, HValue ;Gaukite drėgmę (HValue) HighWord = 1613 ** HValue ;apskaičiuokite RH LowWord = 1613 * HValue RH10 = LowWord / 1024 Highword Low = 0 + LowWord RH10 = RH10 - 258 pauzė 100 ;Nuskaitymo temperatūra Readtemp12 TempRaw, TValue ; Gauti temperatūrą SignBit = TValue / 256 / 128 jei SignBit = 0 tada teigiamas ; Jis yra neigiamas, todėl TV vertė = TV vertė ^ $ffff + 1; paimkite du ir teigiamą: TempC_100 = TV vertė * 6; TC = vertė * 0,0625 TV vertė = TV vertė * 25 / 100 TempC_100 = TempC_100 + TValue TQuotent = TempC_100 /TFract0 TempC_100 % 100 / 10 X = TQuotient / 10; Apskaičiuokite drėgmės temperatūros pataisos koeficientą, jei SignBit = 0, tada SignBit = " " else SignBit = "-" endif, jei SignBit = "-", tada X = 4 - X kitaip X = X + 4 endif GoSub TempCorrection ;kompensuoti RH koeficientą = RH10 / 10 ;Apskaičiuoti RH koeficientą ir... HFract = RH10 % 10 ;...dešimtainė vieta.jei HKvotis > 99, tada ;Per diapazoną HQ koeficientas = 99 HQuotient = 79 pabaiga, jei HQ10 tada ; Pagal diapazoną HQuotient = 0 HFract = 0 endif ; Nuskaitykite AS540 magnetinį šifratorių vėjo kryptimi readadc10 DirRaw, MagDir ; Nuskaitykite iš AS5040 magnetinio guolio pauzė 100 ; Nuskaitykite aps./min nuo vėjo greičio skaitiklio skaičiavimo Greitis, 1000, Kas 300 maždaug 1 minutę), reikalauti lietaus matuoklio duomenų iš 08M, įskaitant RainRequest, jei RainRequest >= 30, tada aukštas C.1 serinas , C.0, N2400, ("r"), LastHour, ThisHour ; Lietaus skaitikliai žemi C.1 RainRequest = 0 endif ; Siųsti duomenis į Vidinį bloką 8 baitų blokais; Pirmajai grupei nereikia kalibruoti, todėl čia pirmiausia atliekami skaičiavimai. ; Antrajai grupei reikės „pataisyti“ – lengviau atlikti patalpose. serout C.2, N2400, ("t", SignBit, TQuotient, TFract, HQuotient, HFract, "A", "B") pristabdykite 100 serout C.2, N2400, ("m", MagDirHi, MagDirLo, WindSpeedHi, „WindSpeedLo“, „LastHour“, „ThisHour“, „C“) kilpos tempkorekcija: peržvalga X, (87, 89, 91, 93, 95, 97, 99, 101, 103, 106, 108, 110, 113, 116, 26,1 ), TFaktorius " -40 -30 -20 -10 0 10 20 30 40 50 60 70 80 90 100 110 120 jei TFaktorius< 100 then aDig = TFactor / 10 RH10 = RH10 * aDig / 10 TFactor = TFactor % 10 aDig = TFactor RH10 = RH10 * aDig / 100 + RH10 else TFactor = TFactor % 100 aDig = TFactor / 10 RH10 = RH10 * aDig / 10 + RH10 TFactor = TFactor % 10 aDig = TFactor RH10 = RH10 * aDig / 100 + RH10 endif return

Naudojama atmintis = 295 baitai iš 2048

Kritulių skaitiklis - 08M kodas

#picaxe 08M Simbolis ThisHour = b2 ; Išsaugokite dabartinį jutiklio skaičių b2 Simbolis LastHour = b3 ; Išsaugokite ankstesnių valandų skaičių b3 ; Aparatinės įrangos apibrėžimai Simbolis DataRequest = pin3 Simbolis BucketSensor = PIN4 nustatymas %00010000, %00010000 ; Pin4 yra pertraukimo kaiščio pagrindinis: nuo w0 = 1 iki 60000 ; Ciklas 1 val. Paskutinė pauzė 60 val. ; Atnaujinti paskutinės valandos skaičių, kai ThisHour = 0 ; dabartinė valanda & iš naujo nustatyti dabartinę valandą goto main ; Atlikite kitos valandos pertraukimą: setint %00010000, %00010000 ; Iš naujo atkurkite pertraukimą, jei DataRequest = 1, tada ; Ar pertraukimas buvo iš 18M2? serout 2, N2400, ("r", LastHour, ThisHour); Taip, todėl atsiųskite ankstesnių valandų skaičių ir esamų skaičių. darykite: kilpa, kol DataRequest = 1 ; Palaukite, kol 18M2 nustos prašyti, prieš tęsdami endif, jei BucketSensor = 1, tada ; Ar trikdė lietaus jutiklis? Įsk ThisHour ; Taip, todėl padidinkite kaušo galiukų skaičius atlikite: kilpa, kai BucketSensor = 1 ; Prieš tęsdami endif grąžinimą įsitikinkite, kad vėliavėlė išvalė jutiklį

Vidinis blokas – Picaxe kodas

;================================================= ========================== ; Pagrindinė patalpų (imtuvo) programa. ; ; Priima duomenis iš lauko bloko, rodomas LCD ekrane ir perduoda duomenis į kompiuterį; Taip pat matuojamas barometrinis slėgis (dėka "motherp") ;====================================== ====================================== #PICAXE 18M2 ; Kintamųjų apibrėžimai (b2–b5 pakartotinai naudojami mBar kodui, kai jie tampa prieinami) simbolis koeficientas = b2 simbolis Fraktas = b3 simbolis SignBit = b4 simbolis Drėgmė = b5 simbolis HFract = b14 simbolis Dir = w5 simbolis DirLo = b10 simbolis DirHi = b11 simbolis Greitis = w3 simbolis SpeedLo = b6 simbolis SpeedHi = b7 simbolis RainCountThisHour = b12 simbolis Lietaus skaičiusPaskutinė valanda = b13 simbolis LCDRainWhole = b21 simbolis LCDRainFract = b22 simbolis LastOrThis = b23 ; MCP3422 ADC kintamųjų simbolis mb900 = 17429 ; ADC nuskaitymas 900 Mbar, tada pridėkite 72,288 skaičių vienam mbar simboliui adj0 = 72 simbolis mBarADCValue = w0 simbolis adj1 = b4 ; naudojamas pridėti 1 skaičių kas 4 mbar simbolį adj2 = b5 ; naudojamas pridėti 1 skaičių kas 24 mbar simbolis mBar = w4 ; Namų tvarkymo kintamųjų simbolis lastmbar = w8 ; Prisiminti ankstesnį mBar skaitymo simbolį RiseFall = b18 ; Slėgio didėjimo arba mažėjimo indikatorius (rodyklė aukštyn arba rodyklė žemyn) aktyvus = b19 ; Signalinis indikatorius rodo veiklą LCD ekrane simbolis LCD_Status = b20; Ar LCD foninis apšvietimas įjungtas arba išjungtas (0 arba 1)? ; Aparatūros apibrėžimai simbolis Wireless = C.7; Įeinantis ryšys iš belaidžio imtuvo/dekoderio simbolis Kompiuteris = C.2 ; Išeinantis nuoseklusis ryšys su kompiuteriu simbolis LCD = pinC.5 ; Priekinio skydelio mygtukas tuščiam / tuščiam LCD foninio apšvietimo simboliui ClearRiseFall = pinC.0 ; Priekinio skydelio mygtukas, skirtas pašalinti slėgio "kylančio / mažėjimo" indikatoriaus simbolį LastOrThisSwitch = pinC.1 ; Priekinio skydelio mygtukas, kad būtų rodomas esamos arba ankstesnės valandos kritulių kiekis Init: hsersetup B9600_4, %10000 ; Naudokite LCD kaištį 1, be hserino ; ByVac 20x4 IASI-2 Serial LCD hi2csetup i2cmaster, %11010000, i2cbyteal2Ci2cfast, I2Ci2cfast ADC chip.hi2cout (%00011000) ;nustatyti MCP3422 16 bitų nepertraukiamai konvertavimo pauzei 500 hserout 0, (13) : pauzė 100 ;Inicijuoti LCD hserout 0, (13) : pristabdyti 100 hserout 0, (13) 0 pauzė 5 hserout 0, ("ac50", 13) hserout 0, ("skelbimas", 32, 32, 32, 32, 49, 42, 36, 32, 13) ; Apibrėžkite rodyklės žemyn simbolį (10 simbolis) hserout 0, (" ac1", 13) ; Išvalyti rodymo pauzę 50 hserout 0, ("acc", 13) ; Slėpti žymeklį hserout 0, ("ac81", 13, "ad ", $df, "C", 13) ; Spausdinti antraštes hserout 0, ("ac88", 13, "admBar", 13) hserout 0, ("ac8e", 13, "adRH %", 13) hserout 0, ("acd5", 13, "ad", "dir" , 13) ; Spausdinti pamatus hserout 0, ("acdc", 13, "ad", "mph", 13) ; hserout 0, ("ace3", 13, "ad", "mm", 13) lastmbar = 0 ; Inicijuoti kintamuosius LastOrThis = "c" ;========================================== =============================== ; Pagrindinė kilpa ;=============================================== ========================== pagrindinis: ; Patikrinkite, ar paspaustas priekinio skydelio jungiklis. Picaxe pertraukimo mechanizmas yra ; beveik visam laikui išjungtas dėl didelio serino ir serout komandų skaičiaus; todėl pabarstykite programą "gosub jungikliais", kad patikrintumėte jungiklio būseną; efektyvus, kuris pertraukia. gosub jungikliai; Gaukite pirmąją verčių grupę iš lauko įrenginio per 433MHz radijo ryšį. belaidis serinas, N2400, („t“), SignBit, koeficientas, Fraktas, Drėgmė, HFract, b15, b15 ; Skystųjų kristalų ekrane blykstelis signalas, rodantis aktyvumą ir sėkmingą belaidžio ryšio „seriną“. gosub signalinė lemputė; Rodyti pirmąją grupę LCD ekrane hserout 0, ("acc0", 13) hserout 0, ("ad", SignBit, #Quotient, ".", #Fract, " ", 13) hserout 0, ("acce", 13) hserout 0, ("skelbimas", #Humidity,".", #HFract, " ", 13) gosub jungikliai ; Siųsti pirmąją grupę į kompiuterio COM prievadą; Kiekviena grupė turi pradžios identifikatorių, duomenis ir pabaigos identifikatorių: ; Pradžia = "xS", pabaiga yra "xE", pvz., vėjo pradžia yra WS, vėjo pabaiga yra WE; Keli duomenys atskiriami vienu tarpo ženklu. serout Kompiuteris, N2400, ("TS", SignBit, #Quotient", ", #Fract, "TE") ; Temperatūros serouto kompiuteris, N2400, ("HS", #Humidity, " ", #HFract, "HE" ); Drėgmė; Visą programą dar kartą ir reguliariais intervalais tikrinkite jungiklius. gosub jungikliai; Gaukite antrą verčių grupę iš lauko bloko radijo ryšio. „serin Wireless“, N2400, („m“), „DirHi“, „DirLo“, „SpeedHi“, „SpeedLo“, „RainCountLastHour“, „RainCountThisHour“, b15 gosub signalinė lemputė Speed ​​​​ = greitis * 300 / 448 ; Numatomas konvertavimas iš impulsų/sek į mph Dir = Dir * 64/182 ; Konvertuoti 0–1023 į 0–359 laipsnius; Siekiant išsaugoti tikslumą, lietaus matuoklis turi būti sukalibruotas reguliuojant ; mechaniniai stabdžiai ant apvertimo kaušo, kad 1 antgalis būtų 0,5 mm lietaus. jei LastOrThis = "c", tada ; Nuspręskite, ar rodyti ankstesnės valandos LCDRainWhole = RainCountThisHour / 2 ; kritulių kiekį ar dabartinę valandą. LCDRainFract = RainCountThisHour * 5 // 10 else LCDRainWhole = LietausCountPaskutinė valanda / 2 ; LCDRainFract = RainCountLastHour * 5 // 10 endif ; Siųsti antrą grupę į LCD hserout 0, ("ac95", 13) hserout 0, ("skelbimas", #Dir, " ", 13) hserout 0, ("ac9c", 13) hserout 0, ("ad", # Greitis, " ", 13) hserout 0, ("aca1", 13) hserout 0, ("skelbimas", LastOrThis, " ", #LCDRainWhole, ".", #LCDRainFract, " ", 13) ; Siųsti antrą grupę į kompiuterį COM prievado serout Kompiuteris, N2400, ("WS", #Dir", ", #Speed, "WE") ; Wind serout kompiuteris, N2400, ("RS", #RainCountLastHour", ", #RainCountThisHour, "RE" ); Lietaus gosub jungikliai ; Ačiū „matherp“ Picaxe forume už mbar kodo kilpą: ; Atmosferos slėgio matavimas MPX4115A ; Analoginis skaitmeninis konvertavimas naudojant MCP3422; MPX išvestis į V+, 2. 5V į V-; ADC 16 bitų režimu hi2cin (b1,b0,b2); Nuskaitykite ADC rodmenis ir būsenos baitą iš MCP3422 adj1 = 0 adj2 = 0 w1 = mb900 mbar = 900 do, o mBarADCValue > w1 ; mBarADCValue = w0 = b1:b0 inc mbar w1 = w1 + adj0 inc adj1, jei adj1 = 4, tada inc adj2 w1 = w1 + 1 adj1 = 0 endif, jei adj2 = 6, tada w1 = w1 + 1 adj2 = 0 endif loop gos signalinė lemputė; Siųsti slėgį į kompiuterį COM prievado serout Kompiuteris, N2400, ("PS:", #mbar, "PE") ; Inicijuoti ankstesnį slėgio rodmenį (lastmbar), jei dar nenustatyta, jei lastmbar = 0, tada lastmbar = mbar RiseFall = " " endif ; Rodykite rodyklę aukštyn arba rodyklę žemyn, jei slėgis pasikeitė, jei mbar > lastmbar, tada RiseFall = "^" ; ^ lastmbar = mbar endif if mbar< lastmbar then RiseFall = 10 ; Custom LCD character. Down arrow lastmbar = mbar endif hserout 0, ("acc7", 13) hserout 0, ("ad", RiseFall, #mbar, " ",13) gosub telltale goto main ; Check if one of the front panel buttons is pressed. switches: if LCD = 1 then ; LCD Backlight on/off Button is pressed if LCD_Status = 0 then ; Backlight is on so... hserout 0, ("ab0", 13) ; Turn it off LCD_Status = 1 else hserout 0, ("ab1", 13) ; Else turn it on. LCD_Status = 0 endif do: loop while LCD = 1 ; Don"t return while button is pressed endif if ClearRiseFall = 1 then ; Pressure rise/fall button is pressed RiseFall = " " ; Clear indicator and... hserout 0, ("acc7", 13) ; ... update display. hserout 0, ("ad", RiseFall, #mbar, " ",13) do: loop while ClearRiseFall = 1 endif if LastOrThisSwitch = 1 then ; Rain Previous Hour / Last Hour button. if LastOrThis = "c" then LastOrThis = "p" LCDRainWhole = RainCountLastHour / 2 ; Recalculate values and re-display to LCDRainFract = RainCountLastHour * 5 // 10 ; give visual confirmation of button-press else LastorThis = "c" LCDRainWhole = RainCountThisHour / 2 ; LCDRainFract = RainCountThisHour * 5 // 10 endif hserout 0, ("aca1", 13) hserout 0, ("ad", LastOrThis, " ", #LCDRainWhole, ".", #LCDRainFract, " ", 13) do: loop while LastOrThisSwitch = 1 endif return ; Flash "tell-tale" on LCD display to show activity telltale: if active = "*" then active = " " else active = "*" endif hserout 0, ("ac80", 13, "ad", active, 13) return

Naudojama atmintis = 764 baitai iš 2048

PC programinė įranga

Kompiuteryje veikianti programinė įranga buvo parašyta naudojant Borland Delphi 7. Dabartine forma ji gana primityvi, bet bent jau parodo ryšį tarp Picaxe ir kompiuterio.

Galima pasirinkti, kad grafikai būtų rodomi per 1 valandą arba 12 valandų. Grafikus galima slinkti pirmyn ir atgal pele. Juos galima išgelbėti. Norėdami tai padaryti, spustelėkite juos dešiniuoju pelės mygtuku ir nurodykite pavadinimą bei vertės failą. Galite nustatyti ribotą APRS duomenų rinkinį, kuris įrašomas kartą per minutę vienoje APRS.TXT failo eilutėje ir saugomas tame pačiame aplanke kaip Weather.exe. Atminkite, kad temperatūra yra Farenheito laipsniais, o kritulių kiekis yra 1/100 colyje.

Radijo elementų sąrašas

Paskyrimas Tipas Denominacija Kiekis PastabaParduotuvėMano užrašų knygelė
Temperatūros ir santykinės drėgmės jutiklis
temperatūros jutiklis

DS18B20

1 Į užrašų knygelę
Drėgmės jutiklisHIH-36101 Į užrašų knygelę
Rezistorius

4,7 kOhm

1 Į užrašų knygelę
Vėjo greičio ir krypties matuoklis
FototranzistoriusIR1 Į užrašų knygelę
Šviesos diodasIR1 Į užrašų knygelę
Rezistorius

220 omų

1 Į užrašų knygelę
Rezistorius

4,7 kOhm

1 Į užrašų knygelę
Magnetinis koduotuvas1 Į užrašų knygelę
elektrolitinis kondensatorius10 uF4 Į užrašų knygelę
Kondensatorius100 nF1 Į užrašų knygelę
Rezistorius

4,7 kOhm

1 Į užrašų knygelę
Rezistorius

10 kOhm

1 Į užrašų knygelę
Kritulių matuoklis
MK PICAXE

PICAXE-08M

1 Į užrašų knygelę
lygintuvo diodas

1N4148

2 Į užrašų knygelę
Kondensatorius100 nF1 Į užrašų knygelę
Rezistorius

4,7 kOhm

1 Į užrašų knygelę
Rezistorius

10 kOhm

4 Į užrašų knygelę
Rezistorius

22 kOhm

1 Į užrašų knygelę
Rezistorius

220 omų

2 Į užrašų knygelę
Šviesos diodasIR1

(chrono-termo-higrobarometras)

Kaip sakoma garsiojoje dainoje: „Svarbiausias dalykas yra oras namuose...“. Žinoma, autorius pagal orą turėjo omenyje po vienu stogu gyvenančių sutuoktinių savijautą. Bet jei į šią frazę žiūrite pažodžiui, tai reiškia, kad po stogu, be dvasinio komforto, turėtų būti ir klimato komfortas. Siūlomas prietaisas suteikia galimybę išmatuoti ir LED indikatoriuje rodyti patalpos oro temperatūrą ir santykinę drėgmę, atmosferos slėgio reikšmę ir esamą laiką.

Stotyje yra judesio jutiklis, kuris jį įjungia, kai jutiklio aprėpties zonoje pasirodo žmogus. Šis režimas leidžia taupyti energiją ir naudoti galvanines baterijas kaip maitinimo šaltinį. Be to, šį režimą patogu naudoti miegamajame – išjungtas stoties ekranas neerzins savo švytėjimu. Tokiu atveju, norint įjungti stotį, pakaks atlikti judesį ranka ar koja.

Stoties išvaizda parodyta paveiksluose (1 pav. ir 2 pav.).

1 paveikslas.
Stoties išvaizda

2 pav.
Stoties vaizdas iš išorės (atvirkštinė pusė)

Toliau pateikiamas vaizdo įrašas, demonstruojantis stoties veikimą:


Elektros grandinė.

Elektros grandinės schema parodyta 3 paveiksle.

3 pav
Scheminė elektros grandinė.

Stotis sumontuota ant ATmega8 mikrovaldiklio. R1C1 grandinė suteikia pradinį mikrovaldiklio atstatymą (Reset), kai jis įjungtas. MK programavimas grandinėje teikiamas per XP3 "SPI programuotojo" jungtį.
Saugikliai MK ATmega8: HIGH=0xD9, LOW=0xE4.

Ekrane naudojamas keturių skaitmenų 7 segmentų indikatorius CL5642BN su bendru anodu ir dviejų taškų („:“) skirtuvu valandoms ir minutėms. Indikatoriaus segmentų katodai yra prijungti prie MC per ribojančius rezistorius. MK suteikia dinaminę indikaciją įjungdamas tranzistorių jungiklius VT3…VT6.

Chronometras sumontuotas ant DS1307 lusto pagal standartinę perjungimo grandinę. Laikrodžio tikslumą užtikrina Y1 kvarcinis rezonatorius, kurio dažnis yra 32768 Hz. Jei nėra pagrindinio maitinimo šaltinio (5 voltai), laikrodžio tęstinumą užtikrina atsarginis maitinimo šaltinis CR2032 galvaniniame elemente (3 voltai). MK sąveika su DS1307 lustu vykdoma per TWI (I2C) magistralę. TWI magistralės linijos yra „traukiamos“ iki VCC2 maitinimo rezistoriais R20, R21. Valandų ir minučių nustatymas suteikiamas mygtukais SA1 ("Valandos +"), SA2 ("Minutės +"), SA3 ("Įdiegimas"). Tuo pačiu metu duomenų rodymo ekrane ciklo pradžioje reikia paspausti ir palaikyti mygtuką „Nustatymas“. Paspaudus arba paspaudus ir palaikius mygtukus „Valandos +“ arba „Minutės +“, nustatomas chronometro laikas. Atleidus mygtuką „Nustatyti“, ekrane rodomos valandų ir minučių reikšmės bus įrašytos į atitinkamus DS1307 lusto langelius, o į sekundžių langelį – 0. Tokiu būdu galite tiksliai sinchronizuoti laiką su išoriniais tikslaus laiko atskaitos šaltiniais (pavyzdžiui, iš transliuojamų radijo stočių ar televizijos).

Prie TWI magistralės taip pat prijungta BMP180 barometro plokštė. Prietaiso programa nuskaito gamintojo nustatytus kalibravimo koeficientus ir į juos atsižvelgia skaičiuodama atmosferos slėgį.

Temperatūros matavimas atliekamas DHT11 jutikliu. MK valdo jutiklį per nuoseklią vieno laido dvikryptę sąsają. Sąsajos linija yra "traukiama" iki VCC2 maitinimo rezistorius R19.

Kad būtų taupoma akumuliatoriaus energija, mikrovaldiklis didžiąją laiko dalį praleidžia gilaus miego būsenoje („išjungtas“). Tuo pačiu metu, prieš užmigdamas, MC atjungia maitinimą visiems matavimo jutikliams, prijungtiems prie VCC2 (chronometro, atmosferos slėgio jutiklio, drėgmės ir temperatūros jutiklio). Jutiklių išjungimas užtikrinamas tranzistorių VT1 ir VT2 klavišais.

Norint pažadinti MK, judesio jutiklis HC-SR501 yra įtrauktas į stoties grandinę. Jo užduotis yra išvesti MK iš miego būsenos. Suveikęs jutiklis siunčia signalą į MK, kuris pats atsibunda ir tiekia maitinimą VCC2 periferiniams jutikliams (chronometrui, atmosferos slėgio jutikliui, drėgmės ir temperatūros jutikliui). Tranzistoriaus VT7 klavišas suteikia judesio jutiklio signalo inversiją, kad būtų galima suderinti su MK. „Judesio“ jungiklis leidžia išjungti judesio jutiklį, kad sutaupytumėte dar daugiau akumuliatoriaus. Tokiu atveju alternatyvi komanda pažadinti MK gali būti duota paspaudus mygtuką „Įdiegti“.

Stotis maitinama iš dviejų alternatyvių šaltinių: iš trijų AA baterijų arba iš 5 V maitinimo tinklo per USB magistralę. Norėdami perjungti maitinimo šaltinius, turite nustatyti jungiklį „Maitinimas“ į vieną iš padėčių: „USB“ arba „Baterija“. Kai maitinama iš baterijų, stoties srovės suvartojimas miego režimu yra ne didesnis kaip 200 μA, o tai, kai akumuliatoriaus talpa yra 2000 mAh, atitinka 10 000 valandų (daugiau nei vienerius metus) nepertraukiamo veikimo.

Renkantis maitinimo šaltinį reikia atsižvelgti į tai, kad didžiausias stoties srovės suvartojimas (matavimo metu ir įjungus ekraną) neviršytų 100mA. Todėl galite naudoti beveik bet kokį įkroviklį.

Kai maitinamas iš USB magistralės, kartais patartina užtikrinti, kad jutikliai nuolat matuotų reikšmes ir rodytų duomenis ekrane. Norėdami tai padaryti, nustatykite jungiklį „Ekranas“ į padėtį „Įjungta“. Tokiu atveju MK nebus perkeltas į miego būseną.

Spausdintinės plokštės.

Spausdintinės plokštės sukurtos Dip Trace programoje. Jie pagaminti ant vienpusės folijos stiklo pluošto. Pagrindinės spausdintinės plokštės dalių vieta parodyta paveikslėlyje (4 pav.). Paveiksle džemperiai montavimo pusėje paryškinti spalvotomis laužtinėmis linijomis. Bėgių šone esanti spausdintinė plokštė parodyta paveikslėlyje (5 pav.).

4 pav
Spausdintinė plokštė (vaizdas iš radijo komponentų šono).

5 pav
PCB (vaizdas iš apačios, veidrodinis vaizdas).

Stoties valdymo pulto mygtukai ir jungikliai montuojami ant atskiros spausdintinės plokštės (6 pav. ir 7 pav.).

6 pav
Valdymo skydelio spausdintinė plokštė (vaizdas iš viršaus).

7 pav
Valdymo skydelio spausdintinė plokštė (vaizdas iš takelių šono).

USB kabelio prijungimo lizdas yra sumontuotas atskiroje plokštėje, įsigytoje iš AliExpress (8 pav.).

8 pav
Plokštė su USB lizdu.

Montavimas.

Stotis montuojama universalios dėžutės kabelių kanalams "Promrukav" korpuse - IP42; 400V; polistirenas GOST R 50827.1-2009 TU 3464-001-97341529-2012 40-0460 straipsnis.

Priekinėje korpuso pusėje iškirpti langai ekranui ir judesio jutikliui. Galinėje korpuso pusėje yra DHT11 drėgmės ir temperatūros jutiklis, valdymo pulto mygtukai ir jungikliai.

Maitinimo baterija - trys AA 1,5 volto elementai yra dedami į specializuotą laikiklį - "lopšį".

Radijo komponentų išdėstymas ant spausdintinės plokštės parodytas paveikslėlyje (9 pav.).

9 pav
Dalių išdėstymo ant lentos išvaizda.

Straipsnio „CTBH.rar“ archyve yra:

1. CTBH aplankas – C projekto failai Atmel Studio 7 aplinkoje.
2. CTBH.dch - elektros grandinės schema Dip Trace formatu.
3. CTBH.dip - įrenginio spausdintinė plokštė Dip Trace formatu.
4. CTBH_Buttons.dip – valdymo pulto spausdintinė plokštė Dip Trace formatu.
5. CTBH.hex – MK įkrovos failas.

Sėkmės darbuose ir viso ko geriausio!

Atsisiųsti archyvą.

Iš išsibarsčiusių dalių nusprendžiau padaryti nedidelę oro stotį. Valdiklio programinės aparatinės įrangos surinkimas ir parašymas užtruko dvi dienas. Dar pora dienų buvo praleista rašant, bandant ir derinant likusią programinę įrangą. Dabartinė orų stoties versija matuoja temperatūrą, drėgmę, slėgį, ji bendrauja su kompiuteriu per USB prievadą ir maitinama iš jo, palaikoma 9 V baterijos. Duomenys rodomi LCD ekrane. Yra ir laikrodžių. Kadangi tinkamo kvarco nebuvo (o pirkti iš principo nenorėjau), atlikau laiko sinchronizaciją su kompiuteriu.

Šis projektas yra absoliučiai nekomercinis, todėl galima parsisiųsti meteorologinės stoties diagramą, valdiklio programinę įrangą ir visą reikalingą programinę įrangą. Programinės įrangos šaltinio kodas.

Stotis surinkta ant duonos lentos, todėl neprašykite PCB brėžinio.

Buvo naudojami šie pagrindiniai komponentai:
ATMega8 – valdiklis
MPX4115A - slėgio jutiklis
HIH-4000 - drėgmės jutiklis
DS18B20 - temperatūros jutiklis
WH1602A - ekranas

Aš naudoju LCD PLED technologiją, galite naudoti įprastą WH1602A tipą. Temperatūros ir drėgmės davikliai patalpinti lauke, apsauginėje dėžutėje.

Prisijungimas prie kompiuterio

Norint prisijungti prie USB prievado, reikia atskiro aprašymo.

Iš principo buvo galima prisijungti prie COM prievado, taip lengviau. Bet aš užsiėmęs. Nėra pasirinkimo – USB. Kadangi stotis buvo surinkta iš to, kas buvo, mobiliojo telefono prijungimui prie kompiuterio buvo naudojamas CA-42 kabelio stulpelis. Suveikė mobiliojo telefono jungtis, tačiau liko galas, jungiantis prie kompiuterio. Pati ši jungtis jau turi mikroschemą USB prievadui, o išėjimas yra standartinis UART, naudojamas mobiliuosiuose telefonuose ir kaip tik tinka valdikliui, tad laidus lituojame tiesiogiai, be jokių signalo keitiklių. Įdiegus šio kabelio tvarkykles, pasirodo virtualus COM prievadas. Tada prie savo orų stoties galime prisijungti naudodami bet kokią programą, pavyzdžiui, HyperTerminal. Konkrečiai necituoju kabelio išlitavimo, nes kabeliai yra skirtingi, jie gali skirtis. Jums reikia naudoti 3 laidus TX, RX, GND. Įrenginio maitinimas iš laido greičiausiai neveiks. Paėmiau netinkamą USB jungtį ir maitinau ją iš kito USB prievado.

Kad būtų galima siųsti komandas iš komandinės eilutės ir gauti atsakymą iš meteorologinės stoties, buvo parašyta programa getfromcom.exe.

Orų stotis supranta tik dvi komandas:

AGOV – pateikia dabartinio jutiklio rodmenis.

SETTIME [laikas sekundėmis nuo dienos pradžios] – komanda nustato laiką meteorologinėje stotyje

Norėdami gauti duomenų, paleiskite getfromcom.exe COM6 AGOV

Norėdami nustatyti laiką, paleiskite getfromcom.exe COM6 "SETTIME 72565"

COM6 - prievadas.
72565 – sekundžių skaičius nuo dienos pradžios.

Procesų automatizavimas

Dabar galite naudoti bet kurią programą, kad galėtumėte skaityti, apdoroti duomenis, siųsti juos ten, kur reikia, sinchronizuoti orų stoties laiką. Aš tai padariau su PHP skriptų kalba. Pirma, jis yra greitas ir visada galite greitai pataisyti scenarijų ir neieškoti, kur dingo šaltinio kodas. Antra, aš nuolat dirbu su PHP. Bet jūs galite rašyti savo programą bet kuria jums patinkančia kalba. Žinoma, kad PHP veiktų, turėsite jį atsisiųsti (http://www.php.net/downloads.php) ir įdiegti į savo kompiuterį. „Windows“ sistemoje tai daroma iš esmės. Getfromcom.php scenarijus paleidžiamas iš failo get_data.bat, jis apklausia meteorologinę stotį, apdoroja duomenis ir siunčia get_data.php scenarijų į HTTP serverį. Apie scenarijus serveryje pakalbėsime šiek tiek vėliau.

Hibernate veikiantis kompiuteris

Mano kompiuteris veikia miego režimu. Atsibunda kas 3 valandas, apklausia meteorologinę stotį, siunčia duomenis į serverį ir vėl užmiega (išjungti negalite - kaip jums patogiau.). Tai atliekama taip: Užduočių planuoklyje nurodytas paketinis failas get_data.bat, kurį reikia vykdyti, ir nustatyta parinktis „pažadinti kompiuterį, kad būtų atlikta ši užduotis“.

Kompiuteris yra užmigdytas naudojant fShutdown.exe /hibernate
Dabar nurodytu laiku kompiuteris atsibus ir vykdys get_data.bat

Get_data.bat funkcijos

Komandos:

devcon.exe įgalinti PCIVEN_10EC
ping 127.0.0.1
RASPHONE-d Setilite

Pradėkite tinklo ryšį ir iškvieskite VPN mano IPT.

ping 127.0.0.1 – todėl padariau reikiamą pauzę.

Atitinkamai išjunkite komandas:

RASPHONE -h Setilite
devcon.exe išjunkite PCIVEN_10EC

Jums viskas bus kitaip, todėl šios eilutės yra komentuojamos faile.

Pabudęs iš žiemos miego, kompiuteris pradėjo galvoti, kad COM prievadą užėmė kita programa. Turėjau iš naujo paleisti virtualų COM prievadą su komanda devcon.exe restart "USBVid_6547&PID_0232"
Turėsite kitą įrenginio ID.

Serverio scenarijai:

Dabar apie scenarijus serveryje. Scenarijus, kuris gauna duomenis: get_data.php
Scenarijus išsaugo duomenis pogoda.log faile. Tiesą sakant, duomenys taip pat siunčiami į MySQL duomenų bazę. Tačiau dėl paprastumo apsvarstysime galimybę dirbti tik su failu. Priimdamas duomenis, scenarijus patikrina, ar sutampa siuntėjo IP adresas. Leidžiami adresai nurodyti faile ip_allow.lst. Duomenys nepriimami iš „užsienio“ siuntėjo.

Mano kolega neseniai surengė nedidelę mokslo mugę.
Mano mokytojas paprašė manęs pristatyti elektronikos projektą kolegijos studentams. Turėjau dvi dienas sugalvoti ką nors įdomaus ir pakankamai paprasto.



Kadangi oro sąlygos čia gana permainingos, o temperatūra svyruoja 30-40 °C ribose, nusprendžiau pasidaryti namų oro stotį.

Kokias funkcijas atlieka namų orų stotis?
Arduino orų stotis su ekranu – tai įrenginys, renkantis duomenis apie oro ir aplinkos sąlygas, naudodamas įvairius jutiklius.

Paprastai tai yra šie jutikliai:

  • vėjas
  • drėgmės
  • lietus
  • temperatūros
  • spaudimas
  • aukščių

Mano tikslas yra savo rankomis padaryti nešiojamą stalinę orų stotį.

Ji turėtų turėti galimybę apibrėžti šiuos parametrus:

  • temperatūros
  • drėgmės
  • spaudimas
  • aukščio

1 veiksmas: nusipirkite tinkamus komponentus







  • DHT22, temperatūros ir drėgmės jutiklis.
  • BMP180, slėgio jutiklis.
  • Lydmetalis
  • Vienos eilės jungtis 40 išėjimų

Iš įrangos jums reikės:

  • lituoklis
  • nosies pagalvėlių replės
  • laidai

2 veiksmas: DHT22 temperatūros ir drėgmės jutiklis







Temperatūrai matuoti naudojami įvairūs jutikliai. DHT22, DHT11, SHT1x yra populiarūs

Paaiškinsiu, kuo jie skiriasi vienas nuo kito ir kodėl naudojau DHT22.

AM2302 jutiklis naudoja skaitmeninį signalą. Šis jutiklis veikia pagal unikalią kodavimo sistemą ir jutiklių technologiją, todėl jo duomenys yra patikimi. Jo jutiklio elementas yra prijungtas prie 8 bitų vieno lusto kompiuterio.

Kiekvienas šio modelio jutiklis yra termiškai kompensuotas ir tiksliai sukalibruotas, kalibravimo koeficientas saugomas vienkartinėje programuojamoje atmintyje (OTP atmintyje). Skaitydamas rodmenis, jutiklis atmins koeficientą iš atminties.

Dėl mažo dydžio, mažo energijos suvartojimo, didelio perdavimo atstumo (100 m) AM2302 tinka beveik visoms reikmėms, o 4 išėjimai iš eilės labai palengvina montavimą.

Pažvelkime į trijų jutiklių modelių privalumus ir trūkumus.

DHT11

Argumentai "už": nereikalauja litavimo, pigiausias iš trijų modelių, greitas stabilus signalas, diapazonas virš 20 m, stiprūs trukdžiai.
Minusai: biblioteka! Nėra skiriamosios gebos, temperatūros matavimo paklaida +/- 2°С, santykinės drėgmės lygio matavimo paklaida +/- 5%, neadekvatus išmatuotų temperatūrų diapazonas (0-50°С).
Naudojimas: sodininkystė, žemės ūkis.

DHT22

Argumentai "už": nereikalauja litavimo, maža kaina, lygios kreivės, mažos matavimo paklaidos, didelis matavimo diapazonas, diapazonas virš 20 m, stiprūs trukdžiai.
Minusai: jautrumas gali būti didesnis, lėtas temperatūros pokyčių sekimas, reikalinga biblioteka.
Taikymas: aplinkos tyrimai.

SHT1x

Argumentai "už": nereikia lituoti, lygios kreivės, mažos matavimo paklaidos, greitas atsakas, mažas energijos suvartojimas, automatinis miego režimas, didelis stabilumas ir duomenų nuoseklumas.
Minusai: dvi skaitmeninės sąsajos, drėgmės lygio matavimo klaida, matuojamų temperatūrų diapazonas 0-50°C, reikalinga biblioteka.
Taikymas: naudojimas atšiaurioje aplinkoje ir ilgalaikiuose įrenginiuose. Visi trys jutikliai yra palyginti nebrangūs.

Junginys

  • Vcc - 5V arba 3,3V
  • Gnd - su Gnd
  • Duomenys – prie antrojo Arduino kaiščio

3 veiksmas: BMP180 slėgio jutiklis



BMP180 yra barometrinis atmosferos slėgio jutiklis su I2C sąsaja.
Barometrinio slėgio jutikliai matuoja absoliučią aplinkos oro vertę. Šis indikatorius priklauso nuo konkrečių oro sąlygų ir aukščio virš jūros lygio.

BMP180 modulis turėjo 3.3V 662k omų reguliatorių, kurį aš dėl savo kvailumo netyčia susprogdinau. Aš turėjau atlikti galios smūgį tiesiai į lustą.

Dėl stabilizatoriaus trūkumo apsiriboju maitinimo šaltinio pasirinkimu - virš 3,3V įtampos sunaikins jutiklį.
Kiti modeliai gali neturėti stabilizatoriaus, būtinai patikrinkite, ar jis nėra.

Jutiklio ir I2C magistralės sujungimo schema su Arduino (nano arba uno)

  • SDA-A4
  • SCL-A5
  • VCC - 3,3V
  • GND-GND

Pakalbėkime šiek tiek apie slėgį ir kaip jis susijęs su temperatūra ir aukščiu.

Atmosferos slėgis bet kuriame taške nėra pastovus. Dėl sudėtingos Žemės sukimosi ir Žemės ašies pasvirimo sąveikos susidaro daug aukšto ir žemo slėgio sričių, o tai savo ruožtu lemia kasdienius oro modelius. Stebėdami slėgio pokytį galite sudaryti trumpalaikę orų prognozę.

Pavyzdžiui, slėgio kritimas dažniausiai reiškia lietingus orus arba perkūnijos artėjimą (artėja prie žemo slėgio zonos, ciklono). Kylantis slėgis dažniausiai reiškia sausą, giedrą orą (virš jūsų eina aukšto slėgio zona, anticiklonas).

Atmosferos slėgis taip pat kinta priklausomai nuo aukščio. Absoliutus slėgis bazinėje stovykloje Evereste (5400 m virš jūros lygio) yra mažesnis nei absoliutus slėgis Delyje (216 m virš jūros lygio).

Kadangi absoliutaus slėgio rodmenys kiekvienoje vietoje skiriasi, vadinsime santykinį slėgį arba jūros lygio slėgį.

Ūgio matavimas

Vidutinis slėgis jūros lygyje yra 1013,25 GPa (arba milibarai). Jei pakilsite virš atmosferos, ši vertė nukris iki nulio. Šio kritimo kreivė yra gana suprantama, todėl galite patys apskaičiuoti aukštį pagal šią lygtį: alti=44330*

Jei jūros lygio slėgį 1013,25 GPa laikysite p0, lygties sprendimas yra jūsų dabartinis aukštis virš jūros lygio.

Atsargumo priemonės

Atminkite, kad BMP180 jutikliui reikia prieigos prie atmosferos, kad būtų galima nuskaityti oro slėgį, nedėkite jutiklio į uždarą dėklą. Užteks nedidelės ventiliacijos angos. Tačiau nepalikite jos per daug atviros – vėjas numuš slėgio ir aukščio rodmenis. Apsvarstykite apsaugą nuo vėjo.

Saugoti nuo karščio. Norint išmatuoti slėgį, reikalingi tikslūs temperatūros rodmenys. Stenkitės apsaugoti jutiklį nuo temperatūros svyravimų ir nepalikite jo šalia aukštos temperatūros šaltinių.

Saugoti nuo drėgmės. BMP180 jutiklis yra jautrus drėgmės lygiui, stenkitės, kad ant jutiklio nepatektų vandens.

Neuždenkite jutiklio. Nustebino jutiklyje esančio silikono jautrumas šviesai, kuri gali nukristi ant jo per skylę lusto dangtelyje. Kad matavimai būtų tiksliausi, stenkitės apsaugoti jutiklį nuo aplinkos šviesos.

4 veiksmas: įrenginio surinkimas







Arduino Nano vienos eilės jungčių montavimas. Iš esmės mes juos supjaustėme pagal dydį ir šiek tiek šlifavome, kad jie atrodytų kaip buvę. Tada mes juos lituojame. Po to sumontuojame DHT22 jutiklio vienos eilės jungtis.

Įdiekite 10 kΩ rezistorių nuo duomenų išvesties iki žemės (Gnd). Viską lituojame.
Tada lygiai taip pat montuojame vienos eilės jungtį BMP180 davikliui, darome maitinimą 3,3V. Viską sujungiame su I2C magistrale.

Galiausiai LCD ekraną prijungiame prie tos pačios I2C magistralės kaip ir BMP180 jutiklis.
(Vėliau prie ketvirtos jungties planuoju prijungti RTC modulį (realiojo laiko laikrodį), kad įrenginys rodytų ir laiką).

5 žingsnis: kodavimas




Atsisiųskite bibliotekas

Norėdami įdiegti bibliotekas Arduino, spustelėkite nuorodą

#įtraukti
#įtraukti #įtraukti #įtraukti "DHT.h" #įtraukti

SFE_BMP180 slėgis;

#define AUKŠTIS 20.56 #define I2C_ADDR 0x27 //<<- Add your address here. #define Rs_pin 0 #define Rw_pin 1 #define En_pin 2 #define BACKLIGHT_PIN 3 #define D4_pin 4 #define D5_pin 5 #define D6_pin 6 #define D7_pin 7

#define DHTPIN 2 // prie kokio skaitmeninio kaiščio esame prisijungę

// Panaikinkite bet kokį naudojamą tipą! //#define DHTTYPE DHT11 // DHT 11 #define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321 DHT dht(DHTPIN, DHTTYPE); LiquidCrystal_I2C lcd(IEnC,pin_ADDRw,pin_pin Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);plūduriuoti t1,t2;

void setup() ( Serial.begin(9600); lcd.begin(16,2); //<<-- our LCD is a 20x4, change for your LCD if needed // LCD Backlight ON lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE); lcd.setBacklight(HIGH); lcd.home (); // go home on LCD lcd.print("Weather Station"); delay(5000); dht.begin(); pressure.begin(); } void loop() { char status; double T,P,p0,a; status = pressure.startTemperature(); if (status != 0) { delay(status);

status = slėgis.getTemperature(T); if (būsena != 0) ( Serial.print("1"); lcd.clear(); lcd.setCursor(0,0); lcd.print("Baro temperatūra: "); lcd.setCursor(0,1 ); lcd.print(T,2); lcd.print("°C"); t1=T; delsa (3000);

status = slėgis.startSlėgis(3); if (statusas != 0) ( // Palaukite, kol matavimas bus baigtas: delsa(statusas);

status = slėgis.gautiSlėgis(P,T); if (būsena != 0) (lcd.clear(); lcd.setCursor(0,0); lcd.print("abslt slėgio: "); lcd.setCursor(0,1); lcd.print(P,2 ); lcd.print(" mb "); delsa (3000);

p0 = slėgis.jūros lygis(P,ALTITUDE); // mes esame 1655 metrų aukštyje (Boulder, CO)

a = slėgis.aukštis(P,p0); lcd.clear(); lcd.setCursor(0,0); lcd.print("Aukštis: "); lcd.setCursor(0,1); lcd.print(a,0); lcd.print("metrai"); delsimas (3000); ) ) ) ) plūdė h = dht.readHumidity(); // Skaityti temperatūrą Celsijaus laipsniais (numatytasis) float t = dht.readTemperature(); t2=t; lcd.clear(); lcd.setCursor(0,0); // eiti į 2 eilutės pradžią lcd.print("Drėgmė: "); lcd.setCursor(0,1);lcd.print(h); lcd.print("%"); delsimas (3000); lcd.clear(); lcd.setCursor(0,0); // eiti į 2 eilutės pradžią LCD print("DHT Tempurature: "); lcd.setCursor(0,1); LCD spausdinimas(t); lcd.print("degC"); delsimas (3000); lcd.clear(); lcd.setCursor(0,0); // eiti į 2 eilutės pradžią lcd.print("Vidutinė temperatūra: "); lcd.setCursor(0,1); lcd.print((t1+t2)/2); lcd.print("degC"); delsimas (3000); )

Naudojau Arduino 1.6.5 versiją, kodas tiksliai tinka, gali veikti ir vėlesni. Jei kodas dėl kokių nors priežasčių netinka, naudokite 1.6.5 versiją kaip pagrindinę.



„Taigi, iš karto susitarkime: nekursite filmo Holivudui. Netgi Stebuklų šalyje patvirtinama ne daugiau kaip penki procentai visų scenarijų, o tik vienas procentas pradedamas gaminti ... Taigi, vietoj viso to, jūs ketinate sukurti savo Holivudą.
Edas Gaskelis „Skaitmeninio kino filmavimas arba Holivudas namuose“

Pratarmė

Ką, dar viena Arduino oro stotis?! Taip, dar vienas ir, kažkas man sako, ne paskutinis daiktų internete.


Kaip kiekvienas programuotojas privalo parašyti „Hello World!“ programą, taip ir kiekvienas arduinietis turi turėti patirties kuriant paprastą ar nelabai meteorologinę stotį.
Aprašyta nemažai jau sukurtų orų stočių projektų internete, skaitytojas gali pasirinkti bet kurį iš jų įgyvendinimui. Atvirai kalbant, atidžiai išstudijavau apie dešimt panašių projektų ir krūvą susijusių. Todėl negalima sakyti, kad viską kūriau nuo nulio, žinoma, „stojau ant milžinų pečių“.


Iš karto turiu pasakyti, kad į mano planus nebuvo įtrauktas trečiųjų šalių paslaugų naudojimas duomenims saugoti ir rodyti. Norėjau asmeniškai pajusti ir suprasti, kaip visa tai veikia iš vidaus nuo pradžios iki pabaigos, nuo A iki Z.


Taigi tiems, kurie nori greitai ką nors iš nieko prikalti, ši straipsnių serija greičiausiai netiks. Lengviau eiti ir nusipirkti paruoštą rinkinį su surinkimo instrukcijomis. Mikroelektronikos profesionalams čia absoliučiai nėra ką veikti, gal žiopčioti ir prisiminti save kelionės pradžioje.
Bet tiems, kurie tikrai nori suprasti, manau, patiks. Galbūt medžiaga bus naudinga kaip mokymo priemonė.



Šis projektas buvo įgyvendintas dar 2016 m., bet tikiuosi, kad jis vis dar aktualus.

Technologijų rinkinys

Studijuosime ir dirbsime su paprastais ir sudėtingais dalykais:

  • temperatūros ir drėgmės jutikliai, tipai DHT22, DHT11
  • barometrinio slėgio jutiklis, tipas BMP180
  • WiFi modulis ESP8266
  • radijo modulio tipas nRF24 2,4 GHz
  • šeimos Arduino Pro Mini, Arduino Mega
  • saulės baterijos ir baterijos
  • programavimo kalba C/C++
  • PHP programavimo kalba
  • MySQL duomenų bazių valdymo sistema
  • „Java“ programavimo kalba ir „Android“ sistema (sukuriama „Adnroid“ programa, skirta orų duomenims rodyti išmaniajame telefone).

Kai kurios išvardintos temos nėra vertos, o kai kurias galima studijuoti metų metus. Todėl sudėtingus dalykus paliesime tik su šiuo projektu tiesiogiai susijusioje dalyje, kad suprastumėte, kaip visa tai veikia.


Bet pradėsime nuo pat pradžių Teisingai. Būtent iš būsimo įrenginio aprašymo ir dizaino "ant lapo" kad galiausiai kiekviena plyta gulėtų savo vietoje.

prototipų kūrimas

Kaip teisingai mums sako Vikipedija, prototipų kūrimas yra greitas veikiančios sistemos įgyvendinimo projektas. Kuris, taip, neveiks visiškai neefektyviai ir su tam tikromis klaidomis, bet leis suprasti, ar amatą reikėtų sukurti iki pramoninio dizaino. Prototipo kūrimo procesas neturėtų trukti ilgai. Po prototipų kūrimo etapo seka sistemos analizė ir jos tobulinimas.


Tačiau tai yra pramonėje, kurioje darbuotojai dirba visą darbo dieną.


Kiekvienas, vakarais kniedė savo augintinio projekto amatus „daiktų internetui“, turėtų žinoti, kad kuria prototipą, pusgaminį. Tai labai toli nuo įprasto pramoninio produkto lygio. Štai kodėl mūsų mėgėjų amatams neturėtumėte patikėti jokių svarbių gyvybę palaikančių sričių ir tikiuosi, kad jie mūsų nenuvils.


Pramoninis produktas yra sukurtas pramoninių elementų pagrindu, o tada pereina daug daugiau etapų, įskaitant derinimą, testavimą ir priežiūrą, kol tampa bestseleriu.


Taigi vietoj viso to nuobodulio kursime savo žaislą, bet ne paprastą. Su techninės kūrybos elementais, programavimo pradžia ir daugelio kitų susijusių dalykų žinojimu (kūrimo procese).


Žinoma, elektronikos inžinieriams programavimo etape bus sunku, o programuotojams teks paprakaituoti dėl grandinių, tačiau autorius stengsis viską išdėstyti kuo prieinamiau ir aiškiai aprašyti, kodėl buvo naudojami tam tikri sprendimai.

Reikalavimai

Paprastai šis žingsnis praleidžiamas. Nusprendus ką nors panašaus padaryti dabar, o tada paaiškėja mažos smulkmenos, dėl kurių visas projektas atsiduria aklavietėje ar net tampa nepakeliamu. Visas mūsų pageidavimų sąrašas turi būti įrašytas, aš naudoju „Google“ diską, jis pasiekiamas kompiuteryje ir mobiliajame įrenginyje.


Taigi, mūsų meteorologinė stotis turėtų:

  • išmatuoti temperatūrą ir drėgmę lauke
  • išmatuoti temperatūrą ir drėgmę namuose
  • išmatuoti atmosferos slėgį
  • rodyti nurodytas vertes ekrane
  • perkelti duomenis į serverį internete, kur duomenys bus saugomi duomenų bazėje ir rodomi tinklalapyje arba naudojami mobiliojoje programėlėje.

Jutikliai naudojami paprasčiausi ir pigiausi. Pavyzdžiui, žvelgdamas į priekį, pasakysiu, kad DHT22 gana tiksliai matuoja temperatūrą, bet šiek tiek netiksliai su drėgme. Bet vėlgi, kartoju, nesvarbu, nes prieš mus yra prototipas, o 5% drėgmės išsibarstymas nieko svarbaus mūsų gyvenime neturės įtakos.


Sistemos architektūra, aparatinė ir programinė įranga turi leisti sistemą dar labiau išplėsti, kad būtų galima pridėti naujų jutiklių ir naujų galimybių.

Geležis. Komponentų pasirinkimas

Tai yra pati svarbiausia dalis, o ne litavimas ar programavimas. Apibrėžus sistemai keliamus reikalavimus, reikia apsispręsti, kas tiksliai jie bus įgyvendinami.


Čia yra vienas niuansas. Norint parinkti komponentus, reikia gerai išmanyti jų galimybes, reikia išmanyti pačias technologijas. Tai yra, kitaip tariant, čia jūs turite būti toli nuo pradedančiojo elektronikos inžinieriaus ir programuotojo. Taigi ką dabar praleisti porą metų tyrinėjant visą galimų įrenginių spektrą?


Užburtas ratas? Tačiau užburtas ratas egzistuoja tam, kad juos sulaužytų.


Yra išėjimas. Galite tiesiog imti ir pakartoti kažkieno projektą. Išstudijavau jau esamus orų stočių projektus ir tikiuosi, kad žengiau žingsnį į priekį.


Taigi. Orų stoties architektūra paremta Arduino. Kadangi „Arduino“ turi mažą įėjimo slenkstį ir aš jau su tuo susitvarkiau. Tada lengviau pasirinkti.


Iš karto tapo aišku, kad meteorologinėje stotyje bus nuotolinis, už lango esantis jutiklis ir centrinis modulis.


Centrinis, pagrindinis blokas bus patalpoje. Svarbu tai nustatyti pradiniame etape, iš to tokios svarbios charakteristikos kaip temperatūros režimas ir galios „šokis“.


Nuotolinis jutiklis (ar jutikliai) bus be „smegenų“, jo užduotis – periodiškai atlikti matavimus ir perduoti duomenis į centrinį namų bloką. Centrinis blokas gauna duomenis iš visų jutiklių, atvaizduoja juos ekrane ir siunčia į internetą į duomenų bazę. Na, ten jau daug lengviau, kai tik duomenys atsiduria duomenų bazėje, su jais galima daryti ką nori, net braižyti grafikus.


Bendravimui su išoriniu pasauliu internetą vienareikšmiškai pasirinko ESP8266 WiFi modulis be beveik jokios alternatyvos (atkreipkite dėmesį, galbūt dabar tokių alternatyvų atsirado). „Arduino“ yra eterneto išplėtimo plokštės, bet aš visai nenorėjau būti pririštas prie kabelio.



Įdomus klausimas buvo, kaip užtikrinti ryšį tarp išorinio jutiklio (ar jutiklių, pamenate apie sistemos išplėtimo reikalavimą?) ir centro. 433 MHz radijo švyturiai tikrai netinka (visai niekam netinka).


Vėl naudoti ESP8266?


Šio sprendimo trūkumai:

    Reikalingas stabilus WiFi už namų ribų

    ryšio diapazonas nebus didelis

    nukentės patikimumas, sugesus internetui nematysime savo nuotolinių jutiklių

    daugiau energijos suvartojimo.

    Energijos suvartojimas ESP8266:

    kai perduodama 120-170 mA

    kai gauna 50-56 mA

    gilaus miego režimu 10 µA (µA)

    išjungta būsena 5 µA (µA).

Galų gale, norint sujungti nuotolinius jutiklius su pagrindiniu namų įrenginiu, buvo pasirinktas lustas nRF24L01 + su 2,4 GHz siųstuvu ir imtuvu viename buteliuke su papildoma išorine antena, kad tikrai „pramuštų“ sienas.



Energijos suvartojimas nRF24L01+ 2,4 GHz:

  • kai gaunama 11 mA
  • perduodant 2Mbps greičiu – 13 mA
  • budėjimo I režimu - 26 μA (μA)
  • išjungta būsena 900 nA (nA).

Tiek ESP8266, tiek nRF24L01+ turi tinkamą darbo temperatūros diapazoną: nuo -40 ℃ iki +80 ℃.


Galite nusipirkti nRF24L01+ už maždaug 1 USD arba su išorine antena už 3 USD. Galite nusipirkti ESP8266-01 už maždaug 4 USD. Atidžiai perskaitykite produkto aprašymą! Kitu atveju pirkite vieną anteną.


Atsirado sistemos branduolys. Pereikime prie pačių jutiklių.


Gatvėje, kaip žinote, temperatūra gali pasiekti neigiamas reikšmes, todėl DHT11 jutiklis netinka, bet DHT22 tinka.



DHT22 / AM2302 specifikacijos:

  • Maitinimas nuo 3,3 V iki 5 V, rekomenduojamas 5 V
  • maksimalus suvartojimas 2,5 mA matavimo ir duomenų perdavimo metu
  • drėgmės matavimo diapazonas 0-100% su 2-5% paklaida
  • temperatūros matavimo diapazonas nuo -40 iki +125°C su ±0,5°C paklaida
  • užklausa išmatuoti ne daugiau kaip 0,5 Hz – kartą per 2 sekundes.

Namo viduje tikiuosi nebus neigiamos temperaturos, tad galima naudoti DHT11, juolab kad as jau turejau.


DHT11 savybės:

  • Maitinimas nuo 3,3 V iki 5 V
  • didžiausias suvartojimas 2,5 mA, matavimo ir duomenų perdavimo metu
  • drėgmės matavimo diapazonas 20-80% su 5% paklaida
  • temperatūros matavimo diapazonas nuo 0 iki +50°C su ±2°C paklaida
  • matavimo užklausa ne daugiau kaip 1 Hz – kartą per sekundę.

Galite nusipirkti DHT22 už maždaug 3 USD. DHT11 kainuoja mažiau – 1 USD, tačiau jis taip pat yra ne toks tikslus.


Dabar vėl grįžkite į Arduino. Kokią lentą pasirinkti?


Išbandžiau atskiras sistemos dalis „Arduino UNO“. Tie. Aš prijungiau ESP modulį prie uno ir jį ištyriau, išjungiau, tada prijungiau nRF24 ir pan. Galutiniam lango jutiklio įgyvendinimui pasirinkau Arduino Pro Mini kaip artimiausią miniatiūrą Uno.



Kalbant apie energijos suvartojimą, „Arduino Pro Mini“ taip pat atrodo gerai:

  • nėra USB-TTL keitiklio, kuris pats „valgo“ daug,
  • LED yra prijungtas per 10k rezistorių.

Pažangiam energijos taupymui buvo numatyta:

  • nuimkite šviesos diodą - maitinimo indikatorių iš „Arduino Pro Mini“ (apgailestauju, kad nesugadinau plokštės)
  • arba naudoti "pliką" mazgą ant Atmel ATmega328 mikroprocesoriaus (jo nenaudojo)
  • naudokite mažai galios biblioteką arba JeeLib .

Iš bibliotekų pasirinkau Low Power Library, ji paprasta ir joje yra tik tai, ko reikia.


Centriniam blokui, kadangi buvo planuojama prie jo prijungti daugybę periferinių įrenginių, buvo pasirinkta Arduino Mega plokštė. Be to, jis visiškai suderinamas su UNO ir turi daugiau atminties. Žvelgdamas į ateitį, pasakysiu, kad šis pasirinkimas buvo visiškai pagrįstas.


Galite nusipirkti „Arduino Mega“ už maždaug 8 USD.

Galia ir energijos suvartojimas

Dabar apie maistą ir energijos suvartojimą.


Yra dviejų tipų Arduino Pro Mini:

  • maitinimo įtampai 5V ir dažniui 16MHz
  • 3,3 V maitinimo įtampai ir 8 MHz dažniui.

Kadangi radijo moduliui nRF24L01+ reikalingas 3.3V maitinimas, o greitis čia nėra svarbus, pirkite Arduino Pro Mini 8MHz ir 3.3V.


Šiuo atveju Arduino Pro Mini maitinimo įtampos diapazonas yra:

  • 3,35-12V 3,3V modeliui
  • 5-12V 5V modeliui.

Jau turėjau 5V Arduino Pro Mini, todėl jį ir naudojau. Galite nusipirkti „Arduino Pro Mini“ už maždaug 4 USD.


Centrinio bloko maitinimas bus tiekiamas iš 220 V tinklo per nedidelį maitinimo bloką, duodantį 12V, 450mA, 5W išėjimą. Kažkas panašaus už 5 USD. Taip pat yra atskiras išėjimas 5V.



Ir jei to nepakanka, galite tai padaryti galingiau. Kitaip tariant, taupyti centrinio bloko energiją nėra labai prasminga. Tačiau nuotolinio belaidžio jutiklio atveju svarbiausia yra energijos taupymas. Tačiau nenoriu prarasti funkcionalumo.


Todėl „Arduino Pro Mini“ ir „nRF24“ radijo modulis bus maitinamas 4 Ni-Mh baterijų pluoštu.


Ir prisimink maksimali šiuolaikinės baterijos talpa apie 2500–2700 mAh, bet kas daugiau yra rinkodaros triukas (Ansmann 2850) arba apgaulė (UltraFire 3500).


Ličio jonų baterijų nenaudoju dėl kelių priežasčių:

  • labai brangus
  • aplinkos temperatūrai nukritus žemiau 0°C, ličio jonų akumuliatoriaus galia sumažėja iki 40-50 proc.
  • pigios pagamintos be apsaugos ir nesaugios (trumpojo jungimo ar iškrovos metu gali sprogti ir sudegti, žiūrėkite krūvą vaizdo įrašų YouTube)
  • sensta, net jei jie nenaudojami (tačiau tai galima pasakyti apie visus cheminius elementus), po 2 metų Li-Ion baterija praranda apie 20% talpos.

Prototipui visiškai įmanoma išsiversti su aukštos kokybės Ni-MH AA arba AAA baterijomis. Be to, mums nereikia didelių srovių. Vienintelis Ni-MH baterijų trūkumas yra ilgas įkrovimo laikas.

Bendra meteorologinės stoties schema

Apibendrinkime. Čia yra bendra schema, kaip visa tai veikia.



Tęsinys.