Метеостанция на Arduino от А до Я. Часть 1 +12



Оглавление:



Метеостанция. Arduino, ESP8266, nRF24L01, DHT22


«Так, давайте сразу договоримся: вы не собираетесь снимать кино для Голливуда. Даже в Стране чудес утверждается не более пяти процентов от всех сценариев, и только один процент идет затем в производство… Таким образом, вместо всего этого вы собираетесь создать свой собственный Голливуд.»
Эд Гаскель «Снимаем цифровое кино, или Голливуд на дому»


Предисловие


Что, ещё одна погодная станция на Arduino?! Да, ещё одна и, что-то мне подсказывает, не последняя в интернете вещей.


Точно также, как каждый программист обязан написать программу «Hello World!», так и каждый ардуинщик обязан иметь за плечами опыт построения простой или не очень метеостанции.
Уже созданных проектов метеостанций в интернете описано немалое количество, читатель может выбрать любой из них для реализации. Не скрою, я внимательно изучил около десятка подобных проектов и ещё кучу смежных. Поэтому нельзя сказать, что я создал всё с нуля, конечно же я «стоял на плечах гигантов».


Сразу скажу, что в мои планы не входило использование сторонних сервисов для хранения и отображения данных. Хотелось лично пощупать и понять как всё это работает изнутри от начала до конца, от А до Я.


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


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


Этот проект был реализован в далеком уже 2016 году, но надеюсь еще актуален.


Набор технологий


Мы изучим и будем работать с простыми и сложными вещами :


  • датчиками температуры и влажности типа DHT22, DHT11
  • датчиком барометрического давления типа BMP180
  • WiFi модулем ESP8266
  • радиомодулем типа nRF24 2,4 Ггц
  • семейством Arduino Pro Mini, Arduino Mega
  • солнечной батареей и аккумуляторами
  • языком программирования C/C++
  • языком программирования PHP
  • системой управления базами данных MySQL
  • языком программирования Java и фреймворком Android (создание приложения для Adnroid для отображения погодных данных на смартфоне).

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


Но начнем мы с самого начала правильно. А именно с описания и проектирования будущего устройства «на бумаге», чтобы в конце концов каждый кирпичик лёг на своё место.


Прототипирование


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


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


Каждый, кто клепает по вечерам свои поделки pet-project для «internet of things», должен отдавать себе отчёт в том, что он создаёт именно прототип, полуфабрикат. До уровня нормального промышленного изделия ему очень далеко. Поэтому не следует поручать нашим любительским поделкам какие-либо ответственные участки жизнеобеспечения и надеяться, что они нас не подведут.


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


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


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


Требования


Обычно этот этап пропускают. Решая сделать что-нибудь эдакое прямо сейчас, а потом выясняются мелкие детали, которые ставят весь проект в тупик или вовсе делают его неподъемным. Все наши хотелки необходимо записывать, я использую для этого гугл диск, он доступен с ПК и с мобильного устройства.


Итак, наша метеостанция должна:


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

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


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


Железо. Выбор компонентов


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


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


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


Выход есть. Можно просто взять и повторить чей-то проект. Я же изучил уже существующие проекты метеостанций и надеюсь сделал шаг вперед.


Итак. Архитектура погодной станции базируется на Arduino. Потому что Arduino имеет небольшой порог вхождения и я уже имел с этим дело. Дальше выбирать уже проще.


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


Центральный, основной блок будет расположен внутри помещения. Это важно определить на начальном этапе, от этого «пляшут» такие важные характеристики как температурный режим работы и питание.


Удаленный датчик (или датчики) будет без «мозгов», его задача — периодически проводить измерения и передавать данные на центральный домашний блок. Центральный блок принимает данные от всех датчиков, показывает их на экране и отправляет их же в интернет в базу данных. Ну, а там уже много проще, как только данные оказываются в базе с ними можно делать всё что захочешь, даже графики рисовать.


Для сношений с внешним миром интернет был однозначно выбран WiFi модуль ESP8266 практически без альтернативы (прим. возможно сейчас такие альтернативы появились). К Arduino выпускаются Ethernet платы расширения, но совсем не хотелось привязываться к кабелю.


ESP8266


Интересный вопрос состоял в том, чем обеспечивать связь между заоконным датчиком (или датчиками, про требование расширяемости системы помним?) и центром. Радиомаячки на 433 Мгц однозначно не подходят (они не подходят ни для чего вообще).


Воспользоваться опять ESP8266 ?


Минусы такого решения:


  • необходим устойчивый WiFi за пределами дома


  • дальность связи не будет большой


  • пострадает надежность, при пропадании интернета мы не увидим свои удаленные датчики


  • большее энергопотребление.


  • Энергопотребление ESP8266 :


  • при передаче 120—170 mA


  • при приеме 50—56 mA


  • в режиме Deep Sleep 10 µA (мкА)


  • в выключенном состоянии 5 µA (мкА).



В конце концов для связи удаленных датчиков с основным домашним блоком был выбран чип nRF24L01+ с 2,4 Ггц передатчиком и приемником в одном флаконе, с дополнительной внешней антенной, чтоб уж наверняка «пробить» стены.


nRF24L01+


Энергопотребление nRF24L01+ 2,4 GHz :


  • при приеме 11 mA
  • при передаче на скорости 2Mbps — 13 mA
  • в режиме standby-I — 26 ?A (мкА)
  • в выключенном состоянии 900 nA (нА).

Что у ESP8266, что у nRF24L01+ диапазон рабочих температур подходящий: от -40? до +80?.


Купить nRF24L01+ можно примерно за $1, или сразу с внешней антенной за $3. Купить ESP8266-01 можно примерно за $4. Читайте внимательно описание товара! Иначе купите одну антенну.


Ядро системы вырисовалось. Переходим к самим датчикам.


На улице, как известно, температура может достигать отрицательных значений, поэтому датчик DHT11 не подходит, а вот DHT22 в самый раз.


DHT22


Характеристики DHT22 / AM2302 :


  • питание от 3,3 В до 5 В, рекомендуется 5 В
  • потребление 2.5mA максимум, в момент измерения и передачи данных
  • диапазон измерения влажности 0-100% с погрешностью 2-5%
  • диапазон измерения температуры от -40 до +125°C с погрешностью ±0.5°C
  • запрос на измерение не чаще 0,5 Гц — одного раза в 2 секунды.

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


Характеристики DHT11:


  • питание от 3,3 В до 5 В
  • потребление 2,5 mA максимум, в момент измерения и передачи данных
  • диапазон измерения влажности 20-80% с погрешностью 5%
  • диапазон измерения температуры от 0 до +50°C с погрешностью ±2°C
  • запрос на измерение не чаще 1 Гц — одного раза в секунду.

Купить DHT22 можно примерно за $3. DHT11 стоит дешевле — $1, но он и менее точен.


Теперь возвращаемся опять к Arduino. Какую плату выбрать?


Я тестировал отдельные части системы на Arduino UNO. Т.е. подключал к уно ESP модуль и изучал его, отключал, затем подключал nRF24 и т.д. Для финальной реализации заоконного датчика выбрал Arduino Pro Mini как наиболее близкую к Uno из миниатюрных.


Arduino Pro Mini


По энергопотреблению Arduino Pro Mini также выглядит неплохо:


  • нет преобразователя USB-TTL, который сам по себе «кушает» много,
  • светодиод подключен через 10к резистор.

Для продвинутого сбережения энергии планировалось:


  • удалить светодиод — индикатор питания на Arduino Pro Mini (я пожалел, не стал портить плату)
  • либо использовать «голую» сборку на микропроцессоре Atmel ATmega328 (не использовал)
  • использовать библиотеку Low Power Library или JeeLib.

Из библиотек выбрал Low Power Library, она проста и содержит только то, что нужно.


Для центрального блока, поскольку к нему планировалось подключить многочисленную периферию, была выбрана плата Arduino Mega. К тому же она полностью совместима с UNO и имеет больше памяти. Забегая наперед скажу, что этот выбор полностью оправдался.


Купить Arduino Mega можно примерно за $8.


Питание и энергопотребление


Теперь про питание и энергопотребление.


Arduino Pro Mini бывают двух видов:


  • на напряжение питания 5В и частоту 16МГц
  • на напряжение питания 3,3В и частоту 8МГц.

Поскольку радио-модуль nRF24L01+ требует для питания 3,3 В, а быстродействие здесь не важно, то покупайте Arduino Pro Mini на 8MHz и 3,3В.


При этом диапазон питающего напряжения Arduino Pro Mini составляет:


  • 3,35-12 В для модели 3,3 В
  • 5-12 В для модели 5 В.

У меня уже была Arduino Pro Mini на 5В, только поэтому я её и использовал. Купить Arduino Pro Mini можно примерно за $4.


Питание центрального блока будет от сети 220 В через небольшой блок питания, дающий на выходе 12В, 450mA, 5W. Типа такого за $5. Там еще есть отдельный вывод на 5В.


Power Supply Module AC/DC


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


Поэтому Arduino Pro Mini и радиомодуль nRF24 будут запитываться от связки 4-х Ni-Mh аккумуляторов.


И помните, максимальная емкость современного аккумулятора примерно 2500—2700mAh, всё что больше это либо маркетинговые уловки (Ansmann 2850) либо обман (UltraFire 3500).


Li-Ion аккумуляторы я не использую по нескольким причинам:


  • очень дорогие
  • при снижении температуры окружающего воздуха ниже 0°C происходит снижение мощности литий-ионного аккумулятора до 40-50%
  • те которые дешёвые производятся без защиты и небезопасны (при КЗ или разряде могут взрываться и гореть, см. кучу роликов на ютюбе)
  • стареют, даже если не используются (впрочем это можно сказать обо всех химических элементах), через 2 года Li-Ion батарея теряет около 20% ёмкости.

Для прототипа вполне можно обойтись качественными Ni-MH AA или AAA аккумуляторами. Тем более, что нам не нужны большие токи. Единственный минус Ni-MH аккумуляторов — это их долгая зарядка.


Общая схема метеостанции


Подведем итоги. Вот общая схема как всё работает.


Метеостанция. Общая схема.


Продолжение следует.

Вы можете помочь и перевести немного средств на развитие сайта



Комментарии (28):

  1. lilek
    /#19213677

    Как-нибудь решали проблему того, что датчики DHT-** со временем довольно быстро покрываются пылью и начинают передавать неверные показания?

    • sav13
      /#19217497

      Поставил BME280. Правда пока месяцем 7 еще только работает. Зато за окном и на двух батарейках

    • tim4dev
      /#19219547

      Не решал, т.к. изделие проработало небольшой период. Наверное их надо обслуживать, как и любую другую технику.

  2. mosidze
    /#19213693 / +1

    единственный вопрос- зачем брать ардуино, когда уже есть ESP? например, ESP8266 ESP-202 — моя погодная станция сделанна на ней, за исключением того что пересылает данные на blynk-server.

    • siryoshka
      /#19213819

      Видимо у автора собственная среда разработки, ну и модулей закуплено, некуда девать. В принципе так удобнее всё под рукой
      Upd; так ESP8266 и стоит в центральном блоке

      • mosidze
        /#19213829

        так esp полностью совместима с теми модулями, которые описанны. И с ардуиновскими библиотеками. wemos вообще даже по форм-фактору совпадает…

      • safari2012
        /#19216899

        на одной картинке про мини+nrf24, на другой мега + esp-шка.

      • alfaterra
        /#19219651

        Я тоже собрал аналогичный девайс: ESP8266 + BME280 + датчики от метеостанции Oregon + blynk.
        Т.к. рядом находится клетка с хомяком прикрутил туда еще счетчик вращения колеса (геркон+магнит на колесе). После того как добавил геркон столкнулся с постоянными обрывами соединения ESP8266 и роутера. Частично решить проблему удалось разбиением пакета данных на несколько посылок. Но все равно работает не очень стабильно. Возможно не хватает производительности у ESP8266 мои кривые руки конечно тоже не исключаются.

    • sav13
      /#19217459

      ESP с батарейками не очень. Даже если наладить режим сна — восстановление соединения с WiFi и отправка жрет массу энергии по сравнению с тем же AVR + NRF24

  3. VladSMR
    /#19214155

    >Arduino Pro Mini бывают двух видов:
    >
    > на напряжение питания 5В и частоту 15МГц
    > на напряжение питания 3,3В и частоту 8МГц.

    На напряжение питания 5В и частоту 16МГц

  4. Xalium
    /#19215249

    сколько всего частей будет?

    • tim4dev
      /#19219577

      5.
      Пока не дают запостить, «слишком часто».

  5. mazy
    /#19215913

    DHT сильно плавает в зависимости от напряжения на нем.

  6. safari2012
    /#19216907

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

  7. prs123
    /#19217175

    Есть т.н. ардуино wifi. По сути, esp распаянная под ардуину.
    А вот зачем на улице целую ардуино нано. Мне кажется, проще взять ту же attiny 85, подключить датчик и

    • geher
      /#19217297

      А вот зачем на улице целую ардуино нано. Мне кажется, проще взять ту же attiny 85, подключить датчик и

      Это да. резонный довод.
      Когда я делал свой первый вариант метеостанции на ардуине, то остановился именно на таком варианте — attiny+NRF24. Только с DHT-22 как-то не срослось, работал через раз. В результате использовал другой — SHT30.
      Правда дальше экспериментов дело не зашло.
      Для начала в горсти NRF24, которыми я разжился (два или три варианта), было большое количество плохих модулей, от откровенно нерабочих до просто глючащих. Пока перебрал все и не выбрал два стабильно работающих, намучился.
      А потом попался в руки внешний датчик от метеостанции Oregon Scientific и описание, как его использовать при помощи простого радиоприемника на 433 МГц, что прекратило все эксперименты с самопальным внешним датчиком.

  8. Process0169
    /#19219613

    Не холивара ради, но блин, раз уж вы используете макетку, нельзя ее сделать шилдом со штырьками? Чтобы сверху надевалась на мегу. Неужели приятнее возиться с проводками вместо того чтобы изготовить плату ЛУТом? Тем более что схема соединений у вас уже есть. Проводки же вы не перетыкаете в процессе отладки. Тем более что если это всё заработает — вам все равно придется рисовать плату по схеме. Для чего эта двойная работа?

    • tim4dev
      /#19219627

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

      • Process0169
        /#19220067

        Не верю :) Если у DHT22 подключаются 3 ножки,
        то + вы никуда в другое место не подключите кроме как к плюсу питания. Равно как и gnd.
        То же самое и с остальными комплектующими и их выводами. Аналог — к аналоговой ноге,
        цифру к цифровой. Перетыкать там особо нечего.
        Есть замечательная софтина diptrace. Нарисуйте там пятачки с шагом 2.54 для ардуины, 4 пятачка для подключения dht22, и.т.д. Расположите их по бокам, добавьте питание, обвязку, нужные элементы и проставьте связи.
        Нажатием одной единственной кнопки оно вам нарисует плату и она будет рабочей. Хоть сейчас на завод. В первом приближении конечно, если брать в расчет рекомендации.
        Просто то, как вы это делаете сейчас — это не прототип. Это или лабораторная работа на 40 минут или сознательное убийство проекта. Никто не строит небоскреб из досок чтобы посмотреть и сказать «вот как-то так он будет выглядеть», сломать и начать строить из железобетона. Сначала проектирование. Потом разработка. Очень много хороших идей погибает из-за того, что нет ничего кроме собранного макета, повторить который можно только собрав такой же. Простите за много букв, но я никогда не пойму для чего делать то, что неминуемо будет отправлено в мусор.

        • tim4dev
          /#19220337

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

  9. CodeNameHawk
    /#19219615

    Купить ESP8266-01 можно примерно за $4.

    Дешевле взять ESP8266-12F около 2$ или чуть дороже плату NodeMCU v3.
    И тогда центральная мега не нужна.
    И дисплей цветной прикрутить на ILI9341.

  10. ZhenyaRUS39
    /#19219617

    При этом диапазон питающего напряжения Arduino Pro Mini составляет:

    •3,35-12 В для модели 3,3 В
    •5-12 В для модели 5 В.

    может кто подтвердить, это действительно так?
    т.е. 3,3V модель можно питать напрямую от обычного аккума (3,7-4,2V) и даже 12V и плата не сгорит?

    • tim4dev
      /#19219645

      Бралось из спецификации.

      • VladSMR
        /#19219805

        Одно «но» — весь излишек между поступающим и рабочим напряжениями (12-3,3 и 12-5,0 В), помноженный на потребляемый ток, будет превращён в тепло, потому как стабилизатор питания в Pro Mini установлен линейный (MIC5205), что для устройств с батарейным питанием невесело.
        Вдобавок нюанс — если Вы запитаете от стабилизированного напряжения (Vcc) что-то дополнительное, или задействуете много выводов Arduino в качестве источников тока, то есть шанс этот стабилизатор перегрузить, его максимальный ток 150мА. Перегореть не должен, имеется соответствующая защита, но напряжение питания всей схемы будет сильно отличаться от желаемого.

  11. TheKetchup
    /#19219649

    Делал похожий велосипед, поделюсь:
    Использовал ESP8266, так как не вижу смысл городить что-то другое, бюджет по питанию однозначно перекрывается с лихвой солнечной батареей формата А4. Данные передаю раз в минуту
    1. использование ESP8266 или аналогов избавляет от необходимости установки какого-то железа на центральном узле — я плюю данные из ESP по UDP на сервер где требуемый порт слушается скриптиком который данные уже обрабатывает. Все данные заведомо умещаются в 1 UDP пакет по-этому ESP выводится из сна на ооочень маленький интервал (буквально сколько требуется чтобы подключиться к WiFi), IP прописан статикой, хочу добавить static ARP для IP сервера/шлюза, чтобы и ARP обмена не было.
    2. Преобразователи напряжения даже на холостом ходу кушают не слабый ток порядка !!5-10мА!!! Исходя из этого я поставил два полевика навстречу друг другу с очень маленьким падением напряжения и закрываю их, когда напряжение на солнечной батареей падает ниже определенного значения дабы исключить питание контроллера солнечной батареи обратным током.
    3. Удобно использовать LiFePo4 батареи, они не так боятся минусов, в формфакторе 18650 у них уже есть все защиты и самый большой плюс — их рабочие напряжения (зарядка и отрубание по разряду) вписываются в рабочий диапазон ESP8266. Таким образом цепь питания и заряда просто сливаются воедино.
    4. Как мне кажется, DHT22 и иже с ними, давно надо менять на что-то типа BME280 со стандартным i2c(TWI) а не каким-то велосипедным протоколом как у DHT…

    Мой велосипед откатал уже больше года — полёт нормальный, сам блок с ESP просто лежит на подоконнике на балконе даже без корпуса, на улице только датчики на проводе…

  12. seri0shka
    /#19219943

    Промышленное изделие строится на промышленной элементной базе и далее проходит еще много стадий, включающих отладку, испытания и сопровождение...
    Здесь пропущено слово "должны" (строиться). Опыт показывает, даже в достаточно серьёзных промышленных устройствах, не говоря уже о бытовых, встречаются совсем детские болезни и откровенные нарушения технологий и параметров.
    Единственный минус Ni-MH аккумуляторов — это их долгая зарядка.
    Ni-MH аккумуляторы также поддерживают зарядку током 1с, и это точно так же снижает их ресурс, как и для Li-Ion аккумуляторов. Но зарядка должна быть «интеллектуальной». И это тема отдельной статьи.
    Зануда
    Слова «ньюанс» не существует. Про 15МГц уже написали.