Inhaltsverzeichnis:

Feuchtigkeits-, Druck- und Temperaturberechnung mit BME280 und Photon-Schnittstelle. - Gunook
Feuchtigkeits-, Druck- und Temperaturberechnung mit BME280 und Photon-Schnittstelle. - Gunook

Video: Feuchtigkeits-, Druck- und Temperaturberechnung mit BME280 und Photon-Schnittstelle. - Gunook

Video: Feuchtigkeits-, Druck- und Temperaturberechnung mit BME280 und Photon-Schnittstelle. - Gunook
Video: BME280 Temperatursensor, Luftfeuchtigkeit und Luftdruck am Arduino 2024, Juli
Anonim
Feuchte-, Druck- und Temperaturberechnung mit BME280 und Photon-Schnittstelle
Feuchte-, Druck- und Temperaturberechnung mit BME280 und Photon-Schnittstelle

Wir stoßen auf verschiedene Projekte, die eine Temperatur-, Druck- und Feuchtigkeitsüberwachung erfordern. Wir erkennen also, dass diese Parameter tatsächlich eine entscheidende Rolle bei der Schätzung der Arbeitseffizienz eines Systems bei verschiedenen atmosphärischen Bedingungen spielen. Sowohl auf industrieller Ebene als auch auf Personalsystemen ist ein optimales Temperatur-, Feuchtigkeits- und Luftdruckniveau für die angemessene Leistung des Systems erforderlich.

Aus diesem Grund bieten wir ein vollständiges Tutorial zu diesem Sensor an. In diesem Tutorial erklären wir die Funktionsweise des Feuchte-, Druck- und Temperatursensors BME280 mit Partikelphotonen.

Schritt 1: BME280-Erkundung

BME280-Erkundung
BME280-Erkundung

Der Elektroniksektor hat sich mit dem BME280-Sensor, einem Umgebungssensor mit Temperatur, Luftdruck und Luftfeuchtigkeit, verstärkt! Dieser Sensor eignet sich hervorragend für alle Arten von Wetter-/Umweltsensoren und kann sogar in I2C verwendet werden.

Dieser Präzisionssensor BME280 ist die beste Sensorlösung für die Messung von Feuchtigkeit mit ±3% Genauigkeit, Luftdruck mit ±1 hPa absoluter Genauigkeit und Temperatur mit ±1,0°C Genauigkeit. Da sich der Druck mit der Höhe ändert und die Druckmessungen so gut sind, können Sie ihn auch als Höhenmesser mit ±1 Meter oder besserer Genauigkeit verwenden! Der Temperatursensor wurde für geringstes Rauschen und höchste Auflösung optimiert und dient zur Temperaturkompensation von des Drucksensors und kann auch zur Schätzung der Umgebungstemperatur verwendet werden. Messungen mit dem BME280 können vom Benutzer oder in regelmäßigen Abständen durchgeführt werden.

Datenblatt: Klicken Sie hier, um das Datenblatt des BME280-Sensors in der Vorschau anzuzeigen oder herunterzuladen.

Schritt 2: Liste der Hardwareanforderungen

Liste der Hardwareanforderungen
Liste der Hardwareanforderungen

Wir haben ausschließlich Dcube Store Parts verwendet, weil sie einfach zu bedienen sind und alles, was gut in ein Zentimeterraster passt, uns wirklich in Schwung bringt. Sie können verwenden, was Sie wollen, aber der Schaltplan geht davon aus, dass Sie diese Teile verwenden.

  • BME280 Sensor I²C Mini-Modul
  • I²C-Schild für Particle Photon
  • Teilchen-Photon
  • I²C-Kabel
  • Netzteil

Schritt 3: Schnittstelle

Schnittstelle
Schnittstelle

Der Abschnitt Schnittstellen erläutert im Wesentlichen die erforderlichen Kabelverbindungen zwischen dem Sensor und dem Partikelphoton. Die Sicherstellung korrekter Verbindungen ist die Grundvoraussetzung bei der Arbeit an jedem System für die gewünschte Ausgabe. Die erforderlichen Verbindungen sind also wie folgt:

Der BME280 wird über I2C arbeiten. Hier ist das Beispiel-Verdrahtungsdiagramm, das zeigt, wie jede Schnittstelle des Sensors verdrahtet wird. Out-of-the-box ist das Board für eine I2C-Schnittstelle konfiguriert, daher empfehlen wir, diese Schnittstelle zu verwenden, wenn Sie ansonsten agnostisch sind. Alles was Sie brauchen sind vier Drähte! Es werden nur vier Anschlüsse benötigt Vcc, Gnd, SCL und SDA Pins und diese werden mit Hilfe von I2C Kabel verbunden. Diese Verbindungen sind in den obigen Bildern dargestellt.

Schritt 4: Temperatur-, Druck- und Feuchtigkeitsüberwachungscode

Temperatur-, Druck- und Feuchtigkeitsüberwachungscode
Temperatur-, Druck- und Feuchtigkeitsüberwachungscode
Temperatur-, Druck- und Feuchtigkeitsüberwachungscode
Temperatur-, Druck- und Feuchtigkeitsüberwachungscode

Die saubere Version des Codes, den wir verwenden, um dies auszuführen, ist HIER verfügbar.

Bei der Verwendung des Sensormoduls mit dem Arduino binden wir die Bibliothek application.h und spark_wiring_i2c.h ein. Die Bibliothek "application.h" und spark_wiring_i2c.h enthält die Funktionen, die die i2c-Kommunikation zwischen Sensor und Partikel ermöglichen.

Klicken Sie HIER, um die Webseite für die Geräteüberwachung zu öffnen

Laden Sie den Code in Ihr Board hoch und es sollte funktionieren! Alle Daten können wie im Bild gezeigt auf der Webseite abgerufen werden.

Der Code ist unten angegeben:

// Verbreitung mit freier Lizenz.// Verwenden Sie es, wie Sie wollen, profitabel oder kostenlos, sofern es in die Lizenzen der zugehörigen Werke passt. // BME280 // Dieser Code wurde entwickelt, um mit dem BME280_I2CS I2C Mini-Modul zu arbeiten, das von ControlEverything.com erhältlich ist. #include #include // BME280 I2C-Adresse ist 0x76 (108) #define Addr 0x76 double cTemp = 0, fTemp = 0, Druck = 0, Feuchtigkeit = 0; Void setup () { // Variable setzen Particle.variable ("i2cdevice", "BME280"); Artikel.variable("cTemp", cTemp); Partikel.variable("fTemp", fTemp); Particle.variable("Druck", Druck); Particle.variable("Feuchtigkeit", Feuchtigkeit); // I2C-Kommunikation als MASTER Wire.begin() initialisieren; // Serielle Kommunikation initialisieren, Baudrate = 9600 einstellen Serial.begin (9600); Verzögerung (300); aufrechtzuerhalten. Void Schleife () { unsigned int b1 [24]; unsignierte int-Daten[8]; int dig_H1 = 0; for(int i = 0; i < 24; i++) {// I2C-Übertragung starten Wire.beginTransmission (Addr); // Datenregister auswählen Wire.write ((136+i)); // I2C-Übertragung stoppen Wire.endTransmission(); // 1 Byte Daten anfordern Wire.requestFrom(Addr, 1); // 24 Byte Daten lesen if (Wire.available () == 1) { b1 = Wire.read (); } } // Konvertieren der Daten // Temp-Koeffizienten 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); // Druckkoeffizienten 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++) {// I2C-Übertragung starten Wire.beginTransmission (Addr); // Datenregister auswählen Wire.write ((225+i)); // I2C-Übertragung stoppen Wire.endTransmission(); // 1 Byte Daten anfordern Wire.requestFrom(Addr, 1); // 7 Byte Daten lesen if (Wire.available () == 1) { b1 = Wire.read (); } } // Konvertieren Sie die Daten // Feuchtekoeffizienten 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]; // I2C-Übertragung starten Wire.beginTransmission(Addr); // Datenregister auswählen Wire.write(161); // I2C-Übertragung stoppen Wire.endTransmission(); // 1 Byte Daten anfordern Wire.requestFrom(Addr, 1); // 1 Byte Daten lesen if (Wire.available () == 1) { dig_H1 = Wire.read (); } // I2C-Übertragung starten Wire.beginTransmission(Addr); // Wählen Sie das Luftfeuchtigkeitsregister Wire.write (0xF2); // Feuchtigkeit über Abtastrate = 1 Wire.write (0x01); // I2C-Übertragung stoppen Wire.endTransmission(); // I2C-Übertragung starten Wire.beginTransmission(Addr); // Kontrollmessungsregister auswählen Wire.write (0xF4); // Normalmodus, Temperatur und Druck über Abtastrate = 1 Wire.write (0x27); // I2C-Übertragung stoppen Wire.endTransmission(); // I2C-Übertragung starten Wire.beginTransmission(Addr); // Konfigurationsregister auswählen Wire.write (0xF5); // Standby-Zeit = 1000ms Wire.write (0xA0); // I2C-Übertragung stoppen Wire.endTransmission(); for(int i = 0; i <8; i++) {// I2C-Übertragung starten Wire.beginTransmission (Addr); // Datenregister auswählen Wire.write ((247+i)); // I2C-Übertragung stoppen Wire.endTransmission(); // 1 Byte Daten anfordern Wire.requestFrom(Addr, 1); // 8 Byte Daten lesen if(Wire.available() == 1) { data = Wire.read(); } } // Druck- und Temperaturdaten in eine Länge von 19 Bit umwandeln adc_p = (((long)(data[0] & 0xFF) * 65536) + ((long)(data[1] & 0xFF) * 256) + (lang)(Daten[2] & 0xF0)) / 16; long adc_t = (((long)(data[3] & 0xFF) * 65536) + ((long)(data[4] & 0xFF) * 256) + (long)(data[5] & 0xF0)) / 16; // Konvertieren der Feuchtedaten long adc_h = ((long)(data[6] & 0xFF) * 256 + (long)(data[7] & 0xFF)); // Temperatur-Offset-Berechnungen double var1 = (((double)adc_t) / 16384.0 - ((double)dig_T1) / 1024.0) * ((double)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); double t_fine = (long)(var1 + var2); doppelter cTemp = (var1 + var2) / 5120.0; doppeltes fTemp = cTemp * 1,8 + 32; // Druck-Offset-Berechnungen var1 = ((double)t_fine / 2.0) - 64000.0; var2 = var1 * var1 * ((double)dig_P6) / 32768.0; var2 = var2 + var1 * ((double)dig_P5) * 2,0; var2 = (var2 / 4.0) + (((double)dig_P4) * 65536.0); var1 = (((double) dig_P3) * var1 * var1 / 524288.0 + ((double) dig_P2) * var1) / 524288.0; var1 = (1,0 + var1 / 32768,0) * ((doppelt)dig_P1); doppeltes p = 1048576,0 - (doppeltes)adc_p; p = (p – (var2 / 4096,0)) * 6250,0 / var1; var1 = ((double) dig_P9) * p * p / 2147483648.0; var2 = p * ((double) dig_P8) / 32768.0; doppelter Druck = (p + (var1 + var2 + ((double)dig_P7)) / 16.0) / 100; // Feuchtigkeits-Offset-Berechnungen double var_H = (((double)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))); doppelte Feuchtigkeit = var_H * (1.0 - dig_H1 * var_H / 524288.0); Wenn (Luftfeuchtigkeit> 100,0) { Feuchtigkeit = 100,0; aufrechtzuerhalten. Sonst if (Luftfeuchtigkeit < 0,0) { Luftfeuchtigkeit = 0,0; } // Daten in das Dashboard ausgeben Particle.publish("Temperature in Celsius: ", String(cTemp)); Particle.publish("Temperatur in Fahrenheit: ", String(fTemp)); Particle.publish("Druck: ", String(Druck)); Particle.publish("Relative Luftfeuchtigkeit: ", String(Luftfeuchtigkeit)); Verzögerung (1000); }

Schritt 5: Anwendungen:

Anwendungen
Anwendungen

Der BME280 Temperatur-, Druck- und relative Feuchtigkeitssensor hat verschiedene industrielle Anwendungen wie Temperaturüberwachung, Wärmeschutz für Computerperipherie, Drucküberwachung in der Industrie. Wir haben diesen Sensor auch in Wetterstationsanwendungen sowie in Gewächshausüberwachungssystemen eingesetzt.

Andere Anwendungen können sein:

  1. Kontextbewusstsein, z. B. Hauterkennung, Raumveränderungserkennung.
  2. Fitnessüberwachung / Wohlbefinden - Warnung vor Trockenheit oder hohen Temperaturen.
  3. Messung von Volumen und Luftstrom.
  4. Steuerung der Hausautomation.
  5. Steuern Sie Heizung, Lüftung, Klimaanlage (HVAC).
  6. Internet der Dinge.
  7. GPS-Verbesserung (z. B. Verbesserung der Zeit bis zum ersten Fix, Koppelnavigation, Neigungserkennung).
  8. Indoor-Navigation (Etagenwechselerkennung, Aufzugserkennung).
  9. Outdoor-Navigation, Freizeit- und Sportanwendungen.
  10. Wettervorhersage.
  11. Vertikale Geschwindigkeitsanzeige (Anstiegs-/Sinkgeschwindigkeit)..

Schritt 6: Video-Tutorial

Sehen Sie sich unser Video-Tutorial an, um alle Schritte zur Anbindung und zum Abschluss des Projekts durchzugehen.

Bleiben Sie dran für die Schnittstellen anderer Sensoren und funktionierende Blogs.

Empfohlen: