Si të konfiguroni telefonat inteligjentë dhe PC. Portali informativ
  • në shtëpi
  • Hekuri
  • Altimetri më i thjeshtë barometrik i bazuar në Arduino. Barometër i avancuar

Altimetri më i thjeshtë barometrik i bazuar në Arduino. Barometër i avancuar

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 pavlefshëm 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, filtrohet // 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, i 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).

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ë.

Para 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 zbatohet 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 Lloji i Emërtimi sasi shënimDyqanFletorja 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

Pasioni për inxhinierinë elektrike, robotizimin, sistemet automatike të reagimit dhe kontrollit nuk ka qenë kurrë kaq i lehtë për t'u realizuar.

Nëse më parë kishte konstruktorë të specializuar me grupe të kufizuara funksionesh dhe parametra të vendosur në mënyrë të ngurtë, atëherë shumëllojshmëria e konstruktorëve të sotëm është thjesht e mahnitshme: sistemet e vërteta të mikroprocesorëve, të montuara në gju, kanë funksionalitet praktikisht të pakufizuar. Imagjinata e pasur, një bazë e gjerë elementesh, një komunitet i madh tifozësh dhe inxhinierësh dhe mbështetja e prodhuesit janë kryesore tipare dalluese komplete të tilla robotike të kërkuara nga tregu.

Një prej tyre dhe më popullorja, që është e natyrshme, është Arduino... Konstruktor për montimin e menjëhershëm të pajisjeve elektronike automatike të çdo kompleksiteti: të lartë, të mesëm dhe të ulët. Kjo platformë quhet edhe "informatikë fizike" për ndërveprimin e ngushtë me mjedisin. Një tabelë e qarkut të printuar me një mikroprocesor, kod me burim të hapur, ndërfaqe standarde dhe sensorë lidhës me Arduino janë komponentët e popullaritetit të tij.

Një sistem është një bord që kombinon të gjithë komponentët e nevojshëm për të siguruar një cikël të plotë zhvillimi. Zemra e këtij bordi është mikrokontrollues... Ofron kontroll mbi të gjitha pajisjet periferike. Sensorët e lidhur me sistemin e lejojnë sistemin të "komunikojë" dhe të ndërveprojë me mjedisin: të analizojë, të shënojë ndryshimet.

Lidhja e një sensori dixhital të lagështisë dhe temperaturës

Dy sensorë të njohur - DHT11, DHT22 - janë krijuar për të matur lagështinë dhe temperaturën (ne ende po flasim për lidhjen e një sensori të temperaturës); zgjidhje e lirë, e shkëlqyeshme për diagrame dhe trajnime të thjeshta. Termistor, sensor kapacitiv - baza e DHT11 dhe DHT22. Çipi i brendshëm kryen ADC-në, duke dhënë një "shifër" në dalje, të cilën çdo mikrokontrollues mund ta kuptojë.

DHT11 ndryshon nga DHT22 në diapazonin e matjes dhe frekuencën e marrjes së mostrave: lagështia - 20-80% për DHT11 dhe 0-100% për DHT22; temperatura - 0 ° C deri + 50 ° C për DHT11 dhe -40 ° C deri + 125 ° C për DHT22; sondazhi - çdo sekondë për DHT11 dhe çdo dy sekonda për DHT22.

Të dy sensorët DHT kanë 4 kunja standarde:

  1. Furnizimi me energji me sensor.
  2. Autobusi i të dhënave.
  3. I pa përfshirë.
  4. Toka.

Të dhënat dhe daljet e fuqisë kërkojnë që një rezistencë 10K të lidhet ndërmjet tyre.

Projektuar për sensorë DHT Biblioteka DHT.h(mund ta shihni lidhjen). Kur ngarkoni një skicë në kontrollues, monitori i portit duhet të shfaqë vlerat aktuale të lagështisë dhe temperaturës. Është e lehtë për të kontrolluar performancën - thjesht merrni frymë në sensor dhe kapeni: temperatura dhe lagështia duhet të ndryshojnë.

Shfaqja e vlerave në ekran është e mundur LCD 1602 I2C nëse e përfshini në sistem.

Duke përdorur këta sensorë, ju mund të ndërtoni një sistem të automatizuar të ujitjes së tokës në ajër të hapur, në një serë dhe madje edhe në një dritare. Ose organizoni një sistem për tharjen e manave - këto të fundit fryhen ose nxehen në varësi të përmbajtjes së lagështisë së manave.

Gjithashtu, disa aquaterrariume kërkojnë kushte të veçanta lagështie që mund të kontrollohen lehtësisht me DHT1 dhe DHT22.

Shpesh në çështjen e parashikimit të motit ose përcaktimit të lartësisë së ngritjes mbi nivelin e detit, është e nevojshme të zgjidhet problemi i matjes së presionit. Këtu, barometrat elektronikë të bazuar në teknologjinë MEMS vijnë në shpëtim: metoda tensorometrike ose piezoresistive e lidhur me ndryshueshmërinë e rezistencës së pajisjes kur zbatohen forcat që deformojnë materialin.

Më popullorja Sensori BMP085; përveç presionit barometrik, regjistron edhe temperaturën. Ai u zëvendësua nga BMP180, ka të njëjtat karakteristika:

  • Ndjeshmëria në intervalin: 300-1100 hPa (nëse në metra - 9000 - 500 m mbi nivelin e detit);
  • Rezolucioni: 0,03 hPa ose 0,25 m;
  • Temperatura e funksionimit të sensorit është -40 + 85 ° C, saktësia e matjes në intervalin e specifikuar është ± 2 ° C;
  • Lidhja I2c;
  • V1 përdor 3.3V për fuqi dhe logjikë;
  • V2 përdor 3.3-5V për fuqi dhe logjikë.

Lidhja e sensorëve me Arduino në këtë rast është standarde:

Ajo do të marrë Drejtues i unifikuar i sensorit- versioni i tij i përditësuar siguron saktësi më të lartë të leximeve; përveç kësaj, ju lejon të punoni me disa sensorë të ndryshëm presioni të lidhur në të njëjtën kohë. Duhet të instalohet gjithashtu biblioteka Adafrut_Sensor.

Asnjë sistem serioz sigurie nuk mund të bëjë pa këtë sensor. Sensori infra të kuqe- elementi bazë i zbulimit të pranisë së kafshëve me gjak të ngrohtë.

Gjithashtu, me ndihmën e sensorëve PIR, është jashtëzakonisht i përshtatshëm për të kontrolluar ndriçimin, në varësi të pranisë së një personi afër. Sensorët infra të kuqe ose piroelektrikë janë të thjeshtë nga brenda dhe të lirë. Ata janë jashtëzakonisht të besueshëm dhe rrallë dështojnë.

Baza e sensorit- piroelektrik ose dielektrik i aftë për të krijuar një fushë kur ndryshon temperatura. Ata janë instaluar në çifte, dhe nga lart janë të mbyllura me një kube me segmente në formën e lenteve konvencionale ose një lente Fresnel. Kjo lejon që trarët të fokusohen nga pika të ndryshme depërtimi.

Në mungesë të trupave që lëshojnë nxehtësi në dhomë, çdo element ka të njëjtën dozë të rrezatimit në hyrje, përkatësisht të njëjtin tension në dalje. Kur një kafshë e gjallë me gjak të ngrohtë hyn në “zonën e shikimit” të sensorëve, ekuilibri prishet dhe shfaqen impulse, të cilat regjistrohen.

HC-SR501- sensori më i përhapur dhe më popullor. Ai ka dy rezistorë të ndryshueshëm të shkurtimit: një për rregullimin e ndjeshmërisë dhe madhësisë së objektit të zbuluar, i dyti për rregullimin e kohës së përgjigjes (koha kur pulsi gjenerohet pas zbulimit).

Diagrami i lidhjes është standard dhe nuk do të shkaktojë ndonjë vështirësi.

Megjithëse funksioni i matjes së temperaturës përfshihet në shumë sensorë, është më mirë të përdorni një sensor të veçantë të dedikuar. Për shembull, DS18B20. Është një sensor integral me një ndërfaqe serike dixhitale.

Pikat e forta të saj:

  • kalibrimi paraprak i fabrikës;
  • gabim më pak se 0,5 ° С;
  • rezolucion i programueshëm prej 0,0625 ° С në rezolucion 12-bit;
  • Gama jashtëzakonisht e gjerë e temperaturave të matura: nga -55 ° С në + 125 ° С;
  • sensori ka një ADC të integruar;
  • disa sensorë mund të përfshihen në një linjë komunikimi.

Ndërtesa TO-92- më i zakonshmi për këta sensorë. Ekzistojnë dy skema kryesore për lidhjen e një sensori të temperaturës DS18B20 me një mikroprocesor ose kontrollues:

Për të punuar me sensorin, duhet ta inicializoni atë. Kjo pasohet nga shkrimi i një bajt dhe leximi i një bajt.

Këto tre operacione tregojnë se si të punohet me sensorin dhe biblioteka OneWire i mbështet ato në mënyrë të përsosur. Instaloni Bibliotekën OneWire. Pas kësaj ngarkojmë skicën - dhe mjedisi i softuerit është gati.

Është e mundur të lidhni disa sensorë DS18B20 - në këtë rast, ato duhet të lidhen paralelisht. Biblioteka OneWire do t'ju lejojë të lexoni lexime nga të gjitha menjëherë. Me një numër të madh lidhjesh sensori në të njëjtën kohë, është e nevojshme të shtoni rezistorë shtesë prej 100 ose 120 Ohm midis këmbës së të dhënave të sensorit DS18B20 dhe autobusit të të dhënave në Arduino.

konkluzionet

Lidhja e sensorëve me Arduino është shndërrimi i një roboti algoritmik, të kontrolluar automatikisht ose manualisht, në një mjedis të plotë për ndërveprimin e pajisjeve dhe qarqeve me mjedisin. Mos harroni - kjo nuk është një ilaç për të gjitha sëmundjet. Dhe jo një produkt i teknologjisë së lartë nga fundi në fund ose një aplikacion i përdorimit përfundimtar. Arduino është një kompleks zgjidhjesh harduerësh dhe softuerësh që do të ndihmojnë:

  • mjeshtër i sistemeve algoritmike për inxhinierë fillestarë;
  • zotëroni aftësitë bazë të projektimit;
  • mësoni të programoni.

Pavarësisht nga niveli juaj i trajnimit, njohuritë tuaja, ju gjithmonë mund të zgjidhni detyrat për veten tuaj brenda fuqive tuaja. Ju mund të montoni një zgjidhje të thjeshtë për të automatizuar çdo detyrë të thjeshtë pa bashkim me një student; por mund të vendosni një detyrë globale ku, përveç njohurive dhe logjikës, ju nevojitet edhe aftësia për të bashkuar në mënyrë cilësore dhe të saktë të vizatoni dhe lexoni vizatime. Dhe komunitetet aktive, forumet dhe bazat e njohurive në sistemin Arduino do të ndihmojnë për të zgjidhur pothuajse çdo problem.

Një barometër është një pajisje që mat presionin atmosferik. Domethënë presioni i ajrit, i cili na shtyp nga të gjitha anët. Ne e dimë nga shkolla se barometri i parë ishte një pjatë me merkur me një provëz të përmbysur në të. Autori i kësaj pajisjeje ishte Evangelista Torricelli, një fizikan dhe matematikan italian. Marrja e leximeve të një barometri të merkurit mund të jetë po aq e thjeshtë sa leximi i një termometri alkooli: sa më i lartë të jetë presioni jashtë balonës, aq më e lartë është kolona e merkurit brenda tij. Dihet se avulli i merkurit është shumë toksik.

Më vonë, u shfaq një pajisje më e sigurt - barometri aneroid. Në këtë barometër, mërkuri u zëvendësua nga një kuti e valëzuar e bërë nga llamarina e hollë, në të cilën u krijua një vakum. Nën ndikimin e atmosferës, kutia tkurret dhe, nëpërmjet një sistemi levash, kthen shigjetën në numërues. Kështu duken këta dy barometra. Majtas - aneroid, djathtas - barometri Torricelli.

Pse na duhet një barometër? Më shpesh, kjo pajisje përdoret në aeroplan për të përcaktuar lartësinë e fluturimit. Sa më i lartë të ngrihet automjeti mbi nivelin e detit, aq më pak presion përjeton barometri në bord. Duke ditur këtë marrëdhënie, është e lehtë të përcaktohet lartësia.

Një tjetër rast i zakonshëm i përdorimit është një stacion moti i bërë vetë. Në këtë rast, ne mund të përdorim varësitë e njohura të motit të ardhshëm nga presioni atmosferik. Përveç barometrit, stacione të tilla janë të pajisura me sensorë të lagështisë dhe temperaturës.

1. Barometri elektronik

Ne nuk mund të përdorim barometra të tillë të rëndë në robotikë. Ne kemi nevojë për një pajisje miniaturë dhe efikase në energji që lidhet lehtësisht me të njëjtin Arduino Uno. Shumica e barometrave modernë janë bërë duke përdorur teknologjinë MEMS, siç janë xhirotakometrat me përshpejtues. Barometrat MEMS bazohen në metodën piezoresistive ose të matjes së tendosjes, e cila përdor efektin e ndryshimit të rezistencës së një materiali nën veprimin e forcave deformuese.

Nëse hapni kutinë e barometrit MEMS, mund të shihni elementin sensor (në të djathtë), i cili ndodhet direkt nën vrimën e kutisë mbrojtëse të pajisjes dhe tabelën e kontrollit (në të majtë), e cila kryen filtrimi primar dhe transformimi i matjeve.

2. Sensorët BMP085 dhe BMP180

Sensorët e presionit më të përballueshëm, të cilët përdoren shpesh nga kontrollorët e fluturimit dhe në të gjitha llojet e pajisjeve elektronike të prodhuara në shtëpi, përfshijnë sensorët nga BOSH: BMP085 dhe BMP180. Barometri i dytë është më i ri, por plotësisht i pajtueshëm me versionin e vjetër.

Disa karakteristika të rëndësishme të BMP180:

  • diapazoni i vlerave të matura: nga 300 hPa deri në 1100 hPa (nga -500 m nga + 9000 m mbi nivelin e detit);
  • Tensioni i furnizimit: nga 3.3 në 5 volt;
    forca e rrymës: 5 μA me një shpejtësi votimi prej 1 Hertz;
  • Niveli i zhurmës: 0,06 hPa (0,5 m) në modalitetin e trashë (modaliteti i fuqisë ultra të ulët) dhe 0,02 hPa (0,17 m) në modalitetin me rezolucion të avancuar.

Tani le ta lidhim këtë sensor me kontrolluesin dhe të përpiqemi të vlerësojmë presionin atmosferik.

3. Lidhja BMP180

Të dy sensorët kanë një ndërfaqe I2C, kështu që ata mund të lidhen lehtësisht me çdo platformë nga familja Arduino. Kështu duket tabela e lidhjes për Arduino Uno.

BMP 180 GND KQV SDA SCL
Arduino Uno GND + 5 V A4 A5

Diagram skematik

Pamja e paraqitjes

4. Programi

Për të punuar me sensorin, na duhet një bibliotekë: BMP180_Breakout_Arduino_Library

Shkarkoni atë nga depoja dhe instaloni në Arduino IDE. Tani jeni gati për të shkruar programin tuaj të parë. Le të përpiqemi të marrim të dhëna të papërpunuara nga sensori dhe t'i nxjerrim ato në monitorin e portit COM.

#përfshi #përfshi Presioni SFE_BMP180; konfigurimi i zbrazët () (Serial.fillimi (9600); presioni.fillimi ();) cikli i zbrazët () (i dyfishtë P; P = getPressure (); Serial.println (P, 4); vonesë (100);) dyfishim i presionit () (statusi i karakterit; T dyfishtë, P, p0, a; statusi = presioni.Temperatura e fillimit (); nëse (statusi! = 0) (// pritje për vonesë të matjes së temperaturës (statusi); statusi = presioni.getTemperatura (T) ; nëse (statusi! = 0) (statusi = presioni. shtypja e fillimit (3); nëse (statusi! = 0) (// në pritje të vonesës së matjes së presionit (statusi); statusi = presioni.getPressioni (P, T); nëse ( statusi! = 0) (kthimi (P);)))))

Procedura për marrjen e presionit të lakmuar nga sensori nuk është aq e parëndësishme dhe përbëhet nga disa faza. Në një formë të thjeshtuar, algoritmi duket si ky:

  1. ne kërkojmë nga barometri për leximet e sensorit të integruar të temperaturës;
  2. prisni kohë A ndërsa sensori vlerëson temperaturën;
  3. marrim temperaturën;
  4. ne kërkojmë presionin nga barometri;
  5. koha e pritjes B ndërsa sensori vlerëson presionin;
  6. merrni vlerën e presionit;
  7. ktheni vlerën e presionit nga funksioni.

Koha B varet nga saktësia e matjes, e cila është vendosur në funksion shtypja e fillimit... Argumenti i vetëm për këtë funksion mund të marrë vlera nga 0 në 3, ku 0 është vlerësimi më i trashë dhe më i shpejtë, dhe 3 është vlerësimi më i saktë i presionit.

Ne ngarkojmë programin në Arduino Uno dhe vëzhgojmë rrjedhën e matjeve të presionit atmosferik. Le të përpiqemi të ngremë sensorin mbi kokën tonë dhe ta ulim atë në nivelin e dyshemesë. Leximi do të ndryshojë pak. Mbetet vetëm për të kuptuar se si mund t'i konvertojmë këta numra të pakuptueshëm në lartësi mbi nivelin e detit.

5. Konvertoni presionin në lartësi

Sensori BMP180 kthen presionin në hektopaskale (hPa). Është në këto njësi që është zakon të matet presioni atmosferik. 1 hPa = 100 Pascal. Dihet se presioni mesatar në nivelin e detit është 1013 hPa, dhe çdo metër shtesë mbi nivelin e detit do ta ulë këtë presion vetëm me 0,11 hPa (afërsisht).

Kështu, nëse i zbresim rezultatit të funksionit merrni Presionin numri 1013, dhe diferencën e mbetur e ndajmë me 0.11, atëherë marrim vlerën e lartësisë mbi nivelin e detit në metra. Kështu do të ndryshojë programi ynë:

Cikli i zbrazët () (P i dyfishtë, Alt; P = getPressure (); Alt = (P - 1013) /0.11; Serial.println (Alt, 2); vonesë (100);)

Në fakt, presioni varet nga lartësia në mënyrë jolineare, dhe formula jonë është e përshtatshme vetëm për lartësitë në të cilat ju dhe unë jetojmë zakonisht. Për fat të mirë, njerëzimi di një varësi më të saktë të presionit nga lartësia, të cilën mund ta zbatojmë për të marrë rezultate më të sakta.

Këtu p është presioni i matur në një pikë të caktuar, p0 është presioni në lidhje me të cilin matet lartësia.

Ekziston tashmë një funksion në bibliotekën SFE_BMP180 që përdor atë të specifikuar. formula për marrjen e lartësisë së saktë. Ne e përdorim atë në programin tonë.

#përfshi #përfshi Presioni SFE_BMP180; dyfishi P0 = 0; konfigurimi i zbrazëtirës () (Seriali.fillimi (9600); presioni.fillimi (); P0 = presioni.getPressure ();) laku i zbrazët () (dyfishtë P, Alt; P = getPressure (); Alt = presioni.lartësia (P , P0) Serial.println (Alt, 2); vonesë (100);) dyfishim i presionit () (...)

Nuk e kopjova plotësisht funksionin getPressure për ta mbajtur tekstin të lexueshëm.

Një variabël tjetër P0 është shfaqur në program - ky është presioni që do të masim në fillim të programit. Në rastin e një avioni, P0 do të jetë presioni në vendin e ngritjes nga i cili do të fillojmë ngjitjen tonë.

6. Vizualizimi

Tani le të përpiqemi të shfaqim leximet e presionit në program SFMonitor, dhe le të shohim se si ndryshon presioni kur sensori lëviz në një lartësi prej 2 metrash.

Bajt konst statik PACKET_SIZE = 1; bajt konst statik VALUE_SIZE = 2; statike konst boolean SEPARATE_VALUES = e vërtetë; #përfshi #përfshi #përfshi Presioni SFE_BMP180; SerialFlow rd (& Serial); dyfishi P0 = 0; konfigurimi i zbrazët () (rd.setPacketFormat (VALUE_SIZE, PACKET_SIZE, SEPARATE_VALUES); rd.fillimi (9600); presioni.fillimi (); P0 = getPressure ();) cikli i zbrazët () (P i dyfishtë; P = getPressure (); rd.setPacketValue (100 + int ((P - P0) * 100)); rd.sendPacket (); vonesë (100);) dyfishtë getPressure () (...)

Si rezultat i programit, marrim një grafik presioni në Pascals:

7. Përfundim

Siç mësuam nga mësimi, përcaktimi i lartësisë mbi nivelin e detit nuk është një detyrë aq e parëndësishme. Presioni jo vetëm që varet nga lartësia në mënyrë jolineare, por fotografia prishet edhe nga faktorë të ndryshëm të jashtëm. Për shembull, presioni në shtëpinë tonë po ndryshon vazhdimisht me kalimin e kohës. Edhe në pak minuta, lartësia e matur nga pajisja jonë mund të ndryshojë në intervalin 0,5 - 1 metër. Temperatura gjithashtu ndikon shumë në cilësinë e matjeve, ndaj duhet ta kemi parasysh gjatë llogaritjes së presionit.

Për avionët, rekomandohet përdorimi i sensorëve të përparuar të saktësisë si MS5611. Ky barometër mund të masë deri në 0,012 hPa, që është 5 herë më i mirë se BMP180. Gjithashtu, koordinatat GPS përdoren për të sqaruar lartësinë barometrike të fluturimit.

Suksese në vëzhgimin e atmosferës! 🙂

Artikujt kryesorë të lidhur