Kazalo:
- 1. korak: Raziskovanje BME280
- 2. korak: Seznam zahtev strojne opreme
- Korak: Povezovanje
- 4. korak: Koda za spremljanje temperature, tlaka in vlažnosti
- 5. korak: Aplikacije:
- 6. korak: Video vadnica
Video: Izračun vlažnosti, tlaka in temperature z uporabo BME280 in fotonskega vmesnika .: 6 korakov
2024 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2024-01-30 12:03
Naletimo na različne projekte, ki zahtevajo spremljanje temperature, tlaka in vlažnosti. Tako se zavedamo, da imajo ti parametri dejansko pomembno vlogo pri oceni delovne učinkovitosti sistema v različnih atmosferskih pogojih. Tako na industrijskem nivoju kot v osebnih sistemih so za ustrezno delovanje sistema potrebni optimalna temperatura, vlažnost in barometrični tlak.
Zato nudimo popolno vadbo o tem senzorju, v tem vodiču bomo razložili delovanje senzorja vlažnosti, tlaka in temperature BME280 s fotonom delcev.
1. korak: Raziskovanje BME280
Elektronski sektor je okrepil svojo igro s senzorjem BME280, okoljskim senzorjem s temperaturo, barometričnim tlakom in vlažnostjo! Ta senzor je odličen za vse vrste vremenskega/okoljskega zaznavanja in ga je mogoče uporabiti celo v I2C.
Ta natančni senzor BME280 je najboljša senzorska rešitev za merjenje vlažnosti z natančnostjo ± 3%, barometrični tlak z absolutno natančnostjo ± 1 hPa in temperaturo z natančnostjo ± 1,0 ° C. Ker se tlak spreminja z višino in so meritve tlaka tako dobre, ga lahko uporabite tudi kot višinomer z ± 1 metrom ali boljšo natančnostjo! Temperaturni senzor je optimiziran za najnižji hrup in najvišjo ločljivost ter se uporablja za temperaturno kompenzacijo senzor tlaka in se lahko uporablja tudi za oceno temperature okolice. Meritve z BME280 lahko izvaja uporabnik ali pa jih izvaja v rednih časovnih presledkih.
Podatkovni list: Kliknite za predogled ali prenos podatkovnega lista za senzor BME280.
2. korak: Seznam zahtev strojne opreme
V celoti smo uporabili Dcube Store dele, ker so enostavni za uporabo in nekaj o vsem, kar se lepo prilega centimetrski mreži, nas resnično spravi v akcijo. Uporabite lahko vse, kar želite, vendar shema ožičenja predvideva, da uporabljate te dele.
- Mini modul senzorja I²C BME280
- I²C ščit za fotone delcev
- Foton delcev
- I²C kabel
- Polnilec
Korak: Povezovanje
Odsek vmesnika v bistvu razlaga potrebne povezave ožičenja med senzorjem in fotonom delcev. Zagotavljanje pravilnih povezav je osnovna potreba pri delu na katerem koli sistemu za želeni izhod. Torej so potrebne povezave naslednje:
BME280 bo deloval preko I2C. Tu je primer sheme ožičenja, ki prikazuje, kako povezati vsak vmesnik senzorja. Plošča je že pripravljena za vmesnik I2C, zato priporočamo uporabo tega vmesnika, če niste agnostiki. Vse kar potrebujete so štiri žice! Potrebne so le štiri povezave Vcc, Gnd, SCL in SDA, ki so povezane s kablom I2C. Te povezave so prikazane na zgornjih slikah.
4. korak: Koda za spremljanje temperature, tlaka in vlažnosti
Čista različica kode, ki jo bomo uporabili za to, je na voljo TUKAJ.
Med uporabo senzorskega modula z Arduinom vključujemo knjižnico application.h in spark_wiring_i2c.h. Knjižnica "application.h" in spark_wiring_i2c.h vsebuje funkcije, ki olajšajo komunikacijo i2c med senzorjem in delcem.
Kliknite TUKAJ, da odprete spletno stran za spremljanje naprave
Naložite kodo na tablo in začela bi delovati! Vse podatke lahko dobite na spletni strani, kot je prikazano na sliki.
Koda je navedena spodaj:
// Razdeljeno z licenco po lastni volji.// Uporabite ga kakor koli želite, dobičkonosno ali brezplačno, pod pogojem, da ustreza licencam pripadajočih del. // BME280 // Ta koda je zasnovana za delo z mini modulom BME280_I2CS I2C, ki je na voljo na spletnem mestu ControlEverything.com. #include #include // Naslov BME280 I2C je 0x76 (108) #define Addr 0x76 dvojni cTemp = 0, fTemp = 0, tlak = 0, vlažnost = 0; void setup () {// Nastavi spremenljivko Particle.variable ("i2cdevice", "BME280"); article.variable ("cTemp", cTemp); Delci.variable ("fTemp", fTemp); Delci.premenljiva ("tlak", tlak); Delci.premenljiva ("vlažnost", vlažnost); // Inicializirajte komunikacijo I2C kot MASTER Wire.begin (); // Začetek serijske komunikacije, nastavljena hitrost prenosa = 9600 Serial.begin (9600); zamuda (300); } void loop () {unsigned int b1 [24]; podpisani int podatki [8]; int dig_H1 = 0; for (int i = 0; i <24; i ++) {// Začni prenos I2C Wire.beginTransmission (Addr); // Izberite podatkovni register Wire.write ((136+i)); // Ustavi I2C prenosno žico.endTransmission (); // Zahtevaj 1 bajt podatkov Wire.requestFrom (Addr, 1); // Preberite 24 bajtov podatkov, če (Wire.available () == 1) {b1 = Wire.read (); }} // pretvorimo podatke // začasne koeficiente 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); // tlačni koeficienti 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 ++) {// Začni prenos I2C Wire.beginTransmission (Addr); // Izberite podatkovni register Wire.write ((225+i)); // Ustavi I2C prenosno žico.endTransmission (); // Zahtevaj 1 bajt podatkov Wire.requestFrom (Addr, 1); // Preberite 7 bajtov podatkov, če (Wire.available () == 1) {b1 = Wire.read (); }} // pretvorimo podatke // koeficiente vlažnosti 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]; // Zaženite prenos I2C Wire.beginTransmission (Addr); // Izberite podatkovni register Wire.write (161); // Ustavi I2C prenosno žico.endTransmission (); // Zahtevaj 1 bajt podatkov Wire.requestFrom (Addr, 1); // Preberite 1 bajt podatkov, če (Wire.available () == 1) {dig_H1 = Wire.read (); } // Zaženi prenos I2C Wire.beginTransmission (Addr); // Izberite register za nadzor vlažnosti Wire.write (0xF2); // Vlažnost nad vzorčenjem = 1 Wire.write (0x01); // Ustavi I2C prenosno žico.endTransmission (); // Zaženite prenos I2C Wire.beginTransmission (Addr); // Izberite kontrolni merilni register Wire.write (0xF4); // Običajen način, temperatura in tlak nad vzorčenjem = 1 Wire.write (0x27); // Ustavi I2C prenosno žico.endTransmission (); // Zaženite prenos I2C Wire.beginTransmission (Addr); // Izberite konfiguracijski register Wire.write (0xF5); // čas pripravljenosti = 1000 ms Wire.write (0xA0); // Ustavi I2C prenosno žico.endTransmission (); for (int i = 0; i <8; i ++) {// Začni prenos I2C Wire.beginTransmission (Addr); // Izberite podatkovni register Wire.write ((247+i)); // Ustavi I2C prenosno žico.endTransmission (); // Zahtevaj 1 bajt podatkov Wire.requestFrom (Addr, 1); // Preberite 8 bajtov podatkov, če (Wire.available () == 1) {data = Wire.read (); }} // Pretvorimo podatke o tlaku in temperaturi v 19-bitne dolžine adc_p = (((long) (data [0] & 0xFF) * 65536) + ((long) (data [1] & 0xFF) * 256) + (dolga) (podatki [2] & 0xF0)) / 16; dolg adc_t = (((dolg) (podatki [3] & 0xFF) * 65536) + ((dolgi) (podatki [4] & 0xFF) * 256) + (dolgi) (podatki [5] & 0xF0)) / 16; // pretvorimo podatke o vlažnosti dolgo adc_h = ((dolga) (podatki [6] & 0xFF) * 256 + (dolga) (podatki [7] & 0xFF)); // Izračuni odmika temperature 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); dvojno t_fine = (dolgo) (var1 + var2); dvojni cTemp = (var1 + var2) / 5120.0; dvojni fTemp = cTemp * 1,8 + 32; // Izračuni odmika tlaka var1 = ((dvojno) t_fine / 2.0) - 64000.0; var2 = var1 * var1 * ((dvojno) dig_P6) / 32768,0; var2 = var2 + var1 * ((dvojno) dig_P5) * 2,0; var2 = (var2 / 4.0) + (((dvojno) dig_P4) * 65536.0); var1 = (((dvojni) dig_P3) * var1 * var1 / 524288.0 + ((dvojni) dig_P2) * var1) / 524288.0; var1 = (1,0 + var1 / 32768,0) * ((dvojno) dig_P1); dvojni p = 1048576,0 - (dvojni) adc_p; p = (p - (var2 / 4096.0)) * 6250,0 / var1; var1 = ((dvojno) dig_P9) * p * p / 2147483648.0; var2 = p * ((dvojno) dig_P8) / 32768,0; dvojni tlak = (p + (var1 + var2 + ((dvojni) dig_P7)) / 16,0) / 100; // Izračuni odmika vlažnosti 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))); dvojna vlažnost = var_H * (1,0 - kopa_H1 * var_H / 524288,0); če (vlažnost> 100,0) {vlaga = 100,0; } drugače če (vlažnost <0,0) {vlažnost = 0,0; } // Izhodni podatki na nadzorno ploščo Particle.publish ("Temperatura v Celzijusi:", String (cTemp)); Particle.publish ("Temperatura v Fahrenheitu:", String (fTemp)); Particle.publish ("Tlak:", niz (tlak)); Particle.publish ("Relativna vlažnost:", niz (vlažnost)); zamuda (1000); }
5. korak: Aplikacije:
Senzor temperature, tlaka in relativne vlažnosti BME280 ima različne industrijske aplikacije, kot so nadzor temperature, računalniška zunanja toplotna zaščita, nadzor tlaka v industriji. Ta senzor smo uporabili tudi v aplikacijah vremenskih postaj in v sistemu za nadzor rastlinjakov.
Druge aplikacije lahko vključujejo:
- Zavedanje konteksta, npr. odkrivanje kože, zaznavanje sprememb prostora.
- Spremljanje telesne pripravljenosti / dobro počutje - Opozorilo glede suhosti ali visokih temperatur.
- Merjenje prostornine in pretoka zraka.
- Nadzor avtomatizacije doma.
- Upravljajte ogrevanje, prezračevanje, klimatsko napravo (HVAC).
- Internet stvari.
- Izboljšanje GPS (npr. Izboljšanje časa do prve popravke, odštevanje, zaznavanje nagiba).
- Notranja navigacija (sprememba zaznavanja tal, zaznavanje dvigala).
- Zunanja navigacija, prosti čas in športne aplikacije.
- Vremenska napoved.
- Indikacija navpične hitrosti (hitrost dviga/pomika).
6. korak: Video vadnica
Oglejte si našo video vadnico, kjer boste izvedeli vse korake pri povezovanju in dokončanju projekta.
Ostanite z nami za vmesnike in delovne bloge drugih senzorjev.
Priporočena:
Uporaba MCP-23008 z uporabo relejnega vmesnika (I2C) :: 6 korakov
Uporaba MCP-23008 z uporabo relejnega vmesnika (I2C) :: Pozdravljeni. !! I (Somanshu Choudhary) v imenu tehnoloških podjetij Dcube bo nadziral releje prek protokola I2C z uporabo Arduino nano in MCP23008
Vizualizacija barometričnega tlaka in temperature z uporabo Infineon XMC4700 RelaxKit, Infineon DPS422 in AWS .: 8 korakov
Vizualizacija barometričnega tlaka in temperature z uporabo Infineon XMC4700 RelaxKit, Infineon DPS422 in AWS .: To je preprost projekt za zajemanje barometričnega tlaka in temperature z uporabo Infineonovega DPS 422. V določenem času postane nerodno slediti tlaku in temperaturi. Tu se pojavi analitika, vpogled v spremembo
Izračun jakosti svetlobe z uporabo BH1715 in Arduino Nano: 5 korakov
Izračun svetlobne jakosti z uporabo BH1715 in Arduino Nano: Včeraj smo delali na LCD zaslonih in med delom na njih smo spoznali pomen izračuna intenzivnosti svetlobe. Intenzivnost svetlobe ni pomembna le v fizični domeni tega sveta, ampak ima svojo dobro navedeno vlogo v biologiji
Izračun jakosti svetlobe z uporabo BH1715 in fotona iz delcev: 5 korakov
Izračun svetlobne jakosti z uporabo BH1715 in fotona delcev: Včeraj smo delali na LCD zaslonih in med delom na njih smo spoznali pomen izračuna intenzivnosti svetlobe. Intenzivnost svetlobe ni pomembna le v fizični domeni tega sveta, ampak ima svojo dobro navedeno vlogo v biologiji
Gesture Hawk: Robot z ročno krmiljeno roko z uporabo vmesnika za obdelavo slik: 13 korakov (s slikami)
Gesture Hawk: Robot z ročno krmiljenim robotom z uporabo vmesnika za obdelavo slik: Gesture Hawk je bil predstavljen v TechEvince 4.0 kot preprost vmesnik za obdelavo slik človek-stroj. Njegova uporabnost je v tem, da za upravljanje robotskega avtomobila, ki vozi na različnih