Kako postaviti pametne telefone i računala. Informativni portal
  • Dom
  • TV (Smart TV)
  • Barometar s naprednim funkcijama. Senzor atmosferskog tlaka BMP085 i Arduino

Barometar s naprednim funkcijama. Senzor atmosferskog tlaka BMP085 i Arduino

Uvod

Što se može prikazati na ekranu u dva reda osim "Hello world!"? Zašto ne prikazati temperaturu, vlažnost i tlak?

Senzori ponuđeni kao vodič za arduino (DHT11, DHT22) pokazuju temperaturu i vlažnost zraka. U obrazovne svrhe (za sveučilište) također je bilo potrebno pratiti pritisak. Naravno, odjel ima barometar, ali zašto ne izgraditi vlastiti? Osim toga, možete dodatno akumulirati očitanja u automatskom načinu rada, a ovo je dobro iskustvo u učenju arduina.

Na ovaj ili onaj način, komponente su naručene iz Kine i ovaj uređaj je sastavljen.

Potrebne komponente

USB-UART je korišten za slanje skice na arduino. Također možete koristiti Raspberry Pi ili računalo s COM priključkom.

Dijagram povezivanja za firmware i programski kod

USB-UART je došao iz Kine sa kompletom ožičenja:

Bilo ih je sasvim dovoljno. Ostavio sam jumper na 3,3 volta, unatoč činjenici da se moja verzija arduina napaja s 5 volti.

UART - Arduino
5v - VCC
TXD - RXD
RXD - TXD
GND - GND
CTS - DTR (opcionalno, meni nije radilo, možda zato što je napon signala ostao 3,3 V)

Ako ne spojite DTR, nakon slanja firmware-a potrebno je ponovno pokrenuti arduino pomoću ugrađenog gumba, aktivna razmjena podataka započet će u oba smjera (kao što svjedoče LED diode na USB-UART-u), nakon što se firmware završi uspješno učitan, sam će se ponovno pokrenuti.

Potrebne biblioteke trećih strana:

Sam kod, s komentarima iz primjera (u slučaju da netko treba nešto promijeniti).

Kodirati

#uključi #include "SparkFunBME280.h" #include "Wire.h" #include "SPI.h" #include //Globalni senzorski objekt BME280 mySensor; LiquidCrystal_I2C lcd(0x3F,16,2); //Prikaži adresu, u mom slučaju 0x3F void setup() ( lcd.init(); lcd.backlight(); //***Postavke upravljačkog programa***************** ***************// //commInterface može biti I2C_MODE ili SPI_MODE //navedite chipSelectPin koristeći imena pinova za arduino //navedite I2C adresu. Može biti 0x77(zadano) ili 0x76 //Za I2C, omogućite sljedeće i onemogućite SPI odjeljak mySensor.settings.commInterface = I2C_MODE; mySensor.settings.I2CAddress = 0x76; //Adresa senzora, u mom slučaju nije standardna //Za SPI omogućite sljedeće i onemogućite I2C odjeljak // mySensor.settings.commInterface = SPI_MODE; //mySensor.settings.chipSelectPin = 10; //***Postavke rada************************* ****// //renMode može biti: // 0, način mirovanja // 1 ili 2, prisilni način rada // 3, normalni način rada mySensor.settings.runMode = 3; //U primjeru predlažu korištenje prisilnog načina rada , ali kada se ažurira jednom u sekundi, normalni način rada //tStandby može biti: // 0, 0,5 ms // 1, 62,5 ms // 2, 125 ms // 3, 250 ms // 4, 500 ms // 5, 1000 ms // 6, 10 ms // 7, 20 ms mySensor.settings.tStandby = 5; //Očito, češće nije potrebno //filtar može biti isključen ili broj FIR koeficijenata za upotrebu: // 0, filter isključen // 1, koeficijenti = 2 // 2, koeficijenti = 4 // 3, koeficijenti = 8 // 4 , koeficijenti = 16 mySensor.settings.filter = 0; //tempOverSample može biti: // 0, preskočeno // 1 do 5, oversampling *1, *2, *4, *8, *16 mySensor.settings.tempOverSample = 1; //pressOverSample može biti: // 0, preskočeno // 1 do 5, oversampling *1, *2, *4, *8, *16 redom mySensor.settings.pressOverSample = 1; //humidOverSample može biti: // 0, preskočeno // 1 do 5, preduzorkovanje *1, *2, *4, *8, *16 redom mySensor.settings.humidOverSample = 1; //Pozivanje .begin() uzrokuje učitavanje postavki mySensor.begin(); ) void loop() ( //Slova se mogu prikazati jednom, a zatim se očitanja mogu promijeniti, ali očitanja mogu pomaknuti liniju kada se mijenja broj značajnih znamenki. lcd.setCursor(0,0); lcd.print( "H="); lcd .print((uint8_t)mySensor.readFloatHumidity()); lcd.print("%"); lcd.print(" T="); lcd.print(mySensor.readTempC()); lcd.setCursor(13,0); lcd.print(" P:"); lcd.setCursor(0,1); int mmH=mySensor.readFloatPressure()/133; lcd.print(mmH); lcd.print( "mmH "); lcd. print(mySensor.readFloatPressure()); lcd.setCursor(14,1); lcd.print("Pa"); kašnjenje(1000); )


Adresa senzora se može pogoditi, postoje samo dvije.

Možete vidjeti kako saznati adresu vašeg zaslona. Ovisno o mikro krugu, postoje dvije oznake.

U ovom slučaju:


I adresa će biti 0x3F jer A0 - A2 otvoreno:

LED dioda koja je zaokružena ovalom može se bolje odlemiti.

Dijagram povezivanja

Otpornik je odabran kao polovica otpora senzora (između VVC i GND) tako da je pad napona na njemu bio 1,7 volti. Krug se također može napajati iz RAW ulaza, s različitim naponom (na primjer, iz krunice).

Fotografija pokazuje da, radi kompaktnosti, možete napajati senzor i zaslon s druge igle. Također možete vidjeti granu narančasto-žutog para žica; na njima visi otpornik od 100 Ohma kako bi se smanjila svjetlina pozadinskog osvjetljenja (možete ostaviti kratkospojnik, ali će vam ozlijediti oči).

U mom slučaju sve se napaja iz starog kompjuterskog napajanja. Može se napajati putem USB-a. Sve komponente su zalijepljene Moment ljepilom koje je bilo pri ruci.

Poanta

1602 pojavio se na radnom mjestu, pričvršćen za stol, koji pokazuje tlak, vlagu, temperaturu. Arduino se može ponovno flashirati bez uklanjanja (možda će postati puzajuća linija).

Pozdrav kolege!
Jer Zimi vrijeme uglavnom nije pogodno za letenje, što znači da ima puno slobodnog vremena, koje bi bilo lijepo nečim okupirati da se mozak ne osuši od besposlice. Nedavno sam odlučio svladati temu žestokih holivara i burnih rasprava, a to je: mikrokontroler Atmega328 u Arduino izvedbi.
Toplo vas molim da ne započnete raspravu o samoj Arduini, na internetu postoji gomila informacija o svim njenim prednostima i manama.
Dakle, uzimajući u obzir specifičnosti stranice, mislim da nije baš tema za razgovor o "pametnoj kući", pa ćemo izgraditi barometarski visinomjer s troznamenkastim sedmosegmentnim LED zaslonom temeljenim na Arduinu.

Više detalja?


Odmah ću reći da se ne pretvaram da sam originalan ili inovativan; na Internetu ima puno sličnih projekata. Ali nisam pronašao ništa slično na ovom resursu pretraživanjem, pa sam odlučio objaviti ga, u slučaju da nekome bude korisno.
Opet, sam sam napisao kod, pa ako su sve indijske stvari, ne sudite prestrogo =) Još uvijek samo učim. Zadnji put sam programirao kontrolere na 4. godini instituta prije više od 10 godina =) Kompetentna i konstruktivna kritika je dobrodošla!
Pokušat ću jasno i detaljno objasniti kako sastaviti takav uređaj; mislim da se s tim može nositi osoba s gotovo bilo kojim stupnjem obuke.

Glavna prednost ovog uređaja je njegova cijena. Čak iu današnjem životu i tečaju možete potrošiti 350 rubalja, što općenito nije novac. Također će vam trebati ravne ruke i sposobnost rukovanja lemilom.

Funkcije uređaja:
- Mjerenje trenutne visine i prikaz na LED displeju.
- Memoriranje maksimalne vrijednosti nadmorske visine koja se dogodila otkako je napajanje uključeno.
- Prikaz maksimalne visine pritiskom na tipku.
- Snimanje maksimalne vrijednosti visine u trajnu memoriju (EEPROM) kontrolera (sprema se nakon isključivanja).
- Očitavanje pohranjene maksimalne visine iz EEPROM-a i prikazivanje na zaslonu.

Nulta referentna točka je nadmorska visina na kojoj je uređaj uključen.

Što će vam trebati (u zagradama su ključne riječi za pretragu na svim vrstama ebaya i sl.)
- Arduino mikrokontroler, u principu, gotovo svaki će poslužiti ako se kod prilagodi, ali sve je sastavljeno i testirano na bazi (Arduino Nano).

- senzor barometarske visine s I2C sabirnicom (BMP085).

- troznamenkasti LED zaslon sa sedam segmenata sa zajedničkom anodom (7-Segment LED Display).
- žice da sve to povežem u jednu cjelinu, koristio sam gotove s konektorima, ali to uopće nije potrebno (Dupont Wire).

- gumb, bilo koji bez popravljanja položaja je dovoljan (taktni prekidač). Na primjer ovo:
- otpornik od 1KOhm do 10KOhm.
- tri otpornika od 100 Ohma.
- lemilo sa svim gobulama i mogućnošću korištenja.
- Arduino softver.

izborno:
- razvojna ploča za ožičenje zaslona.

Za one koji su potpuno izvan teme. Prije nego što pokušate sastaviti uređaj i zadubiti se u kod, toplo preporučujem da posjetite i pročitate nekoliko izvora:
Uvod u temu, jednostavni primjeri.
O povezivanju sedmosegmentnog prikaza s primjerima.
Opis senzora, primjeri, biblioteke.
Neće oduzeti puno vremena, uvelike će povećati vaše razumijevanje =)

Prvo, malo o zaslonu.
Sedmosegmentni LED zaslon sa zajedničkom anodom je sklop LED dioda poput ovoga (zaokruženo crvenom bojom na slici):
Ako pažljivije pogledate dijagram, postat će vam jasno da samo jedno od pražnjenja može svijetliti u jednom trenutku, tj. Za prikaz troznamenkastog broja potrebno je redom paliti i gasiti svaku znamenku, i to vrlo brzo. Stoga će brojevi treperiti bez obzira na sve, glavna stvar je da je to treperenje dovoljno često i da ga oko ne percipira kao treperenje. To znači da će Arduino također raditi kao kontroler za ovaj zaslon, u biti crtajući redom brojeve koji čine broj jednak trenutnoj visini.
Odmah da rezerviram: možete kupiti gotovo rješenje s ugrađenim kontrolerom, ali košta 5 puta više, a nisam naišao na odgovarajuću implementaciju prilikom pretraživanja, jer... Baš sam htio 3-bitni, ali sve više je 4-bitnih u prodaji.
Inače, s obzirom da je displej troznamenkasti, maksimalna visina koju može prikazati = 999m. U principu, uređaj se može lako prilagoditi za 4-znamenkasti zaslon, ali program će morati biti malo modificiran. Svatko tko razumije kod za 3 znamenke može ga lako prilagoditi za 4 znamenke.
Kao rezultat toga, usprkos problemima koji su se pojavili s tim istim titranjem, uspjeli smo postići koliko-toliko prihvatljive rezultate, o čemu više u nastavku, jer Problemi su nastali zbog senzora visine.
Više detalja o senzoru.
Senzor je barometarski, tj. određuje promjene nadmorske visine na temelju promjena atmosferskog tlaka. Zapravo, senzor mjeri samo atmosferski tlak; kod knjižnice za senzor odgovoran je za izračun nadmorske visine kao funkcije tlaka. U ovom slučaju senzor ima ugrađeni ADC i I2C sučelje, tj. Daje izmjerenu vrijednost u digitalnom obliku, što je nedvojbeno plus. Za rad sa senzorom postoji gotova biblioteka. Koristio sam prvu verziju, zahtijeva manje resursa i lakše ju je integrirati u kod. Funkcionalnost knjižnice omogućuje podešavanje točnosti mjerenja na ljestvici od 0 - najmanja točnost, do 3 - najveća točnost (vidi kod). Iako, da budem iskren, nisam primijetio veliku razliku između razina iznad 0. Pogreška mjerenja je oko 1 metar, što je općenito sasvim prihvatljivo. Rezultat mjerenja je apsolutna nadmorska visina iznad razine mora pri normalnom atmosferskom tlaku. Ali ovo je jednostavno potpuno nezanimljivo. S druge strane, pomoću Arduina i jednostavnih matematičkih operacija možete jednostavno izračunati relativnu visinu, što je i učinjeno.
Ali tu je bila i mala sitnica: prozivanje senzora standardnom funkcijom traje dosta dugo, a s obzirom na to da je Arduino također sedmosegmentni kontroler za prikaz, dobiveni su prilično smiješni specijalni efekti, tj. prilikom prozivanja senzora ispis na displeju je prestao sam od sebe pa je broj koji je u tom trenutku bio prikazan svijetlio nešto duže od ostalih. Rezultat je bio ovaj tip girlande od tri elementa.
U konačnici, nakon igranja s kašnjenjima i odabirom optimalnog perioda anketiranja senzora, uspjeli smo postići gotovo potpuni izostanak treperenja. Štoviše, nema potrebe za ispitivanjem senzora u svakom programskom ciklusu; visina se i dalje mijenja ograničenom brzinom. Ali titranje prve znamenke zbog greške i prečestog prozivanja senzora ne izgleda lijepo.
U principu, kad bih imao bolju vještinu, mogao bih ponovno napisati biblioteku senzora, ali još nisam spreman. I u ovoj izvedbi u potpunosti ispunjava svoje funkcije, ostalo je tekst.
Izlaz brojeva je prebačen na prekid, treperenje je eliminirano, skica je ažurirana.
Ovdje ću vjerojatno završiti svoj kratki izlet u elemente uređaja i prijeći na montažu.

Dijagram povezivanja elemenata uređaja (može se kliknuti):


Očekujući pitanja iz serije "što, nisi mogao nacrtati normalan dijagram?!" Reći ću da bih mogao, ali za neupućene mislim da će ova opcija biti lakša za razumijevanje, ali za upućene to nije važno, pa se dijagram čita normalno. Pronašao sam pinout od sedam segmenata samo za verziju s četiri bita; verzija s tri bita razlikuje se jednostavno po odsutnosti 6. noge.

Što se tiče napajanja uređaja: Arduino u izvornom obliku može normalno preživjeti od 7V do 16V, u ekstremnim slučajevima od 6V do 20V. No, s obzirom da sam imao kineskog klona, ​​nisam pokušavao nikakve gadne eksperimente, ali LiPo 3S baterija radi bez problema.
Preporučljivo je zapakirati senzor na takav način da je pristup zraku slobodan, ali u isto vrijeme isključiti izravan protok zraka u rupu u senzoru, na primjer, prekriti ga pjenastom gumom.
Preporučujem uklanjanje RX i TX LED dioda s Arduino ploče, jer... spojeni su paralelno na digitalne pinove 0 i 1, zbog čega će segmenti spojeni na te pinove svijetliti slabijom svjetlinom.

BMP085 je senzor za praćenje barometarskog tlaka (osim toga, prati i temperaturu).

Senzor se koristi u mnogim projektima, uključujući one koji koriste Arduino, jer praktički nema analoga. Osim toga, također je jeftin. Prvo pitanje koje se postavlja je: zašto bi itko mjerio atmosferski tlak? Dva su razloga za to. Prvi je kontrolirati visinu iznad razine mora. Kako se nadmorska visina povećava, tlak pada. Vrlo prikladno za planinarenje, kao alternativa GPS navigatorima. Osim toga, atmosferski tlak se koristi za prognozu vremena.

BMP085 je svojedobno zamijenjen senzorom BMP180, koji se spaja na Arduino i druge mikrokontrolere na isti način kao i njegov prethodnik, ali je manji i košta manje.

Tehničke karakteristike BMP085

  • Raspon osjetljivosti: 300-1100 hPa (9000 m - 500 m nadmorske visine);
  • Rezolucija: 0,03 hPa / 0,25 m;
  • Radna temperatura -40 do +85°C, točnost mjerenja temperature +-2°C;
  • Povezivanje putem i2c;
  • V1 na modulu koristi napajanje od 3,3 V i logičko napajanje;
  • V2 na modulu koristi 3,3-5V napajanje i logičko napajanje;

Nakon ponovnog pokretanja Arduino IDE, možete pokrenuti prvi primjer skice, čiji je kod naveden u nastavku:

#uključi <Wire.h>

#include <Adafruit_Sensor.h>

#include <Adafruit_BMP085_U.h>

Adafruit_BMP085_Unified bmp = Adafruit_BMP085_Unified(10085);

void setup (void)

Serial.begin(9600);

Serial.println("Test senzora tlaka"); Serial.println("");

/* Inicijaliziraj senzor */

ako(!bmp.begin())

/* Ako se pojavi poruka: "Došlo je do problema s otkrivanjem BMP085 ...",

Provjerite je li senzor ispravno spojen */

Serial.print("Ooops, nije otkriven BMP085 ... Provjerite svoje ožičenje ili I2C ADDR!");

senzori_događaj_t događaj;

bmp.getEvent(&event);

/* prikaz rezultata (barometarski tlak se mjeri u hPa) */

ako (događaj.pritisak)

/* Prikaz atmosferskog tlaka u hPa */

Serial.print("Tlak: "); Serijski.ispis(događaj.pritisak); Serial.println("hPa");

Otvorite prozor serijskog monitora (brzina prijenosa - 9600). Naša bi skica trebala dati podatke o tlaku u hPa (hektopaskalima). Funkcionalnost senzora možete provjeriti pritiskom prsta na senzor. Na slici su prikazane vrijednosti tlaka nakon pritiska prstom.


Mjerenje nadmorske visine

Vjerojatno znate da tlak pada s povećanjem nadmorske visine. To jest, možemo izračunati visinu znajući tlak i temperaturu. Opet ćemo matematiku ostaviti iza scene. Ako ste zainteresirani za izračune, možete ih pogledati na ovoj stranici Wikipedije.

U donjem primjeru koristit će se dodatna biblioteka Arduino. Da biste izračunali visinu pomoću senzora BMP085, ažurirajte funkciju "void loop()". Potrebne izmjene na skici date su na skici ispod. Kao rezultat toga, dobit ćete vrijednost temperature na temelju razine tlaka i vrijednosti temperature.

/* kreiraj novi događaj za senzor */

senzori_događaj_t događaj;

bmp.getEvent(&event);

/* prikaz rezultata (barometarski tlak u hPa) */

ako (događaj.pritisak)

/* prikaz atmosferskog tlaka u hPa */

Serial.print("Tlak: ");

Serijski.ispis(događaj.pritisak);

Serial.println("hPa");

/* da biste izračunali visinu s određenom točnošću, morate znati *

* prosječni tlak i temperatura okoline

*u stupnjevima Celzijusa u vrijeme očitavanja*

* ako nemate ove podatke, možete koristiti "default value"

* što je jednako 1013,25 hPa (ova vrijednost je definirana kao

*SENSORS_PRESSURE_SEALEVELHPA*

* u datoteci sensors.h). Ali rezultati neće biti točni*

*potrebne vrijednosti možete pronaći na stranicama s prognozom temperature*

*ili na resursima informacijskih centara u velikim zračnim lukama*

*na primjer, za Pariz, Francuska, možete pronaći trenutnu prosječnu vrijednost tlaka*

* putem web stranice: http://bit.ly/16Au8ol */

/* dobivanje trenutne vrijednosti temperature od BMP085 senzora */

temperatura plovka;

bmp.getTemperature(&temperatura);

Serial.print("Temperatura: ");

Serijski.ispis(temperatura);

Serial.println("C");

/* pretvaranje primljenih podataka u visinu */

/* ažuriraj sljedeći redak s trenutnim vrijednostima*/

float seaLevelPressure = SENSORS_PRESSURE_SEALEVELHPA;

Serial.print("Nadmorska visina: ");

Serial.print(bmp.pressureToAltitude(seaLevelPressure,

Serial.println("m");

Serial.println("");

Serial.println("Greška senzora");

Pokrećemo skicu i vidimo izračunatu visinu iznad razine mora.

Točnost očitanja BMP085 može se značajno povećati određivanjem prosječne vrijednosti tlaka, koja varira ovisno o vremenu. Svaki 1 hPa tlaka koji nismo uzeli u obzir dovodi do pogreške od 8,5 metara!

Slika ispod prikazuje vrijednosti tlaka iz jednog od izvora informacija europske zračne luke. Vrijednost tlaka označena je žutom bojom, što možemo koristiti za razjašnjenje rezultata.


Promijenimo sljedeći redak u našoj skici, upisujući u njega trenutnu vrijednost (1009 hPa):

float seaLevelPressure = 1009;

Kao rezultat, dobit ćemo nešto drugačije rezultate:

Savjet: kada navedete tlak, ne zaboravite pretvoriti korištene podatke u hPa.

Upotreba BMP085 (API v1)

Ponovimo još jednom: da bismo saznali tlak i nadmorsku visinu, moramo provesti neke izračune. Ali svi su oni već uključeni u Adafruit_BMP085 Arduino biblioteku (API v1), koja se može preuzeti s poveznice.

Nakon instaliranja biblioteka, trebate ponovno pokrenuti Arduino IDE

Nakon ponovnog pokretanja, možete pokrenuti prvi primjer skice:

#uključi <Wire.h>

Adafruit_BMP085 bmp;

Serial.begin(9600);

Serial.println(" *C");

Serial.print("Tlak = ");

Serial.println("Pa");

Serial.println();

Nakon fleširanja vašeg Arduina, otvorite serijski monitor. Postavite brzinu prijenosa na 9600. Skica će prikazati temperaturu u stupnjevima Celzijusa i tlak u paskalima. Ako stavite prst na senzorski element senzora, temperatura i tlak će se povećati:


Mjerenje nadmorske visine (API v1)

Za kontrolu nadmorske visine jednostavno pokrenite skicu ispod:

#uključi <Wire.h>

#include <Adafruit_BMP085.h>

Adafruit_BMP085 bmp;

Serial.begin(9600);

Serial.print("Temperatura = ");

Serial.print(bmp.readTemperature());

Serial.println(" *C");

Serial.print("Tlak = ");

Serial.print(bmp.readPressure());

Serial.println("Pa");

// izračunaj visinu iznad razine mora na temelju vrijednosti

//"standardni" barometarski tlak jednak 1013,25 milibara = 101325 Pascal

Serial.print("Nadmorska visina = ");

Serial.print(bmp.readAltitude());

Serial.println("metri");

Serial.println();

Pokrenite skicu za prikaz rezultata:


Sudeći prema gornjim očitanjima, nalazimo se na nadmorskoj visini od -21,5 metara u odnosu na razinu mora. Ali znamo da smo iznad mora! Sjećamo se istog problema kao kod korištenja API V2. Moramo voditi računa o vremenu! U REDU. Recimo da nađemo web stranicu s dobrim vremenskim uvjetima i da je tlak 101,964 Pa. Otvorite primjer Primjeri->BMP085test u Arduino IDE i uredite liniju koja je označena na slici ispod:


U ovom retku morate unijeti podatke o trenutnom tlaku. Nakon novog lansiranja vidjet ćete da su se podaci dramatično promijenili te smo dobili 29,58 metara s predznakom plus, što je puno sličnije istini.


Ostavite svoje komentare, pitanja i podijelite svoja osobna iskustva u nastavku. Nove ideje i projekti često se rađaju u raspravama!

Veličina atmosferskog tlaka, brzina i priroda njegovih promjena igraju važnu ulogu u predviđanju vremena, a također uvelike utječu na dobrobit ljudi osjetljivih na vremensku ovisnost - bolesti povezane s različitim vremenskim pojavama. Barometri se koriste za mjerenje atmosferskog tlaka. Mehanički aneroidni barometar ima dvije kazaljke. Jedan pokazuje trenutni tlak. Druga strelica, koja se može ručno postaviti u bilo koji položaj, omogućuje označavanje izmjerene vrijednosti kako bi se odredio trend promjena atmosferskog tlaka tijekom vremena. Vrlo je poželjno da elektronički barometar također pokazuje ne samo vrijednost atmosferskog tlaka, već također omogućuje određivanje postoji li povećanje ili smanjenje i koliko brzo se izmjereni parametar mijenja.

Jeftine kućne meteorološke stanice prikazuju samo piktograme kišnih kapi, oblaka ili sunca. Teško je reći kako su te ikone povezane s atmosferskim tlakom i ima li ova meteorološka stanica barometarski senzor ili koristi druge kreativne metode predviđanja vremena. Naprednije meteorološke stanice prikazuju trenutnu vrijednost tlaka kao broj, a promjenu tlaka tijekom prethodnih nekoliko sati u obliku grubog stupčastog grafikona, koji ima uglavnom dekorativnu funkciju. Takve meteorološke stanice znatno su skuplje. Na tržištu postoje i vrlo napredni uređaji namijenjeni jedriličarima, jahtašima i sl. koji s velikom točnošću pokazuju i promjene tlaka i trenutnu vrijednost, no takvi su uređaji vrlo skupi.

Ova publikacija govori o jednostavnom barometru kućne izrade koji pokazuje veličinu i brzinu promjene atmosferskog tlaka, kao i temperaturu zraka.

Izgled uređaja prikazan je na fotografiji.

Rezultati mjerenja prikazuju se na displeju s dva retka koji sintetizira znakove. U prvom retku ispisuje se rezultat mjerenja trenutnog atmosferskog tlaka u mmHg, odstupanje trenutne vrijednosti tlaka od prosječne vrijednosti za određeno mjesto (višak trenutne vrijednosti tlaka iznad prosjeka smatra se pozitivnim), kao i temperatura zraka u stupnjevima Celzija. Podaci prikazani u gornjem retku ažuriraju se svakih 6 sekundi. Izlaz novih podataka popraćen je treptanjem LED diode koja se nalazi iznad indikatora.

Drugi redak indikatora prikazuje povećanje tlaka za zadnji sat, tri sata i deset sati. Ako se tlak povećao tijekom navedenog vremenskog razdoblja, tada se odgovarajuće povećanje prikazuje s plusom, inače - s minusom. Podaci u drugom redu ažuriraju se svakih 10 minuta. Odmah nakon uključivanja barometra, drugi red će biti prazan. Brojčane vrijednosti će se tamo pojaviti nakon 1 sata, 3 sata i 10 sati.

Barometar je dizajniran za rad u suhoj, grijanoj prostoriji pri temperaturi od 0...40 °C i atmosferskom tlaku od 600...825 mm Hg. Umjetnost.

Točnost mjerenja tlaka i temperature u potpunosti je određena točnošću korištenog senzora tlaka Bosch BMP180. Tipična pogreška mjerenja tlaka je -1hPa, što približno odgovara 0,75 mmHg. Komponenta buke pri mjerenju tlaka je 0,02 hPa (0,015 mmHg). Tipična pogreška mjerenja temperature oko 25°C je +/- 0,5°C. Detaljnije tehničke karakteristike senzora BMP180 možete pronaći u tehničkim specifikacijama. opis u prijavi.

Vremenski intervali u ovom uređaju broje se programski. Pogreška u formiranju ovih intervala, koju je izmjerio autor, ne prelazi jednu minutu u 10 sati.

Dijagram barometra prikazan je na slici.

Glavni element uređaja je Arduino Nano modul. Autor je koristio verziju 3 s mikrokontrolerom ATmega 328. U ovom slučaju memorija modula zauzima samo trećinu, tako da je moguće koristiti Arduino Nano modul s mikrokontrolerom ATmega 168.

Zaslon Winstar WH1602L je dvoredni sa 16 znakova u svakom redu. Njegova osnova je HD44780 kontroler. Otpornik R2 omogućuje podešavanje kontrasta slike. Ako napon na pinu 3 (Vo) jako odstupa od optimalnog napona, tada se na zaslonu uopće neće vidjeti nikakva slika. Ovu okolnost treba uzeti u obzir prilikom prvog uključivanja uređaja. Za instancu zaslona koju je koristio autor, optimalni napon na pinu 3 bio je oko 1 V. Otpornik R3 određuje trenutnu vrijednost LED dioda pozadinskog osvjetljenja.

Senzor pritiska BMP180 ima metalno kućište dimenzija 3,6x3,6x1 mm. Njegovi zaključci su kontaktne pločice koje se nalaze na dnu kućišta. Osim toga, senzor zahtijeva napajanje od 1,8 - 3,6 V. Razine signala koje senzor razmjenjuje s vanjskim uređajem također se razlikuju od potrebnih. Ove okolnosti otežavaju izravnu uporabu BMP180. Srećom, ovaj problem se lako rješava. U prodaji su dostupni moduli temeljeni na senzorima BMP180 koji uključuju same senzore i sve odgovarajuće elemente. Ovi moduli su ploča 10x13mm. Njihov trošak je otprilike 1,4 USD. Izgled modula prikazan je na sljedećoj fotografiji.

HL1 LED trepće svakih 6 sekundi, signalizirajući da su novi rezultati prikazani na zaslonu barometra. Autor je koristio zelenu LED diodu promjera 3 mm L-1154GT tvrtke Kingbright.
Kondenzator C1 ima prilično veliki kapacitet, što čini uređaj neosjetljivim na kratkotrajne nestanke struje. Ako to nije potrebno, tada se C1 može smanjiti na 500 mikrofarada.
Dioda D1 isključuje pozadinsko osvjetljenje indikatora tijekom nestanka struje. Ovo produljuje vijek trajanja baterije barometra iz energije pohranjene u kondenzatoru C1.

Uređaj se može napajati iz bilo kojeg istosmjernog izvora (punjač mobitela, napajanje bilo kojeg gadgeta itd.) s izlaznim naponom od 8...12 V. Pri naponu od 9 V, barometar troši oko 80 mA.

Uređaj je sastavljen na matičnoj ploči dimenzija 85 x 55 mm, koja je pomoću ploče od pleksiglasa pričvršćena na zaslon.

Senzor BMP180 nalazi se na dnu - što je dalje moguće od glavnih elemenata koji generiraju toplinu, a to su otpornik R3 i zaslon s LED pozadinskim osvjetljenjem. Tijelo uređaja je plastična kutija dimenzija 160x160x25. Trebalo bi izbušiti niz otvora za ventilaciju na dnu i na vrhu stijenke kutije.

Skica koju treba flashati u memoriju Arduino Nano modula prikazana je u aplikaciji. Autor je koristio Arduino IDE 1.8.1. Za podršku senzoru tlaka mora biti instalirana biblioteka Adafruit-BMP085. Odgovarajuća datoteka nalazi se u privitku.

Prije učitavanja skice u red 17 umjesto broja 740,0 koji odgovara prosječnom tlaku na mjestu ugradnje autorskog barometra upisuje se prosječni tlak u mm. rt. Umjetnost. , što odgovara mjestu na kojem će vaš barometar biti instaliran. U prvoj aproksimaciji, ovaj se parametar može odrediti formulom Rsr = 760 - 0,091h, gdje je h nadmorska visina u metrima. Visinu ćete najlakše odrediti pomoću GPS navigatora.

Ova formula ne uzima u obzir mnoge čimbenike koji utječu na atmosferski tlak i primjenjiva je samo za nadmorske visine do 500 m. Opis načina za točnije određivanje prosječnog tlaka izvan je opsega ove publikacije. Mogu se pronaći u brojnim materijalima o meteorologiji koji su dostupni na internetu.

Popis radioelemenata

Oznaka Tip Vjeroispovijest Količina BilješkaDućanMoja bilježnica
A1 Modul sa senzorom BMP180 1 U bilježnicu
A2 Arduino ploča

Arduino Nano 3.0

1 U bilježnicu
VD1 Ispravljačka dioda

1N4007

1 U bilježnicu
HG1 LCD zaslonWH1602L1 Winstar U bilježnicu
HL1 Dioda koja emitira svjetloL-1154GT1 Kingbright U bilježnicu
C1 Elektrolitički kondenzator4700 uF x 16 V1

Najbolji članci na temu