0,0
рейтинг
14 января 2013 в 13:44

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МГц.

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

Хватит теории, переходим к практике. Собираем тестовый стенд:
  • К ардуино подключаем 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-передатчик для управления люстрой (сейчас пока к ее оригинальному пульту другая ардуина подключена с помощью оптопар и «нажимает» кнопки на нем, но это тоже тема не для этого топика).


Ссылки по теме:

Алексей Степанов @avstepanov
карма
63,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое

Комментарии (30)

  • 0
    Отличный рассказ и интересный способ применения готовых датчиков.
    Возьму на вооружение и может сделаю подобное на контроллере.
    Сколько стоит датчик THGN132N?
    • 0
      Покупал на Озоне рублей по 600 за штуку. Вообще предложений много — до 1000 рублей точно можно найти.
  • 0
    Скажите, а вам не попадалось что то на zigbee? Провода я уже не смогу протянуть, а данные собирать хочется.
    Выйдет конечно существенно дороже, но что делать то :/
    • 0
      К сожалению, с этой технологией еще не знакомился, в основном использовал nrf24l01+, но там и сами «датчики» пришлось реализовать.
      • 0
        Просто я хочу датчики поставить в теплицу, и явно RF не хватит. Там уже WiFi из дома не особо хорошо берет.
        Просто сделать связку ARM плата + типа AP ZigBee — все остальное было бы сдорово. За 1 год можно собрать небольшую статистику :)
        • +1
          Ну тут есть варианты:
          1. Есть RF-модули на 433МГц с дальностью до 2 км

          2. Можно организовать связь между домой и теплицей с помощью WiFi (соотвтетсвующий шилд)
          3. Можно между домом и теплицей использовать nrf24l01+ с антенной
          Скрытый текст
          image

          4. Можно вообще GSM задействовать и с помощью смс-сообщений снимать данные…
          ну и т.д.

          Решение всегда найти можно и не всегда сильно дороже.
        • 0
          ZigBee достаточно простой в плане реализации. Все сводится к первичной прошивке базы и передатчика. А дальше все работает по Serial, как и COM портом. Причем для ZigBee к компу можно купить спец. плату для прошивки (значительно дешевле Arduino + Shield) и через нее же и получать сигналы.

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

            У меня есть linux-sunxi.org/Cubieboard
            На нем есть выходы i2c и spi.

            Надо теперь определится с модулем. Я так понимаю лучше всего задействовать SPI?
            Те найти модуль zigbee SPI и подключить к кубику. Потом уже всё остальное непосредственно к zigbee.

            Я верно мыслю? Может быть есть на примете готовые zigbee модули, или лучше все же использовать RF + датчики, так как они очень просты, есть долкументация и сами датчики стоят копейки?
            • 0
              Примеры девайсов? Да все, что угодно, на самом деле. У меня по всему дому платы *duino общаются по ZigBee. На них строят умные дома, системы радиообщения плат и централизованные приемники с датчиков по радиусу обхвата.

              SPI можно, но не обязательно. Достаточно также, через USB воткнуть плату прошивки XBee и работа по виртуальному COM порту. Можно и SPI. Что вам удобней, то и берите. Мне проще работать с «недоделанными» устройствами и оттачивать их под себя. К тому же обычно это выходить дешевле готовых модулей. Иногда значительно.

              По RF — можно и RF. Но я сомневаюсь, что у вас теплица находится в километре от дома))))

              WiFi не стал бы делать из-за ценника. Я как-то заморочился расчетами. Там ценник в 2 раза превышал ZigBee.
              • 0
                Поддерживаю.
                У меня примерно так же, только в качестве коммуникационных модулей nrf24l01+ (подключаются через SPI) — стоимость одного модуля от 150 рублей (если в Китае заказывать — и того дешевле).

                Пока топология модулей — звезда.
                В центре — модуль с GSM, который может запрашивать данные или передавать команды «ведомым». Каждый «ведомый» делает свое дело (может работать изолированно и сам выполнять свою функцию без внешних команд).

                Все времени не хватает добавить еще один «центр» с LAN-интерфейсом, чтобы всем этим можно было рулить и по сети.
                • 0
                  С одной стороны ZigBee интереснее, только вот поиском я не нашел большого кол-во датчиков. МОжет неправильно ищу?

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

                  И еще вопрос, а сколько датчиков сможет принимать модуль nrf24l01?
                  Или может я чего не понимаю :)?
                  • 0
                    nrf24l01 — вообще, это очень интересный трансивер, много чего поддерживает аппаратно (например, подтверждение о приеме сообщения и т.п.).
                    Обладает достаточно большим набором настроек (например, можно выбрать конкретный канал, на котором будет вестись работа, чтобы «отстроиться» от помех).

                    Аппаратно один модуль может открывать до 5 каналов (т.е. одновременно вести «беседу» с 5 датчиками).

                    Но можно реализовать программно и другие варианты взаимодействия. К примеру, ввести «наименование» датчиков, всю работу вести в одном канале, но в посылках явно указывать, к какому датчику идет обращение (и тот уже сам будет обрабатывать). Эдакий адресный «мультикаст» получается.
                    • 0
                      Большое СПС.

                      Скажите, а датчики имеют какой то индентификатор? Просто как задать имя для датчика?
                      • 0
                        Наверное, немного непонятно объяснил.

                        Ваша задача распадается на две:
                        1. Получение значений с датчиков Орегон (тут решение прямо в статье и там же про идентификацию датчиков). Для решения этой задачи у Вас в теплице должна стоять *дуина и собирать данные
                        2. Передача данных из теплицы домой — вот тут уже каналообразущим оборудованием могут стать трансиверы nrf24l01.

                        Т.е. оснащаете одним трансивером *дуину в теплице, другим — ту, что дома и уже организуете между ними взаимодействие (причем, можно придумать не только мониторинг, но и какое-нибудь управление, например, при повышении температуры выше заданной (или по команде от центрального блока) открыть какое-нибудь окно для вентиляции и т.п.)
                        • 0
                          А разве я не могу использовать arm плату + подключить к ней по SPI nrf24l01 и собирать данные сразу с датчиков например в базу mysql? Библиотеки вроде бы то же уже есть

                          theredblacktree.wordpress.com/2012/08/09/rf24bb/
                          • 0
                            nrf24l01 работает на частоте 2.4ГГц. Орегоны — на частоте 433МГц.
                            • 0
                              Да я не подумал об этом, тогда nrf24l01 изменить на то, что понимает 433 :)

                              Просто arduino — это лишней кастыль получается.
                              • 0
                                Да, можно попробовать. Алгоритм работы с таким «понимающим» в скетче описан — там ничего особо сложного нет — надо прерывания задействовать, фиксировать времена и выделять полезные данные.
  • 0
    Была как-то мысль тоже читать такой датчик, чтобы температура за бортом показывалась не только на метеостанции (а она у кровати стоит, далеко бегать посмотреть), но и на самодельных часах на 2313-й тиньке, которые всегда перед глазами. Но флэш там был уже на исходе, а начинать всё заново и разводиться под другой МК стало почему-то лениво.
    Статья хорошая, с интересом прочел.
    • 0
      Думается что на msp430 часах от TI, под 433MHz, можно такое реализовать :) а про ваши часы есть статья?
  • 0
    А передатчик на морозе нормально работает? Батарейка не замерзает?
    • +1
      Сегодня ночью температура была ниже -20. Все работает, да и по паспорту от -40 заявлено.

      Дополнительно выяснилось что не все орегоны «одинаково полезны». У одного из датчиков существенно меньшая дальность работы.

      Сейчас конфигурация следующая: от «метеостанции» до одного датчика — всего 4 метра и одна преграда в виде окна. До второго датчика — около 6 метров по прямой и 2 стены и окно.
      В такой конфигурации был виден только один датчик (ближний).

      Но оказалось достаточным поменять датчики местами и все стало на удивление хорошо — оба датчика принимаются примерно одинаково (не каждые 40 секунд, но раз в 3 минуты сигнал каждого принимается стабильно).
      • 0
        У меня тоже есть проблема с приемом. Два датчика Oregon. Один находится в 20 сантиметрах от приемника. И приемник его ловит примерно раз в сутки. А второй в другом конце дома, его ловит каждую минуту. Загадка…
        Перемещение не помогает, первый датчик «барахлит», независимо от дальности установки.
        • 0
          а какой приемник используется?
          • 0
            Используется Tellstick Net. Он же управляет освещением, водонагревателем и прочими штуками. Второй хочу собрать сам на основе Arduino/RaspberryPi, но все руки не доходят.
            • 0
              прикольная железка, но цена… ардуино (даже с тем комплектом, что я использую для быстрого прототипирования) будет стоить дешевле, правда, софт придется писать самому
  • 0
    не в ту ветку ответил :(
  • 0
    А не могли бы Вы дать ссылку на используемый RF-kit?
    И пояснить распиновку RF-приемника, а так же на какой пин Arduino подается сигнал с него?
    • 0
      Я использовал вот этот кит: devicter.ru/goods/modul-433mhz-rf-link
      Из него потребовался только приемник. Распиновка там примитивная и отлично просматривается на фото модуля.
      GND и VCC — это «общий» и «питание» соответственно. SIG — выход с приемника. NC — неиспользуемый вывод.

      Выход с приемника необходимо подключить к D2 (поскольку скетч использует прерывание).
  • 0
    Если будете собирать на Mega 2560 и\или будут проблемы с датчиком THN132N (будет говорить только про CRES код) — посмотрите вот этот код Ook_OSV2.ino вот отсюда http://jeelabs.net/boards/7/topics/3298

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.