Сегодня мы создадим погодную станцию, которая будет работать с двумя внешними датчиками Oregon (THGN132N - температура и относительная влажность), измерять температуру, атмосферное давление и относительную влажность внутри помещения.
Дополнительно оснастим ее часами реального времени (для удобства и оставим некоторый "задел на будущее").
Функционирование реализуем следующее:
Для достижения быстрого результата нам потребуется:
Большая часть необходимых нам комплектующих входит в Grove Starter Kit.
В случае, если у вас нет комплектующих данной серии - ничего страшного, вы можете использовать их аналоги и разместить их, например, на беспаечной макетной плате (в статье мы опишем, к каким конкретно пинам будет осуществляться подключение).
Последние два модуля фактически получаются подключенными параллельно (это нормально).
Датчики THGN132N так же необходимо подготовить - на одном из них выбрать (переключателем под крышкой батарейного отсека) канал 1 (это будет первый уличный датчик), а на втором, соответственно, надо выбрать 2 канал.
На этом наша "аппаратная платформа" полностью готова.
Особенности:
Дополнительно оснастим ее часами реального времени (для удобства и оставим некоторый "задел на будущее").
Отображение температуры, влажности и состояния элемента питания датчика |
Функционирование реализуем следующее:
- На дисплее циклически будет отображаться:
- Текущее время, день недели, дата
- Атмосферное давление, температура и относительная влажность внутри помещения
- Температура, относительная влажность с внешних датчиков и информация о состоянии их батарей
- Принудительное переключение между режимами отображения с помощью кнопки.
- Для всех параметров (температура, влажность, давление) будем отслеживать тренд изменения (увеличивается, стабильно, понижается) и рядом с конкретным значением будем показывать эту информацию в виде специальных значков.
- В качестве уличных датчиков будем использовать покупные Oregon THGN132N.
- Когда приходит информация от уличного датчика - будем индицировать это кратковременным зажиганием светодиода.
Для достижения быстрого результата нам потребуется:
- Ардуино (или любой клон) с 328 "камушком" - 1 шт.,
- Датчик Oregon THGN132N - 2 шт.,
- Grove Base Shield - 1 шт.,
- Дисплей 16х2 с последовательным интерфейсом (серии Grove) - 1 шт.,
- Модуль RTC на базе DS1307 (серии Grove) - 1 шт.,
- Датчик температуры и влажности DHT11 (серии Grove) - 1 шт.,
- Модуль кнопки (серии Grove) - 1 шт.,
- Модуль светодиода (серии Grove) - 1 шт.,
- Высокоточный датчик давления BMP085 (серии Grove) - 1 шт.,
- RF-кит (приемник и передатчик) на частоту 433МГц (серии Grove) - 1 шт.
- 4-х контактный кабель (серии Grove) - 7 шт.,
Большая часть необходимых нам комплектующих входит в Grove Starter Kit.
В случае, если у вас нет комплектующих данной серии - ничего страшного, вы можете использовать их аналоги и разместить их, например, на беспаечной макетной плате (в статье мы опишем, к каким конкретно пинам будет осуществляться подключение).
Частично собранная "метеостанция" и датчик Oregon |
Аппаратная конфигурация
- Подсоединяем дисплей к разъему 5 (здесь и далее разъемы согласно нумерации на схеме шилда) - будем использовать D5 и D6, как TX и RX.
- Датчик для измерения внутренней температуры и влажности (DHT11) подключаем к разъему 4 - используем D4.
- Модуль кнопки - в разъем 3 - используем D3.
- RF-приемник на 433МГц подключаем к разъему 2 - используем D2.
- Модуль светодиода подключаем к разъему 13 - используем D13.
- Модуль RTC подключаем к разъему IIC (SDA - A4, SCL - A5).
- Модуль барометра BMP085 - тоже к разъему IIC (SDA - A4, SCL - A5).
Последние два модуля фактически получаются подключенными параллельно (это нормально).
Быстросборный "паук". Модули (по часовой стрелке, начиная с самого верхнего): RTC, LED, Button, DHT11, Serial LCD, RF-приемник (антенна в виде спирали), BMP085. В центре виден Base-шилд. |
Датчики THGN132N так же необходимо подготовить - на одном из них выбрать (переключателем под крышкой батарейного отсека) канал 1 (это будет первый уличный датчик), а на втором, соответственно, надо выбрать 2 канал.
Переключатель каналов под крышкой батарейного отсека |
На этом наша "аппаратная платформа" полностью готова.
Программная часть
В качестве основы для общего кода будем использовать примеры использования конкретных датчиков (и их библиотеки, если они необходимы).В конце статьи есть ссылка на архив, содержащий скетч нашей метеостанции и необходимые библиотеки.Сложность возникает с датчиками Oregon, но благодаря тому, что датчики эти доступны по цене (от 600 рублей) и обладают хорошими характеристиками, энтузиасты не прошли мимо протокола их работы и неплохо его разобрали. Более подробно работа с датчиками описана в этой заметке на habrahabr.ru (повторяться не будем).
Особенности:
- Для хранения информации о текущих значениях датчиков используется два массива t[4] и h[4] (температура и влажность, соответственно). Значения давления храним в соответствующем элементе массива вместо влажности.
- Для вычисления трендов используется массивы предыдущих значений PrevTemp[] и PrevHym[]. Сами же параметры, характеризующие рост (или спад) того или иного параметра задаются с помощью директив (можно изменить под свои личные предпочтения):
- #define DELTA_TIME 900000 // 15 минут - период расчета трендов
- #define DELTA_TEMP 0.1 // превышение этого значения будет означать изменение температуры - 0.1 градуса
- #define DELTA_HYM 1 // порог для влажности 1 процент
- #define DELTA_BAR 1 // порог для давления 1 мм.рт.ст.
- Для определения температуры внутри помещения используем значения с датчика BMP085, как более высокоточного по сравнению с DHT11.
- Из-за того, что дисплей не поддерживает кириллицу и нельзя "создать" собственные символы, для отображения трендов и состояния элементов питания будем использовать символы из набора доступных.
- Получение параметров от датчиков Oregon происходит по мере того, как датчики передают о себе информацию (примерно 1 раз в 40 секунд).
- Остальные измерения происходят в момент обновления экрана (в автоматическом режиме 1 раз в 20 секунд или в ручном режиме при нажатии на кнопку).
Примеры отображения информации на экране:
Текущее время, день недели и дата |
Атмосферное давление и температура и влажность внутри помещения. Атмосферное давление и влажность растут (обозначено значком "^") |
Вот, собственно, и все - наша погодная станция готова и функционирует.
Что можно было бы еще добавить:
- Фиксацию минимальных и максимальных значений с отображением даты/времени, когда они были зафиксированы;
- Функцию "будильник" (один или несколько), но для этого нужно еще добавить "пищалку" и переделать управление с кнопки, например, на джойстик или сенсорное управление;
- Добавить Ethernet-шилд и организовать доступ к данным через веб и т.п.
Если у вас возникают какие-то вопросы, замечания, пожелания - оставляйте их в комментариях к данной статье.
Как это работает:
Продолжение: оснастим нашу погодную станцию web-интерфейсом.Как это работает:
Хотел вам задать несколько вопросов по поводу статьи.
ОтветитьУдалитьСкачал скети и библиотеки. Среда разработки IDE 1.01 установлена C/Program files, операционная система WINDOWS XP SP 2. Элементарные программы с диодами и типа "HELLO WORLD" работают, а вот при использовании сложных скетчей в ходе компиляции постоянно выдает ошибки в библиотеках.
Вначале проверил библиотеку DHTtester ошибка в скетче: TYPE does not name a type.
Далее попробовал скомпилировать сам скетч weather_all, начинать выдавать аналогичные ошибки: Bounce does not name type встроке Bounce bouncer = Bounce (BUTTON,5). Такое же сообщение касается RTC, LCD.
Кроме того есть еще одна проблема с библиотеками скачиваемыми с SEEEDSTUDIO при переходе по вашей ссылке: в некоторых скачиваемых библиотеках неуказано расширение файла( ino, pde); при входе в программу в examples и libreries их просто не видно, при прописывании разрешения вручную скетч открывается, но там одни каракули.
Я был бы вам очень признателен, если бы вы помогли разобраться с этой проблемой.
Внутри архива есть папка libraries с нужными библиотеками (каталоги). Их надо положить в папку libraries внутри папки arduino (там, где вы установили среду на своем компьютере). Вообще это обычная работа с библиотеками.
ОтветитьУдалитьПосле этого можно запускать Arduino IDE и открывать скетч weather_all - все без ошибок скомпилируется.
Подскажите пожалуйста в какой IDE компилировали. Пробовал в 023, 1.0.1 и 1.0.2 в каждой IDE видит разные ошибки. В вашей статье про автоматизацию все скомпилировалось в 023, на железе тоже работает.
ОтветитьУдалитьУ меня версия 1.0.3, но уверен, что в любой версии старше 1.0.0 скомпилируется без ошибок (если правильно установлены библиотеки).
ОтветитьУдалитьВы бы указали, что за ошибки при компиляции возникают?
Очень плохо ловит.. только если лежат прям в 10см, даже на полметра уже не ловит, подскажите что может быть? Передатчик и приёмник как у Вас.
ОтветитьУдалитьОтвечаю сам себе. Модуль просто оказался бракованный, новый работает отлично.
УдалитьДобрый день !
ОтветитьУдалитьЯ дико извиняюсь если не по теме, но может вы сможете помочь моему горю.
Решил сделать проект с использованием IBoard 1.1 и grove-sereal LCD v1.1..
При работе через программатор все хорошо и отлично, но как только отключаю программатор и подключаю блок питания то LCD наводить на меня грусть своим темным экраном (не чего не хочет отображать :-( ) Хотя питание на него подается...
Сам себе отвечаю, перед подключение прочитать что пишут о плате в спецификации... Рабочее напряжение 3,3 v
УдалитьДобрый день.
ОтветитьУдалитьСкажите, имеет ли значение тип модуляции на RF приемнике?
Подскажите, как подключить приемник 433 мгц, он немного не такой, как у вас. На нем написано XD-RF-5V, четыре выхода. Левый GND, два центральных (вроде спаяны вместе) DATA, правый VCC. Помогите подключить, все остальное есть, а вот приемник только такой. Спасибо!
ОтветитьУдалитьЗдравствуйте
ОтветитьУдалитьПодскажите кто может такое сделать?
Меня интересует покупка Метеостанции может сможете сделать ее под заказ или посоветовать кого то кто сделает!?
В станции надо датчики:
температуры
влаги
давления
направление и скорость ветра
а также датчик UV
всё это мне надо как то выводить на своем сайте
на сервере стоит LINUX
есть возможность подключить станцию через LAN или WIFI к роутеру.
зарание спасибо