Авторизация
Зарегистрироваться

Датчик температуры, влажности и атмосферного давления BME280


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

Где-то в комментариях или письмах мне посоветовали дополнить прибор датчиком BME280 для расширения функциональности.



Я посмотрел описания и обзоры этого датчика и понял что это отличная идея.
Датчик представляет из себя интегрированный комплекс датчиков позволяющий измерять температуру и влажность воздуха, а так же текущее атмосферное давление.
Характеристики датчика вполне достойны для применения в бытовых условиях.
В первую очередь он довольно маленький, что позволяет легко закрепить его вне прибора, что бы на него не влиял разогрев остальных элементов. Датчик питается напряжением 3,3 вольта, что меня устроило. Большинство датчиков и контроллер в моем приборе питаются именно этим напряжением.
Точность показаний заявленных производителем:
Температура — 0,5°C
Влажность — 3 %RH
Давление — 1.0 hPa

Датчик имеет интерфейс подключения I2C, что в моем случае меня очень порадовало. Дело в том что свободных ног, GPIO у контроллера в моем приборе не осталось. Но этот интерфейс позволяет подключить несколько разных датчиков на одни и те же контакты, различая их по адресам на шине. Шина I2C в моем приборе уже используется для доступа к модулю часов DS3231.
И я просто подключил новый датчик прямо к контактам модуля часов.

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

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

Сам датчик BME280 я вынес за пределы корпуса прибора и разместил на задней панели.

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

Вот такой получился окончательный результат:


Для тех кто заинтересовался конструкцией прибора может пройти по ссылкам:

Электрическая схема прибора



Монтажная схема



Тут можно взять новую прошивку
Тут Архив с файлами скриптов
Тут инструкция о том как самостоятельно собрать подобный прибор

Инструкцию о том как прошивать контроллер

Описание первого варианта прибора

Чё на!?
Планирую купить +83 Добавить в избранное +60 +121
свернуть развернуть
Комментарии (67)
RSS
+
avatar
  • f1203
  • 27 сентября 2017, 11:51
0
Спасибо, интересно. Буквально вчера заказал себе датчик СО2. У этого датчика питание 3,3В, к адруино он без преобразователя уровня сигнала подключается? У адруино сигнальная линия 5В вроде.
+
avatar
0
Ардуино и от 3 вольт питать можно.
Ну и преобразователь уровней на али готовый копейки стоит.
+
avatar
  • f1203
  • 27 сентября 2017, 12:03
0
Просто некоторые вещи питаемые от 3,3В могут работать без преобразователей на адруино. Тот же экран от нокии вполне работает.
+
avatar
  • barkon
  • 27 сентября 2017, 12:00
0
К сожалению Вы не указали какой модели датчик Вы купили. Я использую MH-Z19 и у этого датчика питание 5v а уровень на сигнальных контактах 3,3v. И это может быть проблемой. Но я не специалист по ардуино, надо искать примеры подключения Вашего датчика.
+
avatar
  • f1203
  • 27 сентября 2017, 12:04
0
MH-Z19. Значит без преобразователя не обойтись?
+
avatar
  • yurok
  • 27 сентября 2017, 12:38
0
отлично будет работать без преобразователя, у ардуино при питании от 5 В гарантируется 1 при напряжении выше 3 В
+
avatar
  • f1203
  • 27 сентября 2017, 14:22
+2
Это с датчика, а сигналы с адруино на датчик идут 5В, они не спалят датчик?.. Я начинающий адруинщик, пока мало понимаю, прошу сразу тапком не бить.
+
avatar
  • risotto
  • 27 сентября 2017, 19:25
+1
Просто напомню, что для понижения напряжения очень хорошо подходит TP4056. Стоит копейки).
Или, например, если прикручивать известный цветной дисплей 128X128 1.44" SPI…
+
avatar
  • Kila
  • 27 сентября 2017, 11:57
+3
У меня дежавю
+
avatar
  • barkon
  • 27 сентября 2017, 12:01
-6
+
avatar
  • sav13
  • 27 сентября 2017, 11:58
+2
Здравствуйте
Очень круто конечно, прошивки и все такое. Но мне кажется, тема датчика не совсем раскрыта

Как с его точностью по разным параметрам?
Младший брат BMP180/280 ощутимо врал при измерении температуры
К тому же при постоянном питании еще и слегка нагревался стабилизатор напряжения?)
Давление тоже показывал довольно не точно.
Про влажность я вообще молчу — такие датчики показываю что-то корректное только при комнатной температуре.

Как у этого датчика с самонагревом?
Инертностью и прочими параметрами?
+
avatar
  • barkon
  • 27 сентября 2017, 12:05
+2
Буду наблюдать. Пока показания не выходят за рамки разумного. BME280 имеет более лестные отзывы по характеристикам. В моем случае он закреплен на радиаторе(хотя это сделано по тому что радиатор просто был под рукой и чем-то надо было прикрыть датчик) и в случае саморазогрева радиатор может оказать положительное влияние.
+
avatar
  • rx3apf
  • 27 сентября 2017, 12:15
+3
А откуда такие сведения о проблемах с BMP180? Вы утверждаете, что характеристики не соответствуют заявляемым в даташите? И как это проверялось? Термокомпенсация по формулам с использованием запрограммированных коэффициентов применялась? Тем более странно утверждение про нагрев от стабилизатора — типично эти платки используют XC6206 (1 uA собственного потребления) плюс 5 uA жрет сенсор (при одном измерении в секунду) это просто несерьезно.
+
avatar
  • sav13
  • 27 сентября 2017, 12:52
+1
Из собственного опыта
При включении прибора температура коррелирует с другими термометрами, потом медленно ползет вверх на 2-3С
Стабилизатор конечно low-drop. Но он все же линейный. И нагрев его зависит от входного напряжения. 1мкА — это только в режиме холостого хода. I2C при передаче явно больше 5мкА кушает. там только подтягивающие резисторы стоят на 4.7К. Так что для корректного измерения мерить не очень часто и переводить его в режим сна или вовсе питание отключать.
+
avatar
0
раз в минуту подрубать питание на время измерений будет вполне достаточно для погодной станции.
+
avatar
  • rx3apf
  • 27 сентября 2017, 13:11
0
I2C жрет только от pull-up. Если они запитаны от того же стабилизатора — да, на время сеанса (~1ms при 100 kHz шине) ток увеличится аж почти на 1 mA (в пересчете на один обмен в секунду — 1 uA). В паузах между измерениями датчик не потребляет фактически ничего. Ни о каком саморазогреве и речи быть не может.

Ну и из собственного опыта (BMP180, BME280) — показания стабильны, саморазогрева не наблюдается.
+
avatar
  • frol314
  • 23 декабря 2017, 21:19
+1
две штуки от элекроу(bme280) проверил — есть саморазогрев :(
паралельно подключил dht22 & ds18b20 для проверки…
так и есть завышает собака на 2.2-2.3градуса :(
+
avatar
+6
Что-то толпа необоснованных наездов без подтверждений.
BMP180 давление показывает архиточно (максимум расхождения — 1-2мм.рт.ст по отношению к данным Я.Погоды). Это раз.
За температуру — не скажу, я эти показания не беру, у меня температуру и влажность меряет SHT30.
Два: ни в одном из упомянутых датчиков никаких стабилизаторов напряжения не намечается (оба питаются от 3.3в).
+
avatar
  • NAgain
  • 27 сентября 2017, 12:41
+1
И давно Я.Погода стала эталоном в измерении? У них что фактические измерения хрен знает откуда берутся, что прогноз.
+
avatar
  • sav13
  • 27 сентября 2017, 13:02
+2
Синоптики QNH давление публикуют?
Вряд ли кто то будет смотреть на высоту расположения метеостанции и приводить давление к своей высоте.
Датчики BMP085/180/280 используются как раз для определения высоты за счет измерения давления. Так что наверное по давлению их можно привести. А вот температурный датчик в таких приборах вспомогательный, нужен больше для термокоррециии показаний.
В общем давление у меня как то мерится, но с показаниями метеоцентров соотносится на 10-15мм обычно. В принципе это 2% — вполне хватает. А вот температура 2-3C это уже 10%
Так что тоже отдельным датчиком пользуюсь

Хуже всего датчик влажности типа DHT22 при отрицательных температурах.
+
avatar
  • rx3apf
  • 27 сентября 2017, 13:14
+1
Даташит на BME280 регламентирует точность по температуре не хуже 1 градуса в диапазоне 0...+65C, и типично 0.5C при комнатной. Это типичные цифры для основной массы полупроводниковых датчиков.
+
avatar
  • serg_mur
  • 27 сентября 2017, 14:02
+2
У меня за год два сдохли (DHT22). На улице. Находятся в пластиковом тубусе с дырками, от прямого попадания влаги защищены. Но это не помешало им благополучно умереть. Причём отказывает именно гигрометр, температуру продолжает измерять исправно. Плохие датчики, короче!
+
avatar
  • ulik2008
  • 27 сентября 2017, 20:50
0
Странно, может вам бракованная партия попалась.
У меня DHT22 работает на улице больше года, может тоже скоро сдохнет, но я много не набирал. Показания температуры совпадают с другими термометрами, влажность проверить нечем. Установлен в пластиковую коробочку с отверстиями в нижней части.
+
avatar
  • fatman
  • 27 сентября 2017, 16:31
0
Вряд ли кто то будет смотреть на высоту расположения метеостанции и приводить давление к своей высоте.
А надо бы приводить к своей высоте. Если не ошибаюсь, то 10 м высоты — падение на 1мм рт. ст.
Легко проверяется, берется хороший барометр, тот у которого например тройная камера и у которого стрелку не надо толкать принудительно, т.е. не приукрашенный ширпотреб с аляповатыми надписями и в машину, на холмистой местности сразу визуально видно разницу в давлении во впадине и на вершине, а можно проверить на высотке.
+
avatar
  • AL_Kur
  • 30 сентября 2017, 02:43
0
подтверждаю, ездил в лифте с барометром — показывает
+
avatar
  • skeptik
  • 27 сентября 2017, 15:29
+1
у меня температура BMP180 и SI7021 различается не более чем на 0,2 градуса (замеряется одновременно). а так, обычно ±0,05 градуса разница.
+
avatar
0
кстати может кто подскажет датчик влажности пригодный для выноса на улицу. А то датчики типа DHT11/DHT22 как бы не атмосфероустойчивые.
+
avatar
  • barkon
  • 27 сентября 2017, 13:02
+1
Можно использовать такой
+
avatar
  • rx3apf
  • 27 сентября 2017, 13:17
+1
Вряд ли «малой кровью» это вообще реализуемо — помню, несколько лет назад в Москве на станциях метро появились табло с температурой, давлением и влажностью. Влажность перестало показывать где-то через год. Городская атмосфера — страшная штука. IMHO, это можно сделать разве что с запотевающим зеркалом. Ну или по классике — аспирационный психрометр. Но это только для положительных температур.
+
avatar
  • VladSher
  • 27 сентября 2017, 14:11
0
Вот как раз один BMP280 у меня с февраля на улице трудится.
+
avatar
0
а смысл давление на улице мерять, влажность BMP280 все равно не меряет, а для уличной температуры есть более простые и защищенные, например DS18B20. Вот больше интересно как BME280 влажность меряет. Если у него обычный резистивный датчик, то уличный воздух со временем функцию гигрометра угробит.
+
avatar
  • VladSher
  • 27 сентября 2017, 17:03
0
Я как обычно перепутал BMP и BME.
У меня установлен конечно же BME280. Т.е. с влажностью.
Если интересно, то вот он: narodmon.ru/601
На показания до середины июля особо не смотрите. Там были проблемы с зависающей ESP'шкой.
Но датчик на улице с февраля висит.
+
avatar
  • RussII
  • 27 сентября 2017, 14:15
0
DHT21 хоть и заявлен как устойчивый, но зиму не пережил, влажность стала навсегда 99%, сейчас в его корпусе висит SI7021, но зимы пока нет, посмотрим выживет ли, все лето отработал нормально.
+
avatar
  • alibay
  • 27 сентября 2017, 13:01
+2
Что нового, интересного читатель должен узнать для себя из данного обзора?
+
avatar
+9
Если ни чего не узнали нового, что мешает написать свой, более информативный обзор?
Или просто пройти мимо?
Автор должен ваш уровень знаний знать и суметь угодить?
Это же не возможно)))
Напишите свое, а мы почитаем ;-)
+
avatar
+1
ну например лично я узнал, что такой комбинированный датчик вообще существует, потому как в своем проекте рассчитывал на DHT22 и BMP280. А тут можно для всех комнатных измерений одним датчиком обойтись, особенно если собираешься на автономном питании делать.
+
avatar
0
А резисторы на i2c датчиках меняли/выпаивали?
+
avatar
  • barkon
  • 27 сентября 2017, 17:53
+1
Нет. Без этого все работает. Но замечание интересное, надо будет проверить уровень сигнала.
+
avatar
+1
Видимо зависит от уже распаянных номиналов, но у меня например oled экран и bme280 на одной шине сходу не стали работать с ардуиной.
+
avatar
  • abyrwalg
  • 27 сентября 2017, 20:34
0
странно, что никто не предъявил за «249р»… здесь-то проблемы нет, ~$4, но на хабре, "последний раз, когда я собирал этот прибор, он обошёлся в 7500" — приведите к инвариантам!

PS добавилось сюда, в конце не даёт повторить текст — просто горе!(
+
avatar
+1
Да, у меня тоже разок так глючило.
Ну у него же там esp, экран и другие датчики… Хотя я вообще не понял зачем там esp и экран с таким «дизайном»…
+
avatar
  • barkon
  • 27 сентября 2017, 23:40
0
На хабре была статья про прибор. Тут про датчик.
+
avatar
  • abyrwalg
  • 27 сентября 2017, 20:37
0
(ещё глюк!)
+
avatar
  • MadOrc
  • 27 сентября 2017, 18:19
+3
Очень рекомендую на RX MP3 модуля поставить 1к резистор, как и рекомендовано в ДШ, звук сразу лучше станет. Наступал на эти грабли, хотя и 3,3в — без резистора «похрипывал».
А вообще, мне больше так нравится. :)
+
avatar
  • Alexey85
  • 27 сентября 2017, 20:04
+3
Тоже имею определенный опыт работы с датчиком BME280. В сравнении с DHT22 результаты вполне сопоставимы. Вывел для тестирования все показания, которые умеет этот датчик (с высотой над уровнем моря у него конечно промашка :), но это чисто расчетный параметр)
+
avatar
  • risotto
  • 27 сентября 2017, 23:33
0
Я правильно понял — Mega Server на Arduino Nano не работает?
+
avatar
  • Alexey85
  • 28 сентября 2017, 06:07
+1
Нет, не работает. Все упирается в объемы памяти. У меня без проблем запускался на ESP8266 и Esp32. Выносные датчики работают на Arduino Pro mini (есть спец. прошивка для выносных датчиков и актуаторов).
+
avatar
  • risotto
  • 28 сентября 2017, 07:52
0
Esp32 понятно. На ESP8266 ESP01 запускается, или у вас какая?
+
avatar
  • Alexey85
  • 28 сентября 2017, 13:13
+1
У меня esp07 с 1Mb памяти. Под esp01 по-моему используется эта же версия. От полной версии отличается только «красивостями» web, связанными с ограниченным объемом памяти. Ничего не мешает к esp01 прикрутить sd-карту.
+
avatar
  • risotto
  • 28 сентября 2017, 18:55
0
Спасибо.
+
avatar
+3
Не так давно тестировал датчики DS18B20, DHT22, HTU21D (вариант 3.3V, без встроенного стабилизатора напряжения), BME280 (встроенный стабилизатор) и сравнивал их показания между собой. Питание на все датчики подводилось постоянно.
Вкратце выводы следующие: при измерении влажности DHT22 сильно врёт, HTU21D и BME280 измеряют правильно. При измерении температуры: самый точный DS18B20, DHT22 — относительно точный, но имеет большую тепловую инерционность. HTU21D и BME280 стабильно завышают температуру на 1..1.5 градуса.
Подробнее тут vladikoms.livejournal.com/97796.html
+
avatar
  • colibri2
  • 28 сентября 2017, 11:32
+1
Когда выбирал лучший датчик, ориентировался на эту статью
Учитывая что там сенсор Bosch BME280 получается неплохим вариантом.
+
avatar
  • E_g_o_r
  • 02 октября 2017, 16:32
0
Почти год назад также решил сделать комбо-станцию по мониторигу климата, вдохновившись примером ТС. Сначала использовал DHT22, но стало катастрофически нехватать ножек у esp. Также набрел на указанную статью со сравнением датчиков, перешел на BME280 как измеритель влажности. Накапливаю данные thingspeak.com/channels/230321 (там, кстати, ссылка есть на диск с описанием потрохов девайса и фотки).
Так вот, показаний влажности больше 50% в квартире не наблюдал никогда, даже, когда дышишь на датчик. Ввиду того, что влажность у меня контролируется увлажнителем, как-то не придавал особого значения этому, но все же… Хотя сейчас мысль пришла код проверить.

Ну а температуру действительно надо мерять DS18 — в BME280 по моему разумению датчик температуры встроен для обеспечения температурной компенсации.
+
avatar
  • barkon
  • 02 октября 2017, 17:30
0
Молодец.
+
avatar
  • mag21
  • 18 октября 2017, 11:57
0
А вашу схемку не приложите?
+
avatar
  • E_g_o_r
  • 18 октября 2017, 12:41
0
Боюсь схемку не восстановлю быстро.
Сходи по ссылке на thingspeak.com/channels/230321 — там будет ссылка на ЯДиск, где расположены материалы и, в том числе, исходники.
Наскидку, из определений:

— пины подключения аппаратуры
CONFIG.PINS = {
CO2 = 2,
DS18 = 3,
DHT22 = 1,
DISP = {
CS = 6, — fake, don't use, only for init disp soft
DC = 8,
RES = 0
},
I2C = { — все, что висит на I2C — BMx280, DS3231 и т.д.
SCL = 6,
SDA = 4
}
}

Какой пин как кодируется можно посмотреть по ссылке nodemcu.readthedocs.io/en/dev/en/modules/gpio/

В дисплее CS не используется, он, насколько я помню подтянут в 1, используются только DC и RES.
На i2C параллельно сидят часы и датчик BME280.
Остальные понятно из приведенного кода.
+
avatar
  • mag21
  • 18 октября 2017, 12:59
0
Файлы скачал. Спасибо. А датчик пыли и датчик формальдегида не брали?
+
avatar
  • E_g_o_r
  • 18 октября 2017, 13:09
0
Нет, не брал, не интересно
+
avatar
  • mag21
  • 18 октября 2017, 13:49
0
Меня интересует как отсылать данные на thingspeak для проекта аналогичному автора данного обзора. Я только начинаю изучать и пока не совсем понятно.
+
avatar
  • E_g_o_r
  • 18 октября 2017, 14:18
0
Надо не лениться и посмотреть на исходники, на которые есть ссылка. Там все весьма элементарно. Но никто не разжует и в рот не положит :(
Код для отсылки на thingspeak лежит в файле netSend.lua
+
avatar
  • mag21
  • 18 октября 2017, 14:41
0
Да, посмотрел уже. Спасибо еще раз. Буду разбираться.
+
avatar
  • E_g_o_r
  • 18 октября 2017, 14:31
0
Да и в текущей реализации просто ног нехватит — их у есп кот наплакал, ТС пришлось мультиплексор/коммутатор делать, чем мне совсем неинтересно было заниматься — я сделал прибор исключительно на монтажных проводах.
+
avatar
  • mag21
  • 31 октября 2017, 19:32
0
Загрузил ваши скрипты. Выдает ошибку, не подскажете на что ругается: PANIC: unprotected error in call to Lua API (?:0: attempt to call global 'IsNumber' (a nil value))
+
avatar
  • E_g_o_r
  • 31 октября 2017, 19:41
0
Лучше в почту e_g_o_r@mail.ru и подробнее, т.е.больше вывода
+
avatar
  • mag21
  • 31 октября 2017, 20:01
0
Получили? И еще время почему-то не правильное?
+
avatar
  • E_g_o_r
  • 02 октября 2017, 17:08
0
Кстати, чем реально хорош BME280 — использованием интерфейса i2c, на который можно повесить сразу несколько устройств, что весьма актуально для скудного по ногам esp. В своей комнатной метеостанции я параллельно датчику повесил и часы реального времени DS3231, как и у ТСа.
+
avatar
  • E_g_o_r
  • 02 октября 2017, 17:14
+2
ТСу совет — стоит присмотреться к формату выводу значений на экран. Нафиг не надо сотые индицировать в показаниях, ни во влажности (там это вообще мусор), ни в температуре. Да и давление индицировать с десятыми также просто незачем.

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.