Innholdsfortegnelse:

Fuktighet, trykk og temperaturberegning ved bruk av BME280 og fotongrensesnitt .: 6 trinn
Fuktighet, trykk og temperaturberegning ved bruk av BME280 og fotongrensesnitt .: 6 trinn

Video: Fuktighet, trykk og temperaturberegning ved bruk av BME280 og fotongrensesnitt .: 6 trinn

Video: Fuktighet, trykk og temperaturberegning ved bruk av BME280 og fotongrensesnitt .: 6 trinn
Video: Concept of LoRa Transmitter, BME280 Sensor and WiFi Webserver based on Arduino ESP32 (EP07) 2024, November
Anonim
Fuktighet, trykk og temperaturberegning ved hjelp av BME280 og Photon Interfacing
Fuktighet, trykk og temperaturberegning ved hjelp av BME280 og Photon Interfacing

Vi støter på forskjellige prosjekter som krever temperatur-, trykk- og fuktighetsovervåking. Dermed innser vi at disse parameterne faktisk spiller en viktig rolle for å ha et estimat av arbeidseffektiviteten til et system under forskjellige atmosfæriske forhold. Både på industrinivå og personlige systemer er en optimal temperatur, fuktighet og barometrisk trykk nødvendig for systemets tilstrekkelige ytelse.

Dette er grunnen til at vi gir en komplett opplæring om denne sensoren, i denne opplæringen skal vi forklare hvordan BME280 fuktighets-, trykk- og temperatursensor fungerer med partikkelfoton.

Trinn 1: BME280 Leting

BME280 Leting
BME280 Leting

Elektronisk sektor har forsterket spillet sitt med BME280 -sensoren, en miljøsensor med temperatur, barometrisk trykk og fuktighet! Denne sensoren er flott for all slags vær-/miljøfølelse og kan til og med brukes i I2C.

Denne presisjonssensoren BME280 er den beste sanseløsningen for måling av fuktighet med ± 3% nøyaktighet, barometrisk trykk med ± 1 hPa absolutt nøyaktighet og temperatur med ± 1,0 ° C nøyaktighet. Fordi trykket endres med høyden, og trykkmålingene er så gode, kan du også bruke den som en høydemåler med ± 1 meter eller bedre nøyaktighet! Temperatursensoren er optimalisert for lavest støy og høyeste oppløsning og brukes til temperaturkompensasjon på trykksensoren og kan også brukes til estimering av omgivelsestemperatur. Målinger med BME280 kan utføres av brukeren eller utføres med jevne mellomrom.

Dataark: Klikk for å forhåndsvise eller laste ned databladet til BME280 -sensoren.

Trinn 2: Liste over maskinvarekrav

Kravliste for maskinvare
Kravliste for maskinvare

Vi brukte helt Dcube Store deler fordi de er enkle å bruke, og noe om at alt passer fint på et centimeter rutenett, får oss virkelig til å gå. Du kan bruke hva du vil, men koblingsskjemaet antar at du bruker disse delene.

  • BME280 Sensor I²C minimodul
  • I²C -skjold for partikkelfoton
  • Partikkelfoton
  • I²C -kabel
  • Strømadapter

Trinn 3: Grensesnitt

Grensesnitt
Grensesnitt

Grensesnittdelen forklarer i utgangspunktet ledningsforbindelsene som kreves mellom sensoren og partikkelfotonet. Å sikre riktige tilkoblinger er den grunnleggende nødvendigheten mens du arbeider på et hvilket som helst system for ønsket utgang. Så de nødvendige tilkoblingene er som følger:

BME280 fungerer over I2C. Her er eksempel på koblingsskjema, som viser hvordan du kobler til hvert grensesnitt på sensoren. Uten boksen er brettet konfigurert for et I2C-grensesnitt, derfor anbefaler vi å bruke dette grensesnittet hvis du ellers er agnostiker. Alt du trenger er fire ledninger! Bare fire tilkoblinger kreves Vcc, Gnd, SCL og SDA -pinner, og disse er koblet til ved hjelp av I2C -kabel. Disse sammenhengene er vist på bildene ovenfor.

Trinn 4: Overvåkningskode for temperatur, trykk og fuktighet

Overvåkningskode for temperatur, trykk og fuktighet
Overvåkningskode for temperatur, trykk og fuktighet
Overvåkningskode for temperatur, trykk og fuktighet
Overvåkningskode for temperatur, trykk og fuktighet

Den rene versjonen av koden som vi skal bruke til å kjøre denne er tilgjengelig HER.

Mens vi bruker sensormodulen med Arduino, inkluderer vi application.h og spark_wiring_i2c.h biblioteket. "application.h" og spark_wiring_i2c.h biblioteket inneholder funksjonene som letter i2c -kommunikasjonen mellom sensoren og partikkelen.

Klikk HER for å åpne nettsiden for enhetsovervåking

Last opp koden til brettet ditt, og den skal begynne å fungere! Alle dataene kan fås på nettsiden som vist på bildet.

Koden er gitt nedenfor:

// Distribuert med en fri viljelisens. // Bruk den på hvilken som helst måte du vil, fortjeneste eller gratis, forutsatt at den passer inn i lisensene til de tilhørende verkene. // BME280 // Denne koden er designet for å fungere med BME280_I2CS I2C Mini Module tilgjengelig fra ControlEverything.com. #include #include // BME280 I2C -adressen er 0x76 (108) #define Addr 0x76 dobbel cTemp = 0, fTemp = 0, trykk = 0, fuktighet = 0; void setup () {// Angi variabel Particle.variable ("i2cdevice", "BME280"); artikkel.variabel ("cTemp", cTemp); Particle.variable ("fTemp", fTemp); Partikkel.variabel ("trykk", trykk); Partikkel.variabel ("fuktighet", fuktighet); // Initialiser I2C -kommunikasjon som MASTER Wire.begin (); // Initialize Serial communication, set baud rate = 9600 Serial.begin (9600); forsinkelse (300); } void loop () {unsigned int b1 [24]; usignerte int -data [8]; int dig_H1 = 0; for (int i = 0; i <24; i ++) {// Start I2C Transmission Wire.beginTransmission (Addr); // Velg dataregister Wire.write ((136+i)); // Stopp I2C Transmission Wire.endTransmission (); // Be om 1 byte med data Wire.requestFrom (Addr, 1); // Les 24 byte med data hvis (Wire.available () == 1) {b1 = Wire.read (); }} // Konverter dataene // temp koeffisienter 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); // trykkoeffisienter 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); // Velg dataregister Wire.write ((225+i)); // Stopp I2C Transmission Wire.endTransmission (); // Be om 1 byte med data Wire.requestFrom (Addr, 1); // Les 7 byte med data hvis (Wire.available () == 1) {b1 = Wire.read (); }}} // Konverter dataene // fuktighetskoeffisienter 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]; // Start I2C Transmission Wire.beginTransmission (Addr); // Velg dataregister Wire.write (161); // Stopp I2C Transmission Wire.endTransmission (); // Be om 1 byte med data Wire.requestFrom (Addr, 1); // Les 1 byte med data hvis (Wire.available () == 1) {dig_H1 = Wire.read (); } // Start I2C Transmission Wire.beginTransmission (Addr); // Velg kontrollfuktighetsregister Wire.write (0xF2); // Fuktighet over samplingsfrekvens = 1 Wire.write (0x01); // Stopp I2C Transmission Wire.endTransmission (); // Start I2C Transmission Wire.beginTransmission (Addr); // Velg kontrollmålingsregister Wire.write (0xF4); // Normal modus, temperatur og trykk over samplingshastigheten = 1 Wire.write (0x27); // Stopp I2C Transmission Wire.endTransmission (); // Start I2C Transmission Wire.beginTransmission (Addr); // Velg konfigurasjonsregister Wire.write (0xF5); // Standby -tid = 1000ms Wire.write (0xA0); // Stopp I2C Transmission Wire.endTransmission (); for (int i = 0; i <8; i ++) {// Start I2C Transmission Wire.beginTransmission (Addr); // Velg dataregister Wire.write ((247+i)); // Stopp I2C Transmission Wire.endTransmission (); // Be om 1 byte med data Wire.requestFrom (Addr, 1); // Les 8 byte med data hvis (Wire.available () == 1) {data = Wire.read (); }}} // Konverter trykk- og temperaturdata til 19-bits lange adc_p = (((long) (data [0] & 0xFF) * 65536) + ((long) (data [1] & 0xFF) * 256) + (lang) (data [2] & 0xF0)) / 16; long adc_t = (((long) (data [3] & 0xFF) * 65536) + ((long) (data [4] & 0xFF) * 256) + (long) (data [5] & 0xF0)) / 16; // Konverter fuktighetsdata long adc_h = ((long) (data [6] & 0xFF) * 256 + (long) (data [7] & 0xFF)); // Temperaturforskyvningsberegninger dobbel var1 = (((dobbel) adc_t) / 16384.0 - ((dobbel) dig_T1) / 1024.0) * ((dobbel) dig_T2); double var2 = ((((double) adc_t) / 131072.0 - ((double) dig_T1) / 8192.0) * (((double) adc_t) /131072.0 - ((double) dig_T1) /8192.0)) * ((double) dig_T3); dobbel t_fine = (lang) (var1 + var2); dobbelt cTemp = (var1 + var2) / 5120,0; dobbelt fTemp = cTemp * 1,8 + 32; // Trykkforskyvningsberegninger var1 = ((dobbel) t_fine / 2.0) - 64000.0; var2 = var1 * var1 * ((dobbel) dig_P6) / 32768.0; var2 = var2 + var1 * ((dobbel) dig_P5) * 2,0; var2 = (var2 / 4.0) + (((dobbel) dig_P4) * 65536.0); var1 = (((dobbel) dig_P3) * var1 * var1 / 524288.0 + ((dobbel) dig_P2) * var1) / 524288.0; var1 = (1,0 + var1 / 32768,0) * ((dobbel) dig_P1); dobbel p = 1048576.0 - (dobbel) adc_p; p = (p - (var2 / 4096.0)) * 6250.0 / var1; var1 = ((dobbel) dig_P9) * p * p / 2147483648.0; var2 = p * ((dobbel) dig_P8) / 32768.0; dobbelt trykk = (p + (var1 + var2 + ((dobbelt) dig_P7)) / 16,0) / 100; // Beregninger av fuktighetsforskyvning dobbel var_H = (((dobbel) t_fin) - 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))); dobbel fuktighet = var_H * (1,0 - dig_H1 * var_H / 524288,0); hvis (fuktighet> 100,0) {fuktighet = 100,0; } annet hvis (fuktighet <0,0) {fuktighet = 0,0; } // Utdata til dashbordet Particle.publish ("Temperature in Celsius:", String (cTemp)); Particle.publish ("Temperatur i Fahrenheit:", String (fTemp)); Particle.publish ("Pressure:", String (press)); Particle.publish ("Relativ fuktighet:", streng (fuktighet)); forsinkelse (1000); }

Trinn 5: Søknader:

Applikasjoner
Applikasjoner

BME280 temperatur-, trykk- og relativ fuktighetssensor har forskjellige industrielle applikasjoner som temperaturovervåking, datamaskinens perifere termiske beskyttelse, trykkovervåking i industrien. Vi har også brukt denne sensoren til værstasjonsapplikasjoner samt drivhusovervåkingssystem.

Andre applikasjoner kan omfatte:

  1. Kontekstbevissthet, f.eks. huddeteksjon, romendringsdeteksjon.
  2. Treningsovervåking / velvære - Advarsel angående tørrhet eller høye temperaturer.
  3. Måling av volum og luftstrøm.
  4. Hjemmeautomatiseringskontroll.
  5. Kontroller varme, ventilasjon, klimaanlegg (HVAC).
  6. Internett av ting.
  7. GPS-forbedring (f.eks. Forbedring av tid til første-reparasjon, dødt oppgjør, deteksjon av skråninger).
  8. Innendørs navigasjon (endring av gulvdeteksjon, heisdeteksjon).
  9. Utendørs navigasjon, fritid og sport.
  10. Værmelding.
  11. Vertikal hastighetsindikasjon (stigning/synkehastighet)..

Trinn 6: Videoopplæring

Se videoopplæringen vår for å gå gjennom alle trinnene i grensesnitt og fullføring av prosjektet.

Følg med for andre sensorers grensesnitt og arbeidsblogger.

Anbefalt: