![](https://starduino.hu/wp-content/uploads/2023/09/BME280.png)
Az időjárás állomásomban a BME280 hőmérséklet, páratartalom és légnyomásmérőt használtam. Jelenlegi ára (2023) 1400Ft körüli. Kétféle kivitelben kapható, az egyik modulon csak az I2C, míg a másikon az I2C és az SPI port is ki lett vezetve. Alapból az érzékelő egy 2.5×2.5mm-es alig látható légypiszok.
Lényegesebb technikai adatok:
Hőmérséklet mérési tartomány -40C° – +85C°, pontosság 0-20C°-ig +/-1.25C°
- Légnyomás mérési tartomány: 300-1100hPa, pontosság hőmérséklet függő +/-1.5hPa körüli (részletesebben lásd az adatlapot)
- Páratartalom mérési tartomány: 0-100%-ig, pontosság +/-3%, de +/-1% körüli hiszterézissel és nemlinearitással is rendelkezik
A chip fogyasztása 2-3μA, sleep módban 0.1μA.
Kezelő könyvtárakból rengeteg található. Én az Adafruit könyvtárat töltöttem le és használtam. A BME280 kereső szó megadásakor rögtön ez jött fel elsőnek:
![](https://starduino.hu/wp-content/uploads/2023/09/BME280-arduino-konyvtarak.png)
Találhatók a könyvtárhoz így a használat nem jelenthet gondot. Írásom nem erről szól, hanem a modullal kapcsolatos problémáimról, és a lekérdezésének gyakoriságából adódó pontatlanságról, illetve annak elkerüléséről.
A modult egy alumíniumból hajtogatott hengerbe szereltem be, a henger végeit sűrűszövésű teaszűrővel zártam le, hogy a bogarak nem másszanak be.
![](https://starduino.hu/wp-content/uploads/2023/09/BME280-elhelyezese.png)
Kb. két évig jól is működött. A problémák 2022-ben váltak láthatóvá. Sorban dőltek meg a melegrekordok ez igaz, de a kijelzett 44 fok hőmérséklet nem tűnt valósnak. Ekkor még nem gyanakodtam, gondolván, hogy az eresz alatt melegebb lehet, mint máshol. Aztán télen már kezdett feltűnni, hogy a mi udvarunkban soha nincs fagy!? Bár nem volt a télen hideg, de azért jelezte a meteorológiai, hogy fagyott egyik másik éjjel. Tavasszal a kiskert tulajdonosok arra panaszkodtak, hogy fagy volt, és megsínylették a frissen kiültetett palánták. Nálunk is elfagyott a veteményes, de 3 fok alá nem ment a hőmérséklet soha a kijelző szerint. Itt fogtam szagot, hogy valami vaj van. Tettem mellé egy hagyományos higanyos hőmérőt és figyeltem. Elképedtem, amikor kiderült, hogy 7-8 fokkal többet mutat a kijelző, mint a hagyományos hőmérő. Azonnal rendeltem egy másik modult, és ideiglenesen levontam a mért hőmérsékeltből 8 fokot, hogy a valós értéket lássam a kijelzőmön. Közben persze gondolkodni kezdtem, hogy mi lehet a baj. Kitisztítottam a hengert, hátha beköltözött egy pókcsalád és az melengeti. De nem! Aztán beállítottam egy ventillátort, és ráirányítottam a szenzorra a keletkezett szellőt. Ez már jelentősen lejjebb vitte a hőmérsékletet. Végül a megfejtésben a szerencse segített. Részesei voltunk a 2023-as év augusztusi nagy áramszünetének. Több mint 40 órát nem volt áram. Hűtők leolvadtak, hidegvízben fürödtünk és gyertyával világítottunk. Amikor délután hatkor visszajött a feszültség, meglepve láttuk, hogy a valós 27 fokos hőmérséklet helyett 19 fokot jelzett az időjárás állomásom. Eltelt egy-két óra, és ahelyett, hogy a délutáni óráknak megfelelően csökkent volna a hőmérséklet, folyamatosan nőni kezdett kijelzett érték. Este 8-ra érte el a maximumot, a 25 fokot (ne feledkezzünk el a -8 fokos beépített korrekcióról). Tehát a panel melegszik, csak ez lehet a megoldás. Elő is kaptam a modul kapcsolási rajzát a NET-ről:
![](https://starduino.hu/wp-content/uploads/2023/09/BME280-modul-kapcsolasi-rajz.png)
Látható, hogy a szenzoron kívül egy 5V->3.3V tápegység is található a panelen. Roppant szerencsétlen elrendezés, hogy ez a tápegység a panel másik oldalán a szenzorhoz nem túl távol található:
![](https://starduino.hu/wp-content/uploads/2023/09/BME280-elol-es-hatulnezet.png)
Logikus következtetés, hogy ez a tápegység megbolondult, hőt termel és átmelegíti a panelt. Bár az sem kizárt, hogy maga a szenzor zabálja az áramot, és melegszik, de előbbi a valószínűbb! Nem tudom, hogy így van-e. Próbáltam mérni az áramfelvételt. A BMP280 chip áramfelvétele nem derült ki számomra világosan az adatlapból. 2-3 μA áramfelvételt ad meg minden egyes paraméter mérésére (hőmérséklet, légnyomás, páratartalom) 1 Hz-s mintavétel esetére. Ha ezt összesítve kell értelmezni, akkor is maximum 10 μA az áramfelvétel. Ugyanakkor a GY-BMEP280 modulra is lehetett adatokat találni, ahol a teljes áramfelvétel maximumának 1.2 mA lett megadva. Nyilván az 5V->3.3V tápegység fogyasztja el a az áram nagyrészét. Nem derült ki a rajzokból, hogy ennek a tápegységnek mi a konkrét típusa, de találtam a neten 10μA-től 5mA-ig nyugalmi áramfelvételű típusokat. Miután kicseréltem a hibás modult az újra, végeztem néhány mérést, hogy igazoljam a feltevésemet. 0.5 másodperces kiolvasási gyakoriság esetén az áramfelvétele 480μA volt. Azonban 10 percen belül ez felugrott 1 mA környékére, két óra múlva pedig 2.2mA-re. Ez a táp szerintem meghibásodott! Gondolkodtam, hogy mi lehet az oka! Megfigyeltem, hogy a mérőállomásomba az alumínium hengerbe felülről lógattam be a szenzort. Tételezzük fel, hogy a vezetéken pára csapódik le. Az pont a modulra folyik rá. Esetleg ez okozhat meghibásodást. Ebből okulva most pont fordítva raktam fel, a modul! A bevezető vezetékdarab végén felfelé „ágaskodik”, és a pára a vezetékre folyik vissza. Hogy jó-e? Az idő eldönti!
Kutakodásaim során figyeltem fel arra, hogy a modul I2C buszcímét is át lehet állítani a BME280 chip mellett található három forrpont, ha a középsőt a baloldalival kötjük össze, akkor a cím 0x76 ez az alapértelmezett), míg ha a jobboldalival, akkor 0x77. Vagyis két modult is tehetünk egy buszra.
![](https://starduino.hu/wp-content/uploads/2023/09/BME280-cimbeallitas.png)
Amíg postán megérkezett az újonnan rendelt BME280 modulom, sokat gondolkodtam az elmúlt évek eseményein. Ugyanis időjárás állomásomat többszöt átépítettem, és kb egy évvel ez előtt kiegésszítettem szélsebesség mérővel. A szélsebesség mérő egy külön ATMega8 vezérlőre került, ami I2C buszon komunikált a fő egységgel. Nem sokkal előtte egy „szerviz” LCD kijelzőt is beépítettem, amit fejlesztési okokból intenzíven használtam az I2C buszon keresztül. Azon az I2C buszon történt mindez, amin előtte percenként egy alkalommal lekérdeztem a BME280 adatait. Most meg immár másodepercenként többször is kommunikálnak az eszközök! Lehet ennek valami köze a modul fogyasztásához, és ezen keresztül a pontosságához?
A kérdés tehát az, hogy a modul áramfelvétele függhet-e az I2C port használatától. Feltételezésem szerint nő az áramfelvétel az I2C busz intenzív használatakor, és ez megemeli a modul NYÁK lemezének a hőmérsékletét. Kell-e ezzel foglalkoznunk?! Utólag már tudom, hogy kell!!!
Első kísérleti programomban egy loop() ciklus elején minden alkalommal kiolvastam a hőmérsékletet. Azonban az eredményt praktikus okokból nem küldtem azonnal a soros portra, mert ez nagyon lelassította volna a lekérdezések számát, így csak 10 másodpercenként írtam ki az eredményt. A kiolvasott hőmérséklet mögé kiírtam a ciklusok, azaz a mérési eredmények BME280-ból történő kiolvasásának számát, hogy lássuk mekkora terhelés érte az I2C buszon a chip-et. A listából amit közzé teszek kiszedtem részeket, hogy ne legyen annyira hosszú. A kiírás időpontjából azonban látható, hogy néhány percig végeztem a program futtatását:
Indul…
06:12:29 -> 25.89 1
06:12:39 -> 25.97 11962
06:12:49 -> 26.03 11970
06:13:09 -> 26.13 11969
06:13:29 -> 26.19 11965
06:13:39 -> 26.23 11972
06:13:49 -> 26.25 11977
06:14:09 -> 26.30 11969
06:15:29 -> 26.40 11959
06:19:09 -> 26.50 11976
06:19:49 -> 26.50 11980
06:19:59 -> 26.51 11973
06:20:09 -> 26.50 11969
Azt hiszem jól látható, hogy az induló 25.9 fok hőmérsékletről 7 percen belül felemelkedett a hőmérséklet 26.5 fokra és gyakorlatilag itt állandósult. Kimondhatjuk, és ezt több futtatással is megerősítettem, hogy az I2C busz intenzív használatára a chip akár fél fokos hőmérséklet emelkedéssel reagál. Ne legyen kétség senkiben, nem a szoba hőmérséklete emelkedett meg. Közben egy helyben ültem és még levegőt sem vettem. A próbapanelemet, amin megépítettem a hőmérő kapcsolást, jó messzire toltam laptopomtól, hogy még a ventilátorával kavart meleg levegő se zavarja meg. Öt futtatást végeztem köztük pár perces „áramtalanítással”, hogy a chip visszahűljön.
Jött a második kísérlet, miszerint nem a BME280 chip-et kérdezgetem le, hanem az I2C buszra feltettem vele párhuzamosan egy DS3231 RTC óra chip-et. Ezt kérdezgettem a loop() elején, és 10 másodpercenként csináltam egy hőmérséklet kiolvasást és ennek kiírását a soros portra:
07:04:00 -> Indul…
07:04:01 -> 26.76 1
07:04:11 -> 26.84 6573
07:04:31 -> 26.96 6573
07:04:51 -> 27.03 6573
07:05:21 -> 27.10 6573
07:05:41 -> 27.13 6573
07:06:21 -> 27.18 6573
07:06:51 -> 27.20 6572
07:07:31 -> 27.22 6573
07:07:41 -> 27.23 6572
07:08:01 -> 27.25 6572
07:08:11 -> 27.25 6573
Itt is kiszedtem pár mérési eredményt, hogy ne legyen annyira hosszú a lista. Megfigyelhető, hogy itt egy loop() ciklusokból itt már csak kb. 6500 zajlott le másodpercenként, mert a DS3231 chip több adatot küld az idő lekérdezésekor, ami tovább tart. Azonban az I2C busz terhelése ugyanakkora. Nagyából ugyanazt az eredményt kaptuk, azaz fél fokkal emelkedett a hőmérséklet a busz intenzív terhelésének hatására. Ennek oka az lehet, hogy a BME280 chip ugyanazokat a buszon zajló tevékenységet érzékeli, csak éppen nem válaszol rá. Azonban az ehhez szükséges áramköreit nyilván aktívan használja, figyeli a busz órajelét, veszi az adatokat, értékeli a kapott címet stb.
Következő kísérletben gyorsan cselekedtem! Kikommenteztem a programból a DS3231 lekérdezését, így az I2C buszhoz csak 10 másodpercenként nyúlok hozzá a BME280 lekérdezésével. A program újrafordítása és rátöltése igénybe vett kb. fél percet, de az eredmény még így is meggyőző:
07:08:44 -> Indul…
07:08:44 -> 27.18 1
07:08:54 -> 27.15 12410
07:09:04 -> 27.10 12644
07:09:24 -> 27.01 12648
07:09:34 -> 26.98 12647
07:09:54 -> 26.92 12646
07:10:04 -> 26.90 12248
07:11:24 -> 26.80 12248
07:16:45 -> 26.70 12248
07:19:15 -> 26.71 12247
07:21:55 -> 26.72 12646
07:25:05 -> 26.74 12249
Mint az jól látható a chip elkezdett hűlni. 5-6 perc alatt állandósul is egy 0.4-0.5 fokkal kisebb hőmérséklet. Tehát valóban az I2C intenzív használata fűtötte fel a chip-et, mert amikor az a terhelés megszűnt, visszahűlt egy alacsonyabb hőmérsékletre. A mérést tovább is folytattam, és láthatóan emelkedik néhány század fokkal a hőmérséklet! Ennek oka, hogy közben elkezdett besütni a nap a konyhaasztalra, ahol a kísérleteket végeztem! Nem sütött rá közvetlenül a chip-re, de azért elkezdett emelkedni a környezeti hőmérséklet.
A következő kísérletben (ez már egy következő napon zajlott) újabb paraméteren változtattam! Visszaraktam a programba a DS3231 folyamatos kérdezgetését, és a BME280 modult nikecell szigetetelő lemezek közé raktam, ezzel lerontottam a környezetének „hűtő” hatását:
06:15:55 25.68 1 25.7
06:16:05 25.77 6571
06:16:15 -> 25.87 6570
06:16:25 -> 25.94 6570
06:16:35 -> 26.01 6571
06:16:45 -> 26.06 6569
06:16:55 -> 26.11 6570
06:17:05 -> 26.15 6570
06:17:15 -> 26.19 6569
06:17:25 -> 26.22 6571 26,2
06:17:35 -> 26.25 6570
06:17:45 -> 26.28 6571
06:17:55 -> 26.30 6570 26.3 2 perc 0,6 fok
06:18:05 -> 26.33 6570
06:18:15 -> 26.34 6570
Pirossal jelöltem a fontos sorokat a listába. Eddig 4-5 perc kellett a hőmérséklet állandósulásához, ami 0.5fok-kal magasabb értéken állandósult. Immár két perc is elég volt, és 0.6 fokkal magasabban állandósult a hőmérséklet. Nem meglepő, hiszen kisebb sebességgel áramlik ki a modulból a keletkezett hő. Ezt a kísérletet is többször megismételtem, nem egy véletlen eredmény!
Következő kísérletben eltávolítottam a szigetelő lemezt, és alaposan lecsökkentettem a loop()-ban a DS3231 lekérdezések számát. Immár csak 1000 lekérdezést csináltam másodpercenként. A BME280 adatait továbbra is csak 10 másodpercenként olvastam ki:
07:23:32.071 -> Indul…
07:23:32.165 -> 26.52 1
07:23:42.182 -> 26.53 906
07:24:02.229 -> 26.57 907
07:24:22.232 -> 26.58 906
07:24:32.256 -> 26.57 907
07:24:52.264 -> 26.56 906
07:25:12.301 -> 26.57 906
Meggyőző az eredmény! Nem történik lényegi hőmérséklet emelkedés. Jóval hosszabb ideig regisztráltam, de itt már zavaró, hogy közben a szoba hőmérséklete is emelkedett. Minden esetre az látható, hogy ez a terhelés már nem zavarja számottevően a hőmérséklet mérésünk eredményét. Megcsináltam a kísérletet 100 kiolvasással is, de nem láttam lényegi eltérést!
Tanulság! Ha tudunk olyan modult választani, amin nincs 5V->3.3V DC tápegység, az vélhetőleg nem fogja teljesítmény veszteségével melegítani a panelt. Úgy emlékszem, hogy van 3.3V-os modul is a termékpalettán. Másik lehetőségünk, hogy a modult olyan I2C buszon használjuk, amin nincs forgalom. Ha vannak szbad kivezetések, erre megfelelő lehet egy szoftveres I2C busz is. Illetve a másik modul típuson van SPI port kivezetés is, használjuk azt.