Когда сдох старенький Oregon (Сначала перестал посылать сигналы сенсор, а затем разбилось стекло у самой станции), решил создать погодную станцию сам.
Требования к домашней погодной станции
Основные функции
- Измерение температуры, давления, влажности (подключение нескольких сенсоров)
- Беспроводная передача данных
- Отображения времени и текущих метеоданных на большом экране. Отображение тенденции по метиоданным
- Синхронизация времени с сервисом NTP по интернет
- Сохранение данных с метеосенсоров на сервере в интернет. Отображение данных на компьютере и мобильном устройстве. Отображение трендов по метеоданным.
- Отображение прогноза погоды с публичного сервиса на дисплее
Дополнительные функции
- Мониторинг и сохранение данных с дополнительных сенсоров (температура, напряжение, освещенность …)
- Переделка и изготовление настольных часов для отображение точного времени и погоды
- Диагностика и проверка корректности данных
Структура домашней погодной станции
Выбор компонентов
В качестве платформы для всех компонентов выбраны платы Arduino.
- Метеосенсор — Arduino Pro Mini
- Метеосервер — Arduino Uno, iBoard
- Дисплей — Arduino Uno, Arduino Pro Mini
Дисплей 3-х цветный матричный 16×32 точки
Радиомодули RF433МГц, NRF23L01
Сенсоры: DHT22, BMP085
Версия №1. RF433МГц сервер Arduino Uno + Zyxel Keenetic
Метеосенсор с передатчиком на 433МГц
Компоненты:
- Arduino Pro Mini 3.3 — $4
- Датчик температуры и влажности DHT22 — $4
- Датчик давления (а также температуры и высоты) BMP085 -$5.6
- Датчик освещенности BH1750 (довольно бесполезный из за фонаря под окнами) — $2.2
- Делитель между +, землей и аналоговым входом для измерения напряжения батареи
- Передатчик RF 433МГц (продается в комплекте с приемником) — $1.22/2
- Коробочка водонепроницаемая купленной в ближайшем радиомагазине — 300 руб
Сервер с приемо-/передатчиком 433МГц, подключенный к Zyxel Keenetic через USB
Компоненты:
- Arduino Uno с USB кабелем — 9$
- Приемник и передатчик RF 433МГц — $1.22
- Блок питания — 5В зарядник от старого телефона
- Коробочка бытовая в качестве корпуса
Скетч шлюза на Arduino RF433 <-> USB Zixel Keneetic
Скрипт на SH для чтения и дешифрации данных с метеодатчика и отправки их на народный мониторинг
Скрипт на SH для посылки на Arduino точного времени, синхронизированного по NTP
Табло со светодиодным дисплеем, приемником 433МГц и модулем DS1307
Компоненты:
- Дисплей матричный светодиодный трехцветный 16×32 ~ $35 с доставкой
- Arduino Uno с USB кабелем — 9$
- Приемник RF 433МГц — $1.22/2
- Модуль с часами реального времени DS1307 — $1.1
- Блок питания 5В 5А ~ $8
Скетч с самописной библиотекой для матричного дисплея
Часы отображающие точное время и погоду с дисплеем 1602
Слеплены за вечер для контроля работы погодной станции и тестирования переходника I2C для дисплея 1602
Компоненты:
- Arduino Pro Mini — $2.6
- Приемник RF 433МГц — $1.22/2
- Дисплей 1602 с голубой подсветкой — $2.25
- Плата интерфейса I2C/TWI/SPI для дисплея 1602 — $1.74
- Коробочка — $2.5
Скетч отображения времени/погоды на дисплей 1602
Библиотека LiquidCrystal_I2C для данной платы
Станция в таком виде прожила дома около года. За это время накопились проблемы:
- Дешевые 433МГц приемо-передатчики имеют низкую помехозащищенность, сильно зависят от положения антенн, открытых/закрытых дверей и т.д. что сказывается на общем качестве системы. При добавлении новых устройств 433МГц проблем добавлялось.
- Уличный датчик на аккумуляторах на Arduino Pro Mini 3.3 с демонтированным светодиодом питания в летнее время работает 2-3 месяца (с использованием режима сна). Нынешней зимой при температуре ниже -30С батареи просто садились до нуля. Следующую версию метеосенсора запитал от сети, благо недалеко было тянуть.
- Часы на DS1307 китайского производства убегали безбожно и применение их без подстройки от интернета или GPS весьма сомнительно. Применение с синхронизацией тоже сомнительно, так как на внутренних часах Arduino все неплохо.
- Сервер Arduino Uno, подключенный к Zyxel Keenetic по USB работал неплохо, но программы, написанные на SH периодически подвисали, думаю, в связи с нехваткой памяти. Поддержка кода одновременно со стороны роутера и микроконтроллера напрягала. Решил отказаться в пользу Ethernet на Arduino.
- Внешний вид информации, отображаемый на табло приелся и был не очень эргономичен. Например, показатель влажности в зимнее время очень условно и весьма неинформативно.
В общем подошло время модернизации системы с учетом предыдущего опыта
Версия №2. RF2.4ГГц, сервер iBoard
Метеосенсор с передатчиком на 2.4 ГГц
Описание датчика погодной станции
Сервер iBoard + NRF24L01 и питанием POE
Подробное описание сервера погодной станции
Табло со светодиодным матричным дисплеем и модулем NRF24L01
Подробное описание табло для погодной станции
«Теперь мы всегда знаем, какая у нас погода!»
Замечательная идея и исполнение.
Сразу себе такую захотелось сделать.
Начал собирать вариант 2. Хочу поделиться первыми впечатлениями. Сразу в лоб не заработало ничего. Для начинающих (типа я) ардуинщиков многого не хватало. К скетчам я бы добавил архив со всеми необходимыми библиотеками.
Сборку начал с датчика. При попытке прошить модифицированный загрузчик система долго ругалась. Там неверно указаны фьюзы в Extended Fuse Byte (д.б. 0xFF). Потом у меня сдох СР2102 и я остался без диагностики. К слову все попытки чем то заменить цэпэшку (использовать встроенный ком, подключать разного рода переходники) успеха не имели -на экран лезли всякие кракозябры. Спас меня старенький переходнк от сотового на РL2302 (работает только в WINXP). Только с ним и работало. Следующей жертвой стал дисплей датчика. Тоже почему-то приказал долго жить. Пришлось поменять его на LCD1602 с i2c. На мой взгляд получилось даже лучше. Выводит сразу 4 параметра и пишет все шаги запуска (мини диагностика не в ком порт, а на экран). Оно так нагляднее.
В связи с кончиной цепэшки напрашивается пожелание для начинающих — все-таки использовать не мини про, а нано — у него USB встроен, а цена не сильно выше.
В сервере сходу неправильно работал NTP клиент — при первом проходе было все ок, при последующих обновлениях выдавал почему то предыдущий результат. Т.е. время было на 5 минут сзади. Вылечилось вставкой кода из какого-то примера использования NTP клиента. Парсер с rp5 я закомментил, пока не разбирался с ним.
(он вроде платным стал).
Часы (которые на WS2812) я собрал на простом 4х разрядном семисегментнике под управлением TM1637 (был куплен по незнанию на замену дорогому адафруктовому с i2c и валялся без дела, так как нифига не i2c)
В планах собрать табло (лежит уже экранчик 16х32 ждет своего часа), доработать датчик (использовать пару dht22 улица/дом). К часам примастырить будильник. Разобраться с парсером.
Если кому интересно могу выложить архивы с библиотеками и своими скетчами. А также поделиться фотками (и возможно видео) работы моей системы (пока правда на макете)
Алексею отдельное огромное спасибо!!!! за подробное описание всех шагов сборки.
Очень правильный и вдумчивый подход, не повторять, а улучшать!
Вот так начинающие ардуинщики и превращаются в гуру 😉
Конечно выкладываете и публикуйте или присылайте фотки схемы, я добавление опубликую. Будут потом добрым словом вспоминать
Делюсь, как и обещал, промежуточными итогами своего творчества. Тут https://yadi.sk/d/30mupsJui3W7j первый вариант мода. Включает в себя:
датчик — один dht22 (подключен к пину 2); bmp085; дисплей lcd 16×2 i2c; NRF24L01; контроллер mini pro 5v 16m со стандартным загрузчиком. Данные передаются на сервер по запросу сервера 2 раза в минуту. Датчики опрашиваются раз в минуту.
сервер без парсера погоды и без отправки статистики (только ntp).
часы — дисплей на тм1637 (такой http://ru.aliexpress.com/item/1pcs-4-Bits-TM1637-Red-Digital-Tube-LED-Display-Module-Clock-for-Arduino-LED/2054860365.html). Показывают последовательно время, температуру, влажность и давление. Данные берутся с датчика через сервер. Время автоматом синхронизируется с сервером раз в 30 секунд.
Второй вариант (https://yadi.sk/d/7Tct6vfdi3VyL) — доработка первого. Переработана структура пакетов обмена. Добавлен второй dht22 (улица). Часы стали только часами — отображают время, день недели, число, месяц, год.
Следующий этап — будильник в часы и табло.
Здравствуйте,
Прощу Вашей помощи, сам только начинаю знакомится с Arduino и в программировании мягко говоря «чайник», но заинтересовал Ваш проект.
Могли бы Вы выложить скетч вот для этого «Метеосенсор с передатчиком на 433МГц»?
Спасибо.