Sisukord:

Niiskuse, rõhu ja temperatuuri arvutamine BME280 ja footonite liidese abil: 6 sammu
Niiskuse, rõhu ja temperatuuri arvutamine BME280 ja footonite liidese abil: 6 sammu

Video: Niiskuse, rõhu ja temperatuuri arvutamine BME280 ja footonite liidese abil: 6 sammu

Video: Niiskuse, rõhu ja temperatuuri arvutamine BME280 ja footonite liidese abil: 6 sammu
Video: BME280 Sensor Test with Arduino: pressure, humidity and temperature for the New Chronograph Project 2024, November
Anonim
Niiskuse, rõhu ja temperatuuri arvutamine BME280 ja footoni liidese abil
Niiskuse, rõhu ja temperatuuri arvutamine BME280 ja footoni liidese abil

Me puutume kokku erinevate projektidega, mis nõuavad temperatuuri, rõhu ja niiskuse jälgimist. Seega mõistame, et need parameetrid mängivad tegelikult olulist rolli süsteemi töö efektiivsuse hindamisel erinevates atmosfääritingimustes. Nii tööstustasandil kui ka isiklikel süsteemidel on süsteemi piisava toimimise tagamiseks vajalik optimaalne temperatuur, niiskus ja õhurõhk.

Seetõttu pakume selle anduri kohta täielikku õpetust, selles õpetuses selgitame BME280 niiskuse, rõhu ja temperatuurianduri tööd osakeste footoniga.

1. samm: BME280 uurimine

BME280 uurimine
BME280 uurimine

Elektroonikasektor on oma mängu tõhustanud BME280 anduriga, mis on temperatuuri, õhurõhu ja niiskusega keskkonnaandur! See andur sobib suurepäraselt igasuguste ilmastiku- ja keskkonnaandurite jaoks ning seda saab kasutada isegi I2C -s.

See täppisandur BME280 on parim tundlik lahendus niiskuse mõõtmiseks ± 3% täpsusega, õhurõhku ± 1 hPa absoluutse täpsusega ja temperatuuri ± 1,0 ° C täpsusega. Kuna rõhk muutub kõrgusega ja rõhumõõtmised on nii head, saate seda kasutada ka ± 1 meetri või parema täpsusega kõrgusemõõtjana! Temperatuuriandur on optimeeritud madalaima müra ja kõrgeima eraldusvõimega ning seda kasutatakse temperatuuri kompenseerimiseks rõhuandurit ja seda saab kasutada ka ümbritseva õhu temperatuuri hindamiseks. BME280 abil saab mõõtmisi teha kasutaja või regulaarsete ajavahemike järel.

Andmeleht: klõpsake BME280 anduri andmelehe eelvaateks või allalaadimiseks.

Samm: riistvaranõuete loend

Riistvara nõuete loend
Riistvara nõuete loend

Kasutasime täielikult Dcube poe osi, kuna neid on lihtne kasutada ja miski, mis sobib kenasti sentimeetri suurusele võrgule, paneb meid tõesti käima. Võite kasutada kõike, mida soovite, kuid ühendusskeem eeldab, et kasutate neid osi.

  • BME280 anduri I²C minimoodul
  • I²C kilp osakeste footonile
  • Osakeste footon
  • I²C kaabel
  • Toiteadapter

3. samm: liidestamine

Liidesed
Liidesed

Liidese osa selgitab põhimõtteliselt anduri ja osakeste footoni vahel vajalikke juhtmestiku ühendusi. Soovitud väljundi mis tahes süsteemiga töötamisel on põhivajadus õigete ühenduste tagamine. Seega on vajalikud ühendused järgmised:

BME280 töötab üle I2C. Siin on näide ühendusskeemist, mis näitab, kuidas anduri iga liidest ühendada. Valmis paneel on konfigureeritud I2C liidese jaoks, seega soovitame seda liidest kasutada, kui olete muidu agnostik. Kõik, mida vajate, on neli juhtmest! Vaja on ainult nelja ühendust Vcc, Gnd, SCL ja SDA ning need ühendatakse I2C kaabli abil. Neid seoseid on näidatud ülaltoodud piltidel.

4. samm: temperatuuri, rõhu ja niiskuse jälgimise kood

Temperatuuri, rõhu ja niiskuse jälgimise kood
Temperatuuri, rõhu ja niiskuse jälgimise kood
Temperatuuri, rõhu ja niiskuse jälgimise kood
Temperatuuri, rõhu ja niiskuse jälgimise kood

Selle käivitamiseks kasutatava koodi puhas versioon on saadaval SIIN.

Kui kasutame andurimoodulit koos Arduinoga, lisame teeki application.h ja spark_wiring_i2c.h. Raamatukogu "application.h" ja spark_wiring_i2c.h sisaldab funktsioone, mis hõlbustavad i2c suhtlust anduri ja osakese vahel.

Seadme jälgimiseks mõeldud veebilehe avamiseks klõpsake SIIN

Laadige kood oma tahvlile ja see peaks tööle hakkama! Kõik andmed saab veebilehelt, nagu pildil näidatud.

Kood on toodud allpool:

// Levitatakse vaba tahte litsentsiga. // BME280 // See kood on loodud töötama koos BME280_I2CS I2C minimooduliga, mis on saadaval saidil ControlEverything.com. #include #include // BME280 I2C aadress on 0x76 (108) #define Addr 0x76 topelt cTemp = 0, fTemp = 0, rõhk = 0, niiskus = 0; void setup () {// Määra muutuja Particle.variable ("i2cdevice", "BME280"); article.variable ("cTemp", cTemp); Particle.variable ("fTemp", fTemp); Osake.muutuja ("rõhk", rõhk); Osake.muutuja ("niiskus", niiskus); // Initsialiseerida I2C side kui MASTER Wire.begin (); // Initsialiseeri jadaühendus, määra edastuskiirus = 9600 Serial.begin (9600); viivitus (300); } void loop () {unsigned int b1 [24]; allkirjastamata int andmed [8]; int dig_H1 = 0; for (int i = 0; i <24; i ++) {// Start I2C Transmission Wire.beginTransmission (Addr); // Valige andmeregister Wire.write ((136+i)); // Peata I2C ülekanne Wire.endTransmission (); // Taotle 1 bait andmeid Wire.requestFrom (Addr, 1); // Loe 24 baiti andmeid, kui (Wire.available () == 1) {b1 = Wire.read (); }} // Teisenda andmed // temp koefitsiendid int dig_T1 = (b1 [0] & 0xff) + ((b1 [1] & 0xff) * 256); int dig_T2 = b1 [2] + (b1 [3] * 256); int dig_T3 = b1 [4] + (b1 [5] * 256); // rõhukoefitsiendid int dig_P1 = (b1 [6] & 0xff) + ((b1 [7] & 0xff) * 256); int dig_P2 = b1 [8] + (b1 [9] * 256); int dig_P3 = b1 [10] + (b1 [11] * 256); int dig_P4 = b1 [12] + (b1 [13] * 256); int dig_P5 = b1 [14] + (b1 [15] * 256); int dig_P6 = b1 [16] + (b1 [17] * 256); int dig_P7 = b1 [18] + (b1 [19] * 256); int dig_P8 = b1 [20] + (b1 [21] * 256); int dig_P9 = b1 [22] + (b1 [23] * 256); for (int i = 0; i <7; i ++) {// Start I2C Transmission Wire.beginTransmission (Addr); // Valige andmeregister Wire.write ((225+i)); // Peata I2C ülekanne Wire.endTransmission (); // Taotle 1 bait andmeid Wire.requestFrom (Addr, 1); // Loe 7 baiti andmeid, kui (Wire.available () == 1) {b1 = Wire.read (); }} // Teisenda andmed // niiskuse koefitsiendid int dig_H2 = b1 [0] + (b1 [1] * 256); int dig_H3 = b1 [2] & 0xFF; int dig_H4 = (b1 [3] * 16) + (b1 [4] & 0xF); int dig_H5 = (b1 [4] / 16) + (b1 [5] * 16); int dig_H6 = b1 [6]; // Käivita I2C ülekandejuhe Wire.beginTransmission (Addr); // Valige andmeregister Wire.write (161); // Peata I2C ülekanne Wire.endTransmission (); // Taotle 1 bait andmeid Wire.requestFrom (Addr, 1); // Loe 1 bait andmeid, kui (Wire.available () == 1) {dig_H1 = Wire.read (); } // Käivita I2C ülekandejuhe Wire.beginTransmission (Addr); // Vali niiskuse juhtregister Wire.write (0xF2); // Niiskus üle diskreetimissageduse = 1 Wire.write (0x01); // Peata I2C ülekanne Wire.endTransmission (); // Käivita I2C ülekandejuhe Wire.beginTransmission (Addr); // Vali kontrolli mõõtmise register Wire.write (0xF4); // Tavaline režiim, temp ja rõhk üle diskreetimissageduse = 1 Wire.write (0x27); // Peata I2C ülekanne Wire.endTransmission (); // Käivita I2C ülekandejuhe Wire.beginTransmission (Addr); // Vali konfiguratsiooniregister Wire.write (0xF5); // Ooteaeg = 1000 ms Wire.write (0xA0); // Peata I2C ülekanne Wire.endTransmission (); for (int i = 0; i <8; i ++) {// Start I2C Transmission Wire.beginTransmission (Addr); // Valige andmeregister Wire.write ((247+i)); // Peata I2C ülekanne Wire.endTransmission (); // Taotle 1 bait andmeid Wire.requestFrom (Addr, 1); // Loe 8 baiti andmeid, kui (Wire.available () == 1) {data = Wire.read (); }} // Teisenda rõhu ja temperatuuri andmed 19-bitisteks pikkadeks adc_p = (((pikk) (andmed [0] & 0xFF) * 65536) + ((pikk) (andmed [1] ja 0xFF) * 256) + (pikk) (andmed [2] ja 0xF0)) / 16; pikk adc_t = (((pikk) (andmed [3] ja 0xFF) * 65536) + ((pikk) (andmed [4] ja 0xFF) * 256) + (pikk) (andmed [5] ja 0xF0)) / 16; // Niiskuseandmete teisendamine pikaks adc_h = ((pikk) (andmed [6] & 0xFF) * 256 + (pikk) (andmed [7] ja 0xFF)); // Temperatuuri nihke arvutused double var1 = (((double) adc_t) / 16384.0 - ((double) dig_T1) / 1024,0) * ((double) dig_T2); topelt var2 = (((((double) adc_t) / 131072.0 - ((double) dig_T1) / 8192.0) * (((double) adc_t) /131072.0 - ((double) dig_T1) / 8192.0)) * ((double) dig_T3); topelt t_peen = (pikk) (var1 + var2); kahekordne cTemp = (var1 + var2) / 5120,0; kahekordne fTemp = cTemp * 1,8 + 32; // Rõhu nihke arvutused var1 = ((topelt) t_fine / 2.0) - 64000.0; var2 = var1 * var1 * ((topelt) dig_P6) / 32768.0; var2 = var2 + var1 * ((topelt) dig_P5) * 2.0; var2 = (var2 / 4,0) + (((kahekordne) dig_P4) * 65536,0); var1 = (((kahekordne) dig_P3) * var1 * var1 / 524288.0 + ((kahekordne) dig_P2) * var1) / 524288.0; var1 = (1.0 + var1 / 32768.0) * ((topelt) dig_P1); kahekordne p = 1048576,0 - (kahekordne) adc_p; p = (p - (var2 / 4096,0)) * 6250,0 / var1; var1 = ((topelt) dig_P9) * p * p / 2147483648.0; var2 = p * ((topelt) dig_P8) / 32768.0; topeltrõhk = (p + (var1 + var2 + ((topelt) dig_P7)) / 16,0) / 100; // Niiskuse nihke arvutused double var_H = (((double) t_fine) - 76800.0); var_H = (adc_h - (dig_H4 * 64.0 + dig_H5 / 16384.0 * var_H)) * (dig_H2 / 65536.0 * (1.0 + dig_H6 / 67108864.0 * var_H * (1.0 + dig_H3 / 67108864.0 * var_H))); kahekordne niiskus = var_H * (1,0 - dig_H1 * var_H / 524288.0); kui (niiskus> 100,0) {niiskus = 100,0; } else if (niiskus <0,0) {niiskus = 0,0; } // Andmete väljastamine armatuurlauale Particle.publish ("Temperatuur Celsiuse järgi:", String (cTemp)); Particle.publish ("Temperatuur Fahrenheiti järgi:", String (fTemp)); Particle.publish ("Rõhk:", String (rõhk)); Particle.publish ("Suhteline õhuniiskus:", String (niiskus)); viivitus (1000); }

Samm: rakendused:

Rakendused
Rakendused

BME280 temperatuuri, rõhu ja suhtelise niiskuse anduril on mitmesuguseid tööstuslikke rakendusi, nagu temperatuuri jälgimine, arvuti perifeerne termokaitse, rõhu jälgimine tööstuses. Oleme seda andurit kasutanud ka ilmajaamade rakendustes ja kasvuhoone seiresüsteemis.

Muud rakendused võivad hõlmata järgmist:

  1. Konteksti teadvustamine, nt. naha tuvastamine, ruumimuutuse tuvastamine.
  2. Fitnessi jälgimine / heaolu - hoiatus kuivuse või kõrge temperatuuri eest.
  3. Mahu ja õhuvoolu mõõtmine.
  4. Koduautomaatika juhtimine.
  5. Kütte, ventilatsiooni, kliimaseadme juhtimine (HVAC).
  6. Asjade Internet.
  7. GPS-i täiustamine (nt esimese paranduseni jõudmise aja parandamine, surnud arvestus, kalde tuvastamine).
  8. Siseruumides navigeerimine (põranda tuvastamise muutmine, lifti tuvastamine).
  9. Väljas navigeerimine, vaba aja veetmine ja sport.
  10. Ilmateade.
  11. Vertikaalse kiiruse näit (tõusu/vajumise kiirus).

6. samm: videoõpetus

Vaadake meie videoõpetust, et läbida kõik projektiga liidestamise ja lõpuleviimise sammud.

Olge kursis teiste andurite liideste ja töötavate ajaveebidega.

Soovitan: