Lekce 19 - Arduino a senzor tlaku BMP085
24.05.2013 21:07Translate to English
Před několika dny mi dorazil poštou senzor atmosférického tlaku BMP085 od firmy Bosch. Jedná se o již připravený modul o velikosti 20x15mm takže opravdu prcek. Nálézá se na něm 6 vývodů, všechny jsou na modulu popsané a vzhledem k tomu, že modul komunikuje protokolem I2C, stačí pro funkční zapojení pouze 4 vodiče (2 napájení a 2 pro I2C). Modul je napájený napětím 3V, což z Arduina není problém. S tímto modulem si můžeme postavit malou meteostanici i s předpovědí počasí, elektronický měřič nadmořské výšky a pod.
Pro zprovoznění modulu máme 2 možnosti. Jedna obtížnější - po prozkoumání datasheetu napíšeme zdrojový kód a poté ta lehčí - najdeme již napsanou knihovnu modulu a importujeme ji do programu. Začneme, ale pro pochopení modulu tou težší.
Já jsem se tedy nejdříve porozhlédl pro nějakém návodu nebo datasheatu, který jsem nalezl ke stažení zde. Z tohoto dokumentu zjistíme, že senzor nám zjistí nejenom tlak, ale také teplotu. Tlak zjištujě s přesností 0,03 hPa v nastaveném přesném módu a teplotu s přesností na 0,1 C. Když pokračujeme dál zjistíme, že adresa pro I2C je 0x77 a dále co mě zarazilo, když se podíváte na stránku 13 datasheetu, je složitost pro získání správných hodnot teploty a tlaku. Já popíšu zhruba postup jak je k těhto hodnot dosaženo.
- Musíme získat tzv. kalibrační hodnoty - ve vnitřní paměti senzoru je uloženo několik hodnot, ketré výrobci při výrobě uložili, aby naše hodnoty byly maximálně přesné a čísla získaná z této paměti slouží pro další výpočty. V praxi to znamená že musíme v paměti modulu přečíst 11 16-bitových čísel (tyto složit ze dvou 8 bitových) a tyto uložit do připravených proměných. To jsme se již učili a postup je obdobný jako u čtení z EEPROM na I2C.
Každá hodnota má svoje dvě asdresy pro každou 8 bitovou hodnotu - Přečtení nekompenzované hodnoty teploty a výpočet správné hodnoty teploty.
- Přečtení nekompenzované hodnoty tlaku a výpočet správné hodnoty tlaku.
Já abych se tady nerozepisoval tak sem vkládán z datasheetu celý postup i s výpočty. Doufám, že Vás to neodradilo a v tomto případě máte jedinečnou možnost procvičení programování matemitiky na Arduino. Nicméně nechápu, proč vyvojoví pracovníci ve fy. Bosch toto již nenaprogramovali do modulu :-). Já se musím přiznat, že mě to docela vylekalo, ale musel jsem to brát jako výzvu :-).
Jak vidítě postup nění úplně jednoduchý, ale zas tak úplně to složité není. V ukázce programu je to trošku rozděleno do funkcí pro větší přehled. Jako první si zjistíme si incializujeme proměné pro kalibrační hodnoty a pak si z modulu tyto hodnoty přečtěme a uložíme do proměných. Čteme 16 biitové číslo - tzn. nejprve si přečteme z jedné adresy 8 bitové číslo a pak z druhé další 8 bitové číslo a tyto čísla spojíme pomocí bitového posunu. Adresy hodnot najdeme v tabulce výše v textu. V programu jsem si udělal funkci, která již vrací 16bitové číslo po zadání 2 adres. Je to funkce "GetShort". Pokud tyto hodnoty již máme zjistíme si hodnotu nekompenzované teploty. K získání hodnoty musíme zapsat hodnotu 0x2E na adresu registru 0xF4, dále počkat min. 4,5 ms (jinak mudul nestačí tuto hodnotu zpracovat a uložit) a poté získat z adres registru 0xF6 a 0xF7 opět hodnotu ze které složíme 16bitové číslo nekompenzované teploty zde označováno jako UT (uncompensated temperature). Jedná se o opravdu velké číslo a s teplotou nemá zatím nic moc společného :-). Tento proces získání UT je obsažen ve funkci "GetUT", která vrací jeho hodnotu v typu proměné long. Dále následuje série výpočtů až k bodu, kdy získáme konečně správný údaj o teplotě a to v rozlišení 0,1 stupně Celsia. To číslo je vlastně násobeno 10. Správná hodnota je vždy teplota/10. (tzn. že T=224 je 22,4 st. Celsia). Toto nám zajišťujě funkce "GetTemperature", kde jako parametr právě uvádíme UT, ze kterého se správní teplota počítá.
Po získání údajů o teplotě si změříme atmosférický tlak. Postup je podobný. Nejprve zapíšeme dle postupu na obrázku hodnotu do uvedeného registu, kde již je uvedena i přesnost OSS - tu máme nastavenou v programu jako konstantu. (0 až 3), dále chvilku počkáme. Doba závisí na nastavené přesnosti a v programu je již zohledněna. Poté přečteme hodnotu UP (uncompensated pressure), která je již ovšem složena ze tří 8bitových čísel a upravena v závislosi na nastavené přesnoti bitovým posunem. To v programu zajištujě funkce "ReadUP". Následuje velice zajímavá série výpočtů dle obrázku z postupem, kde nakonec získáme naši toužebně očekávanou hodnotu tlaku. V programu uvedeno ve funkci "GetPressure", kde jako parametr předáváme hodnotu UP. Výsledná hodnota je samozřejmě uvedena v Pascalech. Pro převod do kPa (hektoPascalů vydělíme 100).
Tak pokud si program pustíme na sériový port jsou v untervalu 5 sekund vypisovány hodnoty o teplotě, tlaku a výšce, která se počítá z tohoto vzorce:
Za p se dosazuje námi změřená tlak a za po se dosadí tlak přepočtený aktuální na hladinu moře, který můžete získat na internetu v informacích o počasí pro Vaše město. Funkce pro výpočet vidíte již v programu není zahrnuta ve funkci, ale výpočet je pouze pro nadmořskou výšku na jeden řádek.v baterii
Tak tady je k tomuto funkční program:
Vidíme, že je tam dost omáčky, ale v loop() moc programu není, všechno dělají vytvořené pomocné funkce pro přehlednější kód. Program, ale funguje dobře. Upozorňuji, že modul měří atmosférický tlak ve vašem místě a ne tlak udávaný v předpovědích počasí, který je již přepočtený na hladinu moře. Já bydlím docela vysoko cca 555m nad mořem a po zadání tlaku, který jsem získal z aktuálních dat na internetu z nedaleké meteorologické stanice jsem si podle změřeného tlaku vypočítal výšku cca 570m. Nepatrná odchylka tu je. Vy budete ale modul možná používat jako měřič barometrického tlaku. Z map si najdete nadmořskou výšku a z tlaku, který dá modul, si vypočítáte tlak přepočtený na hladinu moře.
V programu si také můžete nastavit přesnost od 0 do 3. 0 je samozřejmě s nejmenší přesností, ale výpočet netrvá tak dlouho. Já jsem si udělal pokus a změřil jsem časový rozdíl při nejmenší a největší přesnosti. Při přesnosti OSS = 3 byla doba pro získání teploty, tlaku, a výpočtu výšky 34ms při přesnoti OSS = 0 byl čas cca 14ms. Myslím, že pro naše použití bude taková nepatrná doba nepodstatná. Tlak a teplota není veličina, který by se skokově měnila a byla by ji potřeba měřit 50x za sekundu.
Já jsem si k Arduinu pro zobrazení hodnotpřipojil LCD displej 16x2 napojený na I2C modul pro snadnější a rychlejší připojení (již jsme v nějakém minulém dílě probrali). Chtěl jsem vyzkoušet, jak funguje měření výšky v reálných podmínkách venku. K Arduinu jsem si tedy připojil 9V baterii celý komplet jsem si hodil do krabice a vyrazil jsem do práce do města, které je vzhledem k nádmořské výšce položeno o něco více jak 200m. Fungovalo to bezvadně. Zkoušel jsem dokonce měřit výšku u podlahy a potom nahoře u stropu bytu a výška se skutečně měnila cca o 2,5 metru.
Tak a teď ta lehčí metoda pro lenochy. Z tohoto zdroje si stáhneme knihovnu pro BMP085. Po otevření (je to ve formátu *.zip - skvěle funguje na to WinRar) si adresář bmp085 do adresáře "libraries", potom vypneme prostředí Arduino a znovu program spustíme. Již by se měla objevit v nabídce v menu "Sketch->Import Library-> ...." (postup jsme si ukázali v minulých dílech". Tak já hned uvedu nějaký program, který pracuje právě s touto knihovnou:
Já jsem trošku upravil a přeložil příklad uvedený s knihovnou. Jsou tam uvedeny tři možné inicializace senzoru. Stačí odkomentovat tu správnou možnost jakou chcete a jak budete senzor používat tady jsou:
- dps.init(); - Tak jako by jste byli u hladiny moře, žadné kompenzace v závislosti na výšce ve které se nacházíte nebude
- dps.init(MODE_STANDARD, 101850, false); - pokud znáte tlak ve vašem místě tak jej zadáte - viz komentář v kódu (nastaven tlak 1018hPa)
- dps.init(MODE_STANDARD, 55500, true); - pokud znáte výšku tak ji zadáte -viz komentář v kódu (nastavena výška v cm na 555 metrů)
Rozdíl v nastavování výšky nebo tlaku je pouze v předání poslední proměné jako true nebo false. Prví parametr funkce určuje s jakou přesností bude senzor data počítat:
- MODE_ULTRA_LOW_POWER --> přesnost 0,06hPa
- MODE_STANDARD --> přesnost 0,05hPa
- MODE_HIGHRES --> přesnost 0,04hPa
- MODE_ULTRA_HIGHRES --> přesnost 0,03hPa
Další parametry a funkce v knihovně určitě vyčtete v dobře od autora okomentovaném kódu v knihovně :-)
Nějaké tipy na stránky:
Aktuální informace o tlaku na území České republiky
———
ZpětDiskusní téma: Lekce 19 - Arduino a senzor tlaku BMP085
Datum | 23.02.2024 |
---|---|
Vložil | psydodo |
Titulek | Ad vitam )) |
Consumor aliis inserviendo — Изнуряю себя, работая на благо других.
———
Datum | 22.02.2024 |
---|---|
Vložil | Esbetwesy |
Titulek | very interesting, but nothing sensible |
very good
———
Datum | 21.02.2024 |
---|---|
Vložil | Frbetpoimb |
Titulek | Thanks, + |
Thanks, I've been looking for this for a long time
———
Datum | 20.02.2024 |
---|---|
Vložil | LarryCot |
Titulek | Hello, Sporthappy |
Hello from Sporthappy.
———
Datum | 16.02.2024 |
---|---|
Vložil | Wandamense |
Titulek | When the sky fell. (عندما سقطت السماء) |
I used to living not the present from the Abasan al-Kabira and when infernal regions mow down from elysium I was luckier than the people who lived there.
My monicker is شافي‎., I am a displaced person and I am raising in to help.
Please if you can send a dollar saved to a Bitcoin purse, do so. I liking check out to send funds due to the fact that humanitarian backing to the victims in the Gaza Strip.
Bitcoin(BTC): bc1q4x8s3uw6gq67sakst5ngqcznznvwmzv8p6ktpr
Ethereum (ETH): 0xD236413ee5E9c1DBDdE2012595d4A3C38418C3bf
If you can't send funds, entertain don't erase this information or send it to SPAM. Prefer impudent it to those who can send at least 1 dollar.
كنت أعيش في مكان ليس ببعيد عن ШЁЩЉШЄ Шانون‎، وعندما سقطت الجحيم من السماء كنت أكثر حظًا من الناس الذين يعيشون هناك.
اسمي ناصف‎، أنا لاجئ وأقوم بجمع التبرعات للمساعدة.
من فضلك إذا كان بإمكانك إرسال الدولار الذي تدخره إلى محفظة بيتكوين، فافعل ذلك. سأحاول إرسال الأموال للمساعدات الإنسانية للضحايا في قطاع غزة.
Bitcoin(BTC): bc1q4x8s3uw6gq67sakst5ngqcznznvwmzv8p6ktpr
Ethereum (ETH): 0xD236413ee5E9c1DBDdE2012595d4A3C38418C3bf
إذا لم تتمكن من إرسال الأموال، يرجى عدم حذف هذه الرسالة أو إرسالها إلى الرسائل الاقتحامية. يرجى إرسالها إلى أولئك الذين يمكنهم إرسال دولار واحد على الأقل.
———
Datum | 13.02.2024 |
---|---|
Vložil | VlasovaTok |
Titulek | Акция бонусы Устранение сайтов мошенника вирусные базы |
Готовы предложить вам профессиональные услуги:
"Стопроцентное устранение веб-сайтов конкурентов!"
Как это выполняют наши специалисты?!
- Наш опыт - более 10 лет.
- Секретная методика.
- Наращиваем большую ссылочную массу вирусными ссылками.
- Любой поисковик молниеносно реагирует на наши применяемые базы.
- Все размещенные тексты на онлайн-сайте спамятся, они становятся неуникальными.
- У наших экспертов очень серьезные возможности и долгий опыт в этой области.
Стоимость 7000 рублей
Полная отчётность.
Оплата: Qiwi, Yandex.Money, Bitcoin, Visa, MasterCard...
принимаем usdt
Телегрм: @xrumers
Только эти!!!
———
Datum | 13.02.2024 |
---|---|
Vložil | VlasofTok |
Titulek | Услуга бонусы Устранение сайтов кидалы вирусные базы |
Можем предложить действенный способ ликвидировать веб-сайт вашего конкурента.
Используем лучшие технологии, только проверенные не одним проектом:
- Уничтожаем сайты по любым ключевым запросам.
- Тысячи спамных беклинков.
- Заспамленость главного емаила фирмы письмами с рассылками
- Понижение позиций онлайн-сайта в поисковике по самым коммерческим ключам.
- Секретная технология. Это известно только нашим специалистам. Десятилетний опыт работы.
- Стопроцентно гарантируем возврат денег через 3 месяца.
- 100% отчётность.
- Полная конфиденциальность нашей работы. Никто про вас и нашу деятельность не узнает.
Стоимость $80
Полная отчётность.
Оплата: Qiwi, Яндекс.Деньги, Bitcoin, Visa, MasterCard...
принимаем usdt
Telgrm: @xrumers
Только эти!!!
———
Datum | 13.02.2024 |
---|---|
Vložil | Danieltut |
Titulek | Каков способ нарисовать лимон рисуем красками маслом |
Рисование лимона гуашью — занимательный художественный процесс, который способствует вам создать живописное и подлинное изображение этого сочного фрукта. Начните с подбора ярких и насыщенных цветов акварели для разработки живой палитры. Нанесите нежный контур лимона на холст, используя карандаш или тонкую кисть. Помните, что лимон обладает гладкой поверхностью, поэтому важно использовать краски с отличной текучестью и просто создавать мягкие переходы между оттенками.
Продолжайте добавлять акценты, такие как тени и отражательные элементы, чтобы придать вашему рисунку объем и живость. Варьируйте интенсивность цветов, чтобы подчеркнуть черты лимона, такие как свежесть и освещение. Не забывайте о фоновой поверхности - он может быть абстрактным или имитировать окружение, например, светло-зеленую растительность или деревянное основание. Экспериментируйте с различными приемами и наслаждайтесь процессом создания своего варианта лимона на бумаге.
———
Datum | 12.02.2024 |
---|---|
Vložil | Danieltut |
Titulek | Каков способ прорисовать лимон рисуем с использованием красками маслом |
Творчество лимона маслом — увлекательный художественный процесс, который дает возможность вам изобразить насыщенное и подлинное изображение этого ароматного фрукта. Начните с отбора насыщенных цветов акварели для формирования яркой палитры. Нанесите нежный контур лимона на холст, используя пастель или финконсистентную кисть. Помните, что лимон обладает гладкой поверхностью, поэтому важно использовать пигменты с высокой текучестью и легко создавать мягкие переходы между оттенками.
Продолжайте добавлять акценты, такие как теневые элементы и отражения, чтобы придать вашему рисунку глубину и реализм. Варьируйте яркость цветов, чтобы подчеркнуть характеристики лимона, такие как кислотность и солнечный свет. Не забывайте о фоне - он может быть абстрактным или воссоздавать естественную среду, например, светло-зеленую листву или деревянную поверхность. Экспериментируйте с разнообразными приемами и радуйтесь процессом создания своего варианта лимона на холсте.
———
Datum | 12.02.2024 |
---|---|
Vložil | MarcusArich |
Titulek | Briggs And Stratton Запчасти Для Двигателя Газонокосилки |