Часы-метеостанция на Arduino своими руками
ОБНОВЛЕНИЯ
• 28.01.19 meteoClock_v1.3: исправлено предсказание погоды (работало “наоборот”)
• 19.04.19 meteoClock_v1.5: добавлено управление яркостью подсветки и светодиода по датчику света. Смотрите последнюю схему!
Рекомендую ознакомиться с модифицированной прошивкой от Norovl, в ней полностью переработан интерфейс, русифицированы дни недели и добавлено меню на русском языке. Почитать и скачать можно на GitHub автора.
ОПИСАНИЕ
Решил таки сделать свою версию метеостанции-часов-календаря на Arduino с кучей датчиков и различными крутыми штуками! Проект уместился в корпусе G909G из магазина Чип и Дип, питается от micro-USB и выглядит весьма неколхозно! =)
- Большой дешёвый LCD дисплей
- Вывод на дисплей:
- Большие часы
- Дата
- Температура воздуха
- Влажность воздуха
- Атмосферное давление (в мм.рт.ст.)
- Углекислый газ (в ppm)
- Прогноз осадков на основе изменения давления
- Построение графиков показаний с датчиков за час и сутки
- Индикация уровня CO2 трёхцветным светодиодом (общий анод/общий катод, настраивается в прошивке)
- Переключение режимов сенсорной кнопкой
Версия 1.5
– Добавлено управление яркостью
– Яркость дисплея и светодиода СО2 меняется на максимальную и минимальную в зависимости от сигнала с фоторезистора
Подключите датчик (фоторезистор) по схеме. Теперь на экране отладки справа на второй строчке появится величина сигнала
с фоторезистора. Пределы яркости устанавливаются в настройках прошивки.
Источник
Делаем прототип домашней метеостанции за 10 долларов
Текст может содержать и наверняка содержит грамматические, орфографические, пунктуационные и другие виды ошибок, включая смысловые. Я всячески прошу читателей указывать на эти ошибки и поправлять меня посредством личных сообщений.
Базовый набор комплектующих
Основой нашего будущего устройства является отладочная плата NodeMCU на базе модуля ESP8266. Я взял ее на Gearbest, но при желании вы можете поискать оную и на других площадках.
ESP8266 — это микроконтроллер китайского производителя Espressif с интерфейсом Wi-Fi. Модули на базе этого микроконтроллера в последнее время попросту взорвали DIY сообщество, в первую очередь из-за низкой цены (от 2-х долларов) и легкой доступности. Используемая нами NodeMCU содержит на борту необходимый для прошивки USB-UART преобразователь и стабилизатор питания, который понижает 5 Вольт от USB-порта до необходимых модулю 3.3 Вольт.
DHT22 — цифровой датчик температуры и влажности. Является вторым необходимым компонентом для создания базового прототипа. Способен измерять температуру в пределах от -40 до 80 градусов по Цельсию с погрешностью в 0.5° и влажность с точностью 2%.
Для соединения модулей можно использовать шлейф с BLS-разъемами ($0.9) или беспаечную макетную плату с набором соединительных проводов ($3.74).
Подключение и настройка
Несмотря на доступные 4 вывода, подключается наш датчик всего по 3 проводам: питание +5В (1 вывод), земля (4) и линия передачи данных (2). Питание для датчика берем либо с пина VUSB, либо с 3V, если первого на вашей плате не оказалось. Линию данных подключаем к порту GPIO14 (пин D5).
Напомню, что навыков программирования в нашем случае не нужно абсолютно никаких. Прошивку для модуля будем генерировать с помощью сайта WiFi-IoT.ru, автором которого является Максим Малкин, также известный по проекту домашней автоматизации homes-smart.ru. Для начала попросту регистрируемся на WIFi-IoT и подтверждаем почту.
Перед сборкой прошивки необходимо подготовить приобретенный модуль к работе и очистить его от возможного предустановленного китайского ПО. Для этого нам понадобится рабочий USB-microUSB кабель и компьютер или виртуальная машина с Windows. После регистрации на сайте вы попадете на англоязычную страницу «Getting started» с пояснениями по подготовке модуля к работе. Скачивайте файлы с ПО из первых двух пунктов инструкции.
Снимок экрана 2016-07-26 в 21.35.58
Теоретически, после подключения модуля к компьютеру, Windows должна сама отыскать драйвера и установить их. На случай, если этого не произойдет, попробуйте идентифицировать на плате микросхему (отличается большим количеством «ножек») возле microUSB порта. Вероятнее всего это будут CP2102 или CH340 (драйвера к ним доступны по ссылкам).
После установки драйверов повторно подключаем нашу плату к компьютеру и запускаем программу NodeMCU Flasher, которую скачали ранее. В выпадающим списке выбираем присвоенный нашему устройству COM-порт. Скорее всего он будет один, в противном случае его номер можно уточнить в диспетчере устройств Windows. Во вкладке Config указываем расположение загруженного ранее blank-файла с расширением .bin.
Для NodeMCU параметры во вкладке Advanced необходимо выставить в соответствии с нижеприведенным скриншотом, после чего возвращаемся на стартовую страницу и нажимам кнопку Flash. О завершении процесса прошивки программа просигнализирует зеленой галочкой в левом нижнем углу.
После данных манипуляций модуль готов к загрузке прошивки, которую нам еще предстоит скомпоновать. Идем в конструктор и отмечаем необходимые нам пункты:
- «DHT22» — это наш датчик температуры и влажности;
- «Время и NTP» — для отображения времени в веб-интерфейсе;
- «Настройки по умолчанию». Нажимаем шестеренку возле этого пункта и вводим логин и пароль от точки доступа, к которой будет подключен модуль. Остальные пункты пока не трогаем.
Нажимаем клавишу «Скомпилировать» внизу страницы и на выходе получаем готовое к установке ПО. Скачиваем одним файлом.
Далее повторяется процесс с прошивкой blank-файла, только вместо него выбираем уже загруженную на компьютер прошивку. После завершения процесса полностью перезагружаем модуль (отключаем и подключаем заново USB-кабель) и отправляемся в админ-панель роутера в поисках модуля. Так как мы не использовали предварительное присвоение статического IP, роутер должен сам выдать ему адрес. Напомню, что админ-панель обычно находится по адресу 192.168.0.1 или 192.168.1.1. Моему модулю роутер выдал адрес 192.168.1.142. После перехода по этому IP попадаем в веб-интерфейс нашей метеостанции. Предварительно необходимо будет ввести стандартный логин «esp8266» и пароль «0000» во всплывающем окне.
Теперь нужно указать модулю к какому порту подключен датчик, чтобы первый смог считывать его показания. Делается это на странице «Hardware». Соответствующей отметкой активируем первый датчик, а в строке GPIO указываем 14-й порт. Произойдет инициализация и на главной странице интерфейса появится отображение температуры и влажности. Ура!
Напоследок не забудьте на странице «Main» изменить пароль для входа в систему и часовой пояс для отображения времени. Также необходимо перевести модуль на статический IP-адрес (кнопка внизу страницы), чтобы после перезагрузки роутера ваша метеостанция не «потерялась». Если разбираетесь в настройках своего роутера, то лучше сделать бессрочную аренду IP-адреса для модуля, вместо установки статического IP.
Прототип готов, теперь перейдя по установленному IP-адресу можно посмотреть температуру и влажность в месте, где вы установили датчик.
Подключение метеостанции к сервису метрик Thingspeak.com
Но просто смотреть температуру не интересно. Необходима визуализация данных, чтобы можно было проследить какие-то тенденции в изменении показаний. Для этого регистрируемся в сервисе метрик Thingspeak.com и в своем профиле создаем новый канал.
На открывшееся странице заполняем название канала, отмечаем первых два поля field и записываем туда значения «temp» (первое поле) и «humidity / temp» (второе).
Теперь снова займемся модулем. В конструкторе прошивок в дополнение ко всем предыдущим отметкам добавляем «Thingspeak.com», компилируем прошивку и прошиваем по аналогии. К сожалению, все настройки на модуле придётся произвести заново, т.к. OTA-обновления с сохранением оных доступны только в платной версии ПО (цена вопроса всего 100 рублей на модуль).
Возвращаемся на страницу созданного нами канала в сервисе Thingspeak.com и открываем вкладку «Api Keys». Нам понадобится код из поля «Write Api Key». Его нужно скопировать и вставить в соответствующее поле на странице «Servers» в веб-интерфейсе нашей метеостанции, предварительно не забыв установить отметку на «Enable Thingspeak.com send.».
Показания будут отправляться каждые 5 минут. А выглядеть это в итоге будет следующим образом:
Внешний вид графиков поддается редактированию, так что вы вольны творить! 🙂
Итоги
Наверное кто-то спросит: «Почему итоговый результат отличается от представленного на приведенной выше и заглавной картинках?». Как минимум потому, что информации в этом материале новичкам в теме точно хватит на вечер-другой, а подключение дисплея и барометра потребуют наличия базовых навыков пайки и соответствующего оборудования. Если вы заинтересованы в дальнейшем совершенствовании метеостанции и моих заметках по этой теме, то обязательно напишите об этом в комментариях. Советую также периодически заглядывать в мой личный блог, где, возможно, материалы по данной тематике будут появляться раньше.
Источник
Arduino&Oregon или погодная станция своими руками
Не так давно ко мне в руки попал набор юного радиолюбителя Arduino и много разных проектов получили путевку в жизнь (или «в стол»), но дурная голова рукам покоя не дает до сих пор.
Благодаря удачному стечению обстоятельств случилось так, что в одном месте оказались:
- Arduino — 1 шт.
- Датчик для измерения температуры и влажности Oregon THGN132N — 2 шт.
- RF-kit (приемник и передатчик) на 433МГц — 1 шт.
Дополнительно к вышеперечисленному (исключительно для быстрого прототипирования) использовался Starter Kit от Seeed Studio (из него понадобился base shield, дисплей 16х2 с последовательным интерфейсом, модуль светодиода и соединительные кабели).
Фото для самых нетерпеливых:
Диапазон 433МГц широко используется в различных бытовых приборах — на этой частоте «общаются» автосигнализации, системы управления светом, погодные станции и т.п. Приемники и передатчики для этого дипазона широко доступны и стоят совсем недорого.
Датчиками THGN132N оснащаются многие погодные станции Oregon и их так же можно приобрести отдельно. Они позволяют измерять температуру и относительную влажность, работают в широком температурном диапазоне (-40.0°C до +70.0°C), при этом точность измерения температуры — 0.1°C. Стоимость невысока и определяется в большей степени жадностью продавцов.
Под крышкой батарейного отсека находится переключатель «каналов» — доступны 3 варианта.
Датчик один раз примерно в 40 секунд передает данные о своем состоянии.
Передача осуществляется с помощью «on-off-keying» (OOK) и Манчестерского кодирования на несущей частоте 433.92МГц.
Хватит теории, переходим к практике. Собираем тестовый стенд:
- К ардуино подключаем base shield,
- RF-приемник подключаем к D2 (будем использовать прерывания),
- Дисплейный модуль — к D11 и D12 (TX и RX соответственно),
- Модуль светодиода — к D13.
Я использовал комплектующие серии Grove — они все оснащены идентичными разъемами и предельно просто подключаются к соответствующим разъемам шилда.
Адаптированный скетч со страницы из предыдущей ссылки (там автор использовал «мегу», пришлось немного подправить код под свое железо) для моих датчиков показывал следующие данные:
OSV2 1A 2D 10 E3 20 07 88 04 3F 94
OSV2 1A 2D 20 08 8C 27 10 83 43 B6
Выяснилось, что (последовательно):
1A 2D — тип датчика (кстати, тут сразу вылезло некоторое несоответствие описания протокола и датчиков — этому коду соответствует другой набор датчиков, но это не помешало дальнейшей работе),
10 (20 для другого датчика) — номер канала передается в старших 4 битах (зависит от положения переключателя на датчике, принимает значения 1, 2, 4, при этом 4 соответствует 3 выбранному каналу),
E3 (08) — идентификатор конкретного датчика (?), но это значение может меняться после замены батарейки в датчике и нажатия кнопки Reset (расположена рядом с переключателем каналов и рекомендована к обязательному нажатию после замены батарейки).
Дальше содержится информация о состоянии батарейки (флаг того, что ее пора сменить) и данные, характерные для датчика: информация о текущей температуре и относительной влажности воздуха.
Из этого «разбора» для себя я выявил следующее: для метеостанции на ардуино можно задействовать существенно больше датчиков, нежели к заводской (например, для идентификации использовать комбинацию «тип датчика — канал», а не просто «канал» и т.п.), можно использовать не только те датчики, что вы приобрели самостоятельно, но и «соседские» (к сожалению, в моем радиоэфире были данные только от моих датчиков — у соседей или нет таких, или просто «не добивают»).
Теперь последние приготовления: для первого датчика выбираем 1 канал и отправляем его за окно на мороз, второму датчику назначаем 2 канал и оставляем пока жить при комнатной температуре. Датчики будем идентифицировать именно по каналу — для текущего случая этого более чем достаточно.
Немного программирования и готово:
На первой строке дисплея отображается текущая температура, относительная влажность и состояние батареи датчика за окном, на второй — то же самое, но для комнатного датчика. Светодиод, подключенный к ардуино моргает, когда приняты данные от какого-либо датчика (just for fun).
Дисплей из «стартового набора» одновременно обрадовал и разочаровал.
В «плюсах» — задействовано минимум цифровых выводов, в «минусах» — отсутствие поддержки кириллицы и в текущей версии библиотеки отсутствует возможность генерации своих символов (хотел нарисовать символы для «полной» и «пустой» батарейки).
Из-за последнего ограничения просмотрел доступные символы и подобрал два, подходящих для данного случая.
Результат виден на фото (у первого датчика установлена свежая батарейка, а во второй специально для теста был установлен почти разряженный элемент питания).
Небольшое замечание по дальности: в спецификации на орегоновские датчики заявлено, что они работают на расстоянии до 30 метров от базового блока.
В моем же случае (видимо из-за того, что качество RF-приемника или «загрязненность» эфира высока) система устойчиво работает при условии, что датчик находится на расстоянии до 5-7 метров (преграды в виде 1-2 стен тоже присутствуют). Надо будет при возможности приобрести приемник другого производителя и протестировать с ним.
Таким образом в «сухом остатке»:
- если у вас есть метеостанция (или датчики Oregon) их можно достаточно просто включить в систему домашней автоматизации без нарушения их штатной работы в составе заводской метеостанции,
- можно использовать не только свои, но и «соседские» датчики,
- несколько часов проведено с пользой и достигнут желаемый результат.
To-do:
- Добавить больше датчиков (уже готовы к подключению модули на DHT11, DHT22 (температура и влажность), BMP085 (температура и атмосферное давление).
- Подключить Ethernet-шилд с SD-картой и, использовав Google Chart Tools, сделать страничку с текущими значениями параметров и красивыми графиками (возможно, что веб-сервер придется городить где-нибудь на NAS, а ардуина будет только измерять и передавать серверу значения, но это уже совсем другая история).
- Задействовать RF-передатчик для управления люстрой (сейчас пока к ее оригинальному пульту другая ардуина подключена с помощью оптопар и «нажимает» кнопки на нем, но это тоже тема не для этого топика).
Источник