Аудиоинформер скорости ветра [Амперка / Вики]

Аудиоинформер скорости ветра [Амперка / Вики] Анемометр
Содержание
  1. Что это такое?
  2. Вычисление некоторых основных статистических данных за период наблюдений и их визуализация
  3. P.p.s. 2022
  4. Визуализация ветра за последние три часа
  5. Визуализация данных о почасовой облачности и давления и нахождение тренда давления
  6. Визуализация температуры, влажности воздуха и точки росы в зависимости от времени
  7. Вторая версия
  8. Зачем знать направление и силу ветра
  9. Использование медианного фильтра для удаления недостоверных данных
  10. Использование порогового фильтра для удаления выброса данных
  11. Как определить направление ветра
  12. Как просто определить с какой стороны дует ветер
  13. Конструкция
  14. Мини-флюгер для ультразвукового анемометра
  15. Очистка данных от недостоверных измерений
  16. Первая версия
  17. Получение данных о погоде из thingspeak
  18. Получение и обработка данных о погоде за дождливый день в новой англии
  19. Приборы, определяющие скорость ветра и его направление
  20. Расчет точки росы
  21. Сила ветра
  22. Список оборудования
  23. Шаг 1: размещение метеостанции
  24. Шаг 2: выбор аппаратного обеспечения
  25. Шаг 3: подключение передатчика метеостанции и программирование наружной arduino
  26. Шаг 4: подключение приемника погодной станции и программирование arduino, находящегося в помещении
  27. Вывод
  28. Заключение

Что это такое?

В этой статье мы расскажем о том, как собрать информер скорости ветра. Наше устройство будет сообщать об изменении скорости ветра проигрыванием различных аудиофайлов. Каждой скорости будет соответствовать свой аудиофайл.

Вычисление некоторых основных статистических данных за период наблюдений и их визуализация

Чтобы получить лучшее понимание наших данных, мы находим минимальное, максимальное и среднее значения для данных, которые мы импортировали и мы находим время, для максимальных и минимальных значений.Это дает нам быстрый путь к валидации данных с нашей метеостанции.

[maxData,index_max] = max(d);
maxData = maxData';
times_max = datestr(t(index_max));
times_max = cellstr(times_max);
[minData,index_min] = min(d);
minData = minData';
times_min = datestr(t(index_min));
times_min = cellstr(times_min);
meanData = mean(d);
meanData = meanData'; % make column vector
summary = table(availableFields,maxData,times_max,meanData,minData,times_min) % display
summary = 

              availableFields               maxData          times_max       
    ____________________________________    _______    ______________________

    'Wind Direction (North = 0 degrees)'      338      '10-Jul-2022 05:01:32'
    'Wind Speed (mph)'                        6.3      '10-Jul-2022 12:47:14'
    '% Humidity'                             86.5      '15-Jul-2022 04:51:24'
    'Temperature (F)'                        96.7      '12-Jul-2022 16:28:55'
    'Rain (Inches/minute)'                   0.04      '15-Jul-2022 13:47:13'
    'Pressure ("Hg)'                        30.23      '11-Jul-2022 09:25:07'
    'Power Level (V)'                        4.44      '10-Jul-2022 10:25:01'
    'Light Intensity'                        0.06      '12-Jul-2022 13:23:38'

    meanData     minData          times_min       
    _________    _______    ______________________

          NaN        0      '10-Jul-2022 04:54:32'
       3.0272        0      '10-Jul-2022 01:33:14'
       57.386     25.9      '12-Jul-2022 13:39:39'
       80.339     69.6      '11-Jul-2022 06:59:54'
    5.625e-05        0      '10-Jul-2022 01:02:11'
        30.04    29.78      '15-Jul-2022 13:04:08'
       4.4149     4.38      '11-Jul-2022 09:22:06'
    0.0092475        0      '10-Jul-2022 01:02:11'

Если мы получаем неожиданные значения, такие как максимальное атмосферное давление 40 атмосфер или максимальную температуру 1700 градусов, мы можем предположить, что данные некорректны. Такие ошибки могут происходить из-за ошибок передачи, выбросов напряжения и других причин.

Для приведенного выше кода, мы использовали табличный тип данных, впервые введенный в MATLAB R2022b.См запись в блоге для дальнейшего ознакомления с этим типом данных.

P.p.s. 2022

По многочисленным просьбам выкладываю итоговый скетч, который не требует никаких библиотек (кроме стандартной EEPROM) и работает с 4 датчиками. Код со всякими вкусностями типа встроенной калибровки и сохранением калибровочных значений в энергонезависимую память.

И самое главное. Описанная выше проблема с погрешностями по одной из осей была связана не с проводами, а с работающими в одной комнате с датчиками импульсными блоками питания компьютера, монитора и т.п. (их схема преобразования работает на близкой частоте 40 кГц).

Я остановился на проблеме выноса датчика на улицу подальше от помех (с передачей данных по блютус). В остальном это работает. Это версия для распаянных датчиков, но есть способ не распаивать. Если вернусь к проекту — реализую.Для этого кода неважно какое расстояние между датчиками.

t21.5u

Первая — текущая температура по эталонному термометру (любой уличный), вторая — говорит контроллеру что сейчас скорость ветра 0. Согласно этим данным он вычислит расстояние между датчиками и запишет их в EEPROM. Все дальнейшие измерения будут отталкиваться от этих значений.

Визуализация ветра за последние три часа

Так как наша погодная станция получает метеорологические сводки примерно раз в минуту, мы смотрим на последние 180 минут, что бы ответить на наш вопрос о том, какой ветер был в последние 3 часа, и мы используем Compass plot в MATLAB, чтобы увидеть скорость и направление ветра в интересующий времени.

Это математический компас, где Север (0 градусов) находится справа, и значения градуса увеличиваются против часовой стрелки. 90 градусов представляет Восток (вверху), 180 градусов представляет юг (слева) и 270 градусов представляет Запад (внизу). Если не произошло сдвига ветра из-за грозы или при лобовом проходе, компас, как правило, показывает преимущественное направление ветра, обозначенное стрелками более высокой плотности на графике.

figure(1)
windDir = windDir((end-180):end); % last 3 hours
windSpeed = windSpeed((end-180):end);
rad = windDir*2*pi/360;
u = cos(rad) .* windSpeed; % x coordinate of wind speed on circular plot
v = sin(rad) .* windSpeed; % y coordinate of wind speed on circular plot
compass(u,v)
titletext = strcat(' for last 3 hours ending on: ',datestr(now));
title({'Wind Speed, MathWorks Weather Station'; titletext})

Аудиоинформер скорости ветра [Амперка / Вики]

Визуализация данных о почасовой облачности и давления и нахождение тренда давления

После того как мы предварительно обработали наши данные, мы готовы визуализировать их. Здесь мы используем MATLAB, для нахождения линии тренда к данным барометрического давления. Если построить график, увидим ли мы падение давления перед тяжелым ливнем?

figure(3)
subplot(2,1,1)
bar(timestamps,rainHourly) % plot rain
xlabel('Date and Time')
ylabel('Rainfall (inches /per hour)')
grid on
datetick('x','dd-mmm HH:MM','keeplimits','keepticks')
title('Rainfall on June 4 and 5')
subplot(2,1,2)
hold on
plot(timestamps,baroHourly) % plot barometer
xlabel('Date and Time')
ylabel(availableFields(6))
grid on
datetick('x','dd-mmm HH:MM','keeplimits','keepticks')
detrended_Baro = detrend(baroHourly);
baroTrend = baroHourly - detrended_Baro;
plot(timestamps,baroTrend,'r') % plot trend
hold off
legend('Barometric Pressure','Pressure Trend')
title('Barometric Pressure on June 4 and 5')

Аудиоинформер скорости ветра [Амперка / Вики]

После того, как мы визуализируем эти данные и посмотрим на тренд, мы ясно видим, что атмосферное давление действительно падает ровно до начала осадков!

Визуализация температуры, влажности воздуха и точки росы в зависимости от времени


Теперь, когда мы рассчитали точку росы, мы готовы визуализировать данные и наблюдать их поведение в течение последних 5 или 6 дней.

figure(2)
[ax, h1, h2] = plotyy(t,[tempF tdpf],t,humidity);
set(ax(2),'XTick',[])
set(ax(2),'YColor','k')
set(ax(1),'YTick',[0,20,40,60,80,100])
set(ax(2),'YTick',[0,20,40,60,80,100])
datetick(ax(1),'x','keeplimits','keepticks')
set(get(ax(2),'YLabel'),'String',availableFields(3))
set(get(ax(1),'YLabel'),'String',availableFields(4))
grid on
legend('Location','South','Temperature','Dew point', 'Humidity')

Аудиоинформер скорости ветра [Амперка / Вики]

Во время обычной недели, вы можете ясно видеть суточные изменения температуры и влажности. Как и ожидалось относительная влажность, как правило, возрастает ночью (при понижении температуры к точке росы) и максимальные температуры, как правило, достигаются во второй половине дня.

Температура точки росы указывает влажность воздушных масс. Когда мы собрали данные для публикации этого примера, вы можете видеть, что точка росы была более 70 градусов, что является типичной для жаркого и влажного летнего дня в Новой Англии.Если вы запустите этот код в MATLAB, вы можете получить разные ответы, по мере того, как вы будете запрашивать самые последние данные, сообщенные метеостанцией.

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

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

И тут на помощь приходит тот же принцип, что и при измерении расстояния. Если помним, датчики у оригинального HC-SR04 расположены вместе, поэтому результаты не зависят от наличия ветра. Если измерить скорость звука на известном расстоянии сначала в одном направлении, а затем в другом, то разница этих двух показаний, деленная пополам и будет искомой скоростью ветра в проекции на эту ось.

Про анемометры:  Каким прибором измеряется направление и скорость ветра

При этом, изменение температуры в диапазоне ±25°С дает погрешность ±4%, что абсолютно не критично и мы можем обойтись вообще без термометра. Да и зачем нам термометр? Если мы знаем время прохождения сигнала в обоих направлениях, то по формулам из прошлой статьи мы легко вычислим температуру, а значит сможем уточнить скорость ветра.

Есть лишь одна маленькая загвоздка — придется использовать два HC-SR04 на одной оси. В промышленных образцах датчики попеременно выполняют роль приемника и передатчика. В нашем случае для этого придется подключить пищалки напрямую к arduino и программно генерировать 8 импульсов 40 кГц на одной, после чего вычленять их из другой.

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

Зачем знать направление и силу ветра

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

Занятия людей на открытом воздухе также зависят от ветра. При сильном ветре не поиграешь в бадминтон, в теннис, волейбол. Чрезвычайно важно знать, куда и с какой силой он дует для парашютистов, дельтапланеристов и т. д. А, зная когда ветреная погода, можно подгадать время и запустить воздушного змея.

Работа различных служб тоже координируется в соответствии с ветром. Самый простой пример – это авиация. Важно заранее знать погоду на том маршруте, по которому следует самолет, чтобы одобрить или отменить полет. При тушении лесных пожаров с воздуха, то, куда дует ветер, тоже учитывается. Это нужно для того, чтобы верно сбросить воду на горящую площадь.

Использование медианного фильтра для удаления недостоверных данных

Еще один способ удаления плохих данных — применить медианный фильтр. Медианный фильтр не требует столько знаний о наборе данных. Он будет просто удаляет значения, которые оказываются вне среднего ближайших соседей. Результаты фильтрации — вектор той же длины что и исходный, в отличие от удаление точек данных, что приводит к разрывам в данных и укорачиванию записи. Этот тип фильтра также может быть использован для удаления шума из сигнала.

n = 5; % this value determines the number of total points used in the filter

Большие значения n обозначают количество «соседей» для сравнения. При температурах, собранных раз в минуту, мы выбираем n = 5, потому что температура не должна, как правило, сильно меняться в течение 5 минут.

f = medfilt1(rawTemperatureData,n);
figure(5)
subplot(2,1,2)
plot(t,f,'-o')
datetick
xlabel('Time of Day')
ylabel(availableFields(4))
title('Filtered Data - using median filter')
grid on
subplot(2,1,1)
plot(t,rawTemperatureData,'-o')
datetick
xlabel('Time of Day')
ylabel(availableFields(4))
title('Original Data')
grid on

Аудиоинформер скорости ветра [Амперка / Вики]

Использование порогового фильтра для удаления выброса данных

Удаление элементов, которые не прошли пороговый тест. В этом случае, у нас есть некоторые значения, которые заведомо недостоверны, такие как значение температуры -1766 градусов по Фаренгейту. Поэтому можно использовать данные, которые включают в себя только значения температуры, между 0 и 120, которые являются приемлемыми величинами для весеннего дня в Новой Англии.

tnew = t';
outlierIndices = [find(rawTemperatureData < 0); find(rawTemperatureData > 120)];
tnew(outlierIndices) = [];
newTemperatureData(outlierIndices) = [];

Построим графики очищенных и исходных данных.

figure(4)
subplot(2,1,2)
plot(tnew,newTemperatureData,'-o')
datetick
xlabel('Time of Day')
ylabel(availableFields(4))
title('Filtered Data - outliers deleted')
grid on
subplot(2,1,1)
plot(t,rawTemperatureData,'-o')
datetick
xlabel('Time of Day')
ylabel(availableFields(4))
title('Original Data')
grid on

Аудиоинформер скорости ветра [Амперка / Вики]

Как определить направление ветра

Направление ветра определяют по сторонам горизонта. Считают, откуда перемещается воздух, такое направление имеет ветер. Он может быть разным: северным, южным, западным, восточным. Может иметь промежуточное направление.

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

Куда или откуда перемещается воздух — очень важно для населения. Если знать, откуда воздух перемещается, можно предсказать погоду на ближайшие дни.

Например, в тех же умеренных широтах России с умеренно континентальным климатом западные ветры принесут зимой потепление и снегопады. Летом — похолодание и дожди. Воздух на территорию двигается с Атлантического океана, он влажный, поэтому даёт осадки. Летом морской воздух имеет более низкую температуру, чем континентальный. Зимой морской воздух теплее.

Направление, откуда и куда дует ветер, всегда имело значение для человека. В прошлом мореходы использовали направление ветра для плавания по морям и океанам. Люди строили ветряные мельницы. Животные узнают многое о среде обитания через ветер.

Для определения направления ветра используют флюгер. Он всегда показывает ту сторону горизонта, откуда перемещается воздух.

Определение ветра с помощью флюгера
Рис. 1. Определение ветра с помощью флюгера.

Как просто определить с какой стороны дует ветер

Иногда возникает необходимость в таких знаниях. Когда нужно быстро узнать, куда дует ветер, а под рукой нет телефона с Интернетом, флюгера и т. д, можно воспользоваться этими простыми способами:

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

Конструкция

Вооружившись паяльником конструкция была беспощадно распаяна на составляющие. Новую версию решил не делать так основательно, а зря. Никогда не угадаешь, где найдешь, где потеряешь. Получилось как-то так.
прототип 2 датчика вместе
Во-первых, приемник расположил как можно ближе к плате, а передатчик удалил всего лишь на 20 см. Второй комплект перевернул на 180 градусов и пищалки скрепил попарно изолентой. Чем точнее соблюсти соосность обоих пар датчиков, тем лучше. В идеале мы должны получить абсолютно идентичные показания скорости прохождения сигнала в обоих направлениях в спокойном воздухе. Натурные испытания подтвердили нашу теорию. В такой конфигурации получается мало помех и весьма точные показания независимо от температуры, что подтверждается графиком ниже.
диаграмма температур и скорости v2
Во-первых, приемник расположил как можно ближе к плате, а передатчик удалил всего лишь на 20 см. Второй комплект перевернул на 180 градусов и пищалки скрепил попарно изолентой. Чем точнее соблюсти соосность обоих пар датчиков, тем лучше. В идеале мы должны получить абсолютно идентичные показания скорости прохождения сигнала в обоих направлениях в спокойном воздухе. Натурные испытания подтвердили нашу теорию. В такой конфигурации получается мало помех и весьма точные показания независимо от температуры, что подтверждается графиком ниже.
Аудиоинформер скорости ветра [Амперка / Вики]

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

Про анемометры:  ▷ Купить метеостанции с отображением скорости и направления ветра с E-Katalog - цены интернет-магазинов России на метеостанции с отображением скорости и направления ветра - в Москве, Санкт-Петербурге

Мини-флюгер для ультразвукового анемометра

Мини-флюгер для ультразвукового анемометраНа фото – не фазово-импульсный дезинтегратор и даже не “Либератор”, а именно то, что вынесено в заголовок – анемометр гика.

Это прибор для измерения скорости ветра. Хотите узнать как выглядит анемометр нормального человека и зачем это мне нужо-добро пожаловать под кат!

Сам по себе флюгер донедавна для меня ценности не представлял, да и скорость ветра тоже не особо важна в повседневной жизни.

А вот количественная оценка энергии, переносимой воздушными массами – это интересный показатель.

Зачем? Чтобы знать стоит-ли строить ветряк!

Если честно, то цена компонетов для постройки ультразвукового анемометра приближается к стоимости готового карманного образца:

Мини-флюгер для ультразвукового анемометра

На фото-анемометр здорового человека 😉

Обычно это крыльчатки той или иной формы, ну или максимум конусы, какие можно увидеть на аэродромах:

Мини-флюгер для ультразвукового анемометраНо таков путь, у опытного Ардуинщика чего только нет в ящике с компонентами, да и к томуже давно хотел попробовать в действии ультразвуковую конструкцию, описанную на сайте https://anemometers.ru/

И конечно-же, требовалась мобильная версия, а тут еще “охотники за привидениями вышли” с их детектором паранормальной активности:

Мини-флюгер для ультразвукового анемометраПоэтому решено было не встраивать анемометр в флюгер, а поступить вовсе даже наоборот 😉

Естественно скетч(программа) был переработан, поскольку добавлен экран LCD1602-i2c и вычисление энергии ветра.

Да, она вопреки ожиданиям зависит от куба скорости: E=(M*V^3)/2 , именно поэтому знать скорость ветра так важно.

На самом деле, медведь межу датчиками, как на заглавном фото мешал работе анемометра, поэтому был сделан “медведь на палочке” 😉

Мини-флюгер для ультразвукового анемометраПочему флюгер-медведь?

Все просто – для участия в конкурсе “Учим медведей летать” 

Мини-флюгер для ультразвукового анемометраК слову, медведи начали летать еще когда матушка-природа даже и не задумывалась о создании человека.

Правда не по своей воле – ураган с силой ветра более 33м/с способен поднять в воздух хоть лося, хоть медведя.

 Я ни разу не художник, а потому взял, да и сделал белого медведя черным 😉

Правда первый образец получился уж очень “олимпийским” и сильно походил на пуму:

Мини-флюгер для ультразвукового анемометраМоделирование произошло до ужаса банально – приложил лист А4 к экрану, обвел маркером, сфотографировал и загрузил в Paint.

Дальше-проще – преобразовал монохромный битмап в svg онлайн 

Конечно, есть 100500 других способов, тот-же 3D Builder, но на вкус все фломастеры разные 😉

А в данной разработке основное – это електроника!

Нам понадобится:

– Arduino Nano

– 2 ультразвуковых датчика расстояния HC-SR04

– экран LCD1602-i2c

– датчик влажности-температуры DHT-11/21 (плотность воздуха растет на треть при охлаждении от 50 до -20 градусов Цельсия)

– держатель батареи “Крона”

– 2-рядная гребенка контактов PLS с шагом 2.54мм длинной 15мм

– линейка 30см

Ах да, еще придется рискуя жизнью пробраться к секретному военному обьекту, снять часового и открутить пистолетную рукоятку автомата.

Шутка 😉

Ничего этого делать не надо – достаточно скачать и распечатать модель рукоятки АК-12 

Тепрь о сборке – в Ардуино ВСЕГДА не хватает контнтактов питания, поэтому я запаял/распаралелил контакты питания гребенкой PLS:

Мини-флюгер для ультразвукового анемометраВот так – хватит!

Держатель батареи паяется на контакты Vin(плюс) и Gnd(минус)

Экранчик подключается следующим образом:

Мини-флюгер для ультразвукового анемометраРаспиновка датчика влажности/температуры:

Мини-флюгер для ультразвукового анемометраКстати, DHT-11 – тормозной, глюкавый и неточный, лучше взять DHT-21 (но дороже 😉

С остальными подключениями справится даже школьник – по маркировке на компонентах и полям #define программы :

#include

#include

#include

#include

LiquidCrystal_I2C lcd(0x27,16,2); // set display

#define Trig 4 // HC-SR04 №1

#define Echo 2

#define Trig2 8 // HC-SR04 №2

#define Echo2 12

#define Steps

#define DHTPIN 3 // DHT21

// Uncomment whatever type you’re using!

#define DHTTYPE DHT11 // DHT 11

//#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321

//#define DHTTYPE DHT21 // DHT 21 (AM2301)

static const float defDist = .3; // m

static const float defDist2 = .3; // m

float Tcalc = 0;

unsigned int speed1 = 0;

float density[]={1.395, 1.342, 1.293, 1.247, 1.205, 1.165, 1.128, 1.093}; //air density table for teperatures from -20 to 50 Celsius with step 10

float energy = 0;

byte remap;

float squar = 0.333; //square of winf turbine

float efficiency = 0.4; // efficiency of winf turbine

DHT dht(DHTPIN, DHTTYPE);

void setup()

{

pinMode(Trig, OUTPUT);

pinMode(Echo, INPUT);

pinMode(Trig2, OUTPUT);

pinMode(Echo2, INPUT);

Serial.begin(57600);

 Serial.println(“Tdht Hum Velocity”);

  dht.begin();

  lcd.init();

  lcd.backlight();// turn on lcd backlight

}

unsigned long impulseTime=0;

void loop()

{

  float temp = 0;

  float DHTtemp = 0;

  float DHThum = 50;

  // READ DHT DATA

      DHTtemp = dht.readTemperature();

      DHThum = dht.readHumidity();

  float dist = 0;

  float dist2 = 0;

  unsigned long impulseTime=0;

  unsigned long impulseTime2=0;

  int N=50;

  for (int i = 0; i 0) {wd =90;} else {wd =270;}

  Serial.println(String(v));

  remap=map(DHTtemp, -20, 50, 0, 7);

  energy = squar*efficiency*density[remap]*pow(v, 3)/2; //windpower (m*v^3)/2

  lcd.setCursor(0, 0);

  lcd.print(“Speed:”);

  lcd.setCursor(7, 0);

  lcd.print(v);

  lcd.setCursor(0, 1);

  lcd.print(“Power:”);

  lcd.setCursor(7, 1);

  lcd.print(energy);

Да, скетч следует залить в микроконтроллер через Arduino IDE (задача для пятикласника 😉

Кстати, там есть два параметра:

float squar = 0.333; //площадь, ометаемая лопастями ветряка – та которая Пи*D

float efficiency = 0.4; // Эффективность ветряка (Коєфициент Использования Енергии Ветра)

Для ветряной мельницы последний меньше 0.1

Для ротора Савониуса – 0.2

Для современных лопастей на горизонтальной оси – 0.3

Ротор Дарье – 0.4

Это важно для расчета мощности конкретного ветряка при текущей скорости потока.

А то ушлые китайцы продают ветряки площадью 1м с заявленной мощностью 400Вт, что соответствует скорости ветра 10м/с при температуре 20 градусов.

Где,Где вы видели такой ветер – я там мельницы поставлю!

Собственно все – собираем устройство – пользуемся.

Линейку с датчиками следует располагать по ветру.

Особо продвинутые могут поставить кнопку включения вместо курка 😉

Всем удачи, а я пошел лопасти печатать да ветер ловить – и не пытайтесь меня останавливать!

Мини-флюгер для ультразвукового анемометра

Очистка данных от недостоверных измерений


Наши вопросы были довольно простыми, но иногда возникают проблемы с имеющимися данными. Например, 30 мая, мы записали несколько недостоверных данных о температуре. Давайте посмотрим, как использовать MATLAB для их фильтрации.

[d,t] = thingSpeakFetch(12397,'DateRange',{'5/30/2022','5/31/2022'});
rawTemperatureData = d(:,4);
newTemperatureData = rawTemperatureData;
minTemp = min(rawTemperatureData) % wow that is cold!
minTemp =

  -1.7662e 03

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

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

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

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

Получение данных о погоде из thingspeak

Чтобы ответить на наши первые два вопроса, мы используем команду

Про анемометры:  Как включить котел Protherm после отключения? - О технике - подключение, настройка и ремонт

для просмотра доступных полей данных, одновременного импорта всех полей в MATLAB и хранения данных о температуре, влажности, скорости ветра, и направления ветра в своих переменных. Документация о

[d,t,ci] = thingSpeakFetch(12397,'NumPoints',8000); % fetch last 8000 minutes of data

8000 точек — это максимальное количество точек, которое ThingSpeak позволяет запросить за раз. Для нашей частоты измерений, это соответствует примерно 6 дням измерений.

tempF = d(:,4); % field 4 is temperature in deg F
baro = d(:,6); % pressure in inches Hg
humidity = d(:,3); % field 3 is relative humidity in percent
windDir = d(:,1);
windSpeed = d(:,2);
tempC = (5/9)*(tempF-32); % convert to Celsius
availableFields = ci.FieldDescriptions'
availableFields =

'Wind Direction (North = 0 degrees)'
'Wind Speed (mph)'
'% Humidity'
'Temperature (F)'
'Rain (Inches/minute)'
'Pressure ("Hg)'
'Power Level (V)'
'Light Intensity'

Получение и обработка данных о погоде за дождливый день в новой англии

Последний вопрос, на который мы хотели ответить — действительно ли атмосферное давление падает перед дождем? Чтобы сделать это, мы получили данные из метеостанции за известный дождливый день. На этот раз, мы заинтересованы в барометрическом давлении и количестве осадков.

Мы использовали датчик самостоятельного опорожнения, который опорожняется, когда он заполнен. Наш датчик вращается и опорожняется, когда выпало 0,01 дюймов осадков.Наш код Arduino считает количество опорожнений за каждую минуту и передает соответствующее значение осадков в ThingSpeak.

[d,t,ci] = thingSpeakFetch(12397,'DateRange',{'6/4/2022','6/6/2022'}); % get data
baro = d(:,6); % pressure
extraData = rem(length(baro),60); % computes excess points beyond the hour
baro(1:extraData) = []; % removes excess points so we have even number of hours
rain = d(:,5); % rainfall from sensor in inches per minute

Действительно ли шел ливень 5 июня? Это трудно сказать, если мы просто посмотрим на каждую минуту передачи данных, так как максимальное значение составляет всего 0,01 дюйма. Однако, если суммировать все осадки за 5 июня, мы видим, что мы получили 0,48 дюйма осадков, что составляет 13% от среднемесячного 3,68 дюйма, что показывает, что день был действительно очень дождливым.

rain(1:extraData) = [];
t(1:extraData) = [];
rainHourly = sum(reshape(rain,60,[]))'; % convert to hourly summed samples
maxRainPerMinute = max(rain)
june5rainfall = sum(rainHourly(25:end)) % 24 hours of measurements from June 5
baroHourly = downsample(baro,60); % hourly samples
timestamps = downsample(t,60); % hourly samples
maxRainPerMinute =

    0.0100

june5rainfall =

    0.4800

Приборы, определяющие скорость ветра и его направление

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

  • Флюгер – один из самых простых приборов. Определяет направление ветра. Состоит из вертикальной опоры, на которой находится горизонтальная пластина. Одна половина этой пластины гораздо тяжелее второй, в связи с чем флюгер и вращается при ветре. Более легкая половина направлена по направлению ветра, тяжелая, наоборот. Самый простой флюгер – это какая-нибудь материя на шесте, например, флаг. В современных флюгерах присутствуют датчики, определяющие скорость ветра.
  • Ветроуказатель – это матерчатый конус, который надувается в сторону дуновения ветра.
  • Анемометр – современный прибор, показывающий, куда дует ветер. Представляет собой некий флюгер с лопастями. Лопасти показывают силу ветра, часть от флюгера его направление.

Расчет точки росы


Теперь мы готовы ответить на наш второй вопрос о том, как температура и точка росы менялись в течении

прошлой недели.Точка росы — это температура, при которой воздух (при охлаждении) становится насыщенным водяным паром. Чем более влажность воздушной массы, тем выше точка росы. Точка росы также иногда используется как мера дискомфорта. Когда точка росы превышает 65 градусов ( 18С), многие люди начинают говорить, что воздух «липкий».

Аудиоинформер скорости ветра [Амперка / Вики]

где

Аудиоинформер скорости ветра [Амперка / Вики]

Теперь, написав приведенные выше уравнения, как код MATLAB мы имеем:

b = 17.62;
c = 243.5;
gamma = log(humidity/100)   b*tempC ./ (c tempC);
tdp = c*gamma ./ (b-gamma);
tdpf = (tdp*1.8)   32;  % convert back to Fahrenheit

Сила ветра

Перемещение воздушных масс возникает в результате разницы в давлении. Ветер всегда дует из области высокого в область низкого давления.

Образование ветра
Рис. 2. Образование ветра.

Созданы различные приборы, которые помогают определить силу воздушного потока. На метеостанциях ведётся постоянное наблюдение за погодой. Чтобы узнать, в чем измеряется сила ветра, достаточно обратиться в СМИ. Обычно передаётся сообщение: «Сила ветра — 10 м/с».

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

Разработана шкала Бофорта, в которой заключена зависимость словесного и численного определения силы ветра. Одновременно указывается, какие изменения вызывает данный ветер на суше и на море.

Ураган
Рис. 3. Ураган.

Каждый человек должен знать, как определить направление и силу ветра, потому что это может быть важным для хозяйственной и повседневной деятельности.

Список оборудования

Аудиоинформер скорости ветра [Амперка / Вики]

Шаг 1: размещение метеостанции

Во-первых, мы должны были решить, где разместить нашу метеостанцию. Мы решили сделать это на верхнем этаже автостоянки. Место было выбрано, поскольку оно было под воздействием погодных явлений, но также и имело крышу для монтажа электроники. Из-за того, что мы в конечном счете хотели отдавать данные стороннему агрегатору данных, мы должны были учитывать это при выборе места и железа.

Аудиоинформер скорости ветра [Амперка / Вики]

Шаг 2: выбор аппаратного обеспечения

Выбранное расположение было вне радиуса действия Wi-Fi нашего здания, поэтому мы должны были найти способ передачи данных от станции к приемнику, который находился внутри соседнего здания.Чтобы сделать это, мы подсоединили Arduino Uno к передатчику высокой мощности XBee.

Шаг 3: подключение передатчика метеостанции и программирование наружной arduino

Внешнее Arduino установлено на гараже и отвечает за сбор измерений и передачу данных на Arduino в помещении. Для реализации такого обмена, сначала мы соединили контакты от Weather shield и XBee shield. Затем мы соединили XBee shield с Arduino Uno в соответствии с документацией, предоставленной с шилдами. В XBee shield есть XBee трансивер высокой мощности. Мы использовали программное обеспечение

для программирования нужного адреса получателя и загрузки нужной прошивки в  XBee shield. Анемометр, датчики ветра дождя были подключены к weather shield с помощью разъемов RJ-45, входящими в комплект поставки.

Шаг 4: подключение приемника погодной станции и программирование arduino, находящегося в помещении

Внутреннее Arduino находится внутри нашего здания, и отвечает за получение данных от наружного Arduino, за проверку достоверности данных, и их отправку на ThingSpeak.Чтобы построить такую систему, сначала мы припаяли контакты на Ethernet shield и второй XBee shield.Затем мы вставили Ethernet shield и XBee shield в Мега Arduino в соответствии с документацией. Мы вновь использовали

для программирования необходимого адреса получателя и загрузки нужной прошивку на XBee shield.

Далее, мы запрограммировали Arduino получить XBee сообщения и пересылать пакеты на ThingSpeak со скоростью один раз в минуту. Перед отправкой сообщения ThingSpeak, мы настроили учетную запись и сконфигурировали информацию о канале и расположении. Как только закончилась настройка передачи данных, мы начали анализировать данные в MATLAB.

Обратите внимание, что для воспроизведения анализа, приведенного в статье, вам не нужно покупать и настраивать оборудование.Текущие данные нашей станции доступны на канале 12 397.

Вывод


Итак, мы проанализировали данные с нашей метеостанции и ответили на интересующие нас вопросы.

Мы также продемонстрировали некоторые способы фильтрации данных, которые не проходят первоначальную проверку.

Вопросы, поставленные в статье, элементарны, но подумайте чего можно добиться собирая данные с тысячи станций? Кроме этого можно измерять и анализировать real-time изменения промышленных и научных систем и принимать решения на основе данных.

Заключение

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

Оцените статью
Анемометры
Добавить комментарий