Меню Рубрики

Барометр на микроконтроллере и bmp180

малогабаритный барометр на BMP-180 и PIC 16F684

Автор: Vlad_B
Опубликовано 18.01.2018
Создано при помощи КотоРед.

Данная схема появилась как альтернатива всему тому, что было выложено в интернете до этого.

Перерыв массу материала и изготовив пару барометров по предложенным схемам, оказалось, что данные барометры показывали, все что угодно, но только не давление.

Поэтому обьеденившись со своим товарищем и поломав голову пару недель, родилась данная схема и прошивка, учитывая что мы народ ленивый, и большие размеры плат нас не радуют,

было принято решение минимизировать и схему и плату, весь прибор состоит из 4х деталей, первое, это сам процессор PIC 16F684, почему выбор пал именно на него? Скорее всего из-за того, что был именно он в наличии, да и цена в 50 рублей на китайском сайте вполне нас устроила, датчик давления был так приобретен там же BMP-180, он имеет малые размеры и вполне подходил для нашей платы, размер которой определялся только размером индикатора.

Для упрощения интерфейса и уменьшения количества проводников от индикатора к процессору, было принято решение применить индикатор, который уже имеет интерфейсную микросхему на своем борту.

TM1637 вот как называется данный индикатор. 7-ми сигментный 4х битный. Красного свечения.

Питается данное устройство от стабилизатора на 5 вольт, учитывая ток был применен стабилизатор 78L05, для его защиты, так как данное устройство планировалось использовать при питании от 12 вольт, то по входу установлен защитный диод, защищающий от переполюсовки питания. Лично себе я собрал данное устройство которое по размером чуть превышает спичечный коробок, и запитал я его от аккумулятора 3.7 вольта. Но это уже как кому удобно. Что порадовало, точность данного барометра сверяли с показаниями радиомаяка аэропорта. Разница составила +-1 мм.рт. столба.

окончательно устройство выглядит примерно так:

Корпус и оформление на ваше усмотрение. Собрано было 4ре барометра.

Прошивка, схема в SPL, и плата в LAY прилагается в архиве.

Сегодня хотелось бы рассмотреть устройство, представляющее собой барометр – измеритель атмосферного давления. Применения такого устройства необходимо для мониторинга текущего атмосферного давления выраженного на индикаторе устройства в двух единицах измерения – в международной системе единиц Паскали (Па или Pa) и во внесистемных единицах измерения – миллиметры ртутного столбца. Последнее скорее всего больше привычно для наших стран, так как применяется в прогнозах погоды. Однако функционал данного устройства не ограничивается измерением только атмосферного давления, также реализовано измерение температуры и определение высоты над уровнем моря (альтитуды).

Схема устройства на AVR микроконтроллере ATmega8 представлена ниже:

В качестве датчика атмосферного давления в схеме использован BMP180 производства компании Bosch. По правде говоря, эта компания делает хорошие и качественные вещи, но даташит на этот датчик составлен в сравнении с даташитами других компаний не очень развернуто, без опыта чтения подобной документации разобраться будет трудно. Инженеры Bosch посчитали необходимым дать информацию только по самым основным параметрам, но все что нам нужно все есть, хоть местами и кратко. Датчик атмосферного давления BMP180 может работать как по I2C интерфейсу, так и по SPI интерфейсу (выбирается подключением необходимых выводов датчика). В данной схеме используется I2C интерфейс. Так как датчик требует питания до 3,3 вольт, а микроконтроллер питается от 5 вольт постоянного напряжения, необходимо применить согласование уровней I2C для корректной работы. Для этой цели выбрана микросхема производства компании NXP PCA9517. Сам датчик берет питания от стабилизатора напряжения на 3,3 вольта, это же питание подается на подтягивающие резисторы R6 и R7. Уровни сигналов преобразовываются микросхемой PCA9517 и сигналы от датчика атмосферного давления передаются микроконтроллеру с уровнями до 5 вольт. 5 вольт подключается к подтягивающим резисторам R4 и R5. Эти подтягивающие резисторы (pull-up) необходимы для работы протокола I2C – с их помощью формируются высокие уровни сигнала, а когда микросхема проваливает это напряжение с подтягивающих резисторов в нулевой потенциал, формируется низкий логический сигнал. В данной конфигурации напряжений логических уровней 3,3 и 5 вольт можно обойтись на крайний случай и без согласования уровней, так как согласно стандартам при таких питающих напряжения потенциалы низких уровней у них одинаковые, а высокий уровень совпадает как у 5 вольт, так и у 3,3 вольт, разница заключается только в максимальных значениях. Однако было решено не рисковать и все же применить согласование уровней – сделать все по правилам. Номиналы подтягивающих резисторов можно взять от 4,7 кОм до 10 кОм. Конденсаторы C3 и C4 необходимы для стабильной работы датчика атмосферного давления.

Читайте также:  Sololift2 cwc 3 инструкция

Важной функцией в данном датчике атмосферного давления является калибровка полученных измерений. В памяти датчика есть 11 коэффициентов, предназначенных для улучшения точности измерения параметров. Однако не все так просто – домножить на эти коэффициенты так просто нельзя. для получения конечных результатов в даташите приведен целый пример расчета на странице 15, документация на датчик ниже. В соответствии с этой информацией составляем программу для микроконтроллера на языке Си.

У каждого датчика калибровочные коэффициенты свои (видимо на заводе их полностью задают в соответствии с какими-то контрольными испытаниями). Перед использованием эти коэффициенты нужно прочитать из регистра хранения датчика.

Для получения значения альтитуды или высоты над уровнем моря используем также формулу, приведенную в даташите и получаем такую функцию:

В зависимости от надобности эту функцию можно выбросить из исходника, так как для расчета нужно использовать библиотеку – реализованные в ней методы расчета необходимых действий отбирают очень много памяти как флэш, так и оперативной, однако ничего лучше пока не придумал.

Также данный датчик может измерять атмосферное давление с разной точностью. Для задания точности необходимо передать это значение датчику по I2C и правильно задать задержку перед чтением регистров с полученными данными (в зависимости от точности, датчику нужно больше или меньше времени на измерение). программный код выглядит так:

При сборке схемы датчик атмосферного давления BMP180 был применен на заводской печатной плате китайской сборки (модуль включает в себя стабилизатор питания на 3,3 вольта с конденсаторами, подтягивающие резисторы для интерфейса I2C и конденсаторы в обвязке самого датчика по питанию, микросхема или просто схема согласования уровней на данной плате отсутствует, поэтому необходимо применять в другом исполнении):

Питается вся схема от простого модуля питания на силовом трансформаторе. Переменное напряжение выпрямляется четырьмя диодами VD1 – VD4 марки 1N4007, пульсации сглаживаются конденсаторами C1 и C2. Номинал конденсатора C2 можно увеличить до 1000 – 4700 мкФ. Четыре выпрямительных диода можно заменить одним диодным мостом. Трансформатор применен марки BV EI 382 1189 – преобразует 220 вольт переменного тока в 9 вольт переменного тока. Мощность трансформатора составляет 4,5 Вт, этого вполне достаточно и еще с запасом. Такой трансформатор можно заменить любым другим силовым трансформатором, подходящим для Вас. Либо данный питающий модуль схемы заменить на импульсный источник напряжения, можно собрать схему обратноходового преобразователя либо применить иже готовый блок питания от телефона, например – все это дело вкусов и потребностей. Выпрямленное напряжение с трансформатора стабилизируется на микросхеме линейного стабилизатора L7805 , ее можно заменить на отечественный аналог пяти вольтового линейного стабилизатора КР142ЕН5А, либо применить другу микросхему стабилизатора напряжения в соответствии с подключением ее в схеме (например LM317 или импульсные стабилизаторы LM2576, LM2596, MC34063 и так далее). Далее 5 вольт стабилизируются другой микросхемой – AMS1117 в исполнении, дающей на выходе 3,3 вольта. Это напряжение используется для питания датчика атмосферного давления BMP180 в соответствии с документацией. Номиналы конденсаторов в обвязках микросхем стабилизаторов напряжения можно варьировать в широких пределах в области взятого порядка.

Читайте также:  Дом на воде как называется

Ну и сердцем схемы является микроконтроллер Atmega8. данный микроконтроллер можно использовать как в корпусе DIP-28, так и в СМД исполнении в корпусе TQFP-32. Резистор R3 необходим для предотвращения самопроизвольного перезапускания микроконтроллера в случае появления случайных помех на выводе PC6. Резистор R3 подтягивает плюс питания к этому выводу, надежно создавая потенциал на нем. Для индикации измеряемых параметров используется жидко кристаллический (ЖК или LCD) дисплей SC1602. Он имеет 2 строки символов по шестнадцать штук в каждой из них. ЖК дисплей подключается к микроконтроллеру по четырех битной системе. Переменный резистор R2 необходим для регулировки контраста символов на дисплее. Вращением движка этого резистора добиваемся наиболее четких для нас показаний на экране. Подсветка ЖК дисплея организована через вывод "А" и "К" на плате дисплея. Подсветка включается через резистор, ограничивающий ток – R1. Чем больше номинал, тем более тускло будет подсвечиваться дисплей. Однако пренебрегать этим резистором не стоит во избежание порчи подсветки. Мощность всех резисторов постоянного сопротивления составляет 0,25 Вт.

Схема была собрана и отлажена на макетной плате для микроконтроллеров Atmega8:

В итоге данная схема имеет следующий функционал:

  • измерение и отображение атмосферного давления в двух единицах измерения (Паскали и миллиметры ртутного столбца)
  • измерение и отображение температуры окружающей среды
  • подсчет и отображение положения датчика относительно уровня моря (подсчет альтитуды)
  • данные на дисплее обновляются раз в две секунды

В данном устройстве показание положения относительно уровня моря именно высчитывается, а не измеряется. Расчет происходит по рекомендованной формуле из даташита упрощенного расчета положения относительно уровня моря в зависимости от атмосферного давления. Как известно, чем выше мы находимся, тем давление атмосферы меньше. Именно эта зависимость и используется при расчете. Однако, в связи с тем что для любой отдельной территории погода может меняться, а вместе с ней и атмосферное давление будет колебаться. Исходя из этих размышлений, а также опытных наблюдений, положение над уровнем моря будет постоянно плавать в зависимости от колебаний атмосферного давления (по идеи то высота не должна изменяться с такой скоростью). Эта функция рассматривается как дополнительная и не совсем достоверная (уровень над морем в течении дня может плавать плюс минус процентов 5 – а это много, я считаю). Но именно атмосферное давление измеряется данным датчиком вполне точно – совпадение с текущим прогнозом погоды от полного до расхождения не более одного процента. Температура в данном датчике измеряется также весьма точно.

Читайте также:  Вытяжка в ванную комнату леруа мерлен

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

Для программирования микроконтроллера Atmega8 необходимо знать конфигурацию фьюз битов (скриншот сделан в программе AVR Studio):

К статье прилагается прошивка для микроконтроллера , полный исходный код для данного устройства для работы с датчиком BMP180 в AVR Studio документация на датчик, а также небольшое видео, демонстрирующее работоспособность схемы (наблюдаем как изменяются параметры, если зажать датчик атмосферного давления пальцем руки).

Автор: Сергей · Опубликовано 21.09.2017 · Обновлено 27.09.2019

Датчик BMP180 (3.3В, GY-68) — является недорогим и простым в использовании сенсорным датчиком, позволяющий измерить атмосферное давления и температуру окружающей среды. Используют данный датчик для определения высоты (чем выше, тем меньше давление), а так же в самодельных метеостанциях.

Технические параметры

► Напряжение питания: 3.3 В – 5 В
► Рабочий ток: 0.5 мA
► Диапазон измеряемого давления: 300 гПа – 1100 гПа
► Интерфейс: I2C
► Время срабатывания: 4.5 мс.
► Точность измерения давления: 0,1 гектопаскаль;
► Точность измерения температуры: 0,1°С;
► Габариты: 15 мм х 14 мм

Общие сведения

Рассмотрим модуль поближе, в левой части расположен сам сенсорный датчик BMP180 фирмы Bosch. Так как датчик BMP 180, работает от 3.3В (а почти все платы Arduino работают на 5В), на плате предусмотрен стабилизатор напряжения XC6206P332MR в корпус SOT-23, который выдает на выходе напряжение в 3.3В, рядом установлена обвязка стабилизатора, состоящая из двух керамических конденсаторов на 1 мкФ. Подключение осуществляется по интерфейсу I2C, линии SCL и SDA выведены на группу контактов на другой стороне модуля, туда же выведено и питание. Последние два резистора на 4.7 кОм, необходимы подтяжки линии SCL и SDA к питанию, конечно при необходимости их можно выпаять, если используете несколько устройств на I2C линии.

Назначение контактов:
► SCL — линия тактирования (Serial CLock)
► SDA — линия данных (Serial Data)
► VCC — «+» питание
► GND — «-» питание

Принципиальная схема датчика BMP180, показана ниже.

Подключение датчика давления BMP180 к Arduino

Необходимые детали:
► Барометрический датчик давления BMP180 (3.3В, GY-68) x 1 шт.
► Arduino UNO R3 (DCCduino, CH340G)x 1 шт.
► Провод DuPont 10x, 2,54 мм, 20 см, F-F (Female — Female) x 1 шт.

Подключение:
В данном примере используем датчик BMP 180 и плату Arduino UNO R3, все получение показание отправлять в «Serial порт», принципе и все, осталось собрать схему по рисунку ниже. Для интерфейса I2C на плате arduino предусмотрено только два вывода A4 и A5, другие вывода не поддерживают I2C, так что учтите при проектирование.

Теперь, о программной части, для нашего удобства разработана библиотека BMP180 Breakout Arduino Library v.1.1.2, которая позволяет упросить работу с датчиком, скачиваем и устанавливаем ее, кстати датчик BMP180 и BMP080 похожи, включая и команды, так что библиотека у них одна.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *