Главная » Статьи » Как подключить

Датчик давления BMP085. Работа в Bascom-AVR

 Температуру и влажность уже измеряли, и не раз (DS18B20 DHT11 SHT21). Поэтому сегодня будем измерять следующий важнейший параметр нашей среды обитания - атмосферное давление. 
В поисках подходящего кандидата для измерений наткнулся на датчик BMP085 от Bosh.

 Датчик BMP085 это крошечный цифровой барометр с возможностью измерять атмосферное давление в пределах 300…1100 гПа (+9000…-500 метров над уровнем моря). Размеры корпуса микросхемы 5х5х1,2 мм. В этот корпус разработчики умудрились засунуть еще и цифровой термометр. 
 С микроконтроллером датчик общается по стандартному интерфейсу I2C, что не может не радовать - один из моих любимых протоколов :) Поэтому решил остановится на нем.

 

 Я не решился возится с запайкой датчика и взял готовую платку с ним. На ней уже запаяна сама микросхема и все элементы обвязки.

 



 


 Схема подключения микросхемы: 

 

VCC и GND питание датчика в диапазоне напряженя от 1.8 до 3.6 Вольт

SDA и SCL линии данных интерфейса I2C, все как обычно.

XCLR цифровой вход, при подаче на него логического нуля произойдет сброс BMP085 с последующей инициализацией регистров и прочей периферии датчика. Этот вывод можно использовать для выбора определенного сенсора если планируется использовать больше одного - подаем на ненужные датчики 0 и, пока они думают, опрашиваем нужный датчик.

Вывод EOC (end of conversion) служит для сигнализирования окончания преобразований. Если на этом выводе высокий уровень (лог 1) то расчет и преобразования закончены и можно забирать данные, если на этом выводе низкий уровень (лог 0) то расчет продолжается. Этот вывод полезно использовать в быстрых приложениях, чтобы не останавливаться для ожидания измерения. Запустили расчет и ушли по своим делам, а как только расчет будет закончен по прерыванию обрабатываем данные.

 Я не знаю что употребляли разработчики Bosh когда проектировали этот сенсор, но нагородили они там основательно. Дело в том что датчик отдает данные в сыром формате, который необходимо преобразовать, используя 100500 формул для того чтобы привести данные к стандартным единицам измерения. Для ознакомления с этими преобразованиями рекомендую 14-ю страницу даташита на BMP085.

 Из-за большого числа преобразований код программы для работы с датчиком занимает 95% программной памяти микроконтроллера Atmega8. Подключение датчика к микроконтроллеру стандартное, резисторы подтяжки по 5-10кОм.

 

 

 Выводы XCLR и EOC в программе не задействованы и их можно оставить болтаться в воздухе.

 

 

 

 

 Результат ниже, раз в секунду контроллер опрашивает датчик и кидает в терминал данные - температуру, давление (в гектопаскалях) и высоту над уровнем моря.

 

 

 В итоге данные с этого датчика надо бы перевести из Паскалей в мм. ртутного столба, но памяти у Atmega8 на такие преобразования уже не хватило. Ну что ж, в следующий раз возьму камень пожирнее (результат можно посмотерть в следующей статье)

 Если верить сайту гисметео, то давление датчик показывает правильно, примерно 748,3 мм.рт.ст. (по данным гисметео 750 мм.рт.ст.). Ну это я еще на 3-м этаже живу, а здесь давление еще пониже:) Так что датчик похоже не врет. 

 

Ссылка на модуль с датчиком

Исходники программы в Bascom-AVR

Документация на BMP085

 

 

 

 

Категория: Как подключить | Добавлено: 10.07.2012
Просмотров: 29150 | Комментарии: 27 | Теги: BMP085, барометр, SENSOR | Рейтинг: 4.7/9
Всего комментариев: 27
27 max   (12.01.2014 10:32) [Материал]
Спасибо, скачал. Себе тоже закажу такой датчик.

26 kip96   (11.01.2014 23:50) [Материал]
Забыл про исходник- скачиваем!
https://yadi.sk/i/wG0AVf38cPuBN
Сылку заменил.

25 kip96   (11.01.2014 23:48) [Материал]
Пришёл мне тоже датчик, но потом доглядел, что он BMP180. Почитал интернет- то-же самое, только дешевле, и вроде лучше. Посмотрел -это пипец! Мозги кипеть начинают через пять минут, после попытки что-то понять в их формулах. И после таких извращений у него давление зависит от температуры. Почитал нет- такая проблема тока в Васике. Решил разобраться и нащёл ошибку в коде. Исправил, попутно сократив немного код. Вообщем давление стабилно и не зависит от температуры. Код сократился.
Картинка с терминала http://yadi.sk/d/uJBI_ZD_Frzbp

24 exersizze   (12.10.2013 07:50) [Материал]
tenevikus , а отдельно вывод на дисплей нормально получается?  У меня со стеклом от 3310 проблем не было, попробуй увеличить объем стеков.

23 tenevikus   (11.10.2013 21:49) [Материал]
Всем добрый день. продублирую мой вопрос на форуме.
Запустил барометр bmp085/ всё прекрасно выводится в терминал. но стоит попробовать вывести данные на экран от nokia 1100 как всё сразу перестает работать. может у кого получилось их совместить?

22 Polle   (05.05.2013 11:42) [Материал]
Спасибо за ответ! Из карты гугл видно что высота 20м как расчитать коэффициент и куда эго вставить в программе?

21 exersizze   (04.05.2013 22:22) [Материал]
Да, переменные проще сразу приравнивать заранее известным значениям, но разницы в общем никакой. По поводу прыгающего значения высоты, если известна действительная высота (можно глянуть в картах гугл) то из значения давления можно найти необходимый коэффиент

20 Polle   (02.05.2013 10:01) [Материал]
Или может заменить строку: Potenz5255 = 1 / 5.255 на Potenz5255 = 0,190295 ?

19 Polle   (02.05.2013 09:26) [Материал]
Собрал этот приборчик на отдельном микроконтроллере с выводом информации через USART.
Показания давления и температуры соответствуют действительности, а вот показания высоты над уровнем моря пляшут в больших пределах от 34 до 207 метров замер велся в одной точке. Возможно ли это из-за строки вычисления высоты: Altitude = P / 101325, а
в PDF значение давления Po= 1013.25 ?

18 Polle   (19.02.2013 16:53) [Материал]
Результаты считывания калибровочных данных почему то считываются неправильно подскажите пожалуйста правильно ли всё делаю: делаю старт загружаю в I2C $ee (адрес записи)загружаю $aa (например)повторный старт загружаю $ef (адрес считывания) и принимаю старший байт , ack_no и стор, этот байт загружается в двухбайтовый регистр и этот регистр сдвигается влево 3ри раза, ($aa увеличивается на 1цу $ab) потом по той же технологии загружается младший байт и прибавляется к результату старшего, а сумма загружается ac1 (например)

17 exersizze   (16.02.2013 10:56) [Материал]
Это возведение двойки в 15ю степень. В переменную можно сразу положить значение 32768

16 Polle   (16.02.2013 10:39) [Материал]
Подскажите пожалуйста что означает эта строка:
2potenz15 = 2 ^ 15

15 exersizze   (09.02.2013 17:34) [Материал]
Считываем по очереди старший и младший байты переменной, со старшим делаем сдвиг на 8 влево и складываем со младшим. Так и получаем необходимое значение переменной. 
Вот набросал кусок кода, который отвечает за преобразование переменной AC2


Код
Dim Ac2 As Integer
Dim Msb As Long
Dim Lsb As Long
Dim Wert As Byte                    'байт принятый с датчика

$sim

Do

'функция чтения старшего байта
Msb = Wert

'функция чтения младшего байта
Lsb = Wert
Shift Msb , Left , 8
Ac2 = Msb + Lsb

Print Ac2

Loop
End                    'end program

14 Polle   (02.02.2013 21:33) [Материал]
AC2,AC3,MB,MC

13 exersizze   (02.02.2013 21:23) [Материал]
>>>Добавьте пожалуйста комментариев в исходнике программы, я программирую в другой среде 
и мне не всё понятно
там есть некоторые комменты на английском, остальное лучше глянуть в даташите, хотя там тоже все на буржуйском)

>>>Как можно считать с датчика отрицательные значения констант?
какие именно константы интересуют?

12 Polle   (02.02.2013 21:13) [Материал]
Как можно считать с датчика отрицательные значения констант?

11 Polle   (20.01.2013 08:45) [Материал]
Добавьте пожалуйста комментариев в исходнике программы, я программирую в другой среде
и мне не всё понятно.

10 exersizze   (16.01.2013 03:31) [Материал]
Да, в исходнике есть строчки 
 &B11101110 'адрес микросхемы + запись
&B11101111 'адрес микросхемы + чтение

9 Polle   (14.01.2013 20:48) [Материал]
Помогите пожалуйста разобраться с этим датчиком: Вы используете программный интерфейс
I2C или встроенный TWI, если встроенный то как быть с адресом микросхемы максимальный $7f, а как я понял из PDF для записи $EE, а для чтения $EF ?

8 exersizze   (16.09.2012 17:15) [Материал]
по ДШ вроде так и есть

+1   Спам
7 Scorpushka   (16.09.2012 17:11) [Материал]
-40...+85 вроде как получается

6 Scorpushka   (16.09.2012 17:06) [Материал]
не могу найти, в каких диапазонах он мериет температуру?

5 exersizze   (14.09.2012 22:58) [Материал]
Если интересует измерение давления под водой, то нет. Для такого он не предназначен. Есть такой датчик HP02S,у него сенсор покрыт гелем, вот его можно наверно будет в воду опускать smile

4 dimka885   (14.09.2012 20:05) [Материал]
Супер!! Спасибо как раз искал какой нибудь датчик для измерения давления. Скажите его можно использовать только на воздехе?

3 niko-lay   (21.07.2012 17:47) [Материал]
Да эти метеостанции по большому счету тоже простые показометры, продвинутые варианты еще и анемометр еще имеют (измерение направления и скорости ветра). Но погоду они прогнозируют в большинстве случаев неверно, все зависит от местности. У меня пару лет назад стояла на работе станция, так она постоянно предсказывала дождь ))) хотя на улице ни тучки

2 exersizze   (11.07.2012 10:30) [Материал]
Пока только простой показометр, я не нашел алгоритмов по которым прогнозируется погода на основании изменения температуры/влажности/давления. Интересно, как в домашних метеостанциях с точностью предсказаний?

1 Skyline   (11.07.2012 09:33) [Материал]
Чувствую скоро будет статья про полноценную метео станцию? Это было бы очень хорошо, так как устройство полезное, а толковых статей мало!

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]






авторизация