Сравнение бюджетных термо-сенсоров (датчиков) BMP180, AM2320, DS18B20 - первые шаги в Ардуино.

Приветствую, народ. В предыдущей статье я сравнивал GSM-термостаты и упомянул самодельный проект на Arduino. Ну и запала мне в душу эта идея, решил заняться изучением. Хотя в программировании микроконтроллеров я полный ноль, да и в электронике не спец (хотя основы все же знаю), решил не задерживаться на уроках с включением и выключением лампочек, а сразу изучать и делать что-нибудь полезное в быту — благо, платформа Arduino древняя и популярная, и в инете полно уже готовых библиотек и примеров для всех возможных модулей и датчиков. Наверное, многие, начинающие изучать Arduino, в качестве первого полезного проекта выбирают термометр или домашнюю метеостанцию, ну и мне такая задумка показалась по душе. Купил несколько разных термосенсоров и решил заодно сравнить, с каким из них в будущем есть смысл работать, а от каких стоит держаться подальше.

DS18B20 — довольно популярный датчик температуры. Диапазон от -55 до +125 градусов, погрешность +/-0.5 градусов. Цена 50 рублей за голый сенсор или 100 рублей за готовый модуль.

BMP180 GY-68 — барометр, совмещенный с датчиком температуры.  Диапазон от -40 до 85. Цена 90 рублей.

AM2320 — Датчик температуры и влажности. Диапазон от -40 до 80. Цена 190 рублей.

Это самые дешевые. DHT-11 — это классика, но как раз его я покупать не стал. Причина — несерьезный диапазон измеряемых температур 0-50 градусов. Цена 100 рублей за модуль. То же можно сказать и про AMT1001 (температура + влажность)  — диапазон от 0 до 60 градусов при цене 160 рублей. Хотя и им можно найти применение в домашних условиях, но, поскольку я в перспективе хочу собрать термостат для дачи, которая может замерзнуть, то возможность работы с отрицательными температурами считаю необходимостью, в связи с чем данные модели мне не подходят.

Итак, чтобы не ездить в магазин каждый раз, когда понадобится 1 резистор, я закупился сразу оптом, набрав того, что теоретически может пригодится при изучении Arduino. Стартовые комплекты со «всем необходимым» покупать не стал — посчитал, если покупать  все детали по отдельности  — выходит значительно дешевле. В российских магазинах цены на стартовые комплекты вообще неадекватные — 3-5 тысяч за несколько компонентов, которые едва тянут на одну-две тысячи, если покупать их отдельно в тех же магазинах. Очевидный плюс покупки деталей по отдельности в том, что можно сосредоточиться именно на том, что интересно. В частности, моторы и сервоприводы мне пока не интересны, я их и не покупал. На алиэкспрессе, конечно, можно было сэкономить, но потерять 3-6 недель на доставку, так что решил брать в России. Важно заметить, что в некоторых российских магазинах цены на некоторые модули Arduino в 3-4 раза выше, чем в других магазинах, так что важно сравнивать цены и правильно выбирать магазин. Рекламы я тут не делаю, но два магазина в полной мере удовлетворили мои потребности (75 предметов). По расходам, прикинул, вышло, конечно, дороже, чем при заказе из Китая, но уже через 3 дня всё, что нужно для начала обучения и экспериментов, было у меня с бесплатной доставкой СДЭК-ом. Китайцы тоже не дураки, и в одном магазине, где что-то дешевле, чем у других, могут продавать иные товары дороже, чем у других. Например, я присмотрел самый дешевый понравившийся мне стартовый набор на али примерно за 1300 рублей, решил заказать к нему кое-каких дополнений у того же продавца, чтобы всё пришло в одной посылке сразу (релюхи, gsm модем и т.д.), но в русском интернет магазине нашел те же самые товары даже дешевле! В результате, чтобы реально сильно сэкономить на али, нужно каждый предмет заказывать у разных продавцов, где он продается дешевле, чем у других, и ожидать несколько десятков посылок, приходящих в разные дни в течение 1-2 месяцев (да еще и потерять что-то могут по пути). Поскольку мне не совсем удобно каждый день ходить на почту, да и уже не терпелось начать обучение, я решил не связываться на этот раз с Китаем и купить все у нас подороже, но быстро.

По сравнению цен. MicroUSB UNO R3 купил за 310 рублей, точно такой же на али 268 рублей + 230 рублей за доставку (не знаю почему, но на момент написания статьи у многих товаров на али с бесплатной или дешевой доставкой почему-то добавилась ощутимая стоимость доставки). Вообще, самые дешевые клоны Arduino Uno R3 продают на алиэкспрессе от 230 рублей за штуку (с доставкой). Data logger shield я купил за 155 рублей, на али самый дешевый такой 113 рублей. Инфракрасный пульт управления с приемником у нас 90 рублей, на али такой же 48 рублей. LCD keypad shield купил за 200 рублей, на али такой же 145 рублей. BMP180 у нас 90 рублей, на али 41 рубль. Это я привел наименьшие цены на момент написания обзора, можно найти то же самое и в 10 раз дороже. То есть, если заказывать самое дешевое в Китае, можно купить необходимое в 1.5-2 раза дешевле, чем в России.

Начинающим изучать Ардуино, кому надо срочно, могу посоветовать такой план действий: купить в России любую дешевую плату, совместимую с Uno R3 (280 рублей), breadboard (доска для беспаячного соединения 80 рублей — маленькая, 100 рублей — в два раза больше), несколько резисторов 10 КОм, 1 КОм, 220 Ом (10-20 рублей), несколько светодиодов разных цветов или один трехцветный светодиод (10-20 рублей), экран I2C по вкусу (от 190 рублей), кнопку (5 рублей), пару датчиков по вкусу (например, датчик температуры 90 рублей). Если денег не жалко, добавьте IR пульт с приемником для создания интерактивности (90 рублей), пищалку (20 рублей), модуль часов (60 рублей). Этого будет достаточно, чтобы понять принципы работы всего этого и решить, интересно вам это или нет. Если почувствуете, что это не ваше, сделаете из этого хлама хотя бы домашнюю метеостанцию за 500-700 рублей и на этом успокоитесь, а если понравится, закажете дополнительно компонентов из Китая, а, пока будете ждать, почитаете умных книжек, чтобы, когда придут все делати, знать уже, что с ними делать. Чего, на мой взгляд, не стоит покупать сразу для обучения, так это цифровую клавиатуру (требует много пинов для подключения и управление в программе более замудренное, чем через ИК-пульт), дисплеи SPI (занимают много пинов и сложнее в коде), всякие шилды (в начальном обучении от них толку не будет).

Описание самопальной метеостанции с логгером.

Описывать особо тут нечего. Цель была проста: потренироваться в сборке, проверить все купленные датчики и научиться снимать с них информацию одновременно, выводить на экран и записывать на SD карту в виде лога (с указанием времени). В принципе, ничего сложного здесь нет — читай мануал, соединяй провода как написано. За время сборки произошло только два примечательных момента, на которых хочется остановиться.

Первый: я спалил датчик газа MQ-9. Скорее всего, перепутал провода + и — по недосмотру, в результате вся плата вырубилась, но после отключения датчика снова заработала. Мне повезло, ничего кроме этого датчика не пострадало, видимо, на плате имеется защита от дурака. Сам же датчик стал вызывать короткое замыкание даже при правильном подключении.  Сопротивление между VCC и GND = 2 ом. Если кто знает, как вернуть его в строй — пишите  в комментах. Цена датчика, к слову, 120 рублей, не сильно обидно, но жаль, что вещица не успела послужить. Вывод: проверяйте все соединения по два раза, прежде чем подавать питание на прибор!

Второй: я подключил к 5 вольтам модуль BMP180, рассчитанный на 3.3 вольт. Причиной тому была не моя невнимательность, а наглая дезинформация на сайте, где была опубликована схема подключения. Модуль проработал на 5 вольтах несколько часов, пока я не пересмотрел его спецификации для написания этой статьи. Удивительно, но модуль не был поврежден. К счастью, перекинуть питание с 5 вольт на 3.3 вольта  — дело несложное. Датчик все еще в строю. Возможно, причиной путаницы является то, что есть несколько вариантов этого модуля. Модули с четырьмя выводами имеют питание только 3.3 вольта, модули с пятью выводами имеют питание 3.3 вольта либо 5 вольт. Вывод: хотя в интернете много полезной информации от любителей, внимательно читайте спецификации от производителя именно на ваш модуль (т.н. «даташит», datasheet), так как китайцы наплодили кучу вариаций, и многие из них не совместимы ни по питанию, ни по порядку выводов на плате.

Принцип работы метеостанции.

Примерно 1-2 раза в секунду Arduino UNO (в моем случае, китайский фейк с Micro-USB коннектором за 310 рублей!) выводит на LCD-экран 20×4 следующие данные: дату и время с DS1307 (встроен в Data Logger Shield XD204), давление P и температуру T с BMP180, влажность H и температуру T2 с AM2320, два значения температуры T3 с двух датчиков DS18B20, ну и в качестве бонуса уровень освещенности L в процентах (0= темно, 100= светло) с модуля датчика освещенности LM393. Для метеостанции последнее не сильно надо, но поскольку это учебный девайс, то и навесил все, что было. А вот датчик газа MQ-9, к сожалению, не дожил до момента испытаний… При каждом считывании моргает зеленый светодиод. Кроме вывода на экран, каждые 10 секунд данные записываются на SD карту через Data Logger Shield XD204 в формате CSV для удобного анализа в Excel. В момент записи светодиод моргает красным цветом (тоже не сильно нужно в повседневной жизни, но для учебы — то, что надо).

Короче, вот что в итоге вышло (видео на youtube):

Ну и, собственно, цель написания статьи — сравнение четырех термодатчиков, которые в момент теста были расположены рядом друг с другом. Для теста использовался температурный перепад с +22 до -1 градуса и обратно (выполнен в виде моментального вынесения сборки из дома на улицу с последующим моментальным возвратом обратно). Спиртовой термометр показывал в момент теста примерно -1.1 градуса на улице. Можно кликнуть на график для увеличения.

Желающие более детально изучить тенденции и расхождения датчиков, могут скачать полный CSV-лог. Данные идут в следующем порядке: Дата, Время, Давление, Влажность, Свет, T1=BMP180, T2=AM2320, T3/1=DS18B20, T3/2=DS18B20.

Изучив данные из лога и график, каждый сам сделает выводы о пригодности тех или иных датчиков в своих проектах. Коротко можно сказать, что BMP180 наиболее быстро реагирует на изменение температуры окружающей среды. До отметки 0 градусов датчик добрался примерно за 9 минут. Второе место по скорострельности получили датчики DS18B20 — они успели в среднем за 17 минут, причем из двух датчиков один добрался до нулевой отметки почти на полторы минуты позже второго, хоть они и находились менее чем в сантиметре друг от друга. Ну и завершил гонку AM2320 — эта черепаха доползла до нулевой отметки за 28 минут. Примечательно, также, что никто, кроме BMP180, так и не добрался до отметки -1 градус.

В тесте на нагрев все датчики показали примерно схожие результаты, но победителей можно рассортировать в той же последовательности, что и в предыдущем тесте. Нагрев происходил медленнее, но равномернее, чем охлаждение. Возможно, замороженная плата, на которой были расположены датчики, слегка задерживала их отогревание. Если не высчитывать секунды, то можно сказать, что для отогрева сенсорам понадобилось около 30 минут. До отметки 21 градус первым добрался BMP180 примерно за 14 минут, далее DS18B20 за 16 минут, и AM2320 за 20 минут.

В любом случае, результаты всех датчиков весьма впечатляют, если сравнивать их с «готовыми» метеостанциями, которые проходят тот же тест не меньше чем за 1-2 часа, что я показал в обзорах домашних метеостанций Oregon Scientific и Ea2 ранее.

Выводы.

Короче, по показателям быстроты определения изменения температуры BMP180 мне определенно нравится больше. Показания температуры наиболее приближены к показаниям спиртового термометра. В монтаже непривередлив — вешается на I2C (стандартные пины A5-A6), лишних пинов не занимает. По простоте использования в программе мне он тоже симпатичен. Цена доступная.

DS18B20 неплох как запасной вариант, но код для получения данных с него более нагроможденный, да и технически он вешается на 1-wire, что требует выделения дополнительного пина. Серьезный недостаток этого датчика в том, что снятие с него данных тормозит выполнение дальнейших команд. В частности, при точности 0.5 градусов задержка 93,75 мс, при точности 0.25 градусов задержка 187,5 мс, при точности 0.125 градусов задержка 375 мс. Также не ясно, зачем нужно выставлять высокую точность, если она все равно в реальности не реализуется. В моем тесте два датчика снимали данные с максимальной точностью (12 разрядов), и все равно в логе можно видеть расхождения 0.2 градуса и может больше (лень выискивать). То есть можете смело ставить точность не более 11 разрядов (0.125 градуса) и не забивать себе мозги обещанными 0.0625 градусами на 12-разрядной точности. Был у меня и еще один глюк: изначально при последовательном обращении к двум датчикам в том виде, как это сделано в примере, идущим в комплекте с библиотекой, второй датчик иногда отваливался и показывал 127 или -127 градусов, загаживая мне лог. Вылечил я это методом проб и ошибок — поставил между запросами к датчикам дополнительную задержку в несколько сотен миллисекунд, и в этом тесте второй датчик уже ни разу не отваливался. Ну и притянутый за уши недостаток DS18B20 может быть в том, что кроме температуры он ничего определять не умеет, в отличие от двух других датчиков, участвующих в обзоре, так что датчики влажности и давления придется докупать отдельно (если, конечно, они будут нужны в вашем проекте). При всех недостатках, мизерная цена и относительная точность и быстрота являются определенно теми достоинствами, которые заставят вас обратить внимание на этот датчик температуры.

Что касается AM2320, я бы не стал использовать его в качестве основного датчика температуры там, где нужно отслеживать быстрые колебания температур. Не знаю, то ли датчик тормознутый, то ли пластиковый корпус мешает активному обдуванию воздухом, но работает он определенно неспешно. Но как резервный датчик температуры, идущий в виде бонуса к датчику влажности, данный девайс можно использовать в случаях, когда резких скачков температуры не предвидится. Тем не менее, это самый дорогой датчик в этом обзоре — цена в 2 раза выше, чем у остальных, так что я ожидал от него более впечатляющих результатов, но после этого теста весьма разочаровался. Вопросами выяснения точности гигрометра я не занимался.

Ну вот, свое дилетансткое мнение я высказал, основываясь исключительно на практических изысканиях. Если есть что добавить или исправить — пишите в комментах.

Коментарий сюда