Namų oro stotis su arduino belaidžiu jutikliu. Namų oro stotis „Arduino“ ir siunčia duomenis į „Žmonių stebėjimą“. Pereikime prie atnaujinimo

Kažkaip vaikščiodamas po miestą pamačiau atsidariusią naują radijo elektronikos parduotuvę. Eidamas į tai radau daugybę Arduino skydų. Namuose turėjau Arduino Uno ir Arduino Nano ir iškart kilo mintis pažaisti su signalų siųstuvais iš toli. Nusprendžiau nusipirkti pigiausią 433 MHz siųstuvą ir imtuvą:

Signalo siųstuvas.


signalo imtuvas.

Užfiksavus patį paprasčiausią duomenų perdavimo eskizą (pavyzdys paimtas iš čia), paaiškėjo, kad perdavimo įrenginiai gali būti visai tinkami paprastiems duomenims, tokiems kaip temperatūra, drėgmė, perduoti.

Siųstuvas turi šias charakteristikas:
1. Modelis: MX-FS-03V
2. Veikimo spindulys (priklauso nuo blokuojančių objektų buvimo): 20-200 metrų
3. Darbinė įtampa: 3,5 -12V
4. Modulio matmenys: 19*19mm
5. Signalo moduliavimas: AM
6. Siųstuvo galia: 10mW
7. Dažnis: 433MHz
8. Reikalingas išorinės antenos ilgis: 25cm
9. Lengva prijungti (tik trys laidai): DUOMENYS ; VCC ; žemė.

Priėmimo modulio charakteristikos:
1. Darbinė įtampa: DC 5V
2. Srovė: 4mA
3. Darbinis dažnis: 433,92MHz
4. Jautrumas: - 105dB
5. Modulio matmenys: 30*14*7mm
6. Reikalinga išorinė antena: 32 cm.

Interneto platybėse sakoma, kad informacijos perdavimo diapazonas 2Kb/s greičiu gali siekti iki 150m. Pats netikrinau, bet dviejų kambarių bute visur priima.

Namų oro stoties techninė įranga

Po kelių eksperimentų nusprendžiau prie Arduino Nano prijungti temperatūros, drėgmės jutiklį ir siųstuvą.


DS18D20 temperatūros jutiklis yra prijungtas prie arduino taip:

1) GND iki mikrovaldiklio minuso.
2) DQ per ištraukimo rezistorių į žemę ir į Arduino D2 kaištį
3) Vdd iki +5V.

Siųstuvo modulis MX -FS - 03V maitinamas 5 voltais, duomenų išvestis (ADATA) prijungta prie D13 kaiščio.

Prie Arduino Uno prijungiau LCD ekraną ir BMP085 barometrą.


Arduino uno laidų schema

Signalo imtuvas prijungtas prie kaiščio D10.

BMP085 modulis yra skaitmeninis atmosferos slėgio jutiklis. Jutiklis leidžia matuoti temperatūrą, slėgį ir aukštį virš jūros lygio. Ryšio sąsaja: I2C. Jutiklio maitinimo įtampa 1,8-3,6 V

Modulis yra prijungtas prie Arduino taip pat, kaip ir kiti I2C įrenginiai:

  • VCC - VCC (3,3 V);
  • GND-GND;
  • SCL - į analoginį kaištį 5;
  • SDA – į analoginį 4 kaištį.
  • Labai maža kaina
  • Maitinimas ir I/O 3-5V
  • Drėgmės nustatymas 20-80% 5% tikslumu
  • Temperatūros nustatymas 0-50 laipsnių. 2% tikslumu
  • Apklausos dažnis ne didesnis kaip 1 Hz (ne dažniau kaip kartą per 1 sek.)
  • Matmenys 15,5 mm x 12 mm x 5,5 mm
  • 4 smeigtukai su 0,1 colio atstumu tarp kojų

DHT turi 4 kaiščius:

  1. Vcc (3–5 V maitinimas)
  2. Data out – duomenų išvestis
  3. Nėra naudojamas
  4. Generolas

Prisijungia prie D8 Arduino.

Namų oro stoties programinė įranga

Siųstuvo modulis matuoja ir perduoda temperatūrą kas 10 minučių.

Žemiau yra programa:

/* Eskizo versija 1.0 Siųsti temperatūrą kas 10 min. */ #include #include #include #define ONE_WIRE_BUS 2 //Dallas jutiklio prijungimo kaištis OneWire oneWire(ONE_WIRE_BUS); Dalaso temperatūros jutikliai (&oneWire); Įrenginio adresas termometro viduje; void setup(void) ( //Serial.begin(9600); vw_set_ptt_inverted(true); // Reikalingas DR3100 vw_setup(2000); // Nustatyti duomenų perdavimo spartą (bps) sensors.begin(); if (!sensors .getAddress (insideThermometer, 0)); printAddress (insideThermometer); sensors.setResolution (insideThermometer, 9); ) void printTemperature (DeviceAddress deviceAddress) ( float tempC = sensors.getTempC(deviceAddress); //Serial.print ("Temp C : ") ); //Serial.println(tempC); //Duomenų formavimas int numeriui siųsti = tempC; char simbolis = "c"; //Paslaugos simbolis, skirtas nustatyti, ar tai yra jutiklis String strMsg = "z "; strMsg + = simbolis; strMsg += " "; strMsg += skaičius; strMsg += " "; char msg; strMsg.toCharArray(msg, 255); vw_send((uint8_t *)msg, strlen(msg)); vw_wait_tx(); / / Palaukite, kol perkėlimas baigsis delay(200); ) void loop(void) ( for (int j=0; j<= 6; j++) { sensors.requestTemperatures(); printTemperature(insideThermometer); delay(600000); } } //Определение адреса void printAddress(DeviceAddress deviceAddress) { for (uint8_t i = 0; i < 8; i++) { if (deviceAddress[i] < 16); //Serial.print("0"); //Serial.print(deviceAddress[i], HEX); } }

Priimantis įrenginys priima duomenis, matuoja slėgį ir temperatūrą patalpoje bei perduoda juos į ekraną.

#include #include LiquidCrystal lcd(12, 10, 5, 4, 3, 2); #įtraukti dht11 jutiklį; #apibrėžti DHT11PIN 8 #įtraukti #įtraukti BMP085 dps = BMP085(); ilgas Temperatūra = 0, Slėgis = 0, Aukštis = 0; void setup() ( Serial.begin(9600); vw_set_ptt_inverted(true); // Reikalingas DR3100 vw_setup(2000); // Nustatyti priėmimo spartą vw_rx_start(); // Pradėti oro stebėjimą lcd.begin(16, 2); Wire.begin(); delay(1000); dps.init(); //lcd.setCursor(14,0); //lcd.write(byte(0)); //lcd.home(); ) void loop() ( uint8_t buf; // Pranešimų buferis uint8_t buflen = VW_MAX_MESSAGE_LEN; // Buferio ilgis if (vw_get_message(buf, &buflen)) // Jei pranešimas gautas ( // Pradėti analizuoti int i; // Jei pranešimas yra neskirtas mums , išeiti if (buf != "z") ( return; ) char command = buf; // Komanda yra 2 indekse // Skaitinis parametras prasideda nuo 4 indekso i = 4; int skaičius = 0; // Kadangi perdavimas vyksta po ženklą , tuomet reikia konvertuoti simbolių rinkinį į skaičių, while (buf[i] != " ") ( skaičius *= 10; skaičius += buf[i] - "0"; i++; ) dps.getPressure(&Pressure); dps.getAltitude (&Altitude); dps.getTemperature(&Temperature); //Serial.print(command); Serial.print(" "); Serial println(numeris); lcd.print("T="); lcd.setCursor(2,0); LCD spausdinimas(numeris); lcd.setCursor(5,0); lcd.print("P="); lcd.print(Slėgis/133.3); lcd.print("mmH"); lcd.setCursor(0,1); lcd.print("T="); lcd.print(Temperatūra*0,1); lcd.print("H="); lcd.print(jutiklis.drėgmė); lcd.home(); //delay(2000); int chk = sensor.read(DHT11PIN); jungiklis (chk) ( atvejis DHTLIB_OK: //Serial.println("Gerai"); pertrauka; atvejis DHTLIB_ERROR_CHECKSUM: //Serial.println("Patikros sumos klaida"); pertrauka; atvejis DHTLIB_ERROR_TIMEOUT: //Serial.println("Time out klaida"); pertrauka; numatytasis: //Serial.println("Nežinoma klaida"); pertrauka; ) ) )

P.S. Ateityje planuoju pridėti šiuos dalykus:
- drėgmės jutiklis prie siųstuvo, pertvarkykite duomenų perdavimo algoritmą
- jutiklis, skirtas matuoti vėjo greitį ir kryptį.
- pridėkite kitą ekraną prie imtuvo.
- perkelkite imtuvą ir siųstuvą į atskirą mikrovaldiklį.

Žemiau yra nuotrauka, kas nutiko:

Radijo elementų sąrašas

Paskyrimas A tipas Denominacija Kiekis PastabaRezultatasMano užrašų knygelė
perduodanti dalis.
Arduino lenta

Arduino Nano 3.0

1 Į užrašų knygelę
temperatūros jutiklis

DS18B20

1 Į užrašų knygelę
Rezistorius

220 omų

1 Į užrašų knygelę
siųstuvo modulisMX-FS-03V (433 MHz)1 Į užrašų knygelę
radijo imtuvo dalis.
Arduino lenta

Arduino Uno

1 Į užrašų knygelę
Trimerio rezistorius 1 Į užrašų knygelę
Rezistorius

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ų orų 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 raiškos parinkčių, temperatūros matavimo paklaida +/- 2°С, santykinės drėgmės lygio matavimo paklaida +/- 5%, neadekvatus išmatuotų temperatūrų diapazonas (0-50°С).
Taikymas: 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š, savo kvailumu, 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 suardys 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 jo ryšį 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.

Atsargumo priemonės

Atminkite, kad BMP180 reikia prieigos prie atmosferos, kad būtų galima nuskaityti oro slėgį, nedėkite jutiklio į uždarą dėklą. Užteks nedidelės 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 veiksmas: 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 kokio tipo komentarą 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 bus baigtas matavimas: 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ūduriuoti h = dht.readHumidity(); // Nuskaityti 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ę.

Orų stebėjimas yra labai įdomi veikla. Nusprendžiau sukurti savo orų stotį pagal populiariąją .

Orų stoties prototipas atrodo taip:

Mano meteorologinės stoties funkcijos:

  • kambario ir lauko temperatūros matavimas ir rodymas;
  • esamo laiko rodymas (valandos ir minutės);
  • dabartinių mėnulio fazių ir mėnulio dienos rodymas;
  • matavimo rezultatų perkėlimas į kompiuterį nuosekliuoju ryšiu;
  • matavimo rezultatų perdavimas protokolu MQTT naudojant programą kompiuteryje.


šešiakampis
-failas
programinė įranga, skirta (2018 m. gegužės 9 d. versija) – .
Kaip blyksėti šešiakampis-failas į lentą Arduino Aš aprašiau.

Mikrovaldiklis Arduino Nano 3.0

Mano orų stoties „širdis“ yra mikrovaldiklis eBay):

Norėdami valdyti jutiklių rodymą ir užklausą, naudoju laikmatį 1 Arduino, sukeliantys pertraukimus 200 Hz dažniu (periodas – 5 ms).

Rodiklis

Kad būtų rodomi išmatuoti jutiklių rodmenys ir dabartinis laikas, prisijungiau prie Arduino keturių skaitmenų LED indikatorius Foryard FYQ-5643BH su bendrais anodais (sujungiami vienodų visų išlydžių segmentų anodai).
Rodiklį sudaro keturi septynių segmentų skaitmenys ir du skiriamieji (valandų) taškai:

Indikatoriaus anodai per srovę ribojančius rezistorius prijungiami prie gnybtų Arduino:

iškrovimas 1 2 3 4
išvada A3 A2 D3 D9

Segmentiniai katodai, sujungti su kaiščiais Arduino:

segmentas a b c d e f g p
išvada D7 D12 D4 D5 D6 D11 D8 D13

Indikatoriaus segmentas užsidega, jei atitinkamo išlydžio anodas turi didelį potencialą (1), o mažą potencialą (0) prie katodo.

Indikatoriaus informacijai rodyti naudoju dinaminę indikaciją – vienu metu aktyvus tik vienas skaitmuo. Aktyvūs iškrovimai kaitaliojasi 200 Hz dažniu (rodymo laikotarpis 5 ms). Tuo pačiu metu segmentų mirgėjimas akims nepastebimas.

Temperatūros jutiklis DS18x20

Kad būtų galima nuotoliniu būdu matuoti temperatūrą, prijungiau jutiklį , kuris suteikia platų lauko temperatūros matavimų spektrą. Jutiklis prijungtas prie magistralės 1 laidas ir turi tris išėjimus – galią ( VCC), duomenys ( DAT), žemė ( GND):

jutiklio išvestis VCC DAT GND
išvada Arduino 5V A1 GND

Tarp kaiščių VCC ir DATĮtraukiau 4,7k omų traukimo rezistorių.

Norėdami konvertuoti laipsnius Celsijaus į Farenheitą, galite naudoti šią plokštę:

Jutiklį įdėjau už namo lango į plastikinį dėklą iš tušinuko:

\

Profesionaliose oro stotyse naudojamas Stevenson ekranas, apsaugantis termometrą nuo tiesioginių saulės spindulių ir leidžiantis cirkuliuoti orui. Stevenson ekranas):

Slėgio ir temperatūros jutiklis BMP280

Atmosferos slėgiui matuoti tradiciškai naudojami gyvsidabrio ir aneroidiniai barometrai.

V gyvsidabrio barometras atmosferos slėgį subalansuoja gyvsidabrio stulpelio svoris, kurio aukštis naudojamas slėgiui matuoti:

V aneroidinis barometras Naudojamas dėžutės suspaudimas ir ištempimas esant atmosferos slėgiui:

Namų meteorologinėje stotyje atmosferos slėgiui ir kambario temperatūrai matuoti naudoju jutiklį - mažai smd- 2 x 2,5 mm jutiklis, pagrįstas pjezorezistine technologija:

Turgavietėje įsigyta nosinė su jutikliu eBay:

Jutiklis prijungtas prie magistralės I2C(duomenų kontaktas - SDA/SDI, sinchronizavimo kaištis - SCL/SCK):

jutiklio išvestis VCC GND SDI SCK
išvada Arduino 3V3 GND A4 A5

adafruit- failai Adafruit_Sensor.h, Adafruit_BMP280.h, Adafruit_BMP280.cpp.

Atmosferos slėgio vienetai

Jutiklis per funkciją skaitykite Slėgis pateikia atmosferos slėgio reikšmę paskaliais. Pagrindinis atmosferos slėgio matavimo vienetas yra hektopaskalinis(hPa) (1 hPa = 100 Pa), kurio analogas yra nesisteminis blokas " milibaras" (mbar) (1 mbar = 100Pa = 1hPa). Norėdami pakeisti dažniausiai naudojamą nesisteminio slėgio vienetą " gyvsidabrio milimetras" (mm Hg) ir hektopaskaliais, naudojami šie santykiai:
1 hPa = 0,75006 mmHg Art. ≈ 3/4 mm Hg; 1 mmHg =1,3332 hPa ≈ 4/3 hPa.

Atmosferos slėgio priklausomybė nuo aukščio virš jūros lygio

Atmosferos slėgis gali būti pateikiamas tiek absoliučia, tiek santykine forma.
Absoliutus spaudimas QFE(Anglų) absoliutus slėgis) yra tikrasis atmosferos slėgis, neatsižvelgiant į korekciją virš jūros lygio.
Atmosferos slėgis sumažėja maždaug 1 hPa, kai aukštis padidėja 1 m:

Barometrinė formulė leidžia nustatyti barometro rodmenų korekciją, kad būtų gautas santykinis slėgis (mmHg):
$\Delta P = 760 \cdot (1 - (1 \over (10^ ( (0,0081350 \cdot H)) \over (T + 0,00178308 \cdot H) ))))$ ,
kur $T$ yra vidutinė oro temperatūra pagal Rankino skalę, ° Ra, $H$ – aukštis virš jūros lygio, pėdos.
Celsijaus laipsnių konvertavimas į Rankine laipsnius:
$^(\circ)Ra = (^(\circ)C \cdot 1,8) + 491,67 $
Barometrinė formulė naudojama barometriniam niveliavimui - aukščių nustatymui (su 0,1 - 0,5% paklaida). Formulėje neatsižvelgiama į oro drėgmę ir laisvo kritimo pagreičio pokytį su aukščiu. Esant nedideliems aukščio skirtumams, šią eksponentinę priklausomybę galima pakankamai tiksliai apskaičiuoti tiesine priklausomybe.
Santykinis slėgis QNH(Anglų) santykinis slėgis, Q-kodas jūrinis aukštis) yra atmosferos slėgis, pakoreguotas pagal vidutinį jūros lygį. Vidutinis jūros lygis, MSL) (dėl YRA ir 15 laipsnių Celsijaus temperatūra) ir iš pradžių nustatoma atsižvelgiant į aukštį, kuriame yra meteorologinė stotis. Jį galima rasti iš orų tarnybos duomenų, kalibruotų prietaisų rodmenų viešose vietose, oro uoste (iš ataskaitų METARAS), iš interneto.
Pavyzdžiui, netoliese esantis Gomelio oro uostas ( UMGG) Matau tikrąjį orų pranešimą METARAS adresu ru.allmetsat.com/metar-taf/russia.php?icao=UMGG :
UMGG 191800Z 16003MPS CAVOK M06/M15 Q1014 R28/CLRD//NOSIG ,
kur Q1014- spaudimas QNH oro uoste yra 1014 hPa.
Biuletenių istorija METARAS galima rasti adresu aviationwxchartsarchive.com/product/metar.
Normaliam santykiniam oro slėgiui QNH priimtinas 760 mm Hg slėgis. Art. arba 1013,25 hPa (esant 0ºС temperatūrai, esant 45º šiaurinio ar pietų pusrutulio platumos).
Nustačiau aneroidinio barometro slėgį QNH su jautrumo reguliavimo varžtu:

Orų prognozė

Slėgio pokyčių analizė leidžia sudaryti orų prognozę, o jos tikslumas yra kuo didesnis, tuo staigiau keičiasi slėgis. Pavyzdžiui, sena navigatoriaus nykščio taisyklė yra ta, kad slėgio kritimas 10 hPa (7,5 mm Hg) per 8 valandas reiškia, kad pučia stiprus vėjas.

Iš kur kyla vėjas? Oras teka į žemo slėgio zonos centrą, vėjas- horizontalus oro judėjimas iš aukšto slėgio zonų į žemo slėgio sritis (aukštas atmosferos slėgis išspaudžia oro mases į žemo atmosferos slėgio sritis). Jei slėgis labai žemas, vėjas gali pasiekti audra. Tuo pačiu metu rajone sumažintas slėgis (barinė depresija arba ciklonas), šiltas oras kyla aukštyn ir susidaro debesys, kurie dažnai atneša lietus arba sniegas.

Vėjo kryptis meteorologijoje yra kryptis, iš kurios pučia vėjas:

Ši kryptis sumažinama iki aštuonių taškų.

Orų prognozei pagal atmosferos slėgį ir vėjo kryptį dažnai naudojamas algoritmas. Zambretti.

Drėgmės jutiklis

Santykinei oro drėgmei nustatyti naudoju modulį DHT11(pirkta prekyvietėje eBay):

Drėgmės jutiklis DHT11 turi tris išėjimus – galią ( + ), duomenys ( išeiti), žemė ( - ):

jutiklio išvestis + išeiti -
išvada Arduino 5V D10 GND

Norėdami dirbti su jutikliu, naudoju biblioteką nuo adafruit- failai DHT.h, DHT.cpp.

Drėgmė apibūdina ore esančių vandens garų kiekį. Santykinė drėgmė parodo drėgmės santykį ore (procentais), palyginti su didžiausiu galimu kiekiu esamoje temperatūroje. Naudojamas santykinei oro drėgmei matuoti :

Žmogui optimalus oro drėgmės diapazonas yra 40 ... 60%.

Realaus laiko laikrodis

Kaip realaus laiko laikrodį, aš pritaikiau modulį RTC DS1302(turgavietėje pirkta nosinaitė su laikrodžiu eBay):

Modulis DS1302 prijungtas prie autobuso 3 laidas. Norėdami naudoti šį modulį su Arduino sukurta biblioteka arduino_RTC(iarduino.ru).

Lenta su moduliu DS1302 turi penkis kaiščius, kuriuos prijungiau prie lentos kaiščių Arduino nano:

išvada RTC VCC GND RST CLK DAT
išvada Arduino 5V GND D2 D1 D0

Norėdami išlaikyti teisingus laikrodžio rodmenis, kai maitinimas išjungtas, įkišau bateriją į plokštės lizdą. CR2032.

Mano laikrodžio modulio tikslumas nebuvo labai didelis – per keturias dienas laikrodis greitėja maždaug viena minute. Todėl įjungus meteorologinės stoties maitinimą, minutes atstatau į „nulis“, o valandą – iki artimiausio tikslo. Po inicijavimo, kaištis A0 naudojamas duomenims perduoti per nuoseklųjį ryšį.

Duomenų perkėlimas į kompiuterį ir darbas naudojant MQTT protokolą

Duomenims per nuoseklųjį ryšį perkelti į Arduino jungiasi USB-UART konverteris:

Išvada Arduino naudojamas duomenims perduoti formatu 8N1(8 duomenų bitai, be pariteto, 1 stop bitas) esant 9600 bps. Duomenys perduodami paketais, o paketo ilgis yra 4 simboliai. Duomenų perdavimas atliekamas " truputis sprogimo“ režimu, nenaudojant aparatūros nuosekliojo prievado Arduino.

Perduotų duomenų formatas:

Parametras 1 baitas 2-as baitas 3 baitas 4-asis baitas
lauko temperatūra o tarpas arba minusas dešimčių laipsnių arba erdvės laipsnių vienetai
kambario temperatūra i tarpas arba minusas dešimčių laipsnių arba erdvės laipsnių vienetai
Atmosferos slėgis p šimtai mm Art. dešimčių mm Hg vienetų mmHg Su.
santykinė drėgmė h erdvė dešimčių procentų arba vietos procentų vienetų
Dabartinis laikas keliasdešimt valandų valandų vienetai dešimtis minučių minučių vienetais

MQTT

golangas programa – protokolo klientas MQTT, kuri iš orų stoties gautą informaciją siunčia į serverį ( MQTT- brokeris) :

Aptarnavimas leidžia susikurti paskyrą naudojant nemokamą planą " " (ribos: 10 jungčių, 10 Kbps):

Norėdami stebėti orų stoties rodmenis, galite naudoti Android- Priedas :

Mityba

Orų stočiai maitinti naudoju seno mobiliojo telefono įkroviklį. Motorola, išvedant 5 V įtampą iki 0,55 A srove ir prijungiant prie kontaktų 5V(+) ir GND (-):

Taip pat maitinimui galite naudoti 9 V bateriją, prijungtą prie kontaktų VIN(+) ir GND (-).

Meteorologinės stoties darbas

Paleidimo metu jutikliai inicijuojami ir tikrinami.

Nesant jutiklio DS18x20 jei nėra jutiklio, išduodama klaida "E1". - klaida "E3".

Tada pradedamas meteorologinės stoties darbo ciklas:

  • lauko temperatūros matavimas ir rodymas;
  • kambario temperatūros matavimas ir rodymas;
  • atmosferos slėgio ir jo kitimo tendencijų matavimas ir rodymas;
  • santykinės oro drėgmės matavimas ir rodymas;
  • dabartinio laiko rodymas;
  • Mėnulio fazės ir mėnulio dienos rodymas.


Mano orų stoties vaizdo įrašas yra mano svetainėje -kanalas: https://youtu.be/vVLbirO-FVU

Temperatūros rodymas

Matuojant temperatūrą, rodomi du temperatūros skaitmenys, o esant neigiamai temperatūrai – minuso ženklas (su laipsnio simboliu pačiame dešiniajame skaitmenyje);
lauko temperatūrai laipsnio ženklas rodomas viršuje:


kambario temperatūrai - žemiau:

Slėgio rodymas

Matuojant slėgį, rodomi trys slėgio skaitmenys mmHg (su simboliu " P" dešiniajame skaitmenyje):

Jei slėgis smarkiai sumažėjo, tada vietoj simbolio " P" simbolis " rodomas dešiniajame skaitmenyje L"Jei jis smarkiai išaugo - tada" H Pokyčio ryškumo kriterijus yra 8 mm Hg per 8 valandas:

Kadangi mano orų stotis rodo absoliutų slėgį ( QFE), tada rodmenys yra šiek tiek neįvertinti, palyginti su informacija santraukoje METARAS(kuri numato QNH) (2018 m. kovo 28 d. 14 UTC):

Slėgio santykis (pagal ATIS) buvo (1015 USD \daugiau nei 998) = 1 017 USD. Gomelio oro uosto aukštis (ICAO kodas UMGG) virš jūros lygio yra 143,6 m. Temperatūra pagal ATIS buvo 1 ° C.

Mano meteorologinės stoties rodmenys beveik sutapo su absoliučiu slėgiu QFE pagal ATIS!

Maksimalus/min slėgis ( QFE) užfiksavo mano meteorologinė stotis visam stebėjimo laikotarpiui:

Santykinės drėgmės ekranas

Santykinė oro drėgmė rodoma procentais (procentų simbolis rodomas dviem skaitmenimis dešinėje):

Esamo laiko rodymas

Dabartinis laikas rodomas indikatoriuje „HH:MM“ formatu, o skiriamoji dvitaškis mirksi kartą per sekundę:

Mėnulio fazių ir mėnulio dienos rodymas

Pirmieji du indikatoriaus skaitmenys rodo dabartinę mėnulio fazę, o kiti du - dabartinę mėnulio dieną:

Mėnulis turi aštuonias fazes (duoti angliški ir rusiški (mėlyna – netikslūs) pavadinimai):

Ant fazės indikatorių rodomos piktogramos:

fazė piktograma
augantis pjautuvas (pusmėnulis)
nykstantis pusmėnulis (pusmėnulis)

Duomenų perkėlimas į kompiuterį

Jei prijungiate oro stotį su USB-UART keitiklis (pavyzdžiui, remiantis mikroschema CP2102) sujungtas su USB-kompiuterio prievadą, tada terminalo programa galėsite stebėti meteorologinės stoties perduodamus duomenis:

Sukūriau programavimo kalba golangas programa, kuri veda meteorologinių stebėjimų žurnalą ir siunčia duomenis tarnybai ir galima apžiūrėti Android- išmanusis telefonas naudojant programą :

Pagal meteorologinių stebėjimų žurnalą galite, pavyzdžiui, sudaryti atmosferos slėgio pokyčių grafiką:
grafiko su pastebimu slėgio minimumu pavyzdys


grafiko su šiek tiek padidėjusiu slėgiu pavyzdys

Planuojami patobulinimai:

  • pridedant vėjo krypties ir greičio jutiklius

Meteorologinėse stotyse vėjo greičiui matuoti naudojamas trijų puodelių anemometras (1), o vėjo krypčiai – vėtrungė (2):

Taip pat naudojamas vėjo greičiui matuoti. kaitinamųjų siūlų karštos vielos anemometrai(Anglų) karšto laido anemometras). Kaip šildomą vielą galite naudoti volframo siūlą iš elektros lemputės su išdaužytu stiklu. Pramoniniuose karšto laido anemometruose jutiklis paprastai yra ant teleskopinio vamzdžio:

Šio įrenginio veikimo principas yra tas, kad šiluma iš šildymo elemento pašalinama dėl konvekcijos oro srautu – vėju. Šiuo atveju kaitinimo siūlelio atsparumą lemia siūlelio temperatūra. Kaitinamojo siūlelio varžos $R_T$ kitimo nuo temperatūros $T$ dėsnis yra toks:
$R_T = R_0 \cdot (1 + (\alpha \cdot (T - T_0)))$ ,
kur $R_0$ yra kaitinimo siūlelio varža esant temperatūrai $T_0$, $\alpha$ yra atsparumo temperatūros koeficientas (volframo $\alpha = 4,5\cdot(10^(-3)) (^(\circ)(C^) ( -1))))$).

Keičiantis oro srauto greičiui, temperatūra kinta esant pastoviai kaitinimo siūlelio srovei (anemometras su nuolatine srove, angl. CCA). Jei kaitinimo elemento temperatūra yra pastovi, srovė per elementą bus proporcinga oro srauto greičiui (pastovios temperatūros anemometras, angl. CTA).

Tęsinys



„Taigi, iš karto susitarkime: nekursite filmo Holivudui. Net 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, „stovėjau 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 visiškai 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

Mes mokysimės 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 popieriaus" 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, kuris vakarais kniedė savo augintinio projekto amatus „daiktų internetui“, turėtų žinoti, kad kuria prototipą, pusgaminį. Tai labai toli nuo įprasto pramoninio produkto lygio. Taigi 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 remiantis 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 iš kompiuterio ir iš mobiliojo įrenginio.


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 reikšmes 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, kartoju, tai nesvarbu, nes prieš save turime prototipą, o 5% drėgmės išsibarstymas nieko svarbaus mūsų gyvenime neturės įtakos.


Sistemos architektūra, aparatinė ir programinė įranga turėtų 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 siekiant juos nutraukti.


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 yra 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 beveik neturintis 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 gaminio aprašymą! Kitu atveju pirkite vieną anteną.


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


Gatvėje, kaip žinia, temperatūra gali pasiekti neigiamas vertes, todėl DHT11 jutiklis netinka, bet DHT22 kaip tik.



DHT22 / AM2302 specifikacijos:

  • Maitinimas nuo 3,3 V iki 5 V, rekomenduojamas 5 V
  • didžiausias 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
  • suvartojimas ne daugiau kaip 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 naudokite „pliką“ mazgą ant Atmel ATmega328 mikroprocesoriaus (jo nenaudojome)
  • 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 planuota 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+ reikia 3,3 V maitinimo, 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.
  • tie, kurie yra pigūs, yra pagaminti be apsaugos ir yra nesaugūs (trumpojo jungimo ar iškrovos metu jie gali sprogti ir sudegti, žiūrėkite daugybę 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 diagrama, kaip visa tai veikia.



Tęsinys.

Laisvalaikiu ir šį kartą rašiau instrukcijas, kaip pasidaryti nedidelę meteorologinę stotelę. Jis veiks kaip laikrodis su data ir parodys temperatūrą kambaryje ir už jos ribų. Kaip pagrindinį valdiklį naudosime „Arduino UNO“, tačiau tiks ir kita plokštė su „Atmega328p“. Ekranui naudojame WG12864B grafinį ekraną. Taip pat sujungsime du ds18b20 temperatūros jutiklius. Vienas yra patalpoje, kitas išnešamas į lauką. Pradėkime.

Gaminant naminius gaminius mums reikia:

Arduino UNO (arba bet kuri kita su Arduino suderinama plokštė)
- WG12864B grafinis ekranas
- temperatūros jutiklis ds18b20, 2 vnt
- Maitinimas 6 - 12 V
- Rezistoriai 4,7 Kom 0,25 W, 2 vnt.
- Rezistoriai 100 omų 0,25 W
- Baterijų skyrius 4 AAA "mažojo pirštelio" baterijoms
- Dėžutė iš SEGA konsolės kasetės
- Izoliacinė juosta
- Jungiamieji laidai
- Grandinės plokštė
- Mygtukai
- Kanceliarinis peilis
- lituoklis
- Lydmetalis, kanifolija
- Dvipusė juosta

1 veiksmas Paruoškite WG12864B3.
Anksčiau su ekranais nedirbusius gali gąsdinti daugybė iš pažiūros vienodų ekranų modifikacijų. Truputį paaiškinsiu. Dauguma tokio tipo ekranų veikia su ks0107/ks0108 lustais. Visus ekranus galima suskirstyti į 4 tipus:

A variantas: HDM64GS12L-4, Crystalfontz CFAG12864B, Sparkfun LCD-00710CM, NKC Electronics LCD-0022, WinStar WG12864B-TML-T

Pasirinkimas B: HDM64GS12L-5, LUMEX LCM-S12864GSF, FUTURLEC BLUE128X64LCD, AZ DISPLAYTECH 64128A BC, ADAFRUIT GLCD, DATAVISION DG12864-88, TOPWAY LM12864LDW, DIGITRON SG12864J4, QY-12864F, TM12864J4, QY-12864F, TM12864F, TM12864F

C variantas: Shenzhen Jinghua Displays Co Ltd. JM12864

D variantas: Wintek- Cascades WD-G1906G, Wintek - GEN/WD-G1906G/KS0108B, Wintek/WD-G1906G/S6B0108A, TECDIS/Y19061/HD61202, Varitronix/MGLS191264/

Jie atrodo beveik vienodai. Tačiau jungties kaiščiai skiriasi. Aš pasirinkau ir jums rekomenduoju WG12864B3 V2.0, bet jei ekranas buvo kitoks arba tiesiog neturite jo po ranka, galite lengvai tai išsiaiškinti naudodami lentelę:

Trumpos specifikacijos:

Internete yra daug įvairių prisijungimo schemų ir atrodo, kad viskas veikia. Reikalas tas, kad yra ne tik skirtingi ekranai, bet ir du jų prijungimo būdai: nuoseklus ir lygiagretus. Naudojant nuoseklųjį prievadą, mums reikia tik 3 mikrovaldiklio išėjimų. Su lygiagrečiu minimumu 13. Pasirinkimas šiuo atveju akivaizdus, ​​Arduino išvadų šiaip ar taip nėra. Lygiagrečiam prijungimui prijungimo schema yra tokia:

Nuosekliajam ryšiui, kurį naudosime, schema yra tokia:

WG12864B – Arduino UNO 1 (GND) – GND 2 (VCC) – +5V 4 (RS) – 10 5 (R/W) – 11 6 (E) – 13 15 (PSB) – GND 19 (BLA) – per rezistorių 100 omų – ​​+5V 20 (BLK) – GND

Norint sureguliuoti kontrastą, ekrane turi būti potenciometras. Yra ekranų be jo, bet dabar tai reta:

100 omų rezistorius reikalingas, kad 5 voltų įtampa netyčia nesudegintų foninio apšvietimo diodų.

2 veiksmas.
Korpusui paimkite dėžutę iš Sega priedėlio kasetės. Jei šios dėžutės po ranka nerandate, galite naudoti kitą dėklą. Svarbiausia, kad jame tilptų ekranas ir „Arduino“.

Nupjaukite permatomą plėvelę, esančią dėžutės viršuje, kad neliktų gabalėlių:

Tada naudodami kanceliarinį peilį išpjaukite ekranui 37x69 langą.

Kitoje pusėje, išilgai išpjovos krašto, klijuojame dvipusę juostą, geriausia juodą:

Nuimame apsauginį popierių nuo lipnios juostos ir klijuojame ekraną:

Iš išorės jis turėtų atrodyti taip:

Po ekranu, taip pat ant dvipusės juostos, montuojame Arduino, prieš tai padarę USB prievado ir maitinimo lizdo išpjovas:

Abiejose dėžutės pusėse turi būti padarytos išpjovos Arduino lizdams, kad ji galėtų laisvai užsidaryti:

3 žingsnis Temperatūros jutikliai.
Naudosime DS18B20 skaitmeninius temperatūros jutiklius. Naudodami juos gauname didesnį matavimo tikslumą, paklaidą ne daugiau kaip 0,5 °C, plačiame temperatūrų diapazone -55 ... + 125 °C. Be to, jutiklis yra skaitmeninis ir visus skaičiavimus atlieka pats, o Arduino tiesiog gauna jau paruoštus rodmenis. Jungdami šį jutiklį nepamirškite apie 4,7KΩ ištraukiamąjį rezistorių tarp DQ ir VDD kaiščių. Taip pat galimi keli prijungimo variantai. Su išorine galia, mano nuomone, geriausias pasirinkimas, mes jį panaudosime:

Su bet kokia maitinimo parinktimi jutikliai yra prijungti lygiagrečiai:

Patalpų temperatūros jutiklį pastatysime ant nedidelės lentos kartu su dviem mygtukais, kuriais nustatysime laikrodžio laiką ir datą:

Mes prijungiame bendrą laidą nuo abiejų mygtukų prie GND, laidą nuo pirmojo mygtuko prijungiame prie A0, nuo antrojo prie A1.
Užfiksuojame ant dvipusės juostos šalia „Arduino“:

Jutiklį, kuris turėtų būti patalpintas už patalpos ribų, geriau rinktis metaliniame, dulkėms nepralaidžiame korpuse:

Apskaičiuokite reikiamo ilgio laidą, kad galėtumėte pakabinti jutiklį už lango, svarbiausia, kad jis būtų ne didesnis kaip 5 metrai, jei reikia ilgesnio ilgio, turėsite sumažinti traukos vertę. aukštyn rezistorius.

Mes prijungiame laidą iš abiejų jutiklių DQ duomenų magistralės prie Arduino 5 kaiščio.
Vdd - +5 Arduino.
GND – GND Arduino.

4 žingsnis Mityba.
Maitinti galite naudoti maitinimo šaltinį, kurio įtampa yra nuo 6 iki 12 voltų. Maitinimo blykstės laido gale prilituokite kištuką, kuris tinka Arduino maitinimo lizdui:

Arba į dėklą galite įdėti baterijų skyrių keturioms „AAA“, „mažojo pirštelio“ baterijoms. Ir prijunkite teigiamą laidą nuo įlankos prie Vin Arduino, o neigiamą laidą - prie GND.

5 žingsnis Paruoškite programavimo aplinką.
Pirmiausia turite atsisiųsti ir įdiegti „Arduino IDE“ iš oficialios svetainės

Taip pat pridėkite prie dviejų eskizui reikalingų bibliotekų. OneWire – reikalingas ryšiui su ds18b20 jutikliais:

U8glib – naudojamas informacijai rodyti ekrane:

Bibliotekų atsisiuntimas. Tada išpakuojame archyvus, o archyvų turinį perkeliame į aplanką „bibliotekos“, esantį aplanke su įdiegta Arduino IDE. Taip pat galite pridėti bibliotekų naudodami „Arduino IDE“. Norėdami tai padaryti, nesupakavus archyvuose, paleiskite "Arduino IDE", pasirinkite eskizą - "Connect" biblioteką iš meniu. Pačiame išskleidžiamojo sąrašo viršuje pasirinkite elementą Add.Zip Library. Nurodykite atsisiųstų archyvų vietą. Atlikę visus veiksmus, turite iš naujo paleisti Arduino IDE.

6 žingsnis redagavimo eskizas.
Temperatūros jutikliai veikia naudojant vieną vielos protokolą ir turi unikalų kiekvieno įrenginio adresą - 64 bitų kodą. Nerekomenduojama prie eskizo pridėti jutiklių paieškos komandų. Nereikia įkelti Arduino kiekvieną kartą, kai suserga jutikliai. Todėl pirmiausia, viską surinkę, užpildome Arduino eskizą, esantį meniu Failas - Pavyzdžiai - Dalaso temperatūra - OneWireSearch. Tada paleiskite įrankius - uosto monitorių. Arduino turėtų rasti mūsų jutiklius, parašyti adresus ir temperatūros rodmenis. Šiuos adresus reikia įrašyti arba tiesiog kur nors nukopijuoti. Dabar atidarykite garsiakalbį ard_tic_tak_wg12864b_2_x_term_serial ir ieškome eilučių:

Byte addr1=(0x28, 0xFF, 0x75, 0x4E, 0x87, 0x16, 0x5, 0x63);// vidinio baito adresas addr2=(0x28, 0xFF, 0xDD, 0x14, 0xB4, 0x16,07 jutiklis);

Tinkamos jutiklių vietos adresus pakeičiame jų adresais.
Mūsų laikrodis nenaudoja RTC modulio (realaus laiko laikrodis), todėl būtina ištaisyti laikrodį. Kad būtų patogiau, išimkite eilutę (ekrane pasirodys sekundės):

//u8g.setprinpos(44, 50); u8g.print (SEK); // atitraukite sekundes, kad kontroliuotumėte potėpio teisingumą

Nustatykite teisingą laiką naudodami Uosto monitorių. Norėdami tai padaryti, atidarykite prievado monitorių, palaukite, kol baigsis pradiniai temperatūros matavimai, ir įveskite dabartinę datą ir laiką formatu „diena, mėnuo, metai, valandos, minutės, sekundės“. Nėra tarpų, numeriai yra atskirti kableliais arba taškais.

Jei laikrodis skubėti, pakeiskite vertę didesniam, rekomenduoju eksperimentuoti su 100 vienetų žingsniu. Jei VVG turėtų būti sumažintas eilutėje:

Jei (mikro () - prevmicro> 494000) (// pakeisti į kitą, kad koregavimas būtų 500 000

Eksperimentuojama nustatant skaičių, kuriuo eina laikrodis, yra gana tikslus. Norint nustatyti judesio tikslumą, reikia sekundžių išvesties. Po tikslaus numerio kalibravimo sekundžių galima komentuoti ir taip pašalinti iš ekrano.
Įkelti eskizą.