Fórum témák
» Több friss téma |
Fórum » BMP085 és BMP180 Digitális Nyomásérzékelő Alkalmazása AVR-rel
Témaindító: Max26, idő: Jún 24, 2015
Témakörök:
Sziasztok!
Ezt a témát azért hoztam létre, mert szükséges volna légnyomás mérést végeznem. A szenzor adott, de sehol nem találok ezekkel a szenzorokkal foglalkozó témát a HE-án. Ha van valakinek működő kódja BMP180-hoz megosztaná velünk?
Persze: Bővebben: Link
Avagy a GitHub, vagy az Adafruit oldaláról teljesen jól működő példaprogramok tölthetők le. A 180 elmegy a 085-ös könyvtáraival.
Nekem sajnos ez a projekt nem működik: Projekt_1: Link
Lassan tölt be az lcd kijelző, lassan frissülnek a mérési adatok és egy rövid idő után az egész MCU lefagy. Több restart után sem 'éled föl'. Egyszer csak fogja magát és megint működik. Próbáltam ezt a kódot is (ez egy másik projekt) Projekt_2: Link Igen, ezzel működik: több órát futott a program reset nélkül, már boldog is voltam, de mégis lefagyott. És reset után sem éledt föl szint úgy. Ez a kód gyorsan frissül ellenben az előzővel. Ha működés közben resetelek, arra reagál. Lehet az LCD library-mal van a hiba? Mi lehet az oka a lefagyásnak? A hozzászólás módosítva: Jún 25, 2015
Sziasztok!
Épp egy BMP180-as légnyomásmérővel játszok. Egy részlet az adatlapból:
Én jártam régen matekórára vagy a feltétel mindkét ága ugyan azt az eredményt adja? Nem teljesen értem, mi értelme ennek.
Sziasztok!
BMP/BME280-al van tapasztalatotok? Hardverileg rendben vagyok, a nyers adatokat ki tudom olvasni. A konverzióhoz keresek BASIC példákat (hogy AVR, PIC, vagy akármi az teljesen mindegy), sajnos az adatlapban lévő C kód eléggé távol áll tőlem. Esetleg az is segíthet, ha valaki leírja, hogyan kell értelmezni. Adatlap 23. oldal 4.2.3-as bekezdés. Kösz előre is!
Hasonló (lásd melléklet) leírásnak én is örülnék.
![]()
Nos! A BME280 adatlapja végén van még számítás. Ezzel sikerült eredményt elérnem:
Sajnos az egyszerűbb ide-oda bitshiftelős változattal nem tudtam megoldani a fordító korlátai miatt (Signed Integer híján, a negatív hőmérséklet mérés nem volt jó). Így maradt a Floating Point, megizzad tőle a 8bites mikrovezérlő és zabálja is a programmemóriát, de működik. Legalábbis részben. A hőmérséklet és páratartalom jónak tűnik, de a légnyomásra mindig 1500hPa körüli értéket ad vissza. Ez elvileg nem lehet, mert 1100hPa a mérés felső határa, az időjárásjelentés és a telefonom szerint is 1020hPa körül van általában. Szóval van még mit átrágni rajta.
Én ugyan nem tudom, mi a kód célja, de ha az operandusok egész számok, akkor nem mindegy, hogy milyen sorrendben végzed el a műveletet. Ugyanis az osztásnál eltűnik a maradék. Vagyis pl. 10/4 = 2. Tehát (10/4)*2 = 2*2 = 4; míg (10*2)/4 = 20/4 = 5.
Alapjában véve a második adja a pontosabb eredményt. És azért vizsgálja meg, hogy B7 < 0x80000000, mert ha nem, akkor a kétszeres szorzás már túl csordulna a 32 biten. Vagyis, ha a szám túl nagy, akkor kénytelen előbb az osztást elvégezni, és utána szorozni. Még akkor is, ha ez a pontatlanabb. Idézet: Ez nem esett le. Köszönöm! „ha az operandusok egész számok, akkor nem mindegy”
Sziasztok!
Mivel a demo bascom fordító csak 4k-ig enged, ezért "kiheréltem" egy Német BMP280 programot a netről, oly módon, hogy mivel nekem csak a légnyomás kell, a hőmérséklet, páratartalom, stb dolgot kivágtam. És már se lcd, se spi programrész, nem fér el még így sem, az rx tx -et egy BT05 modullal androidra küldöm. Tulajdonképpen működik, tendenciára mindenképp, de az abszolút pontossághoz, gondolom meg kellene adni a hőmérsékletet, de a programban a T_fine értéket hiába változtatom nem történik semmi.... A hozzászólás módosítva: Jan 28, 2017
Nem teljesen értem a kérdést. Az a baj, hogy kevesebbet mutat, mint amennyit pl. az Időkép oldalán látsz? Ha igen, akkor mindössze annyi a gond, hogy a kapott értéket át kell számolni tengerszint feletti magasságra.
Üdv!
A pontos légnyomáshoz kell tudni a pontos hőmérsékletet, ehhez a szenzorból kell kiolvasnod a nyers hőmérsékleti adatot és azt kompenzálni kell az előzőlegesen kiolvasott kalibrációs adatokkal. Ekkor már tudod a T_fine értékét is, ami kell. Lásd még adatlap.
A baj ahogy eSDi is írja hőmérséklettel (is) kell kompenzálni.
eSDi: Nincs több helyem a memóriában, nem tudom kiolvasni ebből a modulból, de kézzel beírnám, hogy hány fok van a szobában (beírtam a programba T_fine-t), de mégsem változik a kiírt érték, az általam kézzel megadott értéktől. A hozzászólás módosítva: Jan 28, 2017
A hőmérséklet mennyit változtat rajta? Állítsd össze aszámolási folyamatot pl. egy Excel táblázatban és ott próbálgasd a paramétereket.
Én csak lemásoltam a programrészeket, nem látom át a számítások menetét, igazából Tőletek kérdezném, hogy előfordulhat, hogy 20 fok hőmérsékletváltozás csak tizedeket változtat a nyomás értéken? A tengerszinttel való korrigálás lehet úgy hogy az eredeti végeredményhez, egyszerűen hozzáadom ami az időkép szerint hiányzik?
A BMP180 adatlapjában benne van, hogyan lehet átszámolni tengerszintre a légnyomásértéket. Az egyenletből kifejezhető a tengerszintre vetített légnyomás. Ha a magasságod nem változik, akkor ez egy állandó paraméter lesz.
Érdekes, hogy a BMP180 adatlapjában a mért légnyomás nem függ a hőmérséklettől.
A T_fine még nem hőmérséklet érték, még ebből is kell számolni, hogy azt megkapd.
Nekem pl 30.6°C-nál 156677. Szóval elég nagy határok között lehet mivel ez egy 32bit-es Signed Integer típus kell hogy legyen. Idézet: „Érdekes, hogy a BMP180 adatlapjában a mért légnyomás nem függ a hőmérséklettől” Dehogynem. B5-öt ki kell számolni a hőmérsékletnél és ezt fel is használja a nyomás kiszámításánál, mindjárt az első sorban.
Lehet, hogy kitérő válasz, de használj HP206C típusú szenzort, abban már megtörténik a számolás és a kompenzált légnyomás, magasság és hőmérséklet olvasható ki, csupán a wire könyvtár I2C rutinjait használva.
Most hirtelen nem is igen találom hol lehetne olyat venni, az ebay-en volt egy 3000 ft-os találat, a bmp annak a tizede, de egyébként úgy tűnik megoldódott a dolog. Valójában nagyon is hőmérsékletfüggő a mérés, majd egy fokonként egy hPa. A hőmérséklet mérésnek bent kell megtörténnie a modulban, mert nem egyezik a külső hőmérséklettel, általában 7-10 fokkal magasabb annál, gondolom ennyi a saját hőtermelése a modulnak. Úgyhogy a 4k-ba sehogy sem fér bele, de fórumtársak segítettek a fordításban. Viszont az eredeti program amivel próbálkoztam kiderült hibás volt, és így kézzel sem tudtam kompenzálni, de a javított változat szépen működik. Ha a légnyomás nem változik, akkor egy század hPa az ide oda ugrálás. Most próbálok különféle felhasználásokat írni a légnyomásadattal, pl. magasságmérő (kb. 100méter=12hPa), légnyomásváltozás tendencia és grafikon stb.
Ja, drágácska még, 7.3$. Majd ha jó idő lesz, próbáld ki, mit mutat akkor, ha rásüt a nap a szenzorra
![]() A hozzászólás módosítva: Feb 1, 2017
Kedves Kollegák!
Az ebay-n vásároltam 4db BMP180-as modult és azt tapasztalom, hogy mindegyik kb. 10C fokkal kevesebbet mér a tényleges hőmérsékletnél. A modulok kalibrációs értékei jelentősen eltérnek a doksiban feltüntetett értékektől. Pl: MC a doksiban -8711, modulé: -20982 AC5 32757 25723 stb.... A számítási algoritmus jól működik, a példa szerinti értékekkel helyes végeredményt ad. Ha valakinek van ötlete a hibával kapcsolatban, köszönettel veszem a válaszát.
Üdv!
A kalibrációs adatok el is fognak térni, azért az a nevük! Minden modulra egyedileg van meghatározva. Ki kell olvasnod mindet és ezeket behelyettesíteni a képletbe. Jól kell mérjen, nekem BME280-al nem volt túl nagy gondom.
Maximum 1.5 fokot hibázhat, nekem nem volt vele gondom. A páramérős BME280 is fél fokot tévedett. Azt viszont meg kell figyelnünk, hogy a gyártó szerint az eszköz megnevezésében nincs ott hogy "hőmérő". Más dolog, hogy a nyomásmérés kompenzációjához ismerni kell a hőmérsékletet, ami kiolvasható.
A hozzászólás módosítva: Nov 15, 2017
|
Bejelentkezés
Hirdetés |