Kako podesiti pametne telefone i računare. Informativni portal

Barometar s naprednim funkcijama. Senzor atmosferskog pritiska BMP085 i Arduino

Uvod

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

Senzori koji se nude kao vodič za arduino (DHT11, DHT22) pokazuju temperaturu i vlažnost zraka. U obrazovne svrhe (za univerzitet) bilo je potrebno pratiti i pritisak. Naravno, odjel ima barometar, ali zašto ne napraviti svoj? 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 u arduino. Takođe možete koristiti Raspberry Pi ili računar sa COM portom.

Dijagram povezivanja za firmver i programski kod

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

Bilo ih je sasvim dovoljno. Ostavio sam džamper na 3,3 volta, uprkos činjenici da se moja verzija arduina napaja na 5 volti.

UART - Arduino
5v - VCC
TXD - RXD
RXD - TXD
GND - GND
CTS - DTR (opciono, nije radio kod mene, možda zato što je napon signala ostao 3,3V)

Ako ne povežete DTR, onda nakon slanja firmware-a arduino treba ponovo pokrenuti pomoću ugrađenog dugmeta, aktivna razmjena podataka će početi u oba smjera (što se vidi po LED diodama na USB-UART-u), nakon što se firmver završi uspješno učitano, ponovo će se pokrenuti.

Potrebne biblioteke treće strane:

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

Kod

#include #include "SparkFunBME280.h" #include "Wire.h" #include "SPI.h" #include //Globalni senzorski objekt BME280 mySensor; LiquidCrystal_I2C lcd(0x3F,16,2); //Prikaz adrese, u mom slučaju 0x3F void setup() ( lcd.init(); lcd.backlight(); //***Postavke upravljačkog programa******************** ***************// //commInterface može biti I2C_MODE ili SPI_MODE //specificirajte chipSelectPin koristeći arduino imena pinova //specificirajte I2C adresu.Može biti 0x77 (podrazumevano) 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 sekciju // mySensor.settings.commInterface = SPI_MODE; //mySensor.settings.chipSelectPin = 10; //***Postavke rada************************* ****// //renMode može biti: // 0, Sleep mode // 1 ili 2, Forced mode // 3, Normalni mod 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 //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čigledno, češće nije potrebno //filter može biti isključen ili broj FIR koeficijenata za korištenje: // 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, preduzorkovanje *1, *2, *4, *8, *16, odnosno mySensor.settings.tempOverSample = 1; //pressOverSample može biti: // 0, preskočeno // 1 do 5, preduzorkovanje *1, *2, *4, *8, *16, odnosno mySensor.settings.pressOverSample = 1; //humidOverSample može biti: // 0, preskočeno // 1 do 5, preduzorkovanje *1, *2, *4, *8, *16, odnosno 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 pomjeriti liniju kada se promijeni broj značajnih cifara. 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 ekrana. U zavisnosti od mikrokola, postoje dvije oznake.

U ovom slučaju:


A adresa će biti 0x3F jer A0 - A2 otvoren:

LED dioda koja je zaokružena u ovalu 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. Kolo se takođe može napajati sa RAW ulaza, sa drugačijim naponom (na primer, sa krune).

Fotografija pokazuje da, radi kompaktnosti, možete preneti napajanje senzora i displeja sa drugog pina. Također možete vidjeti granu narandžasto-žutog para žica; otpornik od 100 oma visi na njima da smanji svjetlinu pozadinskog osvjetljenja (možete ostaviti kratkospojnik, ali će vam povrijediti oči).

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

Zaključak

Na radnom mjestu se pojavio 1602, pričvršćen za sto, koji pokazuje pritisak, vlažnost, temperaturu. Arduino se može obnoviti bez uklanjanja (možda će postati puzeća linija).

Pozdrav kolege!
Jer Zimi vrijeme uglavnom nije pogodno za letenje, što znači da ima puno slobodnog vremena, koje bi bilo lijepo pozabaviti nečim da se mozak ne osuši od nerada. Nedavno sam odlučio da savladam temu žestokih holivara i žestokih debata, a to je: Atmega328 mikrokontroler u Arduino implementaciji.
Snažno vas molim da ne započinjete raspravu o samoj Arduini; na internetu postoji gomila informacija o svim njenim prednostima i nedostacima.
Dakle, uzimajući u obzir specifičnosti stranice, mislim da nije baš tema za razgovor o „pametnoj kući“, pa ćemo napraviti barometarski visinomjer sa trocifrenim sedmosegmentnim LED displejom na bazi Arduina.

Više detalja?


Odmah ću reći da se ne pretvaram da sam originalan ili inovativan, na internetu ima puno sličnih projekata. Ali pretragom nisam našao ništa slično na ovom resursu, pa sam odlučio da ga objavim, u slučaju da nekome bude od koristi.
Opet, sam sam napisao kod, pa ako su sve indijske stvari, ne sudite prestrogo =) Još uvijek tek 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 može nositi s njim osoba s gotovo bilo kojim nivoom obuke.

Glavna prednost ovog uređaja je njegova cijena. Čak iu današnjem životu i kursu, 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 prikazivanje na LED displeju.
- Memoriranje maksimalne vrijednosti nadmorske visine koja se dogodila otkako je napajanje uključeno.
- Prikaz maksimalne visine pritiskom na dugme.
- Snimanje maksimalne vrijednosti visine u nepromjenjivu memoriju (EEPROM) kontrolera (spremljeno nakon isključivanja).
- Čitanje pohranjene maksimalne visine iz EEPROM-a i prikazivanje na displeju.

Nulta referentna tačka je visina na kojoj je uključeno napajanje uređaja.

Šta će vam trebati (u zagradama su ključne riječi za pretraživanje na svim vrstama ebay-a, itd.)
- Arduino mikrokontroler, u principu, skoro svaki će raditi ako je kod prilagođen, ali sve je sastavljeno i testirano na bazi (Arduino Nano).

- barometarski senzor visine sa I2C magistralom (BMP085).

- trocifreni LED displej od sedam segmenata sa zajedničkom anodom (7-Segment LED Display).
- žice za spajanje svega u jednu cjelinu, koristio sam gotove sa konektorima, ali to uopće nije potrebno (Dupont Wire).

- dugme, bilo koje bez fiksiranja položaja će biti dovoljno (Taktno dugme prekidača). Na primjer ovo:
- otpornik od 1KOhm do 10KOhm.
- tri otpornika od 100 oma.
- lemilica sa svim gobulama i mogućnošću korištenja.
- Arduino softver.

Opciono:
- razvojna ploča za ožičenje ekrana.

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

Prvo, malo o displeju.
Sedmosegmentni LED displej sa zajedničkom anodom je sklop ovakvih LED dioda (na slici zaokružen crvenom bojom):
Ako bolje pogledate dijagram, bit će jasno da samo jedno od pražnjenja može zasvijetliti odjednom, tj. Da biste prikazali trocifreni broj, trebate upaliti i ugasiti svaku cifru redom, i to vrlo brzo. Dakle, brojevi će treperiti bez obzira na sve, najvažnije je da je ovo treperenje dovoljno često i da ga oko ne percipira kao treperenje. To znači da će Arduino također raditi kao kontroler za ovaj ekran, u suštini crtajući redom brojeve koji čine broj jednak trenutnoj visini.
Odmah da rezervišem: možete kupiti gotovo rešenje sa ugrađenim kontrolerom, ali košta 5 puta više, a nisam naišao na odgovarajuću implementaciju prilikom pretrage, jer... Zaista sam želio 3-bitni, ali sve je više 4-bitnih u prodaji.
Inače, s obzirom da je displej trocifren, maksimalna visina koju može da prikaže = 999m. U principu, uređaj se lako može prilagoditi za prikaz od 4 cifre, ali će se program morati malo izmijeniti. Svako ko razumije kod za 3 cifre može ga lako prilagoditi za 4 cifre.
Kao rezultat toga, uprkos problemima koji su se pojavili sa ovim istim treperenjem, uspjeli smo postići manje-više prihvatljive rezultate, više o tome u nastavku, jer Problemi su nastali zbog senzora visine.
Više detalja o senzoru.
Senzor je barometrijski, tj. određuje promjene visine na osnovu promjena atmosferskog tlaka. Zapravo, senzor mjeri samo atmosferski pritisak; bibliotečki kod za senzor je odgovoran za izračunavanje nadmorske visine kao funkcije pritiska. U ovom slučaju senzor ima ugrađen ADC i I2C interfejs, tj. Daje izmjerenu vrijednost u digitalnom obliku, što je nesumnjivo plus. Postoji gotova biblioteka za rad sa senzorom. Koristio sam prvu verziju, manje je resursno intenzivna i lakša za integraciju u kod. Funkcionalnost biblioteke vam omogućava da podesite tačnost merenja na skali od 0 - najmanja tačnost, do 3 - najveća tačnost (pogledajte kod). Iako, da budem iskren, nisam primijetio veliku razliku između nivoa iznad 0. Greška mjerenja je oko 1 metar, što je općenito sasvim prihvatljivo. Rezultat mjerenja je apsolutna nadmorska visina pri normalnom atmosferskom pritisku. Ali ovo je jednostavno potpuno nezanimljivo. S druge strane, koristeći Arduino i jednostavne matematičke operacije, možete lako izračunati relativnu visinu, što je i učinjeno.
Ali tu je bila muha: ispitivanje senzora standardnom funkcijom traje prilično dugo, a s obzirom na to da je Arduino ujedno i sedmosegmentni displej kontroler, dobili su se prilično smiješni specijalni efekti, tj. prilikom prozivanja senzora izlaz na displeju je sam stao i samim tim je broj koji je bio prikazan u tom trenutku svetlio nešto duže od ostalih. Rezultat je bio ovakav vijenac od tri elementa.
Na kraju, nakon igranja sa kašnjenjima i odabira optimalnog perioda anketiranja senzora, uspjeli smo postići gotovo potpuno odsustvo treperenja. Štaviše, nema potrebe za ispitivanjem senzora u svakom programskom ciklusu; visina se i dalje mijenja ograničenom brzinom. Ali treperenje prve cifre zbog greške i prečesto prozivanje senzora ne izgleda lijepo.
U principu, da imam bolju vještinu, mogao bih prepisati biblioteku senzora, ali još nisam spreman. I u ovoj implementaciji u potpunosti ispunjava svoje funkcije, ostalo su tekstovi.
Izlaz brojeva je prebačen na prekid, treperenje je eliminirano, skica je ažurirana.
Ovdje ću vjerovatno završiti svoj kratak izlet u elemente uređaja i prijeći na montažu.

Dijagram povezivanja elemenata uređaja (kliknuti):


U očekivanju pitanja iz serije "šta, zar ne bi mogao nacrtati normalan dijagram?!" Reći ću da bih mogao, ali neupućenima mislim da će ova opcija biti lakša za razumijevanje, ali za inicirane to nije bitno, pa se dijagram normalno čita. Našao sam sedmosegmentni pinout samo za četverobitnu verziju; trobitna verzija se razlikuje jednostavno po odsustvu 6. kraka.

Što se tiče napajanja uređaja: Arduino u svom originalnom obliku može normalno preživjeti od 7V do 16V, u ekstremnim slučajevima od 6V do 20V. Ali, s obzirom da sam imao kineski klon, nisam pokušavao nikakve podle eksperimente, ali LiPo 3S baterija radi bez problema.
Preporučljivo je zapakirati senzor na način da pristup zraku bude slobodan, ali istovremeno isključiti direktan protok zraka u otvor na senzoru, na primjer, prekriti ga pjenastom gumom.
Preporučujem uklanjanje RX i TX LED dioda sa Arduino ploče, jer... spojeni su paralelno na digitalne pinove 0 i 1, zbog čega će segmenti spojeni na ove pinove svijetliti s manje svjetline.

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

Senzor se koristi u mnogim projektima, uključujući 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 iko mjerio atmosferski pritisak? Dva su razloga za to. Prvi je kontrola nadmorske visine. Kako se visina povećava, pritisak opada. Vrlo zgodno za planinarenje, kao alternativa GPS navigatorima. Osim toga, atmosferski tlak se koristi za prognozu vremena.

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

Tehničke karakteristike BMP085

  • Opseg osjetljivosti: 300-1100 hPa (9000 m - 500 m nadmorske visine);
  • Rezolucija: 0,03 hPa / 0,25 m;
  • Radna temperatura -40 do +85°C, tačnost mjerenja temperature +-2°C;
  • Veza preko i2c;
  • V1 na modulu koristi 3.3V napajanje i logičko napajanje;
  • V2 na modulu koristi 3,3-5V napajanje i logičku snagu;

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

#include <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 pritiska"); Serial.println("");

/* Pokreni senzor */

if(!bmp.begin())

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

Provjerite je li senzor ispravno povezan */

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

senzors_event_t događaj;

bmp.getEvent(&event);

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

ako (događaj.pritisak)

/* Prikaz atmosferskog pritiska u hPa */

Serial.print("Pritisak: "); Serial.print(event.pressure); Serial.println("hPa");

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


Mjerenje nadmorske visine

Verovatno znate da pritisak opada sa povećanjem nadmorske visine. To jest, možemo izračunati visinu znajući pritisak i temperaturu. Opet ćemo matematiku ostaviti iza kulisa. Ako ste zainteresovani za proračune, možete ih pogledati na ovoj stranici Wikipedije.

U primjeru ispod, koristit će se dodatna Arduino biblioteka. Za izračunavanje visine pomoću senzora BMP085, ažurirajte funkciju "void loop()". Potrebne promjene na skici su date u skici ispod. Kao rezultat, dobićete temperaturnu vrednost na osnovu nivoa pritiska i vrednosti temperature.

/* kreiraj novi događaj za senzor */

senzors_event_t događaj;

bmp.getEvent(&event);

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

ako (događaj.pritisak)

/* prikaz atmosferskog pritiska u hPa */

Serial.print("Pritisak: ");

Serial.print(event.pressure);

Serial.println("hPa");

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

* prosječni pritisak i temperatura okoline

*u stepenima Celzijusa u vrijeme mjerenja*

* ako nemate ove podatke, možete koristiti "zadanu vrijednost"

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

*SENSORS_PRESSURE_SEALEVELHPA*

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

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

*ili na resursima informativnih centara na velikim aerodromima*

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

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

/* dobije trenutnu vrijednost temperature od BMP085 senzora */

temperatura plutanja;

bmp.getTemperature(&temperature);

Serial.print("Temperatura: ");

Serial.print(temperatura);

Serial.println("C");

/* pretvoriti primljene podatke u visinu */

/* ažuriraj sljedeći red sa trenutnim vrijednostima */

float seaLevelPressure = SENSORS_PRESSURE_SEALEVELHPA;

Serial.print("Visina: ");

Serial.print(bmp.pressureToAltitude(seaLevelPrissure,

Serial.println("m");

Serial.println("");

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

Pokrećemo skicu i vidimo izračunatu nadmorsku visinu.

Preciznost očitavanja BMP085 može se značajno povećati specificiranjem prosječne vrijednosti pritiska, koja varira u zavisnosti od vremena. Svaki 1 hPa pritiska koji nismo uzeli u obzir dovodi do greške od 8,5 metara!

Na slici ispod prikazane su vrijednosti pritiska iz jednog od izvora informacija evropskog aerodroma. Vrijednost pritiska je označena žutom bojom, što možemo koristiti za pojašnjenje rezultata.


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

plutajući seaLevelPrissure = 1009;

Kao rezultat toga, dobićemo malo drugačije rezultate:

Savjet: kada odredite tlak, ne zaboravite konvertirati korištene podatke u hPa.

Korištenje BMP085 (API v1)

Ponovimo još jednom: da bismo saznali pritisak i nadmorsku visinu iznad nivoa mora, moramo izvršiti neke proračune. Ali svi su oni već uključeni u Adafruit_BMP085 Arduino biblioteku (API v1), koju možete preuzeti sa linka.

Nakon instaliranja biblioteka, potrebno je ponovo pokrenuti Arduino IDE

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

#include <Wire.h>

Adafruit_BMP085 bmp;

Serial.begin(9600);

Serial.println(" *C");

Serial.print("Pritisak = ");

Serial.println("Pa");

Serial.println();

Nakon flešovanja vašeg Arduina, otvorite serijski monitor. Podesite brzinu prenosa na 9600. Skica će prikazati temperaturu u stepenima Celzijusa i pritisak u paskalima. Ako stavite prst na senzorski element senzora, temperatura i pritisak će se povećati:


Mjerenje nadmorske visine (API v1)

Za kontrolu nadmorske visine, jednostavno pokrenite skicu ispod:

#include <Wire.h>

#include <Adafruit_BMP085.h>

Adafruit_BMP085 bmp;

Serial.begin(9600);

Serial.print("Temperatura = ");

Serial.print(bmp.readTemperature());

Serial.println(" *C");

Serial.print("Pritisak = ");

Serial.print(bmp.readPressure());

Serial.println("Pa");

// izračunati nadmorsku visinu na osnovu vrijednosti

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

Serial.print("Visina = ");

Serial.print(bmp.readAltitude());

Serial.println("metri");

Serial.println();

Pokrenite skicu da prikažete rezultate:


Sudeći prema gore navedenim očitanjima, nalazimo se na nadmorskoj visini od -21,5 metara u odnosu na nivo mora. Ali znamo da smo iznad mora! Sjećamo se istog problema kao kod korištenja API V2. Moramo uzeti u obzir vremenske prilike! UREDU. Recimo da smo pronašli web stranicu s dobrim vremenskim prilikama i pritisak je 101,964 Pa. Otvorite primjer Primjeri->BMP085test u Arduino IDE i uredite liniju koja je istaknuta na donjoj slici:


U ovaj red morate unijeti trenutne podatke o tlaku. Nakon novog lansiranja, otkrit ćete da su se podaci dramatično promijenili i dobili smo 29,58 metara sa znakom plus, što je mnogo sličnije istini.


Ostavite svoje komentare, pitanja i podijelite svoja lična iskustva ispod. Nove ideje i projekti se često rađaju u diskusijama!

Veličina atmosferskog pritiska, brzina i priroda njegovih promjena igraju važnu ulogu u predviđanju vremena, a također uvelike utječu na dobrobit ljudi podložnih vremenskim ovisnostima - bolestima povezanim s različitim vremenskim pojavama. Barometri se koriste za mjerenje atmosferskog tlaka. Mehanički aneroidni barometar ima dvije ruke. Jedan prikazuje trenutni pritisak. Druga strelica, koja se može ručno postaviti na bilo koju poziciju, omogućava vam da označite izmjerenu vrijednost kako biste odredili trend promjena atmosferskog tlaka tokom vremena. Veoma je poželjno da elektronski barometar takođe pokazuje ne samo vrednost atmosferskog pritiska, već i omogućava da se utvrdi da li postoji povećanje ili smanjenje i koliko brzo se mereni parametar menja.

Jeftine kućne meteorološke stanice prikazuju samo piktograme kapi kiše, oblaka ili sunca. Teško je reći kako su ove ikone povezane sa atmosferskim pritiskom i da li ova meteorološka stanica ima barometrijski senzor ili koristi druge kreativne metode predviđanja vremena. Naprednije meteorološke stanice prikazuju trenutnu vrijednost tlaka kao broj, a promjenu tlaka u prethodnih nekoliko sati u obliku grubog trakastog grafikona, koji ima uglavnom dekorativnu funkciju. Takve meteorološke stanice su znatno skuplje. Na tržištu postoje i vrlo napredni uređaji namijenjeni nautičarima, jedriličarima i sl., koji sa velikom preciznošću pokazuju i promjene pritiska i trenutnu vrijednost, ali su takvi uređaji vrlo skupi.

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

Izgled uređaja prikazan je na fotografiji.

Rezultati mjerenja se prikazuju na displeju za sintezu znakova u dva reda. Prvi red prikazuje rezultat mjerenja trenutnog atmosferskog tlaka u mmHg, odstupanje trenutne vrijednosti tlaka od prosječne vrijednosti za datu lokaciju (višak trenutne vrijednosti tlaka iznad prosjeka smatra se pozitivnim), kao i temperatura vazduha u stepenima Celzijusa. Podaci prikazani u gornjoj liniji ažuriraju se svakih 6 sekundi. Izlaz novih podataka prati bljesak LED diode koja se nalazi iznad indikatora.

Drugi red indikatora prikazuje povećanje pritiska za posljednji sat, tri sata i deset sati. Ako se pritisak povećao u navedenom vremenskom periodu, tada se odgovarajući porast prikazuje s plusom, u suprotnom - s minusom. Podaci u drugom redu se ažuriraju svakih 10 minuta. Odmah nakon uključivanja barometra, drugi red će biti prazan. Brojčane vrijednosti će se pojaviti nakon 1 sata, 3 sata i 10 sati.

Barometar je dizajniran za rad u suvoj, zagrijanoj prostoriji na temperaturi od 0...40 °C i atmosferskom pritisku od 600...825 mm Hg. Art.

Točnost mjerenja pritiska i temperature u potpunosti je određena preciznošću Bosch BMP180 senzora pritiska koji se koristi. Tipična greška mjerenja tlaka je -1hPa, što otprilike odgovara 0,75 mmHg. Komponenta buke pri mjerenju tlaka je 0,02 hPa (0,015 mmHg). Tipična greš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 aplikaciji.

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

Dijagram barometra je prikazan na slici.

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

Displej Winstar WH1602L je dvoredni sa 16 karaktera u svakom redu. Njegova osnova je HD44780 kontroler. Otpornik R2 vam omogućava da podesite kontrast slike. Ako napon na pinu 3 (Vo) uvelike odstupa od optimalnog napona, tada na ekranu uopće neće biti vidljiva slika. Ovu okolnost morate uzeti u obzir prilikom prvog uključivanja uređaja. Za primer ekrana koji je koristio autor, optimalni napon na pinu 3 bio je oko 1 V. Otpornik R3 određuje trenutnu vrednost LED pozadinskog osvetljenja.

Senzor pritiska BMP180 ima metalno kućište dimenzija 3,6x3,6x1 mm. Njegovi zaključci su kontaktne pločice smještene na dnu kućišta. Osim toga, senzoru je potrebno napajanje od 1,8 - 3,6 V. Nivoi signala koje senzor razmjenjuje sa vanjskim uređajem također se razlikuju od potrebnih. Ove okolnosti otežavaju direktnu upotrebu BMP180. Na sreću, ovaj problem se lako rješava. U prodaji su dostupni moduli bazirani na BMP180 senzorima koji uključuju same senzore i sve odgovarajuće elemente. Ovi moduli su ploča 10x13mm. Njihova cijena je oko 1,4 USD. Izgled modula je prikazan na sledećoj fotografiji.

HL1 LED treperi svakih 6 sekundi, signalizirajući da su novi rezultati prikazani na displeju barometra. Autor je koristio zelenu LED diodu prečnika 3 mm L-1154GT iz Kingbrighta.
Kondenzator C1 ima prilično veliki kapacitet, što uređaj čini neosjetljivim na kratkotrajne nestanke struje. Ako to nije potrebno, C1 se može smanjiti na 500 mikrofarada.
Dioda D1 isključuje pozadinsko svjetlo indikatora prilikom nestanka struje. Ovo produžava vijek trajanja baterije barometra od energije pohranjene u kondenzatoru C1.

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

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

Senzor BMP180 nalazi se na dnu - što je dalje moguće od glavnih elemenata koji stvaraju toplinu, a to su otpornik R3 i zaslon s LED pozadinskim osvjetljenjem. Kućište uređaja je plastična kutija dimenzija 160x160x25. U donjem i gornjem dijelu kutije treba izbušiti niz ventilacijskih rupa.

Skica koju je potrebno ubaciti u memoriju Arduino Nano modula predstavljena je u aplikaciji. Autor je koristio Arduino IDE 1.8.1. Za podršku senzora pritiska mora biti instalirana biblioteka Adafruit-BMP085. Odgovarajući fajl je uključen u prilog.

Prije učitavanja skice, u red 17, umjesto broja 740.0, koji odgovara prosječnom pritisku na mjestu postavljanja autorskog barometra, upisuje se prosječni tlak u mm. rt. Art. , što odgovara lokaciji na kojoj će vaš barometar biti instaliran. U prvoj aproksimaciji, ovaj parametar se može odrediti formulom Rsr = 760 - 0,091h, gdje je h visina iznad nivoa mora u metrima. Najlakši način za određivanje visine je korištenje GPS navigatora.

Ova formula ne uzima u obzir mnoge faktore koji utiču na atmosferski pritisak i primjenjiva je samo za visine do 500 m. Opis načina za preciznije određivanje prosječnog tlaka je izvan okvira ove publikacije. Mogu se naći u brojnim materijalima o meteorologiji koji su dostupni na internetu.

Spisak radioelemenata

Oznaka Tip Denominacija Količina BilješkaProdavnicaMoja beležnica
A1 Modul sa senzorom BMP180 1 U notes
A2 Arduino ploča

Arduino Nano 3.0

1 U notes
VD1 Ispravljačka dioda

1N4007

1 U notes
HG1 LCD ekranWH1602L1 Winstar U notes
HL1 Dioda koja emituje svetlostL-1154GT1 Kingbright U notes
C1 Elektrolitički kondenzator4700 uF x 16 V1

Najbolji članci na ovu temu