Cum se configurează smartphone-uri și PC-uri. Portal informativ

Barometru avansat. Senzor de presiune atmosferică BMP085 și Arduino

Introducere

Ce poate fi afișat pe un ecran cu două linii în afară de „Hello world!”? De ce să nu afișați temperatura, umiditatea și presiunea?

Senzorii oferiți ca ghid de studiu pentru arduino (DHT11, DHT22) arată temperatura și umiditatea. În scopuri educaționale (pentru universitate) a fost necesar să se observe și presiunea. Desigur, pupirul are un barometru, dar de ce să nu-l așezi pe al tău? În plus, puteți acumula în continuare citiri în modul automat, iar aceasta este o experiență bună în învățarea arduino.

Într-un fel sau altul, componentele au fost comandate din China și acest dispozitiv a fost asamblat.

Componentele necesare

A fost folosit un USB-UART pentru a trimite schița către arduino. De asemenea, a fost posibil să utilizați un Raspberry Pi sau un computer cu port COM.

Schema de conectare pentru firmware și codul programului

Din China, USB-UART a venit cu un set de fire:

Erau destul de des. Am lăsat jumperul la 3,3 volți, în ciuda faptului că versiunea mea arduino este alimentată de 5 volți.

UART - Arduino
5v - VCC
TXD - RXD
RXD - TXD
GND - GND
CTS - DTR (opțional, la mine nu a funcționat, poate pentru că tensiunea semnalului a rămas 3.3V)

Dacă nu conectați DTR-ul, atunci după trimiterea firmware-ului, arduino trebuie repornit cu butonul încorporat, va începe schimbul activ de date în ambele direcții (după cum este demonstrat de LED-urile de pe USB-UART), după o descărcare reușită a firmware-ului, se va reporni singur.

Biblioteci terță parte necesare:

Codul în sine, cu comentarii din exemple (în cazul în care cineva trebuie să schimbe ceva).

Cod

#include #include „SparkFunBME280.h” #include „Wire.h” #include „SPI.h” #include // Obiect senzor global BME280 mySensor; LiquidCrystal_I2C lcd (0x3F, 16,2); // Adresa de afișare, în cazul meu 0x3F void setup () (lcd.init (); lcd.backlight (); // *** Setări driver ***************** *************** // // commInterface poate fi I2C_MODE sau SPI_MODE // specifica chipSelectPin folosind numele de pin Arduino // specifica adresa I2C. Poate fi 0x77 (implicit) sau 0x76 // Pentru I2C, activați următoarele și dezactivați secțiunea SPI mySensor.settings.commInterface = I2C_MODE; mySensor.settings.I2CAddress = 0x76; // Adresa senzorului, în cazul meu nu este standard // Pentru SPI, activați următoarele și dezactivați secțiunea I2C // mySensor.settings.commInterface = SPI_MODE; //mySensor.settings.chipSelectPin = 10; // *** Setări de operare ************************* **** // // renMode poate fi: // 0, modul Sleep // 1 sau 2, modul forțat // 3, modul normal mySensor.settings.runMode = 3; // Exemplul sugerează utilizarea modului forțat, dar la actualizarea o dată pe secundă, modul normal este suficient // tStandby poate fi: // 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; // Evident că nu este necesar mai des // filtrul poate fi dezactivat sau numărul de coeficienți FIR de utilizat: // 0, filtru dezactivat // 1, coeficienți = 2 // 2, coeficienți = 4 // 3, coeficienți = 8 // 4 , coeficienți = 16 mySensor.settings.filter = 0; // tempOverSample poate fi: // 0, ignorat // de la 1 la 5, supraeșantionare * 1, * 2, * 4, * 8, * 16 respectiv mySensor.settings.tempOverSample = 1; // pressOverSample poate fi: // 0, ignorat // de la 1 la 5, supraeșantionare * 1, * 2, * 4, * 8, * 16 respectiv mySensor.settings.pressOverSample = 1; // humidOverSample poate fi: // 0, ignorat // de la 1 la 5, supraeșantionare * 1, * 2, * 4, * 8, * 16 respectiv mySensor.settings.humidOverSample = 1; // Apelarea .begin () face ca setările să fie încărcate mySensor.begin (); ) void loop () (// Literele pot fi afișate o dată, iar apoi citirile pot fi modificate, dar citirile pot deplasa linia atunci când numărul de cifre semnificative se modifică.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”); imprimare lcd (mySensor.readFloatPressure ()); lcd.setCursor (14,1); lcd.print ("Pa"); întârziere (1000);)


Adresa senzorului poate fi ghicită, sunt doar două dintre ele.

Cum să aflați adresa afișajului dvs., puteți vedea. Există două etichete, în funcție de microcircuit.

În acest caz:


Iar adresa va fi 0x3F pentru că A0 - A2 deschis:

LED-ul care este închis într-un oval poate fi mai bine evaporat.

Schema de conectare

Rezistorul a fost ales ca jumătate din rezistența senzorului (între VVC și GND), astfel încât căderea de tensiune pe el să fie de 1,7 volți. Circuitul poate fi alimentat și de la intrarea RAW, cu o tensiune diferită (de exemplu, de la coroană).

Fotografia arată că, pentru compactitate, puteți prelua puterea senzorului și a afișa de la un alt pin. De asemenea, puteți vedea o ramură a unei perechi de fire galben-portocaliu, pe ele atârnă un rezistor de 100 Ohm, pentru a reduce luminozitatea luminii de fundal (puteți lăsa jumperul, dar vă va tăia ochii).

În cazul meu, totul este alimentat de o sursă de alimentare veche a computerului. Poate fi alimentat prin USB. Toate componentele au fost lipite cu lipici Moment care era la îndemână.

Rezultat

La locul de muncă, 1602 a apărut înșurubat pe masă, care arată presiunea, umiditatea, temperatura. Arduino poate fi reîmprospătat fără a fi îndepărtat (poate deveni o linie târâtoare).

Salutari colegi!
pentru că iarna, vremea de cele mai multe ori nu zboară, adică mult timp liber, ceea ce ar fi bine să faci ceva, ca să nu se usuce creierul de lene. Recent am decis să stăpânesc subiectul holivarelor aprige și al dezbaterilor aprinse și anume: microcontrolerul Atmega328 în implementarea Arduino.
Vă rog cu tărie să nu dezbateți despre Arduina însăși, despre toate avantajele și dezavantajele ei și așa mai departe în rețeaua de informații în vrac.
Deci, ținând cont de specificul site-ului, cred că a vorbi despre „casa inteligentă” nu este în întregime în subiect, prin urmare, pe baza Arduinei, vom construi un altimetru barometric cu trei cifre și șapte segmente. Afișaj LED.

Mai multe detalii?


Trebuie să spun imediat că nu mă pretind că sunt original și inovator, în rețea sunt multe proiecte similare. Dar pe această resursă nu am găsit așa ceva căutând, de aceea am decis să o public, dintr-o dată va fi de folos cuiva.
Din nou, eu am scris codul, prin urmare, dacă există hinduism solid, nu judeca cu strictețe =) Până acum doar învăț. Ultima data cand am programat controlere in anul 4 de institut este acum mai bine de 10 ani =) Critica competenta si constructiva este binevenita!
Voi încerca să explic într-un mod accesibil și detaliat cum să asamblați un astfel de dispozitiv, o persoană cu aproape orice nivel de pregătire se poate descurca, cred.

Principalul avantaj al acestui dispozitiv este prețul său. Chiar și în funcție de viața curentă și cursul de schimb, puteți păstra în limita a 350 de ruble, ceea ce nu este bani în general. Veți avea nevoie, de asemenea, de mâini drepte și de capacitatea de a manipula un fier de lipit.

Funcțiile dispozitivului:
- Măsurarea înălțimii curente și afișarea acesteia pe afișajul LED.
- Memorarea valorii maxime a înălțimii care a avut loc din momentul pornirii alimentării.
- Afișarea înălțimii maxime pe afișaj prin apăsarea unui buton.
- Scrierea valorii maxime de altitudine în memoria nevolatilă (EEPROM) a controlerului (salvată după oprire).
- Citirea înălțimii maxime stocate din EEPROM și afișarea acesteia.

Punctul de referință zero este altitudinea la care dispozitivul a fost pornit.

De ce aveți nevoie (cuvinte cheie în paranteze pentru căutarea pe tot felul de ebay, etc.)
- un microcontroler arduino, în principiu, aproape orice va face dacă codul este dat, dar totul a fost colectat și testat pe bază (Arduino Nano).

- senzor de inaltime barometric cu bus I2C (BMP085).

- un afișaj LED cu trei cifre și șapte segmente cu un anod comun (afișaj LED cu 7 segmente).
- fire pentru a conecta toate acestea într-un singur întreg, am folosit gata făcute și cu conectori, dar acest lucru nu este deloc necesar (Dupont Wire).

- buton, orice se va face fără a fixa poziția (Buton tact Switch Push Button). De exemplu asta:
- rezistenta de la 1K la 10K.
- trei rezistențe 100 Ohm.
- un fier de lipit cu toate gobolele și capacitatea de a-l folosi.
- Software Arduino.

Opțional:
- placa prototip pentru dezlipirea display-ului.

Pentru cei care nu sunt deloc la subiect. Înainte de a încerca să asamblați un dispozitiv și să aprofundați în cod, vă recomand să vizitați și să citiți câteva resurse:
Introducere în subiect, cele mai simple exemple.
Despre conectarea unui afișaj cu șapte segmente cu exemple.
Descrierea senzorului, exemple, biblioteci.
Nu va dura mult timp, va adăuga multă înțelegere =)

În primul rând, puțin despre afișaj.
Un afișaj LED cu șapte segmente cu un anod comun este doar un astfel de ansamblu de LED-uri (încercuite cu roșu în imagine):
Dacă aruncați o privire mai atentă asupra circuitului, va deveni clar că doar una dintre descărcări poate străluci în același timp, adică. pentru a afișa un număr din trei cifre, trebuie să activați și să dezactivați fiecare cifră pe rând și să faceți acest lucru foarte repede. Prin urmare, orice s-ar putea spune, numerele vor pâlpâi, principalul lucru este că această pâlpâire este suficient de frecventă și nu este percepută de ochi ca pâlpâire. Aceasta înseamnă că arduino va funcționa și ca controler pentru acest afișaj, de fapt, desenând pe rând numerele care alcătuiesc un număr egal cu înălțimea curentă.
Voi face o rezervare imediat, puteți cumpăra o soluție gata făcută cu un controler integrat, dar costă de 5 ori mai mult și nu am dat peste o implementare potrivită la căutare. Am vrut exact pe 3 biți și tot mai multe pe 4 biți sunt la vânzare.
Apropo, având în vedere că afișajul este format din trei cifre, înălțimea maximă pe care o poate afișa = 999m. În principiu, dispozitivul poate fi ușor adaptat pentru un afișaj cu 4 cifre, dar programul va trebui să fie ușor modificat. Cine înțelege codul pentru 3 cifre îl poate adapta cu ușurință pentru 4 cifre.
Drept urmare, în ciuda problemelor emergente cu această pâlpâire, a fost posibil să se obțină rezultate mai mult sau mai puțin acceptabile, mai multe despre cele de mai jos. au apărut probleme din cauza senzorului de înălțime.
Mai multe despre senzor.
Senzorul este barometric, adică determină modificarea altitudinii din modificarea presiunii atmosferice. De fapt, senzorul măsoară doar presiunea atmosferică; codul bibliotecii pentru senzor calculează deja altitudinea în funcție de presiune. În acest caz, senzorul are un ADC încorporat și o interfață I2C, de ex. oferă valoarea măsurată deja în formă digitală, ceea ce este, fără îndoială, un plus. Există o bibliotecă gata făcută pentru lucrul cu senzorul. Am folosit prima versiune, este mai puțin consumatoare de resurse și mai ușor de încorporat în cod. Funcționalitatea bibliotecii vă permite să ajustați precizia măsurării pe o scară de la 0 - cea mai mică precizie, la 3 - cea mai mare precizie (vezi codul). Deși, să fiu sincer, nu am observat nicio diferență deosebită între nivelurile de peste 0. Eroarea de măsurare este de aproximativ 1 metru, ceea ce este în general destul de acceptabil. Rezultatul măsurării este înălțimea absolută deasupra nivelului mării la presiunea atmosferică normală. Dar acest lucru nu este deloc interesant. Pe de altă parte, cu ajutorul arduino și a celor mai simple operații matematice, puteți calcula cu ușurință înălțimea relativă, care a fost făcută.
Dar nu a fost fără o muscă în unguent: sondarea senzorului folosind funcția standard durează mult timp și, având în vedere că arduino este și un controler de afișare cu șapte segmente, s-au dovedit efecte speciale destul de amuzante, de exemplu. în timpul interogării senzorului, afișajul s-a oprit de la sine și, prin urmare, figura care era afișată la acel moment a ars puțin mai mult decât altele. Drept urmare, acest tip de ghirlandă a fost obținut din trei elemente.
Până la urmă, după ce ne-am jucat cu întârzierile și am ales perioada optimă de sondare pentru senzor, am reușit să obținem absența aproape completă a pâlpâirii. Mai mult, nu este nevoie să interogați senzorul la fiecare ciclu de program, înălțimea încă se modifică cu o viteză limitată. Dar pâlpâirea primei categorii din cauza erorii și a interogării prea frecvente a senzorului nu arată frumos.
În principiu, dacă aș avea o îndemânare mai bună, ar fi posibil să rescriu biblioteca de senzori, dar încă nu sunt pregătit. Și într-o astfel de implementare, își îndeplinește pe deplin funcțiile, restul sunt versuri.
Ieșirea cifrelor a fost comutată la întrerupere, pâlpâirea a fost eliminată, schița a fost actualizată.
Pe aceasta, probabil că voi termina o scurtă excursie prin elementele dispozitivului și voi trece la montaj.

Schema de conectare a elementelor dispozitivului (pe care se poate face clic):


Întrebări anticipative din seria „Ce, nu ai putut desena o schemă normală?!” Voi spune că aș putea, dar pentru neinițiați cred că va fi mai ușor pentru neinițiați să perceapă, dar inițiaților nu le pasă, așa că diagrama se citește normal. Am găsit pinout-ul dispozitivului cu șapte segmente doar pentru versiunea pe patru biți, versiunea pe trei biți diferă prin lipsa ciudată a celui de-al 6-lea picior.

În ceea ce privește sursa de alimentare a dispozitivului: Arduino în forma sa originală este capabil să supraviețuiască în mod normal de la 7V la 16V, în cazuri extreme de la 6V la 20V. Dar, având în vedere că am avut o clonă chinezească, nu am început niciun experiment josnic, dar bateria LiPo 3S funcționează fără probleme.
Este recomandabil să împachetați senzorul în așa fel încât accesul la aer să fie liber, dar în același timp să excludeți suflarea directă de către fluxurile de aer a orificiului din senzor, de exemplu, acoperiți-l cu cauciuc spumos.
Recomand să scoateți LED-urile RX și TX de pe placa arduino. sunt conectate în paralel cu pini digitali 0 și 1, din cauza cărora segmentele conectate la acești pini vor străluci cu mai puțină luminozitate.

BMP085 este un senzor pentru monitorizarea presiunii barometrice (in plus, monitorizeaza si temperatura).

Senzorul este folosit în multe proiecte, inclusiv în cele care folosesc Arduino, deoarece practic nu are analogi. În plus, este și ieftin. Prima întrebare care apare este: de ce ar măsura cineva presiunea atmosferică? Există două motive pentru aceasta. Primul este controlul altitudinii. Odată cu creșterea altitudinii, presiunea scade. Este foarte convenabil pentru drumeții, ca alternativă la navigatoarele GPS. În plus, indicatorul presiunii atmosferice este folosit pentru a prezice vremea.

BMP085 a fost înlocuit la un moment dat de senzorul BMP180, care se conectează la Arduino și la alte microcontrolere în același mod ca predecesorul său, dar în același timp este mai puțin și costă mai puțin.

Specificații BMP085

  • Interval de sensibilitate: 300-1100 hPa (9000 m - 500 m deasupra nivelului mării);
  • Rezolutie: 0,03 hPa / 0,25 m;
  • Temperatura de lucru -40 până la + 85 ° C, precizie de măsurare a temperaturii + -2 ° C;
  • conexiune I2c;
  • V1 de pe modul folosește putere de 3,3 V și putere logică;
  • V2 de pe modul folosește 3,3-5 V putere și putere logică;

După repornirea IDE-ului Arduino, puteți rula primul exemplu de schiță, al cărui cod este dat mai jos:

#include & ltWire.h & gt

#include & ltAdafruit_Sensor.h & gt

#include & ltAdafruit_BMP085_U.h & gt

Adafruit_BMP085_Unified bmp = Adafruit_BMP085_Unified (10085);

void setup (void)

Serial.begin (9600);

Serial.println ("Test senzor de presiune"); Serial.println ("");

/ * Inițializați senzorul * /

dacă (! bmp.begin ())

/ * Dacă a apărut o inscripție: „A existat o problemă la detectarea BMP085...”,

Verificați dacă senzorul este conectat corect * /

Serial.print ("Hopa, nu a fost detectat niciun BMP085... Verificați cablarea sau ADDR-ul I2C!");

senzori_event_t eveniment;

bmp.getEvent (& eveniment);

/ * afișați rezultatele (presiunea barometrică este măsurată în hPa) * /

dacă (eveniment.presiune)

/ * Afișează presiunea atmosferică în hPa * /

Serial.print ("Presiune:"); Serial.print (presiune.eveniment); Serial.println ("hPa");

Deschideți fereastra monitorului serial (rată de transmisie - 9600). Schița noastră ar trebui să scoată date de presiune în hPa (hectopascali). Puteți testa funcționalitatea senzorului apăsând degetul pe senzor. Figura arată valorile presiunii după apăsarea cu degetul.


Măsurarea înălțimii deasupra nivelului mării

Probabil știi că presiunea scade odată cu creșterea altitudinii. Adică putem calcula altitudinea cunoscând presiunea și temperatura. Din nou, vom lăsa matematica în culise. Dacă sunteți interesat de calcule, vă puteți familiariza cu ele pe această pagină Wikipedia.

Exemplul de mai jos va folosi biblioteca suplimentară Arduino. Pentru a calcula altitudinea folosind senzorul BMP085, actualizați funcția „buclă de gol ()”. Modificările necesare ale schiței sunt prezentate în schița de mai jos. Acest lucru vă va oferi o citire a temperaturii pe baza nivelului de presiune și a temperaturii.

/ * creează un nou eveniment pentru senzor * /

senzori_event_t eveniment;

bmp.getEvent (& eveniment);

/ * afișează rezultatele (presiunea barometrică în hPa) * /

dacă (eveniment.presiune)

/ * afișează presiunea atmosferică în hPa * /

Serial.print ("Presiune:");

Serial.print (presiune.eveniment);

Serial.println ("hPa");

/ * pentru a calcula înălțimea cu o anumită precizie, trebuie să știți *

* presiunea medie si temperatura mediului ambiant

* în grade Celsius în momentul efectuării citirilor *

* dacă nu aveți aceste date, puteți utiliza „valoarea implicită”,

* care este egal cu 1013,25 hPa (această valoare este definită ca

* SENSORS_PRESSURE_SEALEVELHPA *

* în fișierul senzori.h). Dar rezultatele nu vor fi exacte *

* valorile cerute pot fi găsite pe site-urile cu prognoze de temperatură *

* sau pe resursele centrelor de informare din aeroporturile mari *

* de exemplu, pentru Paris, Franța, poate fi găsită presiunea medie actuală *

* pe site: http://bit.ly/16Au8ol * /

/ * obțineți valoarea actuală a temperaturii de la senzorul BMP085 * /

temperatura de plutire;

bmp.getTemperature (& temperatura);

Serial.print ("Temperatura:");

Serial.print (temperatura);

Serial.println ("C");

/ * convertiți datele primite la înălțime * /

/ * actualizați următoarea linie pentru a reflecta valorile curente * /

float seaLevelPressure = SENSORS_PRESSURE_SEALEVELHPA;

Serial.print ("Altitudine:");

Serial.print (bmp.pressureToAltitude (seaLevelPressure,

Serial.println ("m");

Serial.println ("");

Serial.println („Eroare senzor”);

Lansăm schița și vedem înălțimea calculată deasupra nivelului mării.

Precizia citirilor BMP085 poate fi crescută semnificativ prin ajustarea valorii medii a presiunii, care variază în funcție de vreme. Fiecare 1 hPa de presiune pe care nu l-am luat în calcul duce la o eroare de 8,5 metri!

Figura de mai jos prezintă valorile presiunii de la una dintre resursele de informații ale aeroportului european. Valoarea presiunii este evidențiată cu galben, pe care o putem folosi pentru a rafina rezultatele.


Să schimbăm următoarea linie din schița noastră, notând valoarea reală (1009 hPa) în ea:

float seaLevelPressure = 1009;

Ca rezultat, vom obține rezultate ușor diferite:

Sugestie: când specificați presiunea, asigurați-vă că convertiți datele utilizate în hPa.

Utilizarea BMP085 (API v1)

Să repetăm ​​încă o dată: pentru a afla presiunea și altitudinea deasupra nivelului mării, trebuie să faci niște calcule. Dar toate sunt deja incluse în Biblioteca Arduino Adafruit_BMP085 (API v1), pe care o puteți descărca din link.

După instalarea bibliotecilor, trebuie să reporniți IDE-ul Arduino

După repornire, puteți rula primul exemplu de schiță:

#include & ltWire.h & gt

Adafruit_BMP085 bmp;

Serial.begin (9600);

Serial.println ("* C");

Serial.print ("Presiune =");

Serial.println ("Pa");

Serial.println ();

După ce ați intermit Arduino, deschideți monitorul serial. Setați viteza de transmisie la 9600. Schița va afișa temperatura în grade Celsius și presiunea în pascali. Dacă puneți degetul pe elementul senzor al senzorului, temperatura și presiunea vor crește:


Măsurarea altitudinii (API v1)

Pentru a controla altitudinea, rulați schița de mai jos:

#include & ltWire.h & gt

#include & ltAdafruit_BMP085.h & gt

Adafruit_BMP085 bmp;

Serial.begin (9600);

Serial.print ("Temperatura =");

Serial.print (bmp.readTemperature ());

Serial.println ("* C");

Serial.print ("Presiune =");

Serial.print (bmp.readPressure ());

Serial.println ("Pa");

// calculează altitudinea pe baza valorilor

// Presiunea barometrică „standard” egală cu 1013,25 milibari = 101325 Pascal

Serial.print ("Altitudine =");

Serial.print (bmp.readAltitude ());

Serial.println („metri”);

Serial.println ();

Rulați schița pentru a afișa rezultatele:


Pe baza citirilor de mai sus, ne aflăm la -21,5 metri deasupra nivelului mării. Dar știm că suntem deasupra mării! Amintiți-vă de aceeași problemă ca atunci când utilizați API V2. Trebuie să ținem cont de vreme! BINE. Să presupunem că am găsit un site meteorologic bun și presiunea este de 101,964 Pa. Deschideți exemplul Exemple-> BMP085test în Arduino IDE și editați linia care este evidențiată în figura de mai jos:


În această linie trebuie să introduceți datele presiunii curente. După o nouă lansare, veți constata că datele s-au schimbat dramatic și am ajuns la 29,58 de metri cu un semn plus, ceea ce seamănă mult mai mult cu adevărul.


Lasă-ți comentariile, întrebările și împărtășește-ți experiența personală mai jos. În discuție se nasc adesea idei și proiecte noi!

Mărimea presiunii atmosferice, viteza și natura modificărilor acesteia joacă un rol important în prezicerea vremii și, de asemenea, afectează puternic bunăstarea persoanelor susceptibile de dependență meteorologică - afecțiuni asociate cu diferite fenomene meteorologice. Barometrele sunt folosite pentru a măsura presiunea atmosferică. Barometrul aneroid mecanic are două săgeți. Unul arată presiunea curentă. O altă săgeată, care poate fi setată manual în orice poziție, vă permite să marcați valoarea măsurată pentru a determina tendința modificărilor presiunii atmosferice în timp. Este foarte de dorit ca barometrul electronic să arate, de asemenea, nu numai valoarea presiunii atmosferice, ci să permită și să se determine dacă există o creștere sau o scădere și cât de repede se modifică parametrul măsurat.

Stațiile meteo interne ieftine arată doar pictograme cu imagini cu picături de ploaie, nori sau soare. Este dificil de spus cum sunt legate aceste pictograme de presiunea atmosferică și dacă această stație meteo are un senzor barometric sau sunt folosite alte moduri creative de a prezice vremea. Stațiile meteo mai avansate arată valoarea actuală a presiunii ca un număr, iar presiunea se schimbă în ultimele ore ca un grafic cu bare brut, în principal în scopuri decorative. Astfel de stații meteo sunt mult mai scumpe. Pe piata exista si aparate foarte sofisticate destinate marinarilor, iahtistilor etc., care arata atat modificarile de presiune cat si valoarea curenta cu o precizie ridicata, insa astfel de aparate sunt foarte scumpe.

Această publicație discută despre un barometru simplu de casă care arată amploarea și rata schimbării presiunii atmosferice, precum și temperatura aerului.

Aspectul dispozitivului este prezentat în fotografie.

Rezultatele măsurătorilor sunt afișate pe un afișaj de sintetizare cu două linii. Prima linie afișează rezultatul măsurării presiunii atmosferice actuale în mm Hg, abaterea valorii actuale a presiunii de la valoarea medie pentru o anumită locație (excesul valorii actuale a presiunii peste valoarea medie este considerat pozitiv), precum și ca temperatura aerului in grade Celsius. Datele afișate în linia de sus sunt reîmprospătate la fiecare 6 secunde. Ieșirea de date noi este însoțită de o clipire a LED-ului situat deasupra indicatorului.

A doua linie a indicatorului afișează creșterile de presiune din ultima oră, trei ore și zece ore. Dacă presiunea a crescut în perioada de timp specificată, atunci incrementul corespunzător este afișat cu un plus, în caz contrar - cu un minus. Datele din a doua linie sunt actualizate la fiecare 10 minute. Imediat după pornirea barometrului, a doua linie va fi goală. Valorile numerice vor apărea acolo după 1 oră, 3 ore și, respectiv, 10 ore.

Barometrul este proiectat să funcționeze într-o cameră uscată, încălzită, la o temperatură de 0 ... 40 ° C și o presiune atmosferică de 600 ... 825 mm Hg. Artă.

Precizia măsurării presiunii și temperaturii este determinată în întregime de precizia senzorului de presiune Bosch BMP180 utilizat. Eroarea tipică de măsurare a presiunii este de -1 hPa, care corespunde aproximativ la 0,75 mm Hg. Componenta de zgomot la măsurarea presiunii - 0,02 hPa (0,015 mm Hg). Incertitudinea tipică de măsurare a temperaturii în jurul valorii de 25 ° C este de +/- 0,5 ° C. Mai multe detalii despre caracteristicile tehnice ale senzorului BMP180 pot fi găsite pe acestea. descrierea din anexa.

Intervalele de timp din acest dispozitiv sunt numărate de software. Eroarea în formarea acestor intervale, măsurată de autor, nu depășește un minut în 10 ore.

Diagrama barometrului este prezentată în figură.

Elementul principal al dispozitivului este modulul Arduino Nano. Autorul a folosit versiunea a 3-a cu microcontrolerul ATmega 328. Memoria modulului în acest caz este ocupată doar de o treime, astfel încât este posibil să utilizați modulul Arduino Nano cu microcontrolerul ATmega 168.

Afișează Winstar WH1602L - două rânduri cu 16 caractere pe linie. Se bazează pe controlerul HD44780. Rezistorul R2 vă permite să reglați contrastul imaginii. Dacă tensiunea la pinul 3 (Vo) este foarte diferită de cea optimă, atunci nicio imagine nu va fi vizibilă deloc pe afișaj. Această circumstanță trebuie luată în considerare la pornirea dispozitivului pentru prima dată. Pentru exemplul afișajului folosit de autor, tensiunea optimă la pinul 3 a fost de aproximativ 1 V. Rezistorul R3 determină valoarea curentă a LED-urilor de iluminare de fundal.

Senzorul de presiune BMP180 are o carcasa metalica cu dimensiunile de 3,6x3,6x1 mm. Concluziile sale sunt tampoane de contact situate pe fundul carcasei. În plus, senzorul necesită o sursă de alimentare de 1,8 - 3,6 V. Nivelurile de semnal pe care senzorul le schimbă cu dispozitivul extern diferă și ele de cele necesare. Aceste circumstanțe fac dificilă utilizarea directă a BMP180. Din fericire, această problemă poate fi rezolvată cu ușurință. Sunt la vânzare module bazate pe senzori BMP180, care includ senzorii înșiși și toate elementele potrivite. Aceste module sunt o placă de 10x13mm. Costul lor este de aproximativ 1,4 USD. Aspectul modulului este prezentat în fotografia următoare.

LED-ul HL1 clipește la fiecare 6 secunde, semnalând că noi rezultate sunt afișate pe barometru. Autorul a folosit un LED verde cu un diametru de 3 mm L-1154GT de la Kingbright.
Condensatorul C1 are o capacitate destul de mare, ceea ce face ca dispozitivul să fie insensibil la întreruperile de curent pe termen scurt. Dacă acest lucru nu este necesar, atunci C1 poate fi redus la 500 microfarads.
Dioda D1 stinge lumina de fundal a indicatorului în caz de pană de curent. Aceasta crește funcționarea autonomă a barometrului din energia stocată în condensatorul C1.

Aparatul poate fi alimentat de la orice sursă de curent continuu (încărcător de telefon mobil, alimentator al oricărui gadget etc.) cu o tensiune de ieșire de 8 ... 12 V. La o tensiune de 9 V, barometrul consumă aproximativ 80 mA.

Dispozitivul este asamblat pe o placă de 85 x 55 mm, care este atașată de afișaj folosind o placă de plexiglas.

Senzorul BMP180 este situat în partea de jos - pe cât posibil de elementele principale generatoare de căldură, care sunt rezistența R3 și afișajul cu LED-uri iluminate din spate. Corpul dispozitivului este o cutie de plastic de 160x160x25. Un număr de găuri de ventilație trebuie să fie găurite în pereții inferiori și superiori ai cutiei.

Schița care trebuie să fie flashată în memoria modulului Arduino Nano este prezentată în anexă. Autorul a folosit Arduino IDE 1.8.1. Pentru a susține senzorul de presiune, trebuie să instalați biblioteca Adafruit-BMP085. Dosarul corespunzător este inclus în anexă.

Înainte de a încărca schița, în rândul 17, în locul numărului 740.0, care corespunde presiunii medii la locul de instalare a copiei autorului a barometrului, introduceți presiunea medie în mm. rt. Artă. corespunzătoare locației în care va fi instalat barometrul dvs. Ca o primă aproximare, acest parametru poate fi determinat prin formula Pav = 760 - 0,091h, unde h este înălțimea deasupra nivelului mării în metri. Cel mai simplu mod de a determina altitudinea este cu un navigator GPS.

Această formulă nu ia în considerare mulți factori care afectează presiunea atmosferică și este aplicabilă numai pentru altitudini de până la 500 m. O descriere a modalităților de a determina cu mai multă precizie presiunea medie este în afara domeniului de aplicare al acestei publicații. Ele pot fi găsite pe numeroasele materiale despre meteorologie, care sunt disponibile pe Internet.

Lista radioelementelor

Desemnare Tip de Denumirea Cantitate NotăMagazinCaietul meu
A1 Modul senzor BMP180 1 În blocnotes
A2 Placa Arduino

Arduino Nano 3.0

1 În blocnotes
VD1 Dioda redresoare

1N4007

1 În blocnotes
HG1 Ecran LCDWH1602L1 Winstar În blocnotes
HL1 Dioda electro luminiscentaL-1154GT1 Kingbright În blocnotes
C1 Condensator electrolitic4700 uF x 16 V1

Top articole similare