- PVSM.RU - https://www.pvsm.ru -

Arduino&Oregon или погодная станция своими руками

Не так давно ко мне в руки попал набор юного радиолюбителя Arduino и много разных проектов получили путевку в жизнь (или «в стол»), но дурная голова рукам покоя не дает до сих пор.
Благодаря удачному стечению обстоятельств случилось так, что в одном месте оказались:

  • Arduino — 1 шт.
  • Датчик для измерения температуры и влажности Oregon THGN132N — 2 шт.
  • RF-kit (приемник и передатчик) на 433МГц — 1 шт.

Дополнительно к вышеперечисленному (исключительно для быстрого прототипирования) использовался Starter Kit от Seeed Studio (из него понадобился base shield, дисплей 16х2 с последовательным интерфейсом, модуль светодиода и соединительные кабели).

Фото для самых нетерпеливых:
Arduino&Oregon или погодная станция своими руками

Диапазон 433МГц широко используется в различных бытовых приборах — на этой частоте «общаются» автосигнализации, системы управления светом, погодные станции и т.п. Приемники и передатчики для этого дипазона широко доступны и стоят совсем недорого.

Датчиками THGN132N оснащаются многие погодные станции Oregon и их так же можно приобрести отдельно. Они позволяют измерять температуру и относительную влажность, работают в широком температурном диапазоне (-40.0°C до +70.0°C), при этом точность измерения температуры — 0.1°C. Стоимость невысока и определяется в большей степени жадностью продавцов.

Под крышкой батарейного отсека находится переключатель «каналов» — доступны 3 варианта.
Arduino&Oregon или погодная станция своими руками

Датчик один раз примерно в 40 секунд передает данные о своем состоянии.
Передача осуществляется с помощью «on-off-keying» (OOK) и Манчестерского кодирования [1] на несущей частоте 433.92МГц.

Протокол для датчиков Oregon [2] (и некоторых других) энтузиасты в большей степени разобрали [3], что позволило осуществить текущий проект.

Хватит теории, переходим к практике. Собираем тестовый стенд:

  • К ардуино подключаем 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 канал и оставляем пока жить при комнатной температуре. Датчики будем идентифицировать именно по каналу — для текущего случая этого более чем достаточно.

Немного программирования [4] и готово:
На первой строке дисплея отображается текущая температура, относительная влажность и состояние батареи датчика за окном, на второй — то же самое, но для комнатного датчика. Светодиод, подключенный к ардуино моргает, когда приняты данные от какого-либо датчика (just for fun).

Arduino&Oregon или погодная станция своими руками

Дисплей из «стартового набора» одновременно обрадовал и разочаровал.
В «плюсах» — задействовано минимум цифровых выводов, в «минусах» — отсутствие поддержки кириллицы и в текущей версии библиотеки [5] отсутствует возможность генерации своих символов (хотел нарисовать символы для «полной» и «пустой» батарейки).
Из-за последнего ограничения просмотрел доступные символы и подобрал два, подходящих для данного случая.
Результат виден на фото (у первого датчика установлена свежая батарейка, а во второй специально для теста был установлен почти разряженный элемент питания).

Небольшое замечание по дальности: в спецификации на орегоновские датчики заявлено, что они работают на расстоянии до 30 метров от базового блока.
В моем же случае (видимо из-за того, что качество RF-приемника или «загрязненность» эфира высока) система устойчиво работает при условии, что датчик находится на расстоянии до 5-7 метров (преграды в виде 1-2 стен тоже присутствуют). Надо будет при возможности приобрести приемник другого производителя и протестировать с ним.

Таким образом в «сухом остатке»:

  • если у вас есть метеостанция (или датчики Oregon) их можно достаточно просто включить в систему домашней автоматизации без нарушения их штатной работы в составе заводской метеостанции,
  • можно использовать не только свои, но и «соседские» датчики,
  • несколько часов проведено с пользой и достигнут желаемый результат.

To-do:

  • Добавить больше датчиков (уже готовы к подключению модули на DHT11, DHT22 (температура и влажность), BMP085 (температура и атмосферное давление).
  • Подключить Ethernet-шилд с SD-картой и, использовав Google Chart Tools, сделать страничку с текущими значениями параметров и красивыми графиками (возможно, что веб-сервер придется городить где-нибудь на NAS, а ардуина будет только измерять и передавать серверу значения, но это уже совсем другая история).
  • Задействовать RF-передатчик для управления люстрой (сейчас пока к ее оригинальному пульту другая ардуина подключена с помощью оптопар и «нажимает» кнопки на нем, но это тоже тема не для этого топика).
Ссылки по теме:

Автор: avstepanov

Источник [6]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/arduino/24743

Ссылки в тексте:

[1] Манчестерского кодирования: http://en.wikipedia.org/wiki/Manchester_code

[2] Протокол для датчиков Oregon: http://wmrx00.sourceforge.net/Arduino/OregonScientific-RF-Protocols.pdf

[3] энтузиасты в большей степени разобрали: http://jeelabs.net/projects/cafe/wiki/Decoding_the_Oregon_Scientific_V2_protocol

[4] программирования: http://medialounge.ru/files/weather_habr.zip

[5] текущей версии библиотеки: https://github.com/kc0tfb/Grove_LCD_Arduino

[6] Источник: http://habrahabr.ru/post/165747/