Innehållsförteckning:

Fuktighet, tryck och temperaturberäkning med BME280 och fotongränssnitt: 6 steg
Fuktighet, tryck och temperaturberäkning med BME280 och fotongränssnitt: 6 steg

Video: Fuktighet, tryck och temperaturberäkning med BME280 och fotongränssnitt: 6 steg

Video: Fuktighet, tryck och temperaturberäkning med BME280 och fotongränssnitt: 6 steg
Video: Gatupratare med tryck 2024, November
Anonim
Fuktighet, tryck och temperaturberäkning med BME280 och fotoninterfacing
Fuktighet, tryck och temperaturberäkning med BME280 och fotoninterfacing

Vi stöter på olika projekt som kräver temperatur-, tryck- och luftfuktighetsövervakning. Således inser vi att dessa parametrar faktiskt spelar en avgörande roll för att ha en uppskattning av ett systems effektivitet vid olika atmosfäriska förhållanden. Både på industrinivå och personliga system krävs en optimal temperatur, luftfuktighet och barometriskt tryck för att systemet ska fungera bra.

Det är därför vi ger en komplett handledning om denna sensor, i den här handledningen ska vi förklara hur BME280 -fukt-, tryck- och temperatursensorn fungerar med partikelfoton.

Steg 1: BME280 Exploration

BME280 Utforskning
BME280 Utforskning

Elektronisk sektor har intensifierat sitt spel med BME280 -sensorn, en miljösensor med temperatur, barometertryck och luftfuktighet! Denna sensor är utmärkt för alla slags väder/miljöavkänning och kan även användas i I2C.

Denna precisionssensor BME280 är den bästa avkänningslösningen för att mäta luftfuktighet med ± 3% noggrannhet, barometertryck med ± 1 hPa absolut noggrannhet och temperatur med ± 1,0 ° C noggrannhet. Eftersom trycket ändras med höjden och tryckmätningarna är så bra kan du också använda den som en höjdmätare med ± 1 meter eller bättre noggrannhet! Temperatursensorn har optimerats för lägsta buller och högsta upplösning och används för temperaturkompensering av trycksensorn och kan också användas för uppskattning av omgivningstemperatur. Mätningar med BME280 kan utföras av användaren eller utföras med jämna mellanrum.

Datablad: Klicka för att förhandsgranska eller ladda ner databladet för BME280 -sensorn.

Steg 2: Lista över maskinvarukrav

Maskinvarukravslista
Maskinvarukravslista

Vi använde helt Dcube Store Parts eftersom de är lätta att använda, och något om att allt passar fint på ett centimeter rutnät får oss verkligen att gå. Du kan använda vad du vill, men kopplingsschemat förutsätter att du använder dessa delar.

  • BME280 Sensor I²C Mini -modul
  • I²C -skärm för partikelfoton
  • Partikelfoton
  • I²C -kabel
  • Strömadapter

Steg 3: Gränssnitt

Gränssnitt
Gränssnitt

Gränssnittssektionen förklarar i princip de anslutningar som krävs mellan sensorn och partikelfonen. Att säkerställa korrekta anslutningar är den grundläggande nödvändigheten när du arbetar på något system för önskad utgång. Så, de nödvändiga anslutningarna är följande:

BME280 fungerar över I2C. Här är exemplet kopplingsschema som visar hur man kopplar upp varje gränssnitt för sensorn. Out-of-the-box är kortet konfigurerat för ett I2C-gränssnitt, därför rekommenderar vi att använda detta gränssnitt om du annars är agnostiker. Allt du behöver är fyra ledningar! Endast fyra anslutningar krävs Vcc, Gnd, SCL och SDA -stift och dessa är anslutna med hjälp av I2C -kabel. Dessa kopplingar visas i bilderna ovan.

Steg 4: Övervakningskod för temperatur, tryck och luftfuktighet

Övervakningskod för temperatur, tryck och luftfuktighet
Övervakningskod för temperatur, tryck och luftfuktighet
Övervakningskod för temperatur, tryck och luftfuktighet
Övervakningskod för temperatur, tryck och luftfuktighet

Den rena versionen av koden som vi kommer att använda för att köra detta är tillgänglig HÄR.

När vi använder sensormodulen med Arduino inkluderar vi application.h och spark_wiring_i2c.h biblioteket. "application.h" och spark_wiring_i2c.h biblioteket innehåller de funktioner som underlättar i2c -kommunikationen mellan sensorn och partikeln.

Klicka HÄR för att öppna webbsidan för enhetsövervakning

Ladda upp koden till ditt kort och den ska börja fungera! All data kan erhållas på webbsidan som visas på bilden.

Koden finns nedan:

// Distribueras med en fri vilja licens. // Använd den hur du vill, vinst eller gratis, förutsatt att den passar in i licensen för dess associerade verk. // BME280 // Denna kod är utformad för att fungera med BME280_I2CS I2C Mini Module tillgänglig från ControlEverything.com. #include #include // BME280 I2C -adressen är 0x76 (108) #define Addr 0x76 dubbel cTemp = 0, fTemp = 0, tryck = 0, fuktighet = 0; void setup () {// Ange variabel Particle.variable ("i2cdevice", "BME280"); article.variable ("cTemp", cTemp); Particle.variable ("fTemp", fTemp); Partikel. Variabel ("tryck", tryck); Partikelvariabel ("fuktighet", fuktighet); // Initiera I2C -kommunikation som MASTER Wire.begin (); // Initiera seriell kommunikation, ange överföringshastighet = 9600 Serial.begin (9600); fördröjning (300); } void loop () {unsigned int b1 [24]; osignerade int -data [8]; int dig_H1 = 0; for (int i = 0; i <24; i ++) {// Start I2C Transmission Wire.beginTransmission (Addr); // Välj dataregister Wire.write ((136+i)); // Stoppa I2C Transmission Wire.endTransmission (); // Begär 1 byte data Wire.requestFrom (Addr, 1); // Läs 24 byte med data om (Wire.available () == 1) {b1 = Wire.read (); }} // Konvertera data // temp koefficienter 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); // tryckkoefficienter 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älj dataregister Wire.write ((225+i)); // Stoppa I2C Transmission Wire.endTransmission (); // Begär 1 byte data Wire.requestFrom (Addr, 1); // Läs 7 byte med data om (Wire.available () == 1) {b1 = Wire.read (); }}} // Konvertera data // fuktighetskoefficienter 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]; // Starta I2C Transmission Wire.beginTransmission (Addr); // Välj dataregister Wire.write (161); // Stoppa I2C Transmission Wire.endTransmission (); // Begär 1 byte data Wire.requestFrom (Addr, 1); // Läs 1 byte data om (Wire.available () == 1) {dig_H1 = Wire.read (); } // Starta I2C Transmission Wire.beginTransmission (Addr); // Välj kontrollfuktighetsregister Wire.write (0xF2); // Luftfuktighet över samplingshastighet = 1 Wire.write (0x01); // Stoppa I2C Transmission Wire.endTransmission (); // Starta I2C Transmission Wire.beginTransmission (Addr); // Välj kontrollmätningsregister Wire.write (0xF4); // Normalt läge, temp och tryck över samplingshastigheten = 1 Wire.write (0x27); // Stoppa I2C Transmission Wire.endTransmission (); // Starta I2C Transmission Wire.beginTransmission (Addr); // Välj konfigurationsregister Wire.write (0xF5); // Standby -tid = 1000ms Wire.write (0xA0); // Stoppa I2C Transmission Wire.endTransmission (); for (int i = 0; i <8; i ++) {// Start I2C Transmission Wire.beginTransmission (Addr); // Välj dataregister Wire.write ((247+i)); // Stoppa I2C Transmission Wire.endTransmission (); // Begär 1 byte data Wire.requestFrom (Addr, 1); // Läs 8 byte med data om (Wire.available () == 1) {data = Wire.read (); }} // Konvertera tryck- och temperaturdata till 19-bitars lång adc_p = (((long) (data [0] & 0xFF) * 65536) + ((long) (data [1] & 0xFF) * 256) + (lång) (data [2] & 0xF0)) / 16; long adc_t = (((long) (data [3] & 0xFF) * 65536) + ((long) (data [4] & 0xFF) * 256) + (long) (data [5] & 0xF0)) / 16; // Konvertera fuktdata lång adc_h = ((long) (data [6] & 0xFF) * 256 + (long) (data [7] & 0xFF)); // Temperaturförskjutningsberäkningar 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 = (lång) (var1 + var2); dubbel cTemp = (var1 + var2) / 5120,0; dubbel fTemp = cTemp * 1,8 + 32; // Beräkningar av tryckförskjutning 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; dubbel tryck = (p + (var1 + var2 + ((dubbel) dig_P7)) / 16,0) / 100; // Beräkningar av luftfuktighetsförskjutning dubbel var_H = (((dubbel) 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))); dubbel luftfuktighet = var_H * (1,0 - dig_H1 * var_H / 524288,0); om (luftfuktighet> 100,0) {fuktighet = 100,0; } annars om (fuktighet <0,0) {fuktighet = 0,0; } // Utdata till instrumentpanelen Particle.publish ("Temperature in Celsius:", String (cTemp)); Particle.publish ("Temperatur i Fahrenheit:", String (fTemp)); Particle.publish ("Pressure:", String (pressure)); Particle.publish ("Relativ luftfuktighet:", Sträng (fuktighet)); fördröjning (1000); }

Steg 5: Ansökningar:

Ansökningar
Ansökningar

BME280 temperatur-, tryck- och relativ fuktighetssensor har olika industriella tillämpningar som temperaturövervakning, dator perifert termiskt skydd, tryckövervakning i industrin. Vi har också använt denna sensor i väderstationsapplikationer samt växthusövervakningssystem.

Andra applikationer kan inkludera:

  1. Kontextmedvetenhet, t.ex. huddetektering, upptäckt av rumsförändringar.
  2. Fitnessövervakning / välbefinnande - Varning för torrhet eller höga temperaturer.
  3. Mätning av volym och luftflöde.
  4. Hemautomationskontroll.
  5. Styr värme, ventilation, luftkonditionering (HVAC).
  6. Sakernas internet.
  7. GPS-förbättring (t.ex. förbättring av tid till första-fix, dödräkning, lutningsdetektering).
  8. Inomhusnavigering (byte av golvdetektering, hissdetektering).
  9. Utomhusnavigering, fritids- och sportapplikationer.
  10. Väderprognos.
  11. Vertikal hastighetsindikering (stigning/sänkningshastighet)..

Steg 6: Videohandledning

Titta på vår videohandledning för att gå igenom alla steg i gränssnitt och slutföra projektet.

Håll ögonen öppna efter andra sensors gränssnitt och fungerande bloggar.

Rekommenderad: