Inhoudsopgave:

Berekening van vochtigheid, druk en temperatuur met behulp van BME280 en Photon Interfacing: 6 stappen
Berekening van vochtigheid, druk en temperatuur met behulp van BME280 en Photon Interfacing: 6 stappen

Video: Berekening van vochtigheid, druk en temperatuur met behulp van BME280 en Photon Interfacing: 6 stappen

Video: Berekening van vochtigheid, druk en temperatuur met behulp van BME280 en Photon Interfacing: 6 stappen
Video: Lesson 37: Using BME280 Humidity, Barometric Pressure and Temperature Sensor 2024, November
Anonim
Berekening van vochtigheid, druk en temperatuur met behulp van BME280 en Photon Interfacing
Berekening van vochtigheid, druk en temperatuur met behulp van BME280 en Photon Interfacing

We komen verschillende projecten tegen waarbij temperatuur-, druk- en vochtigheidsbewaking nodig is. We realiseren ons dus dat deze parameters eigenlijk een cruciale rol spelen bij het hebben van een schatting van de werkefficiëntie van een systeem bij verschillende atmosferische omstandigheden. Zowel op industrieel niveau als persoonlijke systemen is een optimaal temperatuur-, vochtigheids- en luchtdrukniveau vereist voor het adequaat functioneren van het systeem.

Daarom geven we een complete tutorial over deze sensor, in deze tutorial gaan we de werking van de BME280 vochtigheids-, druk- en temperatuursensor met deeltjesfoton uitleggen.

Stap 1: BME280-verkenning

BME280-verkenning
BME280-verkenning

De elektronische sector heeft hun spel opgevoerd met de BME280-sensor, een omgevingssensor met temperatuur, luchtdruk en vochtigheid! Deze sensor is geweldig voor alle soorten weers-/omgevingsdetectie en kan zelfs worden gebruikt in I2C.

Deze precisiesensor BME280 is de beste meetoplossing voor het meten van vochtigheid met een nauwkeurigheid van ±3%, barometrische druk met een absolute nauwkeurigheid van ±1 hPa en temperatuur met een nauwkeurigheid van ±1,0°C. Omdat de druk verandert met de hoogte en de drukmetingen zo goed zijn, kun je hem ook gebruiken als hoogtemeter met een nauwkeurigheid van ±1 meter of beter! De temperatuursensor is geoptimaliseerd voor de laagste ruis en hoogste resolutie en wordt gebruikt voor temperatuurcompensatie van de druksensor en kan ook worden gebruikt voor het schatten van de omgevingstemperatuur. Metingen met de BME280 kunnen door de gebruiker of met regelmatige tussenpozen worden uitgevoerd.

Gegevensblad: Klik om een voorbeeld te bekijken of het gegevensblad van de BME280-sensor te downloaden.

Stap 2: Lijst met hardwarevereisten

Lijst met hardwarevereisten
Lijst met hardwarevereisten

We hebben volledig Dcube Store Parts gebruikt omdat ze gemakkelijk te gebruiken zijn, en iets aan alles dat mooi op een centimeterraster past, brengt ons echt op gang. U kunt gebruiken wat u maar wilt, maar het bedradingsschema gaat ervan uit dat u deze onderdelen gebruikt.

  • BME280 Sensor I²C Mini Module
  • I²C-schild voor deeltjesfoton
  • Deeltjesfoton
  • I²C-kabel
  • Oplader

Stap 3: Interfacing

interface
interface

Het gedeelte over de interface legt in feite de bedradingsverbindingen uit die nodig zijn tussen de sensor en het deeltjesfoton. Zorgen voor correcte verbindingen is de basisbehoefte bij het werken aan elk systeem voor de gewenste output. De vereiste verbindingen zijn dus als volgt:

De BME280 werkt via I2C. Hier is het voorbeeldbedradingsschema, dat laat zien hoe elke interface van de sensor moet worden aangesloten. Out-of-the-box, het bord is geconfigureerd voor een I2C-interface, daarom raden we aan om deze interface te gebruiken als je verder agnostisch bent. Alles wat je nodig hebt zijn vier draden! Er zijn slechts vier aansluitingen nodig Vcc, Gnd, SCL en SDA-pinnen en deze worden verbonden met behulp van I2C-kabel. Deze verbindingen worden gedemonstreerd in de bovenstaande afbeeldingen.

Stap 4: Temperatuur-, druk- en vochtigheidsbewakingscode

Temperatuur-, druk- en vochtigheidsbewakingscode
Temperatuur-, druk- en vochtigheidsbewakingscode
Temperatuur-, druk- en vochtigheidsbewakingscode
Temperatuur-, druk- en vochtigheidsbewakingscode

De schone versie van de code die we zullen gebruiken om dit uit te voeren, is HIER beschikbaar.

Bij het gebruik van de sensormodule met de Arduino nemen we de library application.h en spark_wiring_i2c.h op. "application.h" en spark_wiring_i2c.h bibliotheek bevat de functies die de i2c-communicatie tussen de sensor en het deeltje vergemakkelijken.

Klik HIER om de webpagina voor apparaatbewaking te openen

Upload de code naar je bord en het zou moeten beginnen te werken! Alle gegevens kunnen worden verkregen op de webpagina zoals weergegeven in de afbeelding.

Code staat hieronder:

// Gedistribueerd met een vrije licentie.// Gebruik het zoals je wilt, winst of gratis, op voorwaarde dat het past in de licenties van de bijbehorende werken. // BME280 // Deze code is ontworpen om te werken met de BME280_I2CS I2C Mini Module die verkrijgbaar is bij ControlEverything.com. #include #include // BME280 I2C-adres is 0x76(108) #define Addr 0x76 dubbele cTemp = 0, fTemp = 0, druk = 0, vochtigheid = 0; void setup () { // Stel variabele Particle.variable ("i2cdevice", "BME280"); artikel.variabele("cTemp", cTemp); Particle.variable ("fTemp", fTemp); Particle.variable ("druk", druk); Particle.variable ("vochtigheid", vochtigheid); // Initialiseer I2C-communicatie als MASTER Wire.begin(); // Initialiseer seriële communicatie, stel baudrate in = 9600 Serial.begin (9600); vertraging (300); } void loop() { unsigned int b1[24]; niet-ondertekende int-gegevens[8]; int dig_H1 = 0; for(int i = 0; i <24; i++) {// Start I2C Transmission Wire.beginTransmission (Addr); // Selecteer dataregister Wire.write((136+i)); // Stop I2C-transmissie Wire.endTransmission (); // Verzoek 1 byte aan gegevens Wire.requestFrom (Addr, 1); // Lees 24 bytes aan gegevens if(Wire.available() == 1) {b1 = Wire.read(); } } // Converteer de gegevens // temp coëfficiënten 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); // drukcoëfficiënten 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); // Selecteer dataregister Wire.write((225+i)); // Stop I2C-transmissie Wire.endTransmission (); // Verzoek 1 byte aan gegevens Wire.requestFrom (Addr, 1); // Lees 7 bytes aan gegevens if(Wire.available() == 1) {b1 = Wire.read(); } } // Converteer de gegevens // vochtigheidscoëfficiënten 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); // Selecteer dataregister Wire.write (161); // Stop I2C-transmissie Wire.endTransmission (); // Verzoek 1 byte aan gegevens Wire.requestFrom (Addr, 1); // Lees 1 byte aan gegevens if (Wire.available () == 1) { dig_H1 = Wire.read (); } // Start I2C Transmission Wire.beginTransmission (Addr); // Selecteer controle vochtigheidsregister Wire.write (0xF2); // Vochtigheid boven bemonsteringsfrequentie = 1 Wire.write (0x01); // Stop I2C-transmissie Wire.endTransmission (); // Start I2C Transmission Wire.beginTransmission (Addr); // Selecteer controle meetregister Wire.write (0xF4); // Normale modus, temperatuur en druk over bemonsteringssnelheid = 1 Wire.write (0x27); // Stop I2C-transmissie Wire.endTransmission (); // Start I2C Transmission Wire.beginTransmission (Addr); // Selecteer configuratieregister Wire.write (0xF5); // Stand-by-tijd = 1000 ms Wire.write (0xA0); // Stop I2C-transmissie Wire.endTransmission (); for(int i = 0; i <8; i++) {// Start I2C Transmission Wire.beginTransmission (Addr); // Selecteer dataregister Wire.write((247+i)); // Stop I2C-transmissie Wire.endTransmission (); // Verzoek 1 byte aan gegevens Wire.requestFrom (Addr, 1); // Lees 8 bytes aan gegevens if (Wire.available () == 1) { data = Wire.read (); } } // Converteer druk- en temperatuurgegevens naar 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; // Converteer de vochtigheidsgegevens long adc_h = ((long)(data[6] & 0xFF) * 256 + (long)(data[7] & 0xFF)); // Berekeningen temperatuur offset dubbele var1 = (((double)adc_t) / 16384.0 - ((double)dig_T1) / 1024.0) * ((double)dig_T2); dubbele var2 = ((((dubbel)adc_t) / 131072.0 - ((dubbel)dig_T1) / 8192.0) * (((dubbel)adc_t)/131072.0 - ((dubbel)dig_T1)/8192.0)) * ((dubbel)dig_T3); dubbele t_fine = (lang)(var1 + var2); dubbele cTemp = (var1 + var2) / 5120,0; dubbele fTemp = cTemp * 1.8 + 32; // Berekeningen drukoffset 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); dubbele p = 1048576,0 - (dubbele) 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; // Vochtigheid offset berekeningen 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 vochtigheid = var_H * (1,0 - dig_H1 * var_H / 524288,0); if (vochtigheid> 100,0) {vochtigheid = 100,0; } else if (vochtigheid < 0.0) { vochtigheid = 0.0; } // Gegevens uitvoeren naar dashboard Particle.publish ("Temperatuur in Celsius: ", String (cTemp)); Particle.publish("Temperatuur in Fahrenheit: ", String(fTemp)); Particle.publish("Druk: ", String(druk)); Particle.publish ("Relatieve vochtigheid:", String (vochtigheid)); vertraging (1000); }

Stap 5: Toepassingen:

Toepassingen
Toepassingen

BME280 temperatuur-, druk- en relatieve vochtigheidssensor heeft verschillende industriële toepassingen zoals temperatuurbewaking, thermische beveiliging van computerrandapparatuur, drukbewaking in de industrie. We hebben deze sensor ook gebruikt in weerstationtoepassingen en in kasmonitoringsystemen.

Andere toepassingen kunnen zijn:

  1. Contextbewustzijn, b.v. huiddetectie, detectie van kamerverandering.
  2. Fitnessmonitoring / welzijn - Waarschuwing met betrekking tot droogte of hoge temperaturen.
  3. Meting van volume en luchtstroom.
  4. Domotica controle.
  5. Regeling verwarming, ventilatie, airconditioning (HVAC).
  6. Internet van dingen.
  7. GPS-verbetering (bijv. verbetering van de tijd tot de eerste fix, gegist bestek, hellingdetectie).
  8. Binnennavigatie (detectie van verdieping, detectie van liften).
  9. Outdoor navigatie, vrije tijd en sport toepassingen.
  10. Weervoorspelling.
  11. Verticale snelheidsindicatie (stijg-/zinksnelheid).

Stap 6: Video-tutorial

Bekijk onze video-tutorial om alle stappen in de interface en het voltooien van het project te doorlopen.

Blijf op de hoogte voor de interfaces en werkblogs van andere sensoren.

Aanbevolen: