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

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

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

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


 Я не решился возится с запайкой датчика и взял готовую платку с ним. На ней уже запаяна сама микросхема и все элементы обвязки. По цене вышло не сильно дороже, взял здесь http://www.ebay.com (китайцы мне скоро будут обязаны за такую рекламу xD)





 


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



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
Просмотров: 21686 | Комментарии: 27 | Теги: BMP085, Барометр, sensor | Рейтинг: 4.6/8
Всего комментариев: 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)
Чувствую скоро будет статья про полноценную метео станцию? Это было бы очень хорошо, так как устройство полезное, а толковых статей мало!

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






   EasyEDA:  бесплатный редактор схем

   ✓ Создание схем
   ✓ Возможность симуляции
   ✓ Быстрое создание печатных плат
   ✓ Интуитивно понятный интерфейс

   Нарисуй свою схему прямо сейчас!
   Изготовление печатных плат   https://easyeda.com/order
авторизация
Логин:
Пароль:
Комментарии
Когда не хватает ног. Часть 2. Сдвиговый регистр 74HC595
08.12.2016 - exersizze:
yorx выдалось немного свободного времени, проверил в симуляторе. Проблема...
Логгер температуры 2.0
05.12.2016 - Evgeny6873:
Хотел повторить схему и долго ждал дисплей, два раза заказывал с Китая, пришел. ...
Когда не хватает ног. Часть 2. Сдвиговый регистр 74HC595
01.12.2016 - yorx:
Доброго времени суток, exersizze попробовал Ваш код все равно не работает как на...
Помни об усадке!
30.11.2016 - pchela5:
Автомобильные никакие не лезут?
Помни об усадке!
29.11.2016 - AlekS:
Виктор, спасибо.
С заменой транса в зиму, перестройка не комельфо) Валяет...
Управляем микроконтроллером с ПК по UART
29.11.2016 - exersizze:
Михаил, для работы с инфракрасными датчиками и диодами есть команды RC5SE...
Управляем микроконтроллером с ПК по UART
29.11.2016 - Михаил:
Всем привет.
Подскажите как переменную S передать по инфракрасному каналу...
Помни об усадке!
29.11.2016 - pchela5:
> Если ленту светодиодную порезать и соединить последовательно
Только ...
Когда не хватает ног. Часть 2. Сдвиговый регистр 74HC595
29.11.2016 - exersizze:
yorx, вывод Q7 ' первой микросхемы соединен с DS второй микросхемы? С...


Лучшие цены на 3D принтеры
успей сделать себе подарок к Новому Году! ;)


Prusa i3

Prusa i3 от 12500 р.



Rostoсk

Rostock от 15000 р.