Последние статьи из блога
- MegaD-485-TTL - изолированный конвертер индустриального класса
- MegaD-4VC - подключаем сигналы 0-10В и 4-20мА к контроллеру
- MegaD-4CM - высокоточный 4-х канальный измеритель тока
- MegaD-4US - 4-х канальный датчик напряжения на DIN-рейку
- Как я боролся с собаками с помощью нейросети
- Интеграция ультразвукового датчика скорости и направления ветра
- Установка WiFi-камеры на робота-газонокосилку
- Твердотельный датчик направления и скорости ветра. Эксперимент
- iPhone на стене в качестве панели управления домом
- MegaD-16M-XT - подсветка выключателей и не только
- Переделка выключателей в кнопки и мини-обзор текущего рынка
- RadSens - модульный счетчик Гейгера с интерфейсом I2C
- "U" - значит универсальный. Обзор модуля MegaD-16U-XT
- SCD4x - современная альтернатива для измерения концентрации CO2
- HTU31D - новый датчик температуры и влажности с нагревательным элементом
- Измерение коэффициента пульсации ламп с помощью MegaD-2561
Твердотельный датчик направления и скорости ветра. Эксперимент
08/11/2023 21:54:20
Домашняя метеостанция - часто первое, с чего начинают любители автоматизации свое погружение в предметную область. Высунул температурный датчик за форточку и уже можно строить красивые графики. Когда-то и я начинал этот увлекательный путь с подключения недорогой китайской метеостанции, к серверу Умного Дома. Потом была вторая итерация с подключением датчиков направления и скорости ветра к контроллеру MegaD-2561 и потом еще. Я использовал информация с датчика осадков для управления автополивом, а с датчика температуры для управления отоплением. Было вовсе не лишним видеть в интерфейсах локальные данные о погоде в целом и о ветре в частности. Особенно зимой, когда кроны деревьев без листвы практически отказываются от роли флюгеров и индикаторов ветра.
Но есть с типовыми датчиками ветра одна неприятность - они механические. А как и у любой другой механики, у них есть конечный ресурс. Например, датчик скорости ветра, описанный в этой статье, проработал у меня всего 4 года. А потом просто заклинил, перестал вращаться. Но даже когда он был исправен, он мог отказаться работать, потому что обмерз зимой или от того, что в период затишья летом его основательно оплели паутиной.
Тогда я задался вопросом - существуют ли датчики без вращающихся элементов, немеханические. Разумеется, такие есть. Например, ультразвуковые. Они излучают звуковую волну, а затем замеряют изменение ее параметров (времени прохождения, частоты - эффект Доплера) несколькими приемниками. И на основании расчетов определяют скорость и направление ветра. Круто! Но есть и недостаток - цена. Конечно, в Интернете можно найти инструкции по изготовлению такого устройств с применением китайских дальномеров HC-SR04. Но самодельная конструкция получится довольно громоздкой, с неясными перспективами с точки зрения атмосферостойкости. А кроме того, к такому датчику потребуется делать какой-то свой маленький вычислительный центр (ESP, Raspberry Pi, микроконтроллер) с программным алгоритмом обработки данных. Тема интересная, возможно займусь в будущем. А пока нашелся еще один не вполне очевидный вариант решения задачи.
Я как-то писал про измерение радиации с помощью устройства RadSens российской компании ClimateGuard. В их номенклатуре есть другое занимательное устройство - модульный термоанемометр. Примечателен этот девайс принципом работы. В нем установлены два NTC-термистора. Один из термисторов нагревается (горячий щуп), другой - нет (холодный щуп). И вот по разнице температур между холодным и горячим термисторами микроконтроллер устройства вычисляет скорость воздушного потока. Более того, передает готовые данные о скорости потока по шине I2C сразу в метрах в секунду.
И тут у меня родилась безумная идея. А что, если каким-то образом защитить этот термоанемометр от атмосферных осадков и использовать на улице? Тогда я смогу получить какую-то информацию о скорости ветра. А что, если использовать не один, а четыре таких устройства, каким-то образом сориентировав их по сторонам света? Тогда я смогу судить не только о скорости, но и о направлении ветра! Я взял 4 сенсора CG-Anem (так называет эти устройства производитель), а к ним приобрел дешевую распаячную коробку ОП 110х110х70 стандарта IP55 от TDM за 132 рубля. Такие размеры не случайны. Мне важно было, чтобы 4 датчика встали по высоте.

Детали для изготовления цифрового датчика ветра
Снизу коробки я сделал вырезы (обычно у меня получается лучше) под сенсоры так, чтобы они смотрели в разные стороны, а также отверстие под ввод кабеля (оно же крепление). Ввод кабеля выполнен в виде латунного удлинителя на 1/2", к которому прикручена разъемная полипропиленовая муфта. То есть, при желании можно легко будет демонтировать коробку с датчиками.

Подготовка корпуса для датчиков
Снаружи, со стороны дна, будут торчать вниз, только щупы (рожки), а сами датчики будут в коробке. Но как обеспечить защиту щупов от влаги? Конечно, коробка будет выступать в роли козырька и в какой-то степени защищать чувствительные элементы от дождя. Но этого мало. Поэтому я покрыл выступающие части датчиков специальным влагозащитным уретановым составом HumiSeal 1A33, которое мы используем при производстве MegaD-Outdoor-Sensor. Один из щупов датчика нагревается, поэтому важен рабочий диапазон температур. У HumiSeal это от -65 до +125 C. Подходит.

Рабочая часть платы датчика покрыта методом окунания влагозащитным уретановым составом HumiSeal 1A33
Далее нужно было попытаться как-то изолировать датчики друг от друга. Чтобы, к примеру, датчик, обращенный на север при южном ветре давал показания ниже датчика, направленного на юг. Для этого я вырезал из пластика перегородки и приклеил их к корпусу на эпоксидную смолу. Сами датчики я также зафиксировал внутри на эпоксидку. А снаружи все зазоры дополнительно уплотнил высокотемпературным атмосферостойким герметиком.

Постоянные читатели знают мои наклонности к перекраске всего и вся, поэтому белоснежные пластиковые перегородки я покрасил в небесно-серый. Зацените, у меня даже герметик нашелся серого цвета, хоть этого на данной фотографии и не видно. Лабораторные тесты с настольным вентилятором показали, что конструкция на испытательном стенде работает хорошо. Если направить вентилятор на один из датчиков, то остальные если и меняют свои показания, то крайне незначительно. Однако ветер часто дует не строго по компасу. Он бывает, например, северо-западным. И в этом случае конструкция отрабатывает корректно. Если направить вентилятор по линии перегородки, то меняют показания уже два датчика. Таким образом, о точном направлении ветра можно судить по пропорциональному соотношению между значениями двух соседних датчиков. На столе все работало прекрасно. В боевых же условиях все получилось немного иначе, но об ниже.

Чем не маленький адронный коллайдер?
Вот, как выглядит конструкция внутри коробки. Разъемы на датчиках я поменял на клеммники и все датчики подключил к одной шине, используя две пары UTP: VCC/SCL и GND/SDA. Шиной? Да, ведь у датчика можно программно (!) поменять адреса. Поэтому я назначил каждой стороне света свой адрес и нанес эту информацию перманентным маркером на корпус каждого анемометра.
С гордостью и волнением я водрузил сей девайс на крышу дома, выполнив ориентацию по компасу. Полипропиленовую трубу, которая выступает в роли мачты, я тоже покрасил в серый... В устройстве все должно быть красиво. Кабель, идущий от датчиков, я подключил к контроллеру MegaD-2561. Запустил тестовую программу и... ничего не заработало. И серый цвет герметика не помог. Знаете, в статьях частенько многое остается за кадром. Ошибки, неудовлетворительные результаты, брак, порезанные руки. Короче говоря, если на шине висит аж 4 датчика и подключены они 15 метровым кабелем, штатного напряжения 3.3В недостаточно. И хотя на столе все вроде бы работало, при размещении на улице датчики при подаче питания +3.3В через раз сканировались на шине, выдавали неверную информацию и в конце концов просто отключались - "горячий" щуп переставал подогреваться. От +5В все завелось.

Одним серым-серым утром, один серый-серый человек, взял одну серую-серую коробочку...
Твердотельный датчик ветра с интерфейсом I2C
Но выяснилось еще кое-что. Ветер, даже слабый и умеренный, работает не так, как тестовый маломощный вентилятор на столе. И при порывах меняются показания не одного, а, в той или иной степени, всех датчиков. В принципе я ожидал чего-то подобного. Но все же показания датчика, который обращен в сторону ветра меняются сильнее. Этого вполне достаточно, чтобы сделать однозначный вывод, откуда ветер дует. Особенно легко интерпретировать усредненные показания, когда данные запрашиваются с некоторой периодичностью (например, раз в минуту).
Прошивка контроллера MegaD-2561 (версии >=4.62b3) поддерживает работу с этим типом устройств по шине I2C. Достаточно настроить используемые для подключения датчика порты в режим I2C и выбрать его в списке устройств.

Запросить текущее значение скорости воздушного потока можно двумя разными запросами.
http://192.168.0.14/sec/?pt=31&cmd=get или http://192.168.0.14/sec/?pt=31&scl=30&i2c_dev=cganem
Датчик поддерживает программное изменение своего адреса. Именно эта особенность позволила мне подключить к одной шине сразу 4 идентичных устройства.
По умолчанию датчик имеет адрес 0x11 (7-битный формат). Пример запроса для смены адреса на 0x13
http://192.168.0.14/sec/?pt=31&scl=30&i2c_dev=cganem&addr=11&i2c_par=9&new_addr=13
Теперь приведу пример простейшей программы-прототипа на PHP, которая выводит показания со всех 4 устройств моего измерителя ветра.
<?php
$wind_n = file_get_contents('http://192.168.0.14/sec/?pt=31&scl=30&i2c_dev=cganem&addr=9');
$wind_e = file_get_contents('http://192.168.0.14/sec/?pt=31&scl=30&i2c_dev=cganem&addr=11');
$wind_s = file_get_contents('http://192.168.0.14/sec/?pt=31&scl=30&i2c_dev=cganem&addr=15');
$wind_w = file_get_contents('http://192.168.0.14/sec/?pt=31&scl=30&i2c_dev=cganem&addr=17');
echo "N: $wind_n | E: $wind_e | S: $wind_s | W $wind_w";
?>
Результат будет вида:
N: 0.3 | E: 0.3 | S: 1.0 | W 0.8
Это будет означать, что датчики фиксируют юго-западный ветер со скоростью 1 м/с. Ветер непостоянен. Он может в данный момент дуть в одну сторону, а через мгновение в противоположную. Такое интересное наблюдение я сделал, монтируя датчик на крыше. Поэтому судить о ветре только по одному запросу нельзя. Но если получить некоторый объем данных за определенный промежуток времени, а затем усреднить их (с помощью сервера домашней автоматизации), то все будет более однозначно. Цифры могут получиться близкими, например: 0.3 | 0.1 | 0.6 | 0.3. Но максимальное значение всегда будет у переменной, соответствующей реальному текущему направлению ветра.
Кроме всего этого датчик может сохранять в памяти абсолютные минимумы и максимумы. Для данной задачи интересны максимумы - порывы ветра. Например, мы можем запрашивать данные раз в минуту или даже реже. Устройство вернет текущую скорость ветра, но порывы ветра могут случаться между запросами. Для домашней же метеостанции это интересный и важный параметр. Поэтому в прошивке реализован механизм считывания сохраненного максимума (параметр i2c_par=3).
// Запрос данных о максимуме (порывах ветра) http://192.168.0.14/sec/?pt=31&scl=30&i2c_dev=cganem&i2c_par=3 // Сброс показаний абсолютного максимума в памяти датчика http://192.168.0.14/sec/?pt=31&scl=30&i2c_dev=cganem&i2c_par=8
Можно пробовать делать запросы реже и усреднять не текущие показания, а максимальные. Но мне показалось, что усреднение текущих показателей с частыми запросами (раз в минуту) дает более точный результат. А еще лучше принимать в расчет оба параметра. Иногда показания соседних датчиков получаются почти одинаковыми и тогда информация о порывах ветра может использоваться для оценки, с какой стороны ветер дует чуть сильнее. Это можно использовать при визуализации направления ветра в интерфейсе Умного Дома. В общем, тут есть простор для творчества.
А еще CGanem способен отдавать температуру холодного щупа. То есть, выступать в качестве уличного (в моем случае) термометра.
http://192.168.0.14/sec/?pt=31&scl=30&i2c_dev=cganem&i2c_par=2
О точности можно будет судить позже, накопив статистику, но на первый взгляд показания температуры совпадают с уличным датчиком DS18B20, который уже применяется в мой системе автоматизации.
Вообще-то данные датчики без дополнительного покрытия, не предназначены для работы прямо вот так, на улице и создавались для работы в основном внутри помещений в системах вентиляции, кондиционирования, безопасности. Поэтому все, что здесь написано, это эксперимент. О том, как будет работать устройство и, главное, сколько оно проживет, продуваемое всеми ветрами, я обязательно напишу. А пока испытания осенними дождями мое устройство прошло успешно. Интересно, а как оно будет работать в морозы?..
Update (от 09.01.2024)
В морозы все работает!
Update (от 10.11.2024)
К сожалению результаты данного эксперимента оказались противоречивыми. Принципиально такое решение имеет право на жизнь. Но есть проблемы. Предложенная в статье конфигурация датчика не позволяет в любых ситуациях и при любых погодных условиях точно определять направление ветра. Приходится задействовать ряд косвенных показателей: считывать температуры холодного и горячего щупов, проводить дополнительную обработку данных. Даже при таком подходе в ряде ситуаций алгоритм не может верно определить направление ветра. Была предпринята попытка усовершенствовать конструкцию. Я удлиннил боковые перегородки и добавил перегородки снизу. Проблему с определением направления ветра это не решило, но зато внесло значительные искажения в показания скорости воздушного потока. Они стали в полтора-два раза меньше. Но это не единственная сложность. Датчик, обращенный на север, в конце зимы перестал отдавать корректные показания. Предположительно из-за загрязнения и/или нарушения целостности защитного полиуретанового покрытия. Хотя визуально он не отличался от других. Почистил, нанес защитное покрытие заново. Этот же датчик проработал до начала сентября и снова отказал (причем что интересно, оба раза проблема была именно с холодном щупом). В этот момент я понял, что в агрессивных условиях улицы имеет смысл пробовать какое-то другое решение. Оно уже заказано. Весной буду пробовать и обязательно напишу об этом.
Автор: Andrey_B
Любое использование материалов сайта возможно только с разрешения автора и с обязательным указанием источника.
Добавить комментарий:
Сортировка комментариев: Последние сверху | Первые сверху
2023-11-19 14:40:50 | Ruslan
Спасибо за очередной увлекательный эксперимент! На первый взгляд кому-то может показаться, что все это "баловство". Однако именно благодаря вот таким статьям на данном замечательным сайте я и "втянулся" в тему "умного" домостроения.
2023-11-20 16:36:44 | Андрей
Большое спасибо за статью! Как всегда очень увлекательно! Жду статистику работы. Автор новых идей!
2024-04-03 20:11:21 | Павел К
Отличная работа!
Буду следить за экспериментом.
2025-04-13 01:44:24 | Сергей Д.
Хотелось бы узнать не проводили ли случайно тесть на скорость измерений? Как часто можно собирать данные. И какова при этом точно направления и скорости.
2025-04-13 11:02:20 | Andrey_B
Сергей Д., тест на максимальную скорость сбора данных с 4-х датчиков не проводил, но думаю она может быть достаточно высокой (несколько раз в секунду). Другое дело, насколько часто алгоритм в микроконтроллере самого датчика обновляет соответствующие регистры. Тут нужно спрашивать у разработчиков. Насчет точности конкретно моего исполнения - в реальных условиях к сожалению есть вопросы. В некоторых погодных условиях моя реализация работает некорректно. Поэтому я уже принял решение испытать другой вариант, о чем скоро напишу на сайте.