Хабрахабр

[Из песочницы] Метеостанция на Arduino от А до Я. Часть 1

Arduino, ESP8266, nRF24L01, DHT22"/> <img src="http://orion-int.ru/wp-content/uploads/2018/10/iz-pesochnicy-meteostanciya-na-arduino-ot-a-do-ya-chast-1.jpg" alt="Метеостанция.

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

Да, ещё одна и, что-то мне подсказывает, не последняя в интернете вещей. Что, ещё одна погодная станция на 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℃.

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

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

На улице, как известно, температура может достигать отрицательных значений, поэтому датчик 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 Гц — одного раза в секунду.

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

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

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

Arduino Pro Mini

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

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

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

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

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

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

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

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

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

  • на напряжение питания 5В и частоту 15МГц
  • на напряжение питания 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 можно примерно за $4. У меня уже была Arduino Pro Mini на 5В, только поэтому я её и использовал.

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

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

Общая схема."/> <img src="https://habrastorage.org/webt/8m/pi/kt/8mpiktjd1soq4bp-mnvv58a6efk.png" alt="Метеостанция.

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

Теги
Показать больше

Похожие статьи

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

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

Кнопка «Наверх»
Закрыть