Turinys:
- 1 žingsnis: BME280 tyrimas
- 2 veiksmas: aparatinės įrangos reikalavimų sąrašas
- 3 žingsnis: sąsaja
- 4 žingsnis: temperatūros, slėgio ir drėgmės stebėjimo kodas
- 5 žingsnis: programos:
- 6 žingsnis: vaizdo įrašo pamoka
Video: Drėgmės, slėgio ir temperatūros apskaičiavimas naudojant BME280 ir fotonų sąsają.: 6 žingsniai
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:44
Mes susiduriame su įvairiais projektais, kuriems reikia stebėti temperatūrą, slėgį ir drėgmę. Taigi mes suprantame, kad šie parametrai iš tikrųjų vaidina svarbų vaidmenį įvertinant sistemos darbo efektyvumą esant skirtingoms atmosferos sąlygoms. Tiek pramoniniame lygmenyje, tiek asmeninėse sistemose tinkamam sistemos veikimui reikalinga optimali temperatūra, drėgmė ir barometrinis slėgis.
Štai kodėl mes pateikiame išsamią šio jutiklio pamoką, šioje pamokoje mes paaiškinsime, kaip veikia drėgmės, slėgio ir temperatūros jutiklis BME280 su dalelių fotonu.
1 žingsnis: BME280 tyrimas
Elektronikos sektorius sustiprino savo žaidimą su BME280 jutikliu, aplinkos jutikliu su temperatūra, barometriniu slėgiu ir drėgme! Šis jutiklis puikiai tinka įvairiems oro/aplinkos jutimams ir netgi gali būti naudojamas I2C.
Šis tikslumo jutiklis BME280 yra geriausias jutiklis, leidžiantis matuoti drėgmę ± 3% tikslumu, barometrinį slėgį su ± 1 hPa absoliučiu tikslumu ir temperatūrą ± 1,0 ° C tikslumu. Kadangi slėgis kinta atsižvelgiant į aukštį ir slėgio matavimai yra tokie geri, jį taip pat galite naudoti kaip aukščio matuoklį, kurio tikslumas yra ± 1 metras! slėgio jutiklis, taip pat gali būti naudojamas aplinkos temperatūrai įvertinti. Naudotojas BME280 gali atlikti matavimus arba atlikti reguliarius intervalus.
Duomenų lapas: spustelėkite, jei norite peržiūrėti arba atsisiųsti BME280 jutiklio duomenų lapą.
2 veiksmas: aparatinės įrangos reikalavimų sąrašas
Mes naudojome visiškai „Dcube“parduotuvės dalis, nes jas lengva naudoti, o kažkas, kas gražiai tinka ant centimetrų tinklelio, mus tikrai skatina. Galite naudoti viską, ko norite, tačiau laidų schemoje bus daroma prielaida, kad naudojate šias dalis.
- BME280 jutiklio I²C mini modulis
- I²C skydas dalelių fotonui
- Fotonų dalelės
- I²C kabelis
- Maitinimo adapteris
3 žingsnis: sąsaja
Sąsajos skyrius iš esmės paaiškina laidų jungtis, reikalingas tarp jutiklio ir dalelių fotono. Užtikrinti teisingas jungtis yra pagrindinė būtinybė dirbant su bet kuria norimos išvesties sistema. Taigi, būtinos jungtys yra šios:
BME280 veiks per I2C. Čia yra elektros instaliacijos schemos pavyzdys, parodantis, kaip prijungti kiekvieną jutiklio sąsają. Iš karto plokštė sukonfigūruota I2C sąsajai, todėl rekomenduojame naudoti šią sąsają, jei esate kitaip agnostikas. Viskas, ko jums reikia, yra keturi laidai! Reikia tik keturių jungčių „Vcc“, „Gnd“, „SCL“ir „SDA“kaiščių, kurie yra prijungti naudojant I2C kabelį. Šie ryšiai parodyti aukščiau esančiose nuotraukose.
4 žingsnis: temperatūros, slėgio ir drėgmės stebėjimo kodas
Švari kodo versija, kurią naudosime vykdydami, yra ČIA.
Naudodami jutiklio modulį su „Arduino“, įtraukiame „application.h“ir „spark_wiring_i2c.h“biblioteką. Bibliotekoje „application.h“ir spark_wiring_i2c.h yra funkcijos, palengvinančios i2c ryšį tarp jutiklio ir dalelės.
Spustelėkite ČIA, kad atidarytumėte įrenginio stebėjimo tinklalapį
Įkelkite kodą į savo lentą ir jis turėtų pradėti veikti! Visus duomenis galima gauti tinklalapyje, kaip parodyta paveikslėlyje.
Kodas pateikiamas žemiau:
// Platinama su laisvos valios licencija. // BME280 // Šis kodas skirtas dirbti su BME280_I2CS I2C mini moduliu, kurį galima įsigyti iš ControlEverything.com. #include #include // BME280 I2C adresas yra 0x76 (108) #define Addr 0x76 double cTemp = 0, fTemp = 0, slėgis = 0, drėgmė = 0; void setup () {// Nustatyti kintamąjį Particle.variable ("i2cdevice", "BME280"); article.variable ("cTemp", cTemp); Particle.variable ("fTemp", fTemp); Dalelė.kintamas ("slėgis", slėgis); Dalelė.kintamas ("drėgmė", drėgmė); // Inicijuoti I2C ryšį kaip MASTER Wire.begin (); // Inicijuoti serijinį ryšį, nustatyti duomenų perdavimo spartą = 9600 Serial.begin (9600); vėlavimas (300); } void loop () {unsigned int b1 [24]; nepasirašyti int duomenys [8]; int dig_H1 = 0; for (int i = 0; i <24; i ++) {// Pradėti I2C perdavimo laidą.beginTransmission (Addr); // Pasirinkite duomenų registrą Wire.write ((136+i)); // Stop I2C Transmission Wire.endTransmission (); // Prašyti 1 baito duomenų Wire.requestFrom (Addr, 1); // Skaitykite 24 baitus duomenų, jei (Wire.available () == 1) {b1 = Wire.read (); }} // Konvertuoti duomenis // temp koeficientai 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); // slėgio koeficientai 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 ++) {// Pradėti I2C perdavimo laidą.beginTransmission (Addr); // Pasirinkite duomenų registrą Wire.write ((225+i)); // Stop I2C Transmission Wire.endTransmission (); // Prašyti 1 baito duomenų Wire.requestFrom (Addr, 1); // Skaitykite 7 baitus duomenų, jei (Wire.available () == 1) {b1 = Wire.read (); }} // Konvertuoti duomenis // drėgmės koeficientai int dig_H2 = b1 [0] + (b1 [1] * 256); int dig_H3 = b1 [2] ir 0xFF; int dig_H4 = (b1 [3] * 16) + (b1 [4] ir 0xF); int dig_H5 = (b1 [4] / 16) + (b1 [5] * 16); int dig_H6 = b1 [6]; // Pradėti I2C perdavimo laidą.beginTransmission (Addr); // Pasirinkite duomenų registrą Wire.write (161); // Stop I2C Transmission Wire.endTransmission (); // Prašyti 1 baito duomenų Wire.requestFrom (Addr, 1); // Skaitykite 1 baitą duomenų, jei (Wire.available () == 1) {dig_H1 = Wire.read (); } // Pradėti I2C perdavimo laidą.beginTransmission (Addr); // Pasirinkite valdymo drėgmės registrą Wire.write (0xF2); // Drėgmė per atrankos dažnį = 1 Wire.write (0x01); // Stop I2C Transmission Wire.endTransmission (); // Pradėti I2C perdavimo laidą.beginTransmission (Addr); // Pasirinkite valdymo matavimo registrą Wire.write (0xF4); // Normalus režimas, temperatūra ir slėgis virš mėginių ėmimo greičio = 1 Wire.write (0x27); // Stop I2C Transmission Wire.endTransmission (); // Pradėti I2C perdavimo laidą.beginTransmission (Addr); // Pasirinkite konfigūracijos registrą Wire.write (0xF5); // Budėjimo laikas = 1000 ms Wire.write (0xA0); // Stop I2C Transmission Wire.endTransmission (); for (int i = 0; i <8; i ++) {// Pradėti I2C perdavimo laidą.beginTransmission (Addr); // Pasirinkite duomenų registrą Wire.write ((247+i)); // Stop I2C Transmission Wire.endTransmission (); // Prašyti 1 baito duomenų Wire.requestFrom (Addr, 1); // Perskaitykite 8 baitus duomenų, jei (Wire.available () == 1) {data = Wire.read (); }} // Paverskite slėgio ir temperatūros duomenis į 19 bitų ilgio adc_p = (((ilgas) (duomenys [0] ir 0xFF) * 65536) + ((ilgas) (duomenys [1] ir 0xFF) * 256) + (ilgas) (duomenys [2] ir 0xF0)) / 16; ilgas adc_t = (((ilgas) (duomenys [3] ir 0xFF) * 65536) + ((ilgas) (duomenys [4] ir 0xFF) * 256) + (ilgas) (duomenys [5] ir 0xF0)) / 16; // Konvertuoti drėgmės duomenis ilgai adc_h = ((ilgas) (duomenys [6] ir 0xFF) * 256 + (ilgi) (duomenys [7] ir 0xFF)); // Temperatūros poslinkio skaičiavimai double var1 = (((double) adc_t) / 16384.0 - ((double) dig_T1) / 1024.0) * ((double) dig_T2); dvigubas var2 = (((((dvigubas)) adc_t) / 131072.0 - ((dvigubas) dig_T1) / 8192.0) * (((dvigubas) adc_t) /131072.0 - ((dvigubas) dig_T1) / 8192.0)) * ((dvigubas) dig_T3); dvigubas t_fine = (ilgas) (var1 + var2); dvigubas cTemp = (var1 + var2) / 5120,0; dvigubas fTemp = cTemp * 1,8 + 32; // Slėgio poslinkio skaičiavimai var1 = ((double) t_fine / 2.0) - 64000.0; var2 = var1 * var1 * ((dvigubas) dig_P6) / 32768.0; var2 = var2 + var1 * ((dvigubas) dig_P5) * 2.0; var2 = (var2 / 4.0) + (((dvigubas) dig_P4) * 65536.0); var1 = ((((dvigubas)) dig_P3) * var1 * var1 / 524288.0 + ((dvigubas) dig_P2) * var1) / 524288.0; var1 = (1.0 + var1 / 32768.0) * ((dvigubas) dig_P1); dvigubas p = 1048576.0 - (dvigubas) adc_p; p = (p - (var2 / 4096.0)) * 6250.0 / var1; var1 = ((dvigubas) dig_P9) * p * p / 2147483648.0; var2 = p * ((dvigubas) dig_P8) / 32768.0; dvigubas slėgis = (p + (var1 + var2 + ((dvigubas)) dig_P7)) / 16,0) / 100; // Drėgmės poslinkio skaičiavimai dviguba var_H = (((dviguba) 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))); dviguba drėgmė = var_H * (1,0 - dig_H1 * var_H / 524288.0); if (drėgmė> 100,0) {drėgmė = 100,0; } else if (drėgmė <0,0) {drėgmė = 0,0; } // Išvesties duomenys į prietaisų skydelį Particle.publish ("Temperatūra Celsijaus laipsniais:", Styga (cTemp)); Particle.publish ("Temperatūra Farenheitu:", Styga (fTemp)); Particle.publish ("Slėgis:", Styga (slėgis)); Particle.publish ("Santykinė drėgmė:", Styga (drėgmė)); vėlavimas (1000); }
5 žingsnis: programos:
BME280 temperatūros, slėgio ir santykinės drėgmės jutiklis gali būti naudojamas įvairiose pramonės srityse, tokiose kaip temperatūros stebėjimas, kompiuterio periferinė šiluminė apsauga, slėgio stebėjimas pramonėje. Mes taip pat panaudojome šį jutiklį orų stotyse ir šiltnamių stebėjimo sistemoje.
Kitos programos gali būti:
- Konteksto suvokimas, pvz. odos aptikimas, kambario pakeitimo aptikimas.
- Fitneso stebėjimas / savijauta - Įspėjimas dėl sausumo ar aukštos temperatūros.
- Tūrio ir oro srauto matavimas.
- Namų automatikos valdymas.
- Valdykite šildymą, vėdinimą, oro kondicionavimą (ŠVOK).
- Daiktų internetas.
- GPS patobulinimas (pvz., Patobulinimas iki pirmojo taisymo, mirusiųjų skaičiavimas, nuolydžio aptikimas).
- Navigacija patalpose (grindų aptikimo keitimas, lifto aptikimas).
- Lauko navigacijos, laisvalaikio ir sporto programos.
- Orų prognozė.
- Vertikalus greičio indikatorius (kilimo/nusileidimo greitis).
6 žingsnis: vaizdo įrašo pamoka
Peržiūrėkite mūsų vaizdo įrašo pamoką, kad galėtumėte atlikti visus sąveikos ir projekto užbaigimo veiksmus.
Sekite kitų jutiklių sąsajų ir darbo tinklaraštį.
Rekomenduojamas:
Automatinis aušinimo ventiliatorius naudojant „Servo“ir DHT11 temperatūros ir drėgmės jutiklį su „Arduino“: 8 žingsniai
Automatinis aušinimo ventiliatorius naudojant „Servo“ir DHT11 temperatūros ir drėgmės jutiklį su „Arduino“: šioje pamokoje sužinosime, kaip pradėti & pasukite ventiliatorių, kai temperatūra pakyla virš tam tikro lygio
Darbo su „I2C“jutiklio sąsaja pradžia ?? - Sąsaja su jūsų MMA8451 naudojant ESP32: 8 žingsniai
Darbo su „I2C“jutiklio sąsaja pradžia ?? - Sąsaja su jūsų MMA8451 naudojant ESP32: Šioje pamokoje sužinosite viską apie tai, kaip paleisti, prijungti ir gauti I2C įrenginį (akselerometrą), dirbantį su valdikliu (Arduino, ESP32, ESP8266, ESP12 NodeMCU)
Temperatūros ir drėgmės jutiklis (dht11) Sąsaja su „Arduino“: 4 žingsniai
Temperatūros ir drėgmės jutiklis (dht11) Sąsaja su „Arduino“: Temperatūros jutiklis yra plačiai pritaikytas, jis naudojamas daugelyje vietų ir veikia kaip grįžtamojo ryšio sistema. Rinkoje yra įvairių tipų temperatūros jutikliai, kurių specifikacijos skiriasi, kai kurie naudojami temperatūros jutikliai, naudojami
Barometrinio slėgio ir temperatūros vizualizavimas naudojant „Infineon XMC4700 RelaxKit“, „Infineon DPS422“ir AWS: 8 žingsniai
Barometrinio slėgio ir temperatūros vizualizavimas naudojant „Infineon XMC4700 RelaxKit“, „Infineon DPS422“ir „AWS“. Tai paprastas projektas, leidžiantis užfiksuoti barometrinį slėgį ir temperatūrą naudojant „Infineon“DPS 422. Tam tikru metu tampa nelengva stebėti slėgį ir temperatūrą. Čia atsiranda analizė, įžvalga apie pokyčius
Sąsaja BMP180 (barometrinio slėgio jutiklis) su „Arduino“: 9 žingsniai
Sąsaja BMP180 (barometrinio slėgio jutiklis) su „Arduino“: BMP-180 yra skaitmeninis barometrinio slėgio jutiklis su „i2c“sąsaja. Šis mažas „Bosch“jutiklis yra gana patogus dėl mažo dydžio, mažo energijos suvartojimo ir didelio tikslumo. Priklausomai nuo to, kaip mes interpretuojame jutiklio rodmenis, galėtume stebėti ch