INHOUDSOPGAWE:

Vogtigheid, druk en temperatuurberekening met behulp van BME280 en fotoninterfacing: 6 stappe
Vogtigheid, druk en temperatuurberekening met behulp van BME280 en fotoninterfacing: 6 stappe

Video: Vogtigheid, druk en temperatuurberekening met behulp van BME280 en fotoninterfacing: 6 stappe

Video: Vogtigheid, druk en temperatuurberekening met behulp van BME280 en fotoninterfacing: 6 stappe
Video: Lesson 37: Using BME280 Humidity, Barometric Pressure and Temperature Sensor 2024, November
Anonim
Humiditeit, druk en temperatuurberekening met BME280 en fotoninterfacing
Humiditeit, druk en temperatuurberekening met BME280 en fotoninterfacing

Ons kom op verskillende projekte af wat temperatuur-, druk- en humiditeitsmonitering vereis. Ons besef dus dat hierdie parameters eintlik 'n belangrike rol speel in die berekening van die werkdoeltreffendheid van 'n stelsel onder verskillende atmosferiese toestande. Sowel op industriële vlak as in persoonlike stelsels is 'n optimale temperatuur, humiditeit en barometriese drukvlak nodig vir die voldoende werking van die stelsel.

Daarom bied ons 'n volledige handleiding oor hierdie sensor; in hierdie tutoriaal gaan ons die werking van die BME280 humiditeits-, druk- en temperatuursensor met deeltjiefoton verduidelik.

Stap 1: BME280 -verkenning

BME280 Verkenning
BME280 Verkenning

Die elektroniese sektor het hul spel versterk met die BME280 -sensor, 'n omgewingsensor met temperatuur, barometriese druk en humiditeit! Hierdie sensor is ideaal vir alle soorte weer-/omgewingswaarneming en kan selfs in I2C gebruik word.

Hierdie presisiesensor BME280 is die beste sensoroplossing vir die meting van humiditeit met ± 3% akkuraatheid, barometriese druk met ± 1 hPa absolute akkuraatheid en temperatuur met ± 1.0 ° C akkuraatheid. Omdat die druk met die hoogte verander en die drukmetings so goed is, kan u dit ook as 'n hoogtemeter gebruik met ± 1 meter of beter akkuraatheid! die druksensor en kan ook gebruik word vir die skatting van die omgewingstemperatuur. Metings met die BME280 kan deur die gebruiker uitgevoer word of gereeld uitgevoer word.

Gegevensblad: Klik hier om die datablad van die BME280 -sensor voor te sien of af te laai.

Stap 2: Lys met vereistes vir hardeware

Hardware vereistes lys
Hardware vereistes lys

Ons het heeltemal Dcube Store -onderdele gebruik omdat dit maklik is om te gebruik, en iets omtrent alles wat mooi op 'n sentimeter rooster pas, kry ons regtig aan die gang. U kan gebruik wat u wil, maar die bedradingsdiagram neem aan dat u hierdie dele gebruik.

  • BME280 Sensor I²C Mini Module
  • I²C -skild vir deeltjiesfoton
  • Deeltjie foton
  • I²C kabel
  • Kragadapter

Stap 3: Interfacing

Koppelvlak
Koppelvlak

Die koppelvlakgedeelte verduidelik basies die bedradingverbindings wat tussen die sensor en die deeltjiefoton benodig word. Die korrekte noodsaaklikheid is om korrekte verbindings te verseker terwyl u aan 'n stelsel werk vir die gewenste uitset. Die vereiste verbindings is dus soos volg:

Die BME280 werk oor I2C. Hier is die voorbeeld -bedradingsdiagram wat demonstreer hoe om elke koppelvlak van die sensor aan te sluit. Uit die boks is die bord gekonfigureer vir 'n I2C-koppelvlak, daarom beveel ons aan om hierdie koppelvlak te gebruik as u anders agnosties is. Al wat u nodig het, is vier drade! Slegs vier verbindings is nodig Vcc-, Gnd-, SCL- en SDA -penne en dit word met behulp van I2C -kabel verbind. Hierdie verbindings word getoon in die foto's hierbo.

Stap 4: Temperatuur-, druk- en humiditeitsmoniteringskode

Moniteringskode vir temperatuur, druk en humiditeit
Moniteringskode vir temperatuur, druk en humiditeit
Moniteringskode vir temperatuur, druk en humiditeit
Moniteringskode vir temperatuur, druk en humiditeit

Die skoon weergawe van die kode wat ons sal gebruik om dit uit te voer, is HIER beskikbaar.

Terwyl ons die sensormodule met die Arduino gebruik, bevat ons die biblioteek application.h en spark_wiring_i2c.h. "application.h" en spark_wiring_i2c.h biblioteek bevat die funksies wat die i2c kommunikasie tussen die sensor en die deeltjie vergemaklik.

Klik HIER om die webblad vir toestelmonitering oop te maak

Laai die kode op u bord op en dit behoort te begin werk! Al die data kan op die webblad verkry word, soos op die foto getoon.

Die kode word hieronder verskaf:

// Versprei met 'n vrywillige lisensie. // Gebruik dit op enige manier wat u wil, wins of gratis, mits dit in die lisensies van die gepaardgaande werke pas. // BME280 // Hierdie kode is ontwerp om te werk met die BME280_I2CS I2C Mini Module beskikbaar by ControlEverything.com. #include #include // BME280 I2C -adres is 0x76 (108) #define Addr 0x76 dubbel cTemp = 0, fTemp = 0, druk = 0, humiditeit = 0; ongeldige opstelling () {// Stel veranderlike Particle.variable ("i2cdevice", "BME280"); article.variable ("cTemp", cTemp); Particle.variable ("fTemp", fTemp); Deeltjie.veranderlik ("druk", druk); Deeltjie.veranderlik ("humiditeit", humiditeit); // Initialiseer I2C -kommunikasie as MASTER Wire.begin (); // Initialiseer Serial Communication, stel baud rate = 9600 Serial.begin (9600); vertraging (300); } leemte -lus () {unsigned int b1 [24]; ongetekende int data [8]; int dig_H1 = 0; for (int i = 0; i <24; i ++) {// Start I2C Transmission Wire.beginTransmission (Addr); // Kies dataregister Wire.write ((136+i)); // Stop I2C Transmission Wire.endTransmission (); // Versoek 1 greep data Wire.requestFrom (Addr, 1); // Lees 24 grepe data as (Wire.available () == 1) {b1 = Wire.read (); }} // Skakel die data om // tempkoëffisiënte 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); // drukkoëffisiënte 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); // Kies dataregister Wire.write ((225+i)); // Stop I2C Transmission Wire.endTransmission (); // Versoek 1 greep data Wire.requestFrom (Addr, 1); // Lees 7 grepe data as (Wire.available () == 1) {b1 = Wire.read (); }}} // Skakel die data om // humiditeitskoëffisiënte 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]; // Begin I2C Transmission Wire.beginTransmission (Addr); // Kies dataregister Wire.write (161); // Stop I2C Transmission Wire.endTransmission (); // Versoek 1 greep data Wire.requestFrom (Addr, 1); // Lees 1 greep data as (Wire.available () == 1) {dig_H1 = Wire.read (); } // Begin I2C Transmission Wire.beginTransmission (Addr); // Kies beheervochtigheidsregister Wire.write (0xF2); // Humiditeit bo monstertempo = 1 Wire.write (0x01); // Stop I2C Transmission Wire.endTransmission (); // Begin I2C Transmission Wire.beginTransmission (Addr); // Kies die kontrolemeetregister Wire.write (0xF4); // Normale modus, temperatuur en druk oor monsternemingstempo = 1 Wire.write (0x27); // Stop I2C Transmission Wire.endTransmission (); // Begin I2C Transmission Wire.beginTransmission (Addr); // Kies config register Wire.write (0xF5); // Stand -by tyd = 1000ms Wire.write (0xA0); // Stop I2C Transmission Wire.endTransmission (); for (int i = 0; i <8; i ++) {// Start I2C Transmission Wire.beginTransmission (Addr); // Kies dataregister Wire.write ((247+i)); // Stop I2C Transmission Wire.endTransmission (); // Versoek 1 greep data Wire.requestFrom (Addr, 1); // Lees 8 grepe data as (Wire.available () == 1) {data = Wire.read (); }} // Skakel druk- en temperatuurdata om in 19-bis lange adc_p = (((lang) (data [0] & 0xFF) * 65536) + ((lank) (data [1] & 0xFF) * 256) + (lank) (data [2] & 0xF0)) / 16; long adc_t = (((long) (data [3] & 0xFF) * 65536) + ((long) (data [4] & 0xFF) * 256) + (long) (data [5] & 0xF0)) / 16; // Verander die humiditeitsdata lank adc_h = ((long) (data [6] & 0xFF) * 256 + (long) (data [7] & 0xFF)); // Temperatuurverrekenings berekeninge dubbel var1 = (((dubbel) adc_t) / 16384.0 - ((dubbel) dig_T1) / 1024.0) * ((dubbel) dig_T2); dubbel var2 = ((((dubbel) adc_t) / 131072.0 - ((dubbel) dig_T1) / 8192.0) * (((dubbel) adc_t) /131072.0 - ((dubbel) dig_T1) /8192.0)) * ((dubbel) dig_T3); dubbel t_fine = (lank) (var1 + var2); dubbel cTemp = (var1 + var2) / 5120.0; dubbel fTemp = cTemp * 1.8 + 32; // Drukverrekeningsberekeninge var1 = ((dubbel) t_fine / 2.0) - 64000.0; var2 = var1 * var1 * ((dubbel) dig_P6) / 32768.0; var2 = var2 + var1 * ((dubbel) dig_P5) * 2.0; var2 = (var2 / 4.0) + (((dubbel) dig_P4) * 65536.0); var1 = (((dubbel) dig_P3) * var1 * var1 / 524288.0 + ((dubbel) dig_P2) * var1) / 524288.0; var1 = (1.0 + var1 / 32768.0) * ((dubbel) dig_P1); dubbel p = 1048576.0 - (dubbel) adc_p; p = (p - (var2 / 4096.0)) * 6250.0 / var1; var1 = ((dubbel) dig_P9) * p * p / 2147483648.0; var2 = p * ((dubbel) dig_P8) / 32768.0; dubbele druk = (p + (var1 + var2 + ((dubbel) dig_P7)) / 16.0) / 100; // Humiditeitsverrekening berekeninge dubbel var_H = (((dubbel) 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))); dubbele humiditeit = var_H * (1.0 - dig_H1 * var_H / 524288.0); as (humiditeit> 100.0) {humiditeit = 100.0; } anders as (humiditeit <0.0) {humiditeit = 0.0; } // Uitvoerdata na paneelbord Particle.publish ("Temperatuur in Celsius:", String (cTemp)); Particle.publish ("Temperatuur in Fahrenheit:", String (fTemp)); Particle.publish ("Pressure:", String (pressure)); Particle.publish ("Relatiewe humiditeit:", string (humiditeit)); vertraging (1000); }

Stap 5: Aansoeke:

Aansoeke
Aansoeke

BME280 temperatuur-, druk- en relatiewe humiditeitsensor het verskillende industriële toepassings, soos temperatuurmonitering, perifere termiese beskerming van die rekenaar, drukmonitering in die industrie. Ons het hierdie sensor ook gebruik vir weerstasie -toepassings sowel as kweekhuismoniteringstelsels.

Ander toepassings kan insluit:

  1. Konteksbewustheid, bv. velopsporing, opsporing van kamerverandering.
  2. Fiksheidsmonitering / welstand - Waarskuwing oor droogte of hoë temperature.
  3. Meting van volume en lugvloei.
  4. Tuis outomatisering beheer.
  5. Beheer verwarming, ventilasie, lugversorging (HVAC).
  6. Internet van dinge.
  7. GPS-verbetering (byvoorbeeld verbetering van tyd tot eerste herstel, afrekening, hellingopsporing).
  8. Binnenshuise navigasie (verandering van vloeropsporing, hysbakopsporing).
  9. Buitelugnavigasie, ontspanning en sporttoepassings.
  10. Weervoorspelling.
  11. Aanduiding van vertikale snelheid (styg-/sakspoed).

Stap 6: Video -tutoriaal

Kyk na ons video -tutoriaal om deur al die stappe in die koppelvlak en voltooiing van die projek te gaan.

Bly ingeskakel vir ander sensor se koppelvlak en werkblogs.

Aanbeveel: