Cuprins:

Calculul umidității, presiunii și temperaturii folosind BME280 și interfața cu fotoni: 6 pași
Calculul umidității, presiunii și temperaturii folosind BME280 și interfața cu fotoni: 6 pași

Video: Calculul umidității, presiunii și temperaturii folosind BME280 și interfața cu fotoni: 6 pași

Video: Calculul umidității, presiunii și temperaturii folosind BME280 și interfața cu fotoni: 6 pași
Video: Aplicație IoT pentru monitorizarea umidității solului la plante de interior 2024, Iulie
Anonim
Calculul umidității, presiunii și temperaturii folosind BME280 și interfața cu fotoni
Calculul umidității, presiunii și temperaturii folosind BME280 și interfața cu fotoni

Ne întâlnim cu diverse proiecte care necesită monitorizarea temperaturii, presiunii și umidității. Astfel ne dăm seama că acești parametri joacă de fapt un rol vital în a avea o estimare a eficienței de lucru a unui sistem în diferite condiții atmosferice. Atât la nivel industrial, cât și la sistemele personale, este necesar un nivel optim de temperatură, umiditate și presiune barometrică pentru performanța adecvată a sistemului.

Acesta este motivul pentru care oferim un tutorial complet despre acest senzor, în acest tutorial vom explica funcționarea senzorului de umiditate, presiune și temperatură BME280 cu fotonul particulelor.

Pasul 1: Explorare BME280

Explorare BME280
Explorare BME280

Sectorul electronic și-a intensificat jocul cu senzorul BME280, un senzor de mediu cu temperatură, presiune barometrică și umiditate! Acest senzor este excelent pentru toate tipurile de detectare a vremii / mediului și poate fi folosit chiar și în I2C.

Acest senzor de precizie BME280 este cea mai bună soluție de detectare pentru măsurarea umidității cu precizie de ± 3%, presiune barometrică cu precizie absolută de ± 1 hPa și temperatură cu precizie de ± 1,0 ° C. Deoarece presiunea se modifică odată cu altitudinea, iar măsurătorile de presiune sunt atât de bune, îl puteți folosi și ca altimetru cu precizie de ± 1 metru sau mai bună! senzorul de presiune și poate fi utilizat și pentru estimarea temperaturii ambiante. Măsurătorile cu BME280 pot fi efectuate de utilizator sau efectuate la intervale regulate.

Foaie de date: faceți clic pentru a previzualiza sau descărca foaia de date a senzorului BME280.

Pasul 2: Lista cerințelor hardware

Lista cerințelor hardware
Lista cerințelor hardware

Am folosit în întregime piese Dcube Store pentru că sunt ușor de utilizat, iar ceva despre tot ce se potrivește frumos pe o rețea de centimetri chiar ne face să mergem. Puteți utiliza orice doriți, dar schema de cabluri presupune că utilizați aceste piese.

  • Mini modulul senzor I²C BME280
  • Scutul I²C pentru fotonul de particule
  • Fotonul cu particule
  • Cablu I²C
  • Adaptor de alimentare

Pasul 3: interfațare

Interfață
Interfață

Secțiunea de interfață explică practic conexiunile de cablare necesare între senzor și fotonul particulelor. Asigurarea conexiunilor corecte este necesitatea de bază în timp ce lucrați la orice sistem pentru ieșirea dorită. Deci, conexiunile necesare sunt următoarele:

BME280 va funcționa pe I2C. Iată exemplul schemei de cablare, care demonstrează cum se conectează fiecare interfață a senzorului. Până la capăt, placa este configurată pentru o interfață I2C, ca atare, vă recomandăm să utilizați această interfață dacă sunteți altfel agnostic. Nu ai nevoie decât de patru fire! Sunt necesare doar patru conexiuni Vcc, Gnd, SCL și pinii SDA și acestea sunt conectate cu ajutorul cablului I2C. Aceste conexiuni sunt prezentate în imaginile de mai sus.

Pasul 4: Codul de monitorizare a temperaturii, presiunii și umidității

Codul de monitorizare a temperaturii, presiunii și umidității
Codul de monitorizare a temperaturii, presiunii și umidității
Codul de monitorizare a temperaturii, presiunii și umidității
Codul de monitorizare a temperaturii, presiunii și umidității

Versiunea curată a codului pe care o vom folosi pentru a rula acest lucru este disponibilă AICI.

În timp ce utilizați modulul senzor cu Arduino, includem biblioteca application.h și spark_wiring_i2c.h. Biblioteca „application.h” și spark_wiring_i2c.h conține funcțiile care facilitează comunicarea i2c între senzor și particulă.

Faceți clic AICI pentru a deschide pagina web pentru monitorizarea dispozitivului

Încărcați codul pe tablă și ar trebui să înceapă să funcționeze! Toate datele pot fi obținute pe pagina web așa cum se arată în imagine.

Codul este furnizat mai jos:

// Distribuit cu o licență de voință liberă. // BME280 // Acest cod este conceput pentru a funcționa cu Mini-modulul BME280_I2CS I2C disponibil de pe ControlEverything.com. #include #include // BME280 Adresa I2C este 0x76 (108) #define Addr 0x76 cTemp dublu = 0, fTemp = 0, presiune = 0, umiditate = 0; void setup () {// Set variabila Particle.variable ("i2cdevice", "BME280"); article.variable ("cTemp", cTemp); Particle.variable ("fTemp", fTemp); Particle.variable ("presiune", presiune); Particle.variable ("umiditate", umiditate); // Inițializați comunicarea I2C ca MASTER Wire.begin (); // Inițializați comunicarea serială, setați baud rate = 9600 Serial.begin (9600); întârziere (300); } void loop () {unsigned int b1 [24]; date int nesemnate [8]; int dig_H1 = 0; for (int i = 0; i <24; i ++) {// Start I2C Transmission Wire.beginTransmission (Addr); // Selectați registrul de date Wire.write ((136 + i)); // Oprire I2C Transmission Wire.endTransmission (); // Solicitați 1 octet de date Wire.requestFrom (Addr, 1); // Citiți 24 de octeți de date dacă (Wire.available () == 1) {b1 = Wire.read (); }} // Convertiți datele // coeficienții temp 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); // coeficienți de presiune 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); // Selectați registrul de date Wire.write ((225 + i)); // Oprire I2C Transmission Wire.endTransmission (); // Solicitați 1 octet de date Wire.requestFrom (Addr, 1); // Citiți 7 octeți de date dacă (Wire.available () == 1) {b1 = Wire.read (); }} // Conversia datelor // coeficienți de umiditate 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]; // Porniți I2C Transmission Wire.beginTransmission (Addr); // Selectați registrul de date Wire.write (161); // Oprire I2C Transmission Wire.endTransmission (); // Solicitați 1 octet de date Wire.requestFrom (Addr, 1); // Citiți 1 octet de date dacă (Wire.available () == 1) {dig_H1 = Wire.read (); } // Porniți I2C Transmission Wire.beginTransmission (Addr); // Selectați controlul registrului de umiditate Wire.write (0xF2); // Umiditate peste rata de eșantionare = 1 Wire.write (0x01); // Oprire I2C Transmission Wire.endTransmission (); // Porniți I2C Transmission Wire.beginTransmission (Addr); // Selectați registrul de măsurare a controlului Wire.write (0xF4); // Mod normal, temperatura și presiunea peste rata de eșantionare = 1 Wire.write (0x27); // Oprire I2C Transmission Wire.endTransmission (); // Porniți I2C Transmission Wire.beginTransmission (Addr); // Selectați config register Wire.write (0xF5); // Timp standby = 1000ms Wire.write (0xA0); // Oprire I2C Transmission Wire.endTransmission (); for (int i = 0; i <8; i ++) {// Start I2C Transmission Wire.beginTransmission (Addr); // Selectați registrul de date Wire.write ((247 + i)); // Oprire I2C Transmission Wire.endTransmission (); // Solicitați 1 octet de date Wire.requestFrom (Addr, 1); // Citiți 8 octeți de date dacă (Wire.available () == 1) {data = Wire.read (); }} // Conversia datelor de presiune și temperatură în 19 biți lung adc_p = (((lung) (date [0] și 0xFF) * 65536) + ((lung) (date [1] și 0xFF) * 256) + (lung) (date [2] & 0xF0)) / 16; long adc_t = (((long) (data [3] & 0xFF) * 65536) + ((long) (data [4] & 0xFF) * 256) + (long) (data [5] & 0xF0)) / 16; // Conversia datelor de umiditate lung adc_h = ((lung) (date [6] & 0xFF) * 256 + (lung) (date [7] & 0xFF)); // Calcule compensare temperatură 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); dublu t_fine = (lung) (var1 + var2); cTemp dublu = (var1 + var2) / 5120.0; fTemp dublu = cTemp * 1,8 + 32; // Calcule compensare presiune var1 = ((dublu) t_fine / 2.0) - 64000.0; var2 = var1 * var1 * ((double) dig_P6) / 32768.0; var2 = var2 + var1 * ((dublu) dig_P5) * 2.0; var2 = (var2 / 4.0) + (((double) dig_P4) * 65536.0); var1 = (((dublu) dig_P3) * var1 * var1 / 524288.0 + ((dublu) dig_P2) * var1) / 524288.0; var1 = (1.0 + var1 / 32768.0) * ((dublu) dig_P1); dublu p = 1048576.0 - (dublu) adc_p; p = (p - (var2 / 4096.0)) * 6250.0 / var1; var1 = ((dublu) dig_P9) * p * p / 2147483648.0; var2 = p * ((dublu) dig_P8) / 32768.0; presiune dublă = (p + (var1 + var2 + ((dublu) dig_P7)) / 16.0) / 100; // Calcule compensare umiditate 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))); umiditate dublă = var_H * (1.0 - dig_H1 * var_H / 524288.0); if (umiditate> 100,0) {umiditate = 100,0; } else if (umiditate <0,0) {umiditate = 0,0; } // Ieșire date pe tabloul de bord Particle.publish ("Temperatura în grade Celsius:", Șir (cTemp)); Particle.publish ("Temperatura în Fahrenheit:", String (fTemp)); Particle.publish ("Presiune:", Șir (presiune)); Particle.publish ("Umiditate relativă:", Șir (umiditate)); întârziere (1000); }

Pasul 5: Aplicații:

Aplicații
Aplicații

Senzorul de temperatură, presiune și umiditate relativă BME280 are diverse aplicații industriale precum monitorizarea temperaturii, protecția termică periferică a computerului, monitorizarea presiunii în industrie. De asemenea, am folosit acest senzor în aplicații pentru stațiile meteo, precum și în sistemul de monitorizare a serelor.

Alte aplicații pot include:

  1. Conștientizarea contextului, de ex. detectarea pielii, detectarea schimbărilor de cameră.
  2. Monitorizare / bunăstare a fitnessului - Avertisment privind uscăciunea sau temperaturile ridicate.
  3. Măsurarea volumului și a debitului de aer.
  4. Controlul automatizării caselor.
  5. Comandați încălzirea, ventilația, aerul condiționat (HVAC).
  6. Internetul Lucrurilor.
  7. Îmbunătățirea GPS-ului (de exemplu, îmbunătățirea timpului până la prima remediere, calculul mort, detectarea pantei).
  8. Navigație interioară (schimbarea detecției podelei, detectarea liftului).
  9. Navigație în aer liber, aplicații de agrement și sport.
  10. Prognoza meteo.
  11. Indicarea vitezei verticale (viteza de creștere / scufundare)..

Pasul 6: Tutorial video

Urmăriți tutorialul nostru video pentru a parcurge toți pașii de interfață și finalizare a proiectului.

Rămâneți la curent cu interfața și blogul de lucru al altor senzori.

Recomandat: