Si të konfiguroni telefonat inteligjentë dhe PC. Portali informativ

Barometër i avancuar. Sensori i presionit atmosferik BMP085 dhe Arduino

Prezantimi

Çfarë mund të shfaqet në një ekran me dy rreshta përveç "Hello world!"? Pse të mos shfaqni temperaturën, lagështinë dhe presionin?

Sensorët e ofruar si një udhëzues studimi për arduino (DHT11, DHT22) tregojnë temperaturën dhe lagështinë. Për qëllime arsimore (për universitetin) ishte e nevojshme të vëzhgohej edhe presioni. Natyrisht, foltorja ka një barometër, por pse të mos bashkoni tuajin? Përveç kësaj, ju mund të grumbulloni më tej leximet në modalitetin automatik, dhe kjo është një përvojë e mirë në mësimin e arduino.

Në një mënyrë apo tjetër, komponentët u porositën nga Kina dhe kjo pajisje u montua.

Komponentët e nevojshëm

Një USB-UART u përdor për të dërguar skicën te arduino. Ishte gjithashtu e mundur të përdorej një Raspberry Pi ose një kompjuter me një port COM.

Diagrami i lidhjes për firmuerin dhe kodin e programit

Nga Kina, USB-UART erdhi me një grup telash:

Ishin mjaftueshëm. E lashë kërcyesin në 3.3 volt, pavarësisht se versioni im arduino mundësohet nga 5 volt.

UART - Arduino
5v - VCC
TXD - RXD
RXD - TXD
GND - GND
CTS - DTR (opsionale, nuk funksionoi për mua, ndoshta sepse voltazhi i sinjalit mbeti 3.3V)

Nëse nuk e lidhni DTR, atëherë pas dërgimit të firmuerit, arduino duhet të rindizet me butonin e integruar, shkëmbimi aktiv i të dhënave në të dy drejtimet do të fillojë (siç dëshmohet nga LED në USB-UART), pas një shkarkimi i suksesshëm i firmuerit, ai do të rindizet vetë.

Bibliotekat e kërkuara të palëve të treta:

Vetë kodi, me komente nga shembujt (në rast se dikush duhet të ndryshojë diçka).

Kodi

#përfshi #include "SparkFunBME280.h" #include "Wire.h" #include "SPI.h" #include // Objekti global i sensorit BME280 mySensor; LiquidCrystal_I2C LCD (0x3F, 16.2); // Shfaq adresën, në rastin tim konfigurimi i zbrazët 0x3F () (lcd.init (); lcd.backlight (); // *** Cilësimet e drejtuesit ***************** *************** // // commInterface mund të jetë I2C_MODE ose SPI_MODE // specifikoni chipSelectPin duke përdorur emrat e pineve arduino // specifikoni adresën I2C. Mund të jetë 0x77 (default) ose 0x76 // Për I2C, aktivizoni sa vijon dhe çaktivizoni seksionin SPI mySensor.settings.commInterface = I2C_MODE; mySensor.settings.I2CAddress = 0x76; // Adresa e sensorit, në rastin tim jo standarde // Për SPI aktivizoni sa vijon dhe çaktivizoni seksionin I2C // mySensor.settings.commInterface = SPI_MODE; //mySensor.settings.chipSelectPin = 10; // *** Cilësimet e funksionimit ************************* **** // // renMode mund të jetë: // 0, modaliteti i gjumit // 1 ose 2, modaliteti i detyruar // 3, modaliteti normal mySensor.settings.runMode = 3; // Shembulli sugjeron përdorimin e modalitetit të detyruar, por kur përditësohet një herë në sekondë, modaliteti normal është i mjaftueshëm // tStandby mund të jetë: // 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; // Natyrisht nuk është e nevojshme më shpesh // filtri mund të jetë i fikur ose numri i koeficientëve FIR për t'u përdorur: // 0, filtrimi i fikur // 1, koeficientët = 2 // 2, koeficientët = 4 // 3, koeficientët = 8 // 4 , koeficientët = 16 mySensor.settings.filter = 0; // tempOverSample mund të jetë: // 0, anashkaluar // 1 deri në 5, mbikampionimi * 1, * 2, * 4, * 8, * 16 përkatësisht mySensor.settings.tempOverSample = 1; // pressOverSample mund të jetë: // 0, anashkaluar // 1 deri në 5, mbikampionimi * 1, * 2, * 4, * 8, * 16 përkatësisht mySensor.settings.pressOverSample = 1; // humidOverSample mund të jetë: // 0, i anashkaluar // 1 deri në 5, mbikampionimi * 1, * 2, * 4, * 8, * 16 përkatësisht mySensor.settings.humidOverSample = 1; // Thirrja e .begin () bën që cilësimet të ngarkohen mySensor.begin (); ) void loop () (// Shkronjat mund të shfaqen një herë, dhe më pas leximet mund të ndryshohen, por leximet mund të zhvendosin vijën kur ndryshon numri i shifrave të rëndësishme.lcd.setCursor (0,0); lcd.print ( "H ="); lcd .print ((uint8_t) mySensor.readFloatHumidity ()); lcd.print ("%)); lcd.setCursor (13,0); lcd.print ("P:"); lcd.setCursor (0,1); int mmH = mySensor.readFloatPressure () / 133; lcd.print (mmH); LCD.print ( "mmH"); printim LCD (mySensor.readFloatPressure ()); lcd.setCursor (14,1); lcd.print ("Pa"); vonesë (1000);)


Adresa e sensorit mund të merret me mend, ka vetëm dy prej tyre.

Si të zbuloni adresën e ekranit tuaj, mund ta shihni. Ka dy etiketa, në varësi të mikroqarkullimit.

Në këtë rast:


Dhe adresa do të jetë 0x3F sepse A0 - A2 e hapur:

LED që është i mbyllur në një ovale mund të avullohet më mirë.

Diagrami i lidhjes

Rezistenca u zgjodh si gjysma e rezistencës së sensorit (midis VVC dhe GND) në mënyrë që rënia e tensionit në të ishte 1.7 volt. Qarku mund të mundësohet gjithashtu nga hyrja RAW, me një tension të ndryshëm (për shembull, nga kurora).

Fotografia tregon se për kompaktësi, mund të merrni energji në sensor dhe të shfaqni nga një kunj tjetër. Ju gjithashtu mund të shihni një degë të një palë telash portokalli-verdhë, një rezistencë 100 Ohm varet mbi to, për të zvogëluar shkëlqimin e dritës së prapme (mund ta lini kërcyesin, por do t'ju presë sytë).

Në rastin tim, gjithçka mundësohet nga një furnizim i vjetër me energji kompjuteri. Mund të mundësohet nga USB. Të gjithë përbërësit ishin ngjitur me ngjitësin Moment që ishte pranë.

Rezultati

Në vendin e punës, 1602 u shfaq me bulona në tryezë, e cila tregon presionin, lagështinë, temperaturën. Arduino mund të rifreskohet pa hequr (mund të bëhet një vijë zvarritëse).

Pershendetje kolege!
Sepse në dimër, moti kryesisht nuk fluturon, domethënë shumë kohë e lirë, që do të ishte mirë të bëhej diçka, në mënyrë që truri të mos thahet nga përtacia. Kohët e fundit vendosa të zotëroj temën e holivarëve të ashpër dhe debateve të nxehta, përkatësisht: mikrokontrolluesin Atmega328 në zbatimin e Arduino.
Ju kërkoj fort të mos debatoni për vetë Arduinën, për të gjitha të mirat dhe të këqijat e saj, e kështu me radhë në rrjetin e informacionit me shumicë.
Pra, duke marrë parasysh specifikat e faqes, mendoj se të flasësh për "shtëpinë inteligjente" nuk është tërësisht në temë, prandaj, në bazë të Arduinës, do të ndërtojmë një lartësimatës barometrik me një shtatë segment treshifror. Ekran LED.

Më shumë detaje?


Duhet të them menjëherë se nuk pretendoj të jem origjinal dhe inovativ, ka projekte të ngjashme në masë në rrjet. Por në këtë burim nuk gjeta asgjë të tillë duke kërkuar, prandaj vendosa ta publikoj, papritmas do të jetë e dobishme për dikë.
Përsëri, e kam shkruar vetë kodin, prandaj, nëse ka hinduizëm solid, mos gjykoni rreptësisht =) Unë jam duke mësuar deri tani. Hera e fundit që kam programuar kontrollues në vitin e 4 të institutit është më shumë se 10 vjet më parë =) Kritika kompetente dhe konstruktive është e mirëpritur!
Unë do të përpiqem të shpjegoj në një mënyrë të arritshme dhe të detajuar se si të montoni një pajisje të tillë, një person me pothuajse çdo nivel trajnimi mund ta trajtojë atë, mendoj.

Avantazhi kryesor i kësaj pajisjeje është çmimi i saj. Edhe sipas jetës aktuale dhe kursit të këmbimit, ju mund të mbani brenda 350 rubla, që nuk janë para në përgjithësi. Ju gjithashtu do të keni nevojë për duar të drejta dhe aftësi për të trajtuar një hekur saldimi.

Funksionet e pajisjes:
- Matja e lartësisë aktuale dhe shfaqja e saj në ekranin LED.
- Memorizimi i vlerës maksimale të lartësisë që ka ndodhur që nga momenti i ndezjes së energjisë.
- Shfaqja e lartësisë maksimale në ekran duke shtypur një buton.
- Shkrimi i vlerës maksimale të lartësisë në memorien e paqëndrueshme (EEPROM) të komanduesit (e ruajtur pas fikjes).
- Leximi i lartësisë maksimale të ruajtur nga EEPROM dhe shfaqja e saj.

Pika zero e referencës është lartësia në të cilën pajisja është ndezur.

Çfarë ju nevojitet (fjalë kyçe në kllapa për të kërkuar në të gjitha llojet e ebay-ve, etj.)
- një mikrokontrollues arduino, në parim, pothuajse çdo do të bëjë nëse kodi është i përshtatur, por gjithçka u mblodh dhe u testua në bazë (Arduino Nano).

- Sensori barometrik i lartësisë me autobus I2C (BMP085).

- një ekran LED me shtatë segmente me tre shifra me një anodë të përbashkët (ekran LED me 7 segmente).
- tela për të lidhur të gjitha këto në një tërësi të vetme, kam përdorur të gatshëm dhe me lidhës, por kjo nuk është aspak e nevojshme (Dupont Wire).

- butoni, çdo do të bëjë pa rregulluar pozicionin (Tact Switch Push Button). Për shembull kjo:
- rezistencë nga 1K në 10K.
- tre rezistorë 100 Ohm.
- një saldator me të gjitha gobolat dhe aftësinë për ta përdorur atë.
- Softueri Arduino.

Opsionale:
- Pllakë prototip për shkrirjen e ekranit.

Për ata që nuk janë fare në këtë temë. Përpara se të përpiqeni të montoni një pajisje dhe të gërmoni në kod, unë rekomandoj shumë të vizitoni dhe lexoni disa burime:
Hyrje në temë, shembujt më të thjeshtë.
Rreth lidhjes së një ekrani me shtatë segmente me shembuj.
Përshkrimi i sensorit, shembujt, bibliotekat.
Nuk do të marrë shumë kohë, do të shtojë shumë mirëkuptim =)

Së pari, pak për ekranin.
Një ekran LED me shtatë segmente me një anodë të zakonshme është vetëm një montim i tillë LED (të rrethuar në të kuqe në foto):
Nëse shikoni më nga afër qarkun, do të bëhet e qartë se vetëm një nga shkarkimet mund të shkëlqejë në të njëjtën kohë, d.m.th. për të shfaqur një numër treshifror, duhet të ndizni dhe fikni secilën shifër me radhë dhe ta bëni atë shumë shpejt. Prandaj, çfarëdo që mund të thuhet, numrat do të dridhen, gjëja kryesore është se kjo dridhje është mjaft e shpeshtë dhe nuk perceptohet nga syri si dridhje. Kjo do të thotë që arduino do të funksionojë edhe si kontrollues për këtë ekran, në fakt, duke tërhequr me radhë numrat që përbëjnë një numër të barabartë me lartësinë aktuale.
Unë do të bëj një rezervim menjëherë, ju mund të blini një zgjidhje të gatshme me një kontrollues të integruar, por kushton 5 herë më shumë dhe nuk hasa në një zbatim të përshtatshëm gjatë kërkimit. Doja saktësisht 3-bit, dhe gjithnjë e më shumë 4-bit janë në shitje.
Meqë ra fjala, duke qenë se ekrani është treshifror, lartësia maksimale që mund të shfaqë = 999m. Në parim, pajisja mund të përshtatet lehtësisht për një ekran 4-shifror, por programi do të duhet të modifikohet pak. Kush e kupton kodin për 3 shifra, mund ta përshtatë lehtësisht për 4 shifra.
Si rezultat, pavarësisht problemeve të shfaqura me këtë vezullim, ishte e mundur të arriheshin rezultate pak a shumë të pranueshme, më shumë për atë më poshtë. problemet u shfaqën për shkak të sensorit të lartësisë.
Më shumë rreth sensorit.
Sensori është barometrik, d.m.th. përcakton ndryshimin e lartësisë nga ndryshimi i presionit atmosferik. Në fakt, sensori mat vetëm presionin atmosferik; kodi i bibliotekës për sensorin tashmë është duke llogaritur lartësinë në funksion të presionit. Në këtë rast, sensori ka një ADC të integruar dhe një ndërfaqe I2C, d.m.th. jep vlerën e matur tashmë në formë dixhitale, e cila është padyshim një plus. Ekziston një bibliotekë e gatshme për të punuar me sensorin. Kam përdorur versionin e parë, është më pak intensiv i burimeve dhe më i lehtë për t'u futur në kod. Funksionaliteti i bibliotekës ju lejon të rregulloni saktësinë e matjes në një shkallë nga 0 - saktësia më e ulët, në 3 - saktësia më e lartë (shih kodin). Edhe pse, të them të drejtën, nuk vura re ndonjë ndryshim të veçantë midis niveleve mbi 0. Gabimi i matjes është rreth 1 metër, që në përgjithësi është mjaft i pranueshëm. Rezultati i matjes është lartësia absolute mbi nivelin e detit në presion normal atmosferik. Por kjo thjesht nuk është aspak interesante. Nga ana tjetër, me ndihmën e arduino-s dhe veprimeve më të thjeshta matematikore, mund të llogaritni lehtësisht lartësinë relative, e cila është bërë.
Por nuk ishte pa një mizë: sondazhi i sensorit duke përdorur funksionin standard kërkon shumë kohë, dhe duke pasur parasysh që arduino është gjithashtu një kontrollues i ekranit me shtatë segmente, dolën efekte speciale mjaft qesharake, d.m.th. gjatë marrjes në pyetje të sensorit, ekrani ndaloi vetë dhe për këtë arsye figura që u shfaq në atë kohë digjej pak më gjatë se të tjerët. Si rezultat, ky lloj kurorë është marrë nga tre elementë.
Në fund, pasi luajtëm me vonesat dhe zgjodhëm periudhën optimale të votimit për sensorin, arritëm të arrijmë mungesë pothuajse të plotë të dridhjes. Për më tepër, nuk ka nevojë të merret në pyetje sensori në çdo cikël programi, lartësia ende ndryshon me një shpejtësi të kufizuar. Por dridhja e kategorisë së parë për shkak të gabimit dhe sondazhit shumë të shpeshtë të sensorit nuk duket bukur.
Në parim, nëse do të kisha një aftësi më të mirë, do të ishte e mundur të rishkruaj bibliotekën e sensorëve, por nuk jam ende gati. Dhe në një zbatim të tillë, ai përmbush plotësisht funksionet e tij, pjesa tjetër është tekst.
Dalja e shifrave u kalua në ndërprerje, dridhjet u eliminuan, skica u përditësua.
Mbi këtë, me siguri do të përfundoj një ekskursion të shkurtër nëpër elementët e pajisjes dhe do të kaloj në montim.

Diagrami i lidhjes së elementeve të pajisjes (i klikuar):


Duke parashikuar pyetje nga seria "Çfarë, nuk mund të vizatohej një skemë normale?!" Unë do të them se munda, por për të pa iniciuarin, mendoj se do ta ketë më të lehtë për të perceptuarit, por të iniciuarve nuk u intereson, dhe kështu diagrami lexohet normalisht. Kam gjetur pikën e pajisjes me shtatë segmente vetëm për versionin me katër bit, versioni me tre bit dallon nga mungesa e mprehtë e këmbës së 6-të.

Sa i përket furnizimit me energji të pajisjes: Arduino në formën e tij origjinale është në gjendje të mbijetojë normalisht nga 7V në 16V, në raste ekstreme nga 6V në 20V. Por, duke pasur parasysh që kisha një klon kinez, nuk fillova asnjë eksperiment të poshtër, por bateria LiPo 3S funksionon pa probleme.
Këshillohet që sensori të paketohet në atë mënyrë që qasja në ajër të jetë e lirë, por në të njëjtën kohë të përjashtohet fryrja e drejtpërdrejtë nga rrjedhat e ajrit të vrimës në sensor, për shembull, mbuloni atë me gomë shkumë.
Unë rekomandoj heqjen e LED-ve RX dhe TX nga bordi arduino. ato janë të lidhura paralelisht me 0 dhe 1 kunja dixhitale, për shkak të të cilave segmentet e lidhura me këto kunja do të shkëlqejnë me më pak shkëlqim.

BMP085 është një sensor për monitorimin e presionit barometrik (përveç kësaj, ai gjithashtu monitoron temperaturën).

Sensori përdoret në shumë projekte, përfshirë ato që përdorin Arduino, pasi praktikisht nuk ka analoge. Përveç kësaj, është gjithashtu i lirë. Pyetja e parë që lind është: pse dikush do të matë presionin atmosferik? Ka dy arsye për këtë. E para është të kontrolloni lartësinë. Me rritjen e lartësisë, presioni bie. Është shumë i përshtatshëm për shëtitje, si një alternativë ndaj navigatorëve GPS. Për më tepër, treguesi i presionit atmosferik përdoret për të parashikuar motin.

BMP085 u zëvendësua në një kohë nga sensori BMP180, i cili lidhet me Arduino dhe mikrokontrollues të tjerë në të njëjtën mënyrë si paraardhësi i tij, por në të njëjtën kohë është më pak dhe kushton më pak.

Specifikimet BMP085

  • Gama e ndjeshmërisë: 300-1100 hPa (9000 m - 500 m mbi nivelin e detit);
  • Rezolucioni: 0,03 hPa / 0,25 m;
  • Temperatura e punës -40 deri + 85 ° C, saktësia e matjes së temperaturës + -2 ° C;
  • Lidhja I2c;
  • V1 në modul përdor fuqi 3.3V dhe fuqi logjike;
  • V2 në modul përdor fuqi 3.3-5 V dhe fuqi logjike;

Pas rinisjes së Arduino IDE, mund të ekzekutoni shembullin e parë të skicës, kodi për të cilin jepet më poshtë:

#include & ltWire.h & gt

#include & ltAdafruit_Sensor.h & gt

#include & ltAdafruit_BMP085_U.h & gt

Adafruit_BMP085_Unified bmp = Adafruit_BMP085_Unified (10085);

konfigurimi i zbrazët (i zbrazët)

Seriali.fillimi (9600);

Serial.println ("Testi i sensorit të presionit"); Serial.println ("");

/ * Inicializoni sensorin * /

nëse (! bmp.begin ())

/ * Nëse shfaqet një mbishkrim: "Kishte një problem me zbulimin e BMP085 ...",

Kontrolloni nëse sensori është lidhur saktë * /

Serial.print ("Ooops, nuk u zbulua BMP085 ... Kontrollo instalimet elektrike ose I2C ADDR!");

sensors_event_t ngjarje;

bmp.getEvent (& ngjarje);

/ * shfaq rezultatet (presioni barometrik matet në hPa) * /

nëse (ngjarja.presioni)

/ * Shfaq presionin atmosferik në hPa * /

Serial.print ("Presion:"); Serial.print (ngjarje.presioni); Serial.println ("hPa");

Hapni dritaren e monitorit serik (shkalla e zhurmës - 9600). Skica jonë duhet të nxjerrë të dhënat e presionit në hPa (hectopascals). Mund të testoni funksionalitetin e sensorit duke shtypur gishtin mbi sensor. Figura tregon vlerat e presionit pas shtypjes me gisht.


Matja e lartësisë mbi nivelin e detit

Ju ndoshta e dini se presioni bie me rritjen e lartësisë. Kjo do të thotë, ne mund të llogarisim lartësinë duke ditur presionin dhe temperaturën. Përsëri, matematikën do ta lëmë prapa skenave. Nëse jeni të interesuar për llogaritjet, mund të njiheni me to në këtë faqe Wikipedia.

Shembulli më poshtë do të përdorë bibliotekën shtesë Arduino. Për të llogaritur lartësinë duke përdorur sensorin BMP085, përditësoni funksionin "void loop ()". Ndryshimet e nevojshme në skicë janë paraqitur në skicën më poshtë. Kjo do t'ju japë një lexim të temperaturës bazuar në nivelin e presionit dhe leximin e temperaturës.

/ * krijoni një ngjarje të re për sensorin * /

sensors_event_t ngjarje;

bmp.getEvent (& ngjarje);

/ * shfaq rezultatet (presioni barometrik në hPa) * /

nëse (ngjarja.presioni)

/ * shfaq presionin atmosferik në hPa * /

Serial.print ("Presion:");

Serial.print (ngjarje.presioni);

Serial.println ("hPa");

/ * për të llogaritur lartësinë me një saktësi të caktuar, duhet të dini *

* Presioni mesatar dhe temperatura e ambientit

* në gradë Celsius në kohën e leximit *

* nëse nuk i keni këto të dhëna, mund të përdorni "vlerën e paracaktuar",

* që është e barabartë me 1013.25 hPa (kjo vlerë përcaktohet si

* SENSORS_PRESSURE_SEALEVELHPA *

* në skedarin sensorë.h). Por rezultatet nuk do të jenë të sakta *

* Vlerat e kërkuara mund të gjenden në faqet e internetit me parashikimet e temperaturës *

* ose në burimet e qendrave të informacionit në aeroporte të mëdha *

* p.sh. për Parisin, Francën, mund të gjendet presioni mesatar aktual *

* në faqen e internetit: http://bit.ly/16Au8ol * /

/ * merrni vlerën aktuale të temperaturës nga sensori BMP085 * /

temperatura e notit;

bmp.getTemperatura (& temperatura);

Serial.print ("Temperatura:");

Serial.printim (temperaturë);

Serial.println ("C");

/ * konvertoni të dhënat e marra në lartësi * /

/ * përditësoni rreshtin tjetër për të pasqyruar vlerat aktuale * /

float seaLevelPressure = SENSORS_PRESSURE_SEALEVELHPA;

Serial.print ("Lartësia:");

Printimi serial (bmp.presioni në lartësi (shtypja e nivelit të detit,

Serial.println ("m");

Serial.println ("");

Serial.println ("Gabimi i sensorit");

Nisim skicën dhe shohim lartësinë e llogaritur mbi nivelin e detit.

Saktësia e leximeve të BMP085 mund të rritet ndjeshëm duke rregulluar vlerën mesatare të presionit, e cila ndryshon me motin. Çdo 1 hPa presion që nuk kemi marrë parasysh çon në një gabim prej 8.5 metrash!

Figura më poshtë tregon vlerat e presionit nga një nga burimet e informacionit të aeroportit evropian. Vlera e presionit është e theksuar me të verdhë, të cilën mund ta përdorim për të përmirësuar rezultatet.


Le të ndryshojmë rreshtin e mëposhtëm në skicën tonë, duke shkruar vlerën aktuale (1009 hPa) në të:

float seaLevelPressure = 1009;

Si rezultat, ne do të marrim rezultate paksa të ndryshme:

Këshillë: kur specifikoni presionin, sigurohuni që të konvertoni të dhënat e përdorura në hPa.

Duke përdorur BMP085 (API v1)

Le të përsërisim edhe një herë: për të zbuluar presionin dhe lartësinë mbi nivelin e detit, duhet të bëni disa llogaritje. Por të gjitha janë përfshirë tashmë në Adafruit_BMP085 Arduino Library (API v1), të cilën mund ta shkarkoni nga lidhja.

Pas instalimit të bibliotekave, duhet të rinisni Arduino IDE

Pas rindezjes, mund të ekzekutoni shembullin e parë të skicës:

#include & ltWire.h & gt

Adafruit_BMP085 bmp;

Seriali.fillimi (9600);

Serial.println ("* C");

Serial.print ("Presioni =");

Serial.println ("Pa");

Serial.println ();

Pasi të ndizni Arduino-n tuaj, hapni monitorin tuaj serial. Vendosni shpejtësinë e zhurmës në 9600. Skica do të nxjerrë temperaturën në gradë Celsius dhe presionin në Pascal. Nëse vendosni gishtin në elementin ndijor të sensorit, temperatura dhe presioni do të rriten:


Matja e lartësisë (API v1)

Për të kontrolluar lartësinë, thjesht ekzekutoni skicën më poshtë:

#include & ltWire.h & gt

#include & ltAdafruit_BMP085.h & gt

Adafruit_BMP085 bmp;

Seriali.fillimi (9600);

Serial.print ("Temperatura =");

Serial.print (bmp.readTemperature ());

Serial.println ("* C");

Serial.print ("Presioni =");

Serial.print (bmp.readPressure ());

Serial.println ("Pa");

// llogarit lartësinë në bazë të vlerave

// Presioni barometrik "standard" i barabartë me 1013.25 milibar = 101325 Pascal

Serial.print ("Lartësia =");

Serial.print (bmp.readAltitude ());

Serial.println ("metra");

Serial.println ();

Drejtoni skicën për të shfaqur rezultatet:


Në bazë të leximeve të mësipërme jemi në -21.5 metra mbi nivelin e detit. Por ne e dimë që jemi mbi det! Duke kujtuar të njëjtin problem si kur përdorni API V2. Duhet të kemi parasysh motin! NE RREGULL. Supozoni se kemi gjetur një faqe interneti të mirë meteorologjike dhe presioni është 101.964 Pa. Hapni shembullin Shembuj-> BMP085test në Arduino IDE dhe modifikoni rreshtin që është theksuar në figurën më poshtë:


Në këtë rresht duhet të futni të dhënat e presionit aktual. Pas një nisjeje të re, do të zbuloni se të dhënat kanë ndryshuar në mënyrë dramatike dhe kemi marrë 29.58 metra me një shenjë plus, që është shumë më tepër si e vërteta.


Lini komentet, pyetjet tuaja dhe ndani përvojën tuaj personale më poshtë. Idetë dhe projektet e reja lindin shpesh në diskutim!

Madhësia e presionit atmosferik, shpejtësia dhe natyra e ndryshimeve të tij, luajnë një rol të rëndësishëm në parashikimin e motit, dhe gjithashtu ndikojnë fuqishëm në mirëqenien e njerëzve të ndjeshëm ndaj varësisë meteorologjike - sëmundje që lidhen me fenomene të ndryshme të motit. Barometrat përdoren për të matur presionin atmosferik. Barometri mekanik aneroid ka dy shigjeta. Njëra tregon presionin aktual. Një shigjetë tjetër, e cila mund të vendoset manualisht në çdo pozicion, ju lejon të shënoni vlerën e matur për të përcaktuar trendin e ndryshimeve të presionit atmosferik me kalimin e kohës. Është shumë e dëshirueshme që barometri elektronik gjithashtu të tregojë jo vetëm vlerën e presionit atmosferik, por gjithashtu të bëjë të mundur përcaktimin nëse ka një rritje apo ulje dhe sa shpejt ndryshon parametri i matur.

Stacionet e lira të motit të brendshëm tregojnë vetëm piktograme me imazhe të pikave të shiut, reve ose diellit. Është e vështirë të thuhet se si lidhen këto ikona me presionin atmosferik dhe nëse ky stacion meteorologjik ka një sensor barometrik apo përdoren mënyra të tjera krijuese për të parashikuar motin. Stacionet më të avancuara të motit tregojnë vlerën aktuale të presionit si një numër dhe ndryshimin e presionit gjatë orëve të mëparshme si një grafik me shirita të përafërt, kryesisht për qëllime dekorative. Stacione të tilla meteorologjike janë dukshëm më të shtrenjta. Në treg ka edhe pajisje shumë të sofistikuara të projektuara për marinarët, jahtistët etj., me saktësi të lartë që tregojnë si ndryshimet e presionit ashtu edhe vlerën aktuale, por pajisje të tilla janë shumë të shtrenjta.

Ky botim diskuton një barometër të thjeshtë të bërë vetë që tregon madhësinë dhe shkallën e ndryshimit në presionin atmosferik, si dhe temperaturën e ajrit.

Pamja e pajisjes tregohet në foto.

Rezultatet e matjes shfaqen në një ekran sintetizues me dy rreshta. Rreshti i parë tregon rezultatin e matjes së presionit aktual atmosferik në mm Hg, devijimin e vlerës së presionit aktual nga vlera mesatare për një vend të caktuar (teprica e vlerës së presionit aktual mbi vlerën mesatare konsiderohet pozitive), si dhe si temperatura e ajrit në gradë Celsius. Të dhënat e treguara në rreshtin e sipërm rifreskohen çdo 6 sekonda. Dalja e të dhënave të reja shoqërohet me një blic të LED që ndodhet sipër treguesit.

Rreshti i dytë i treguesit tregon rritjen e presionit gjatë orës së fundit, tre orëve dhe dhjetë orëve. Nëse presioni është rritur gjatë periudhës kohore të specifikuar, atëherë rritja përkatëse shfaqet me një plus, përndryshe - me një minus. Të dhënat në rreshtin e dytë përditësohen çdo 10 minuta. Menjëherë pas ndezjes së barometrit, rreshti i dytë do të jetë bosh. Vlerat numerike do të shfaqen aty pas 1 orë, 3 orë dhe 10 orë, përkatësisht.

Barometri është projektuar për të funksionuar në një dhomë të thatë dhe të nxehtë në një temperaturë prej 0 ... 40 ° C dhe një presion atmosferik prej 600 ... 825 mm Hg. Art.

Saktësia e matjes së presionit dhe temperaturës përcaktohet tërësisht nga saktësia e sensorit të presionit të përdorur Bosch BMP180. Gabimi tipik i matjes së presionit është -1hPa, që korrespondon afërsisht me 0.75 mm Hg. Komponenti i zhurmës gjatë matjes së presionit - 0,02 hPa (0,015 mm Hg). Pasiguria tipike e matjes së temperaturës rreth 25 ° C është +/- 0,5 ° C. Më shumë detaje mbi karakteristikat teknike të sensorit BMP180 mund të gjenden në to. përshkrimin në shtojcë.

Intervalet kohore në këtë pajisje numërohen nga softueri. Gabimi në formimin e këtyre intervaleve, i matur nga autori, nuk kalon një minutë në 10 orë.

Diagrami i barometrit është paraqitur në figurë.

Elementi kryesor i pajisjes është moduli Arduino Nano. Autori ka përdorur versionin e 3-të me mikrokontrolluesin ATmega 328. Kujtesa e modulit në këtë rast është e zënë vetëm me një të tretën, kështu që është e mundur të përdoret moduli Arduino Nano me mikrokontrolluesin ATmega 168.

Shfaq Winstar WH1602L - dy rreshta me 16 karaktere për rresht. Ai bazohet në kontrolluesin HD44780. Rezistenca R2 ju lejon të rregulloni kontrastin e imazhit. Nëse voltazhi në pin 3 (Vo) është shumë i ndryshëm nga ai optimal, atëherë asnjë imazh nuk do të shfaqet fare në ekran. Kjo rrethanë duhet të merret parasysh kur ndizni pajisjen për herë të parë. Për shembullin e ekranit të përdorur nga autori, voltazhi optimal në pinin 3 ishte rreth 1 V. Rezistenca R3 përcakton vlerën aktuale të LED-ve të dritës së prapme.

Sensori i presionit BMP180 ka një kuti metalike me përmasa 3.6x3.6x1 mm. Përfundimet e tij janë jastëkët e kontaktit të vendosura në fund të kasës. Përveç kësaj, sensori kërkon një furnizim me energji 1.8 - 3.6 V. Nivelet e sinjalit që sensori shkëmben me pajisjen e jashtme gjithashtu ndryshojnë nga ato të kërkuara. Këto rrethana e bëjnë të vështirë përdorimin e drejtpërdrejtë të BMP180. Për fat të mirë, ky problem mund të zgjidhet lehtësisht. Modulet e bazuara në sensorët BMP180 janë në shitje, të cilat përfshijnë vetë sensorët dhe të gjithë elementët që përputhen. Këto module janë një tabelë 10x13 mm. Kostoja e tyre është rreth 1.4 USD. Pamja e modulit tregohet në foton e mëposhtme.

LED HL1 pulson çdo 6 sekonda, duke sinjalizuar që rezultatet e reja shfaqen në barometër. Autori përdori një LED të gjelbër me një diametër prej 3 mm L-1154GT nga Kingbright.
Kondensatori C1 ka një kapacitet mjaft të madh, gjë që e bën pajisjen të pandjeshme ndaj dështimeve afatshkurtra të energjisë. Nëse kjo nuk kërkohet, atëherë C1 mund të reduktohet në 500 mikrofarad.
Dioda D1 fik dritën e prapme të treguesit në rast të ndërprerjes së energjisë. Kjo rrit funksionimin autonom të barometrit nga energjia e ruajtur në kondensatorin C1.

Pajisja mund të mundësohet nga çdo burim DC (ngarkuesi i telefonit celular, njësia e furnizimit me energji të çdo vegël, etj.) me një tension daljeje prej 8 ... 12 V. Në një tension prej 9 V, barometri konsumon rreth 80 mA.

Pajisja është montuar në një dërrasë buke me përmasa 85 x 55 mm, e cila është ngjitur në ekran duke përdorur një pllakë pleksiglas.

Sensori BMP180 ndodhet në fund - sa më shumë që të jetë e mundur nga elementët kryesorë të gjenerimit të nxehtësisë, të cilët janë rezistenca R3 dhe ekrani me ndriçim LED. Trupi i pajisjes është një kuti plastike 160x160x25. Një numër vrimash ventilimi duhet të shpohen në muret e poshtme dhe të sipërme të kutisë.

Skica që duhet të futet në kujtesën e modulit Arduino Nano është paraqitur në shtojcë. Autori përdori Arduino IDE 1.8.1. Për të mbështetur sensorin e presionit, duhet të instaloni bibliotekën Adafruit-BMP085. Skedari përkatës është përfshirë në shtojcë.

Përpara se të ngarkoni skicën, në rreshtin 17, në vend të numrit 740.0, që korrespondon me presionin mesatar në vendin e instalimit të kopjes së barometrit të autorit, vendosni presionin mesatar në mm. rt. Art. që korrespondon me vendndodhjen ku do të instalohet barometri juaj. Si përafrim i parë, ky parametër mund të përcaktohet me formulën Pav = 760 - 0,091h, ku h është lartësia mbi nivelin e detit në metra. Mënyra më e lehtë për të përcaktuar lartësinë është me një navigator GPS.

Kjo formulë nuk merr parasysh shumë faktorë që ndikojnë në presionin atmosferik dhe është e zbatueshme vetëm për lartësitë deri në 500 m. Një përshkrim i mënyrave për të përcaktuar më saktë presionin mesatar është përtej qëllimit të këtij botimi. Ato mund të gjenden në materialet e shumta mbi meteorologjinë, të cilat janë të disponueshme në internet.

Lista e radioelementeve

Emërtimi Një lloj Emërtimi sasi shënimRezultatiFletorja ime
A1 Moduli i sensorit BMP180 1 Në bllokun e shënimeve
A2 Pllaka Arduino

Arduino Nano 3.0

1 Në bllokun e shënimeve
VD1 Diodë ndreqës

1N4007

1 Në bllokun e shënimeve
HG1 Ekran LCDWH1602L1 Winstar Në bllokun e shënimeve
HL1 Diodë që lëshon dritëL-1154GT1 Kingbright Në bllokun e shënimeve
C1 Kondensator elektrolitik4700 uF x 16 V1

Artikujt kryesorë të lidhur