Innehållsförteckning:
- Steg 1: BME280 Exploration
- Steg 2: Lista över maskinvarukrav
- Steg 3: Gränssnitt
- Steg 4: Övervakningskod för temperatur, tryck och luftfuktighet
- Steg 5: Ansökningar:
- Steg 6: Videohandledning
Video: Fuktighet, tryck och temperaturberäkning med BME280 och fotongränssnitt: 6 steg
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:38
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
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
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ä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
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:
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:
- Kontextmedvetenhet, t.ex. huddetektering, upptäckt av rumsförändringar.
- Fitnessövervakning / välbefinnande - Varning för torrhet eller höga temperaturer.
- Mätning av volym och luftflöde.
- Hemautomationskontroll.
- Styr värme, ventilation, luftkonditionering (HVAC).
- Sakernas internet.
- GPS-förbättring (t.ex. förbättring av tid till första-fix, dödräkning, lutningsdetektering).
- Inomhusnavigering (byte av golvdetektering, hissdetektering).
- Utomhusnavigering, fritids- och sportapplikationer.
- Väderprognos.
- 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:
M5STACK Så här visar du temperatur, luftfuktighet och tryck på M5StickC ESP32 med Visuino - enkelt att göra: 6 steg
M5STACK Hur man visar temperatur, luftfuktighet och tryck på M5StickC ESP32 med Visuino - enkelt att göra: I den här självstudien lär vi oss hur man programmerar ESP32 M5Stack StickC med Arduino IDE och Visuino för att visa temperatur, luftfuktighet och tryck med ENV -sensor (DHT12, BMP280, BMM150)
Höjd, tryck och temperatur med Raspberry Pi med MPL3115A2: 6 steg
Höjd, tryck och temperatur med Raspberry Pi med MPL3115A2: Låter intressant. Det är fullt möjligt under denna tid när vi alla går in i IoT -generationen. Som elektronikfreak har vi lekt med Raspberry Pi och bestämt oss för att göra intressanta projekt med denna kunskap. I detta projekt vill vi
Arduino väderstation med BMP280 -DHT11 - Temperatur, luftfuktighet och tryck: 8 steg
Arduino väderstation med BMP280 -DHT11 - Temperatur, luftfuktighet och tryck: I denna handledning lär vi oss hur man gör en väderstation som visar en TEMPERATUR, FUKTIGHET OCH TRYCK på LCD -skärmen TFT 7735 Se en demonstrationsvideo
Bestämning av tryck och höjd med GY-68 BMP180 och Arduino: 6 steg
Bestämning av tryck och höjd med GY-68 BMP180 och Arduino: Översikt I många projekt som flygrobotar, väderstationer, förbättrad routingprestanda, sport och etc. är mätning av tryck och höjd mycket viktigt. I denna handledning lär du dig hur du använder BMP180 -sensorn, som är en av de mest
Temperatur och fuktighet Display och datainsamling med Arduino och bearbetning: 13 steg (med bilder)
Temperatur- och luftfuktighetsvisning och datainsamling med Arduino och bearbetning: Intro: Detta är ett projekt som använder ett Arduino -kort, en sensor (DHT11), en Windows -dator och ett bearbetningsprogram (ett gratis nedladdningsbart) för att visa temperatur, luftfuktighetsdata i digital och stapeldiagramform, visa tid och datum och kör en räkningstid