Indholdsfortegnelse:

Fugtighed, tryk og temperaturberegning ved hjælp af BME280 og fotoninterface: 6 trin
Fugtighed, tryk og temperaturberegning ved hjælp af BME280 og fotoninterface: 6 trin

Video: Fugtighed, tryk og temperaturberegning ved hjælp af BME280 og fotoninterface: 6 trin

Video: Fugtighed, tryk og temperaturberegning ved hjælp af BME280 og fotoninterface: 6 trin
Video: Lesson 37: Using BME280 Humidity, Barometric Pressure and Temperature Sensor 2024, Juli
Anonim
Fugtighed, tryk og temperaturberegning ved hjælp af BME280 og Photon Interfacing
Fugtighed, tryk og temperaturberegning ved hjælp af BME280 og Photon Interfacing

Vi støder på forskellige projekter, som kræver temperatur-, tryk- og fugtighedsovervågning. Således indser vi, at disse parametre faktisk spiller en afgørende rolle for at have et skøn over et systems effektivitet ved forskellige atmosfæriske forhold. Både på industrielt niveau og personlige systemer er en optimal temperatur, fugtighed og barometrisk tryk påkrævet for systemets tilstrækkelige ydeevne.

Det er derfor, vi giver en komplet vejledning om denne sensor, i denne vejledning skal vi forklare funktionen af BME280 fugtigheds-, tryk- og temperatursensor med partikelfoton.

Trin 1: BME280 -efterforskning

BME280 Efterforskning
BME280 Efterforskning

Elektronisk sektor har forstærket deres spil med BME280 -sensoren, en miljøsensor med temperatur, barometrisk tryk og fugtighed! Denne sensor er fantastisk til al slags vejr/miljøfornemmelse og kan endda bruges i I2C.

Denne præcisionssensor BME280 er den bedste sanseløsning til måling af fugtighed med ± 3% nøjagtighed, barometrisk tryk med ± 1 hPa absolut nøjagtighed og temperatur med ± 1,0 ° C nøjagtighed. Fordi trykket ændres med højden, og trykmålingerne er så gode, kan du også bruge det som en højdemåler med ± 1 meter eller bedre nøjagtighed! Temperatursensoren er optimeret til den laveste støj og højeste opløsning og bruges til temperaturkompensation på trykføleren og kan også bruges til estimering af omgivelsestemperatur. Målinger med BME280 kan udføres af brugeren eller udføres med jævne mellemrum.

Datablad: Klik for at få vist eller downloade databladet til BME280 -sensoren.

Trin 2: Liste over krav til hardware

Hardware kravliste
Hardware kravliste

Vi brugte udelukkende Dcube Store Parts, fordi de er nemme at bruge, og noget om alt, der passer fint til et centimeter gitter, får os virkelig til at gå. Du kan bruge, hvad du vil, men ledningsdiagrammet antager, at du bruger disse dele.

  • BME280 Sensor I²C Mini -modul
  • I²C -skærm til partikelfoton
  • Partikel foton
  • I²C kabel
  • Strømadapter

Trin 3: Grænseflade

Grænseflade
Grænseflade

Interfacesektionen forklarer grundlæggende de ledningsforbindelser, der kræves mellem sensoren og partikelfonen. At sikre korrekte forbindelser er den grundlæggende nødvendighed, mens du arbejder på et hvilket som helst system til den ønskede output. Så de nødvendige forbindelser er som følger:

BME280 fungerer over I2C. Her er eksemplet på ledningsdiagram, der viser, hvordan du tilslutter hver grænseflade på sensoren. Out-of-the-box er tavlen konfigureret til en I2C-grænseflade, som sådan anbefaler vi at bruge denne grænseflade, hvis du ellers er agnostiker. Alt du behøver er fire ledninger! Der kræves kun fire tilslutninger Vcc, Gnd, SCL og SDA ben, og disse er forbundet ved hjælp af I2C kabel. Disse forbindelser er vist på billederne ovenfor.

Trin 4: Overvågningskode for temperatur, tryk og luftfugtighed

Overvågningskode for temperatur, tryk og luftfugtighed
Overvågningskode for temperatur, tryk og luftfugtighed
Overvågningskode for temperatur, tryk og luftfugtighed
Overvågningskode for temperatur, tryk og luftfugtighed

Den rene version af koden, som vi vil bruge til at køre denne, er tilgængelig HER.

Mens vi bruger sensormodulet med Arduino, inkluderer vi application.h og spark_wiring_i2c.h bibliotek. "application.h" og spark_wiring_i2c.h biblioteket indeholder de funktioner, der letter i2c -kommunikationen mellem sensoren og partiklen.

Klik HER for at åbne websiden til enhedsovervågning

Upload koden til dit bord, og den skal begynde at fungere! Alle data kan hentes på websiden som vist på billedet.

Koden er angivet herunder:

// Distribueret med en fri vilje-licens. // Brug den, som du vil, profit eller gratis, forudsat at den passer ind i licenserne til de tilhørende værker. // BME280 // Denne kode er designet til at fungere med BME280_I2CS I2C Mini -modulet tilgængeligt fra ControlEverything.com. #include #include // BME280 I2C -adressen er 0x76 (108) #define Addr 0x76 dobbelt cTemp = 0, fTemp = 0, tryk = 0, luftfugtighed = 0; void setup () {// Angiv variabel Particle.variable ("i2cdevice", "BME280"); article.variable ("cTemp", cTemp); Particle.variable ("fTemp", fTemp); Partikel.variabel ("tryk", tryk); Partikel.variabel ("fugtighed", fugtighed); // Initialiser I2C -kommunikation som MASTER Wire.begin (); // Initialiser seriel kommunikation, indstil baudhastighed = 9600 Serial.begin (9600); forsinkelse (300); } void loop () {unsigned int b1 [24]; usignerede int -data [8]; int dig_H1 = 0; for (int i = 0; i <24; i ++) {// Start I2C Transmission Wire.beginTransmission (Addr); // Vælg dataregister Wire.write ((136+i)); // Stop I2C Transmission Wire.endTransmission (); // Anmod om 1 byte data Wire.requestFrom (Addr, 1); // Læs 24 bytes data hvis (Wire.available () == 1) {b1 = Wire.read (); }} // Konverter data // tempkoefficienter 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); // trykkoefficienter 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); // Vælg dataregister Wire.write ((225+i)); // Stop I2C Transmission Wire.endTransmission (); // Anmod om 1 byte data Wire.requestFrom (Addr, 1); // Læs 7 bytes data hvis (Wire.available () == 1) {b1 = Wire.read (); }}} // Konverter data // fugtighedskoefficienter 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); // Vælg dataregister Wire.write (161); // Stop I2C Transmission Wire.endTransmission (); // Anmod om 1 byte data Wire.requestFrom (Addr, 1); // Læs 1 byte data hvis (Wire.available () == 1) {dig_H1 = Wire.read (); } // Start I2C Transmission Wire.beginTransmission (Addr); // Vælg kontrolfugtighedsregister Wire.write (0xF2); // Fugtighed over prøveudtagningshastighed = 1 Wire.write (0x01); // Stop I2C Transmission Wire.endTransmission (); // Start I2C Transmission Wire.beginTransmission (Addr); // Vælg kontrolmåleregister Wire.write (0xF4); // Normal tilstand, temp og tryk over samplingshastighed = 1 Wire.write (0x27); // Stop I2C Transmission Wire.endTransmission (); // Start I2C Transmission Wire.beginTransmission (Addr); // Vælg konfigurationsregister Wire.write (0xF5); // Standby -tid = 1000ms Wire.write (0xA0); // Stop I2C Transmission Wire.endTransmission (); for (int i = 0; i <8; i ++) {// Start I2C Transmission Wire.beginTransmission (Addr); // Vælg dataregister Wire.write ((247+i)); // Stop I2C Transmission Wire.endTransmission (); // Anmod om 1 byte data Wire.requestFrom (Addr, 1); // Læs 8 bytes data hvis (Wire.available () == 1) {data = Wire.read (); }}} // Konverter tryk- og temperaturdata til 19-bit 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 fugtighedsdataene lange adc_h = ((long) (data [6] & 0xFF) * 256 + (long) (data [7] & 0xFF)); // Temperaturforskydningsberegninger dobbelt var1 = (((dobbelt) adc_t) / 16384.0 - ((dobbelt) dig_T1) / 1024.0) * ((dobbelt) dig_T2); dobbelt var2 = ((((dobbelt) adc_t) / 131072.0 - ((dobbelt) dig_T1) / 8192.0) * (((dobbelt) adc_t) /131072.0 - ((dobbelt) dig_T1) /8192.0)) * ((dobbelt) dig_T3); dobbelt t_fine = (lang) (var1 + var2); dobbelt cTemp = (var1 + var2) / 5120,0; dobbelt fTemp = cTemp * 1,8 + 32; // Trykforskydningsberegninger var1 = ((dobbelt) t_fine / 2.0) - 64000.0; var2 = var1 * var1 * ((dobbelt) dig_P6) / 32768,0; var2 = var2 + var1 * ((dobbelt) dig_P5) * 2,0; var2 = (var2 / 4,0) + (((dobbelt) dig_P4) * 65536,0); var1 = (((dobbelt) dig_P3) * var1 * var1 / 524288.0 + ((dobbelt) dig_P2) * var1) / 524288.0; var1 = (1,0 + var1 / 32768,0) * ((dobbelt) dig_P1); dobbelt p = 1048576.0 - (dobbelt) adc_p; p = (p - (var2 / 4096.0)) * 6250.0 / var1; var1 = ((dobbelt) dig_P9) * p * p / 2147483648.0; var2 = p * ((dobbelt) dig_P8) / 32768,0; dobbelt tryk = (p + (var1 + var2 + ((dobbelt) dig_P7)) / 16,0) / 100; // Fugtighedsforskydningsberegninger dobbelt var_H = (((dobbelt) 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))); dobbelt luftfugtighed = var_H * (1,0 - dig_H1 * var_H / 524288,0); hvis (fugtighed> 100,0) {luftfugtighed = 100,0; } ellers hvis (fugtighed <0,0) {luftfugtighed = 0,0; } // Outputdata til instrumentbrættet Particle.publish ("Temperature in Celsius:", String (cTemp)); Particle.publish ("Temperatur i Fahrenheit:", String (fTemp)); Particle.publish ("Tryk:", String (tryk)); Particle.publish ("Relativ luftfugtighed:", streng (fugtighed)); forsinkelse (1000); }

Trin 5: Ansøgninger:

Ansøgninger
Ansøgninger

BME280 temperatur-, tryk- og relativ fugtighedsføler har forskellige industrielle applikationer som temperaturovervågning, computer perifer termisk beskyttelse, trykovervågning i industrien. Vi har også brugt denne sensor til vejrstationsapplikationer samt drivhusovervågningssystem.

Andre applikationer kan omfatte:

  1. Kontekstbevidsthed, f.eks. hudregistrering, registrering af rumskift.
  2. Fitnessovervågning / trivsel - Advarsel vedrørende tørhed eller høje temperaturer.
  3. Måling af volumen og luftstrøm.
  4. Hjemmeautomatiseringskontrol.
  5. Kontroller varme, ventilation, aircondition (HVAC).
  6. Tingenes internet.
  7. GPS-forbedring (f.eks. Forbedring af tid til første-fix, dødregning, hældningsdetektering).
  8. Indendørs navigation (ændring af gulvregistrering, elevatorregistrering).
  9. Udendørs navigation, fritid og sport applikationer.
  10. Vejrudsigt.
  11. Vertikal hastighedsindikation (stigning/synkehastighed)..

Trin 6: Videovejledning

Se vores videoundervisning for at gennemgå alle trin i grænseflade og færdiggørelse af projektet.

Hold øje med andre sensorers grænseflade og arbejdsblogs.

Anbefalede: