Метеостанция 2.0 - подключение датчиков ветра к MegaD-2561

17/05/2018 17:21:25

В далеком уже 2011 году я подключил к домашней системе автоматизации китайскую метеостанцию WH-2080. Без особых проблем с помощью элементарного скрипта, написанного на python, я считывал с метеостанции все данные, выводил на сайт Умного Дома и использовал эту информацию для управления отоплением. А данных этих было не мало. Это температура, относительная влажность, атмосферное давление, количество выпавших осадков, направление и скорость ветра. Словом, полноценный прибор за небольшие деньги. Точность получаемых данных была, по всей видимости, весьма высокая. В этом я убедился позже, когда продублировал значения с помощью датчика температуры DS18B20 и датчика атмосферного давления BME280. Кривые графиков почти полностью совпадали. Однако у любого прибора, особенно любительского, есть свой срок службы и спустя 5-6 лет постоянной эксплуатации моя метеостанция начала "глючить". Ну, проблемы со связью возникали периодически давно. Не зависимо от свежести элементов питания в выносном блоке, время от времени связь между внутренним и наружним блоками неожиданно прерывалась, а потом также неожиданно восстанавливалась. Все же радиотехнологии особенно такого простейшего уровня не отличаются высокой надежностью. Однако с эпизодическими перебоями в беспроводной связи еще как-то можно было мириться. Все стало хуже, когда метеостанция начала отдавать некорректные значения. То сообщит о минусовой температуре в июле, то откажется фиксировать осадки в проливной дождь, то покажет 0 м/с в сильный шторм при бешено вращающемся анемометре, то напротив, в штиль запротоколирует порывы до 287 м/с... Словом, метеостанция полностью утратила к себе мое доверие...

Тогда я решил, что нужно найти что-то более надежное и обязательно проводное. Частично я уже закрыл этот вопрос с помощью влагозащищенного датчика DS18B20 Waterproof и датчика атмосферного давления, температуры и влажности BME280, которые подключил к системе через MegaD-2561. Контроллер поддерживает работу с этими сенсорами. Но как быть с датчиками скорости и направления ветра?

Для определения скорости и направления ветра, я заказал датчики также китайского производства, но теперь уже проводные и выглядевшие на первый взгляд существенно более качественно и надежно в сравнении с почти игрушечными датчиками моей старой метеостанции WH-2080. Вот они.

Датчики скорости и направления ветра
Датчики скорости и направления ветра. А зачем нужен компас расскажу.

Подобные датчики могут снабжаться разными интерфейсами для передачи данных. Так, например, датчик скорости ветра может по выбору производиться с одним из следующих выходных сигналов: 0-5В; 1-5В; 0-2,5В; 4-20мА; 0-20мА; RS485, RS232, импульсный выход. Стоит задуматься, ведь выходной сигнал определяет, каким образом датчик будет подключаться к контроллеру и как именно будет осуществляться считывание значений.

В качестве контроллера я, разумеется, решил использовать MegaD-2561. Какой выходной интерфейс выбрать, чтобы обеспечить максимальную простоту подключения при максимальной гибкости? Для датчика скорости ветра (Wind Sensor) я выбрал импульсный выход. В этом случае а) используется только один порт б) датчик может подключаться к любому "стандартному" входу. Никакого дополнительного согласования или изменения прошивки контроллера не требуется. Мне показалось, что это наиболее удобный и, что важно, точный интерфейс, не зависящий от колебаний опорного напряжения, которые вполне вероятны в случае чисто аналогового выхода (0-2,5В; 4-20мА и т.д.).
Но у датчика направления ветра (Wind vane) такого интерфейса нет, что логично, учитывая особенность измеряемой величины. Поэтому для данного датчика я выбрал аналоговый интерфейс 0-2,5В. Также используется один порт контроллера, но уже не "стандартный" вход, а порт с функцией АЦП. В данном случае небольшой дрейф опорного напряжения особого значения не имеет. В практической жизни погрешность в одну десятую долю градуса в направлении ветра абсолютно несущественна. Например, в отличие от нового датчика, который имеет шкалу от 0 до ~740, WH-2080 имел всего 16 делений , то есть вообще очень приблизительно.


Подключение датчика скорости ветра (Wind speed sensor)

Для наглядности подключения я использовал контроллер MegaD-2561 с исполнительным блоком MegaD-14-IN (14 настраиваемых входов). Датчик с выходным сигналом "Pulse signal" можно подключить к любому "стандартному" входу исполнительного модуля. К любому порту MegaD-14-IN (верхнее положение конфигурационного джампера), к портам P0-P6 исполнительных модулей MegaD-8I7O-R/S/SD. Важно! Нельзя подключать такой датчик к цифровым портам. Например, не следует подключать датчик к портам клеммы XT2 контроллера.

Подключения датчика скорости ветра к контроллеру Умного Дома
Подключение датчика скорости ветра к MegaD-2561 + MegaD-14-IN

Вот, собственно и вся интеграция... Черный провод (земля), красный (+12В), желтый на вход порта (правая клемма). Теперь при вращении крыльчатки датчика, значения счетчика порта будет увеличиваться.
Формула указана в документации.
Скорость ветра (м/с) = Частота сигнала * 0,0875 + 0,1

Таким образом, задача контроллера подсчитывать импульсы, которые генерирует датчик. Задача сервера запрашивать полученное значение счетчика с определенной периодичностью и интерпретировать это значение в понятные человеку метры в секунду (или километры в час). Считывать данные можно раз в секунду или раз в минуту. Это зависит от задачи. Если нам нужно фиксировать среднюю скорость ветра, то достаточно считывать данные раз в минуту. Если же нам интересно получать не только некие усредненные данные, но также скорость порывов ветра, то частота опроса может составить раз в 5 секунд или раз в секунду.


Настройка порта тривиальная. Тип: IN, Режим: P, желательно поставить флажок Raw, так как дребезга контактов в данном случае нет.
Кстати, при каждом импульсе будет вспыхивать светодиод порта, к которому подключен датчик, на лицевой панели исполнительного модуля.

Для демонстрации вышесказанного я написал простейший скрипт, который опрашивает порт каждую секунду и выводит на экран текущую скорость ветра в м/с.

<?
$last_cnt = 0;
while(true)
{
    $state = explode("/", file_get_contents("http://192.168.0.14/sec/?pt=7&cmd=get"));
    $cnt = $state[1];
    if ( $last_cnt != $cnt )
    $wind_speed = ($cnt - $last_cnt) * 0.0875 + 0.1;
    else
    $wind_speed = 0;
    echo $cnt." - $wind_speed m/s";
    $last_cnt = $cnt;
    if ( $cnt > 1000 )
    {
        $state = explode("/", file_get_contents("http://192.168.0.14/sec/?pt=7&cnt=0"));
        $last_cnt = 0;
    }
    sleep(1);
}
?>

Чтобы не было переполнения счетчика в скрипте предусмотрена процедура его сброса при превышении значения в 1000 импульсов.
Вообще же счетчик порта 16-битный, а максимальное его значение 65535. После достижения этого порога счетчик автоматически обнуляется.


 

Подключение датчика направления ветра (Wind vane)

И снова для наглядности я оставил MegaD-14-IN, чтобы только продемонстрировать, что датчик запитывается от +12В, но в данном случае модуль MegaD-14-IN не нужен! Дело в том, что выходной сигнал датчика аналоговый 0-2,5В. Напряжение на выходе меняется пропорционально положению флюгера. Принцип предельно простой. Если флюгер смотрит четко на север, датчик выдает сигнал 0В. Если флюгер будет постепенно поворачивать на восток, напряжение начнет расти. При направлении строго на восток датчик выдает сигнал 1/4 от максимального, то есть, 0,625В. Далее на юге он покажет половину - 1,25В, а на западе 3/4 - 1,875В. Максимальное напряжение 2,5В будет также почти на севере, в области 359 градуса.
Данный датчик я подключил к одному из двух АЦП портов, которые выведены на вилки XP5/XP6 в модуле контроллера. Порты P36/P37. Функция АЦП есть и на портах P0-P5 контроллера, но подключать к этим портам датчик можно только напрямую (без использования какого-либо исполнительного модуля). Можно в принципе использовать с портами P0-P5 и MegaD-14-IN в режиме цифрового входа, но в этом режиме сигнал искажается цифровой подтяжкой, его сложнее интерпретировать, так как диапазон рабочих значений существенно сужается. Поэтому проще всего использовать один из портов, выведенных на клеммы XP5/XP6 (P36/P37), как показано на фотографии. Хотя в следующих аппаратных ревизиях MegaD-14-IN планируется сделать цифровую подтяжку отключаемой. Как раз для таких случаев.


Подключение датчика направления ветра к АЦП порту контроллера MegaD-2561

Здесь черный провод (земля), красный (+12В), а желтый на вход АЦП порта. Ничего сложного.
Красный провод (+12В) можно подключить непосредственно к блоку питания.
Черный провод (земля) можно либо также подключить к блоку питания, либо к контакту GND вилки АЦП порта.


Распиновка вилок АЦП-портов контроллера MegaD-2561

На всякий случай привожу распиновку вилок АЦП портов. На фотографии выше желтый провод (выходной сигнал) подключен через кабель Dupont к вилке АЦП-порта XP5 и порту P36.
Центральный контакт +3,3В использовать с датчиком нельзя. Это слишком низкое для него напряжение. Поэтому красный провод (питание) от датчика всегда следует подключать к +12В.


После установки в Web-интерфейсе контроллера типа порта ADC (АЦП) мы увидим значение, которое соответствует направлению ветра.
Интерпретация значений в некотором смысле даже проще, чем для датчика скорости ветра.
Опорное напряжение контроллера 3,3-3,4В. А значит при выходном напряжении 0-2,5В диапазон значений составляет от 0 до ~740.
Если "Север" - это 0 градусов и значение АЦП равное 0, то, юг - это 180 градусов и значени АЦП равно 370.
На скриншоте значение порта 346 - это порядка 169 градусов или, иначе говоря, южный ветер с легким отклонением в сторону востока.
Соответственно в серверном ПО можно прописать, что южный ветер - это, скажем от 158 до 202 градусов (или от 324 до 415 в значениях АЦП), юго-западный ветер - это от 203 до 247 градусов (или от 417 до 508 в значениях АЦП) и т.д. Грубо говоря, если поделить полученное значение АЦП-порта примерно на 2,055, мы получим градус окружности, на который отклонился флюгер относительно севера.

Команда для считывания значения АЦП порта проще некуда.

http://192.168.0.14/sec/?pt=36&cmd=get

А для чего же нужен компас в комплекте с датчиком направления ветра? А нужен он для правильной ориентации датчика относительно полюсов земли. Только в этом случае флюгер будет выдавать корректный результат.


Метка "S" должна указывать на юг!

Правда, в моем случае метка была приклеена не совсем точно. Юг - это значение напряжения 1,25В. А такое напряжение датчик выдавал в районе вертикальной надписи "Power supply", но на практике абсолютно точное позиционирование особой роли играть не будет. Думаю, можно довериться и китайской метке и китайскому компасу.

Время покажет, насколько надежными окажутся описанные датчики и сколько времени они проработают, а пока на домашнем сайте в разделе "Погода" я снова получил адекватные и правдивые результаты по скорости и направлению ветра.
Да, некоторое время назад я рассказывал, что использую корпуса DSen-Box и дисплей SSD1306 для вывода информации о температуре на улице. Так как контроллер MegaD-2561 позволяет достаточно просто выводить на дисплей любой текст, я попробовал отображать среднюю и максимальную скорость ветра, а также его направление.


А для людей с дальнозоркостью можно рядом на веревочке повесить лупу

Выводить такие данные очень просто.

http://192.168.0.14/sec/?pt=33&text=".iconv("utf-8", "cp866", "Ветер:_0.45_м/с,_Сев")."&col=0&row=0

Более подробно о выводе различной информации на дисплей рассказывается в описании контроллера MegaD-2561.

Таким образом, MegaD-2561 можно использовать для интеграции различных метеорологических датчиков в общую информационную систему Умного Дома. Кстати, контроллер, который у меня установлен в саду в сарайчике для лопат и граблей, также используется для управления садовым освещением. К нему же подключен и влагозащищенный датчик DS18B20, измеряющий температуру наружного воздуха. Между прочим, "садовый" MegaD-2561 с исполнительным модулем благополучно и без единого сбоя пережили зиму с температурами ниже -25 градусов.

 

Автор: Andrey_B
Любое использование материалов сайта возможно только с разрешения автора и с обязательным указанием источника.



Добавить комментарий:



Сортировка комментариев: Последние сверху | Первые сверху

2018-05-21 16:40:54 | Павел Прудников
Как всегда все прекрасно описано, у вас просто шикарный умный дом, вы для меня как эталон )


2018-05-19 11:28:49 | Andrey_B
Ruslan, я живу в доме уже 10 лет. И лишь один раз сталкивался с выходом из строя техники в следствие грозы. Год назад у меня вышли из строя 2 сетевых коммутатора из 3-х, а также блок питания на DIN-рейку. Причем коммутаторы были заземлены. Ситуацию не анализировал, что конкретно привело к выходу из строя указанной техники, сказать не берусь. Однако с улицей у меня сообщается и считыватель калитки и уличное освещение и датчик температуры и датчик освещенности и камера наблюдения. Может быть, что-то еще. Это все несколько различных контроллеров и сервер. Так вот ни один из этих контроллеров и ни один из блоков питания этих контроллеров (они запитаны от своих БП) не пострадали. Сервер тоже пережил все благополучно.
Вероятнее всего, причина сбоя была в скачке напряжения в электросети, а не в наличие какого-либо датчика на улице.
Тем не менее, я не против применения специальных мер по грозозащите и отводу наведенных импульсов в заземление. Такие устройства продаются и их легко интегрировать.
Кстати, возможно по фотографиям не очень видно, но описанные датчики имеют пластиковые корпуса.


2018-05-19 10:06:53 | Ruslan
Провода - это всегда хорошо в плане надежности поступления сигнала. Но в данном случае они выходят на улицу и тут возникает один вопрос. Помню на моей предыдущей работе у сисадмина много чего из компьютерного оборудования выгорало в грозу, пока он не поставил грозозащиту (а в последствии перешел на оптоволокно). До этого у него было много участков локальной сети на UTP, проложенных на улице "по воздуху".

Есть ли вероятность аналогичных проблем с грозовыми разрядами при подключении уличных датчиков по проводам?