Ультразвуковой анемометр на двух HC-SR04

Ранее был сделан прототип анемометра из одного ультразвукового дальномера HC-SR04. Он умел рассчитывать проекцию скорости ветра на линию между приемником и передатчиком. Для получения вектора скорости ветра на плоскости (2D) требуется вторая координата, которую мы получим, если добавим второй датчик перпендикулярно первому. В этом случае можно закрепить анемометр стационарно — отпадает необходимость использовать флюгер и как-то организовывать подвижные контакты.

Первая версия

Сказано — сделано, причем основательно.полипропилен

Из обрезков полипропиленовых труб сварил крестовину. Все датчики отпаял и удлинил проводами, которые проложил внутри труб. Расстояние между датчиками получилось 70 см. 

Код программы такой.

Код программы первой версии двухосевого анемометра

Два последних числа дают искомую горизонтальную скорость и направление ветра. Направление рассчитывается в виде азимута к направлению на север и дается в градусах. Вращение по часовой стрелке.

Увы, результаты меня разочаровали.
протокол
При усреднении в 25 измерений, показания в спокойном воздухе прыгают в среднем до 1.5 м/с, при этом измерения выдаются примерно раз в сек. Если усреднить в 10 раз больше показаний ситуация улучшается, но кардинально проблему не решает. К тому же судя по графику скоростей в двух осях, одна пара датчиков фонит существенно больше другой. диаграмма скоростей по осямСкорее всего дело в проводах, которыми я удлинил датчики. Придется переделывать.

Вторая версия

Есть еще одна причина все переделать. Как отмечалось в первой теоретической части, скорость звука изменится на 1 м/с при изменении температуры примерно на 1.5 °С. Погрешности измерений по обоим осям складываются. Нужно понимать, что порывы теплого или холодного воздуха могут существенно исказить показания такого анемометра. Нет смысла в показаниях 4 м/с при легком дуновении теплого ветерка. диаграмма температуры и скорости Из диаграммы натурного эксперимента видно, что даже медленное изменение температуры вызывает дрейф измеренной скорости, а быстрое изменение температуры на 1 градус скачком поменяло измеренную скорость ветра на 1.5 м/с, в то время как датчик температуры медленно отрабатывает это изменение. Важно заметить, что эксперимент этот проходил прямо у меня на столе и изменение температуры было естественным — я ничего не трогал и искусственно ничего не нагревал.

И тут на помощь приходит тот же принцип, что и при измерении расстояния. Если помним, датчики у оригинального HC-SR04 расположены вместе, поэтому результаты не зависят от наличия ветра. Если измерить скорость звука на известном расстоянии сначала в одном направлении, а затем в другом, то разница этих двух показаний, деленная пополам и будет искомой скоростью ветра в проекции на эту ось. При этом, изменение температуры в диапазоне ±25°С дает погрешность ±4%, что абсолютно не критично и мы можем обойтись вообще без термометра. Да и зачем нам термометр? Если мы знаем время прохождения сигнала в обоих направлениях, то по формулам из прошлой статьи мы легко вычислим температуру, а значит сможем уточнить скорость ветра.
Есть лишь одна маленькая загвоздка — придется использовать два HC-SR04 на одной оси. В промышленных образцах датчики попеременно выполняют роль приемника и передатчика. В нашем случае для этого придется подключить пищалки напрямую к arduino и программно генерировать 8 импульсов 40 кГц на одной, после чего вычленять их из другой. Зная про определенные сложности на этом пути, мне представляется проще купить еще 2 датчика по 55 рублей и попытаться обойтись малой кровью. Этим я займусь в следующий раз. А пока на двух датчиках сделаю измерение скорости ветра по одной оси и измерение температуры в такой конфигурации. Главная проблема здесь убрать помехи, которые дают такой большой разброс показаний в спокойном воздухе.

Конструкция

Вооружившись паяльником конструкция была беспощадно распаяна на составляющие. Новую версию решил не делать так основательно, а зря. Никогда не угадаешь, где найдешь, где потеряешь. Получилось как-то так.
прототип 2 датчика вместе
Во-первых, приемник расположил как можно ближе к плате, а передатчик удалил всего лишь на 20 см. Второй комплект перевернул на 180 градусов и пищалки скрепил попарно изолентой. Чем точнее соблюсти соосность обоих пар датчиков, тем лучше. В идеале мы должны получить абсолютно идентичные показания скорости прохождения сигнала в обоих направлениях в спокойном воздухе. Натурные испытания подтвердили нашу теорию. В такой конфигурации получается мало помех и весьма точные показания независимо от температуры, что подтверждается графиком ниже.
диаграмма температур и скорости v2
Вначале я пробовал просто дуть по направлению от синей пары к черной. Моих легких явно недостаточно. Но любопытный факт — воздух в легких успел нагреться на 1°, что раньше вызвало бы скачок скорости на 1.5 м/с, т.к. DS18B20 просто ничего не заметил. Отметим, что мои легкие способны дать всего лишь 0.5 м/с. Дальше я включил большой напольный вентилятор и направил все также от синего к черному. Видно как пошел более прохладный воздух из глубины комнаты и даже DS18B20 начал отрабатывать это снижение, но теперь его значения не используются для расчета скорости. Сделал открытие, что мой вентилятор дует со скоростью около 2 м/с. Дальше в течение паузы видим постепенное увеличение температуры и отличную корреляцию между рассчитанной и измеренной температурой. В конце поставил вентилятор с другой стороны и получил 2 м/с в обратном направлении с падением температуры. Ура, товарищи, это работает!

Программа расчета скорости ветра

Код программы второй версии анемометра из двух ультразвуковых датчиков

Программа будет работать и без датчиков DHT-21 и DS18B20. DS18B20 для вычислений в этом коде нигде не задействован — только выводится в терминал как эталон. Без датчика влажности температура будет рассчитываться как для воздуха с 50% влажностью. На практике это вносит очень маленькую погрешность. На измерения скорости ветра эти датчики вообще не оказывают никакого влияния.

Собственно это все что можно выжать из двух HC-SR04. Для получения вектора скорости ветра на плоскости нужно добавить еще 2 датчика перпендикулярно первым и по формулам первой версии получить полную скорость и направление. Этим займусь как только приедут заказанные дополнительные датчики.

P.S.

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

Ультразвуковой анемометр на двух HC-SR04: 10 комментариев

  1. Евгений, может лучше гаджетом для сетей займемся? Нужен датчик наличия нелинейности в нагрузке. Некий шазам. Есть идея иметь автомат, который понимает что включено в доме. Контроль качества для сетей и система контроля за включенными дорашними потребителями. Для сетей более высоких классов — вычисление статических характеристик нагрузок…

    1. Да, Игорь, будет и для энергетики маленькие поделки. Планирую возродить свой старый проект частотомера, а на его основе добить дешёвый WAMS. Давно хочу померить угол между двумя розетками в Москве — это и есть прототип измерения стат-хар-к нагрузки от частоты. Я даже второй GPS уже купил. Что касается твоей идеи, то мой умный дом еще только на 1 ступеньке развития. «умный дом» — это и есть система контроля что включено. Если дать этой системе доступ к онлайн котировкам стоимости эл.эн., то будет энергосистеме счастье в виде ровного графика нагрузки :).

    2. Котировки — это дело далекое, а вот шазам для качества и диагностики оборудования дело архиважное. Дорога вамсам и цифровым подстанциям. Короче все что смарт — то если лезть в синусоиду

  2. Евгений, здравствуйте, очень занимательная статья, но продолжения нет почти год, у вас что то не получилось, или вы остановились на этом этапе?

    1. Была третья версия, когда приехали датчики. Было мало времени и крестовину я сделал тяп-ляп, поэтому появился отраженный сигнал и в целом система не заработала. Нужно переделывать крестовину, а времени пока на это нет. Скорее всего доделаю этой зимой.

      1. Все понятно! Желаю Вам удачи! Если есть возможность, можете скинуть на почту код для варианта с крестовиной, я не продвинутый пользователь, но очень хочется разобраться)

  3. Расскажи для новичка. Где взять библиотеки которые использовал ты
    #include
    #include
    #include

    И как правильно их установитьподключить?

  4. А если не переносить свистелки:
    Располагаем друг напротив друга 2 платы.
    Запускаем от одного и того же импульса.
    Только в одном цикле слушаем один, а в следующем — другой.
    Они ведь будут видеть первый по времени свист после запуска и думать, что это его собственный сигнал. А на второй они уже не среагируют…
    Меньше проводов. Только длину проводов с импульсами запуска нужно сделать одинаковыми…

    Ваше мнение?

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *