Мини-флюгер для ультразвукового анемометра
На фото – не фазово-импульсный дезинтегратор и даже не “Либератор”, а именно то, что вынесено в заголовок – анемометр гика.
Это прибор для измерения скорости ветра. Хотите узнать как выглядит анемометр нормального человека и зачем это мне нужо-добро пожаловать под кат!
Сам по себе флюгер донедавна для меня ценности не представлял, да и скорость ветра тоже не особо важна в повседневной жизни.
А вот количественная оценка энергии, переносимой воздушными массами – это интересный показатель.
Зачем? Чтобы знать стоит-ли строить ветряк!
Если честно, то цена компонетов для постройки ультразвукового анемометра приближается к стоимости готового карманного образца:
На фото-анемометр здорового человека 😉
Обычно это крыльчатки той или иной формы, ну или максимум конусы, какие можно увидеть на аэродромах:
Но таков путь, у опытного Ардуинщика чего только нет в ящике с компонентами, да и к томуже давно хотел попробовать в действии ультразвуковую конструкцию, описанную на сайте https://blog.regimov.net/
И конечно-же, требовалась мобильная версия, а тут еще “охотники за привидениями вышли” с их детектором паранормальной активности:
Поэтому решено было не встраивать анемометр в флюгер, а поступить вовсе даже наоборот 😉
Естественно скетч(программа) был переработан, поскольку добавлен экран 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 градусов.
Где,Где вы видели такой ветер – я там мельницы поставлю!
Собственно все – собираем устройство – пользуемся.
Линейку с датчиками следует располагать по ветру.
Особо продвинутые могут поставить кнопку включения вместо курка 😉
Всем удачи, а я пошел лопасти печатать да ветер ловить – и не пытайтесь меня останавливать!
Моя самодельная домашняя метеостанция на arduino nano | мои увлекательные и опасные эксперименты
Наблюдение за погодой – весьма увлекательное занятие. Я решил построить свою погодную станцию на базе популярного Arduino Nano 3.0.
Прототип метеостанции выглядит так:
Функции моей метеостанции:
Hex-файл прошивки для Arduino Nano 3.0 (версия от 9 мая 2022 года) – ws.ino.eightanaloginputs.hex.
Как прошить hex-файл в плату Arduino, я описал здесь.
Микроконтроллер Arduino Nano 3.0
“Сердцем” моей метеостанции является микроконтроллер Arduino Nano 3.0 (приобретен на торговой площадке eBay):
Для управления индикацией и опросом датчиков я использую таймер 1 Arduino, вызывающий прерывания с частотой 200 Гц (период – 5 мс).
Индикатор
Для отображения измеряемых показаний датчиков и текущего времени я подключил к Arduino четырехразрядный светодиодный индикатор Foryard FYQ-5643BH с общими анодами (аноды одинаковых сегментов всех разрядов объединены).
Индикатор содежит четыре семисегментных разряда и две разделительные (часовые) точки:
Аноды индикатора подключены через токограничивающие резисторы к выводам Arduino:
Катоды сегментов подключены к выводам Arduino:
Сегмент индикатора светится, если на аноде соответствующего разряда высокий потенциал (1), а на катоде – низкий (0).
Я использую динамическую индикацию для отображения информации на индикаторе – в каждый момент времени активен только один разряд. Активные разряды чередуются с частотой 200 Гц (период отображения 5 мс). При этом для глаз мерцание сегментов незаметно.
Датчик температуры DS18x20
Для возможности удаленного измерения температуры я подключил датчик DS1820, который обеспечивает измерение наружной температуры в широких пределах. Датчик подключается к шине 1-Wire и имеет три вывода – питание (VCC), данные (DAT), земля (GND):
Между выводами VCC и DAT я включил подтягивающий резистор сопротивлением 4,7 кОм.
Для перевода между градусами Цельсия и Фаренгейта можно использовать такую табличку:
Я разместил датчик за окном дома в пластиковом корпусе от шариковой ручки:
В профессиональных метеостанциях для защиты термометра от прямых солнечных лучей и обеспечения циркуляции воздуха используется экран Стивенсона (англ. Stevenson screen):
Датчик давления и температуры BMP280
Для измерения атмосферного давления традиционно используют ртутные барометры и барометры-анероиды.
В ртутном барометре атмосферное давление уравновешивается весом столба ртути, высота которого и ипользуется для измерения давления:
В барометре-анероиде используется сжатие и растяжение коробки под действием атмосферного давления:
Для измерения атмосферного давления и комнатной температуры в своей домашней метеостанции я использую датчик BMP280 – маленький SMD-датчик размером 2 x 2,5 мм, основанный на пьезорезистивной технологии:
Платка с датчиком приобретена на торговой площадке eBay:
Датчик подключается к шине I2C (контакт данных – SDA/SDI, контакт синхронизации – SCL/SCK):
Для работы с датчиком я использую библиотеку от Adafruit – файлы Adafruit_Sensor.h, Adafruit_BMP280.h, Adafruit_BMP280.cpp.
Единицы измерения атмосферного давления
Датчик через функцию readPressure выдает значение атмосферного давления в паскалях. Основной единицей измерения атмосферного давления служит гектопаскаль (гПа) (1 гПа = 100 Па), аналогом которого является внесистемная единица “миллибар” (мбар) (1 мбар = 100Па = 1гПа). Для перевода между часто используемой внесистемной единицей измерения давления “миллиметр ртутного столба” (мм рт. ст.) и гектопаскалями используются соотношения:
1гПа = 0,75006 мм рт. ст. ≈ 3/4 мм рт.ст.; 1 мм рт.ст. =1,3332 гПа ≈ 4/3 гПа.
Зависимость атмосферного давления от высоты над уровнем моря
Атмосферное давление может быть представлено как в абсолютной, так и в относительной форме.
Абсолютное давлениеQFE (англ. absolute pressure) – это актуальное атмосферное давление, не учитывающее поправку над уровнем моря.
Атмосферное давление уменьшается примерно на 1 гПа при повышении высоты на 1 м:
Барометрическая формула позволяет определить коррекцию показаний барометра для получения относительного давления (в мм рт. ст.):
$Delta P = 760 cdot (1 – {1 over {10^ { {0,0081350 cdot H} over {T 0,00178308 cdot H} }}})$ ,
где $T$ – средняя температура воздуха по шкале Ранкина, °Ra, $H$ – высота над уровнем моря, футы.
Перевод градусов Цельсия в градусы Ранкина:
$^{circ}Ra = {^{circ}C cdot 1,8} 491,67$
Барометрическая формула используется при барометрическом нивелировании – определении высот (с погрешностью 0,1 – 0,5 %). В формуле не учитывается влажность воздуха и изменение ускорения свободного падения с высотой. Для небольших перепадов высоты эту экспоненциальную зависимость можно с достаточной точностью аппроксимировать линейной зависимостью.
Относительное давлениеQNH (англ. relative pressure, Q-code Nautical Height) – это атмосферное давление, учитывающее поправку к среднему уровню моря (англ. Mean Sea Level,MSL) (для ISA и температуры 15 градусов Цельсия), и первоначально выставляется с учётом высоты, на которой находится метеостанция. Его можно узнать из данных метеослужбы, показаний откалиброванных приборов в публичных местах, аэропорту (из сводок METAR), из Интернета.
Например, для расположенного рядом аэропорта Гомель (UMGG) я могу посмотреть сводку фактической погоды METAR на ru.allmetsat.com/metar-taf/russia.php?icao=UMGG:
UMGG 191800Z 16003MPS CAVOK M06/M15 Q1014 R28/CLRD// NOSIG ,
где Q1014 – давление QNH на аэродроме равно 1014 гПа.
Историю сводок METAR можно получить на aviationwxchartsarchive.com/product/metar.
За нормальное относительное давление воздуха QNH принимается давление 760 мм рт. ст. или 1013,25 гПа (при температуре 0ºС, под широтой 45º Северного или Южного полушария).
Я выставил для барометра-анероида давление QNH с помощью винта настройки чуткости:
Прогноз погоды
Анализ изменения давления позволяет строить прогноз погоды, причем его точность тем выше, чем более резко меняется давление. Например, старое эмпирическое правило мореплавателей гласит – падение давления на 10 гПа (7,5 мм рт. ст.) за период 8 часов говорит о приближении сильного ветра.
Откуда же возникает ветер? Воздух стекается к центру области низкого давления, возникает ветер – горизонтальное перемещение воздуха из областей высокого давления в области низкого давления (высокое атмосферное давление выдавливает воздушные массы в область низкого атмосферного давления). Если давление очень низкое, ветер может достигать силы шторма. При этом в области пониженного давления (барическая депрессия или циклон) теплый воздух поднимается вверх и формирует облака, которые часто приносят дождь или снег.
За направление ветра в метеорологии принимается направление, откуда дует ветер:
Это направление сводится к восьми румбам.
Для предсказания погоды на основе атмосферного давления и направления ветра часто используется алгоритм Zambretti.
Датчик влажности
Для определения относительной влажности воздуха я использую модуль DHT11 (приобретен на торговой площадке eBay):
Датчик влажности DHT11 имеет три вывода – питание ( ), данные (out), земля (–):
Для работы с датчиком я использую библиотеку от Adafruit – файлы DHT.h, DHT.cpp.
Влажность воздуха характеризует количество водяного пара, содержащегося в воздухе. Относительная влажность показывает долю влаги в воздухе (в процентах) по отношению к максимальному возможному количеству при текущей температуре. Для измерения относительной влажности служит гигрометр:
Для человека оптимальный интервал влажности воздуха – 40 … 60 %.
Часы реального времени
В качестве часов реального времени я применил модуль RTC DS1302 (платка с часиками приобретена на торговой площадке eBay):
Модуль DS1302 подключается к шине 3-Wire. Для использования этого модуля совместно с Arduino разработана библиотека iarduino_RTC (от ianemometers.ru).
Плата с модулем DS1302 имеет пять выводов, которые я соединил с выводами платы Arduino Nano:
Для сохранения верных показаний часов при отключенном питании в гнездо на плате я вставил батарейку CR2032.
Точность моего часового модуля оказалась не слишком высокой – часы спешат примерно на одну минуту за четверо суток. Поэтому я сделал сброс минут на “ноль” и часа на ближайший при удержании кнопки, подключенной к выводу A0 Arduino, после включения питания метеостанции. После инициализации вывод A0 используется для передачи данных через последовательное соединение.
Передача данных на компьютер и работа по протоколу MQTT
Для передачи данных через последовательное соединение к Arduino подключается USB–UART преобразователь:
Вывод Arduino используется для передачи данных в формате 8N1 (8 бит данных, без бита четности, 1 стоп-бит) со скоростью 9600 бит/с. Данные передаются пакетами, причем длина пакета – 4 символа. Передача данных осуществляется в “bit-bang” режиме, без использования аппаратного последовательного порта Arduino.
Формат передаваемых данных:
MQTT
Я разработал на языке программирования Golang приложение – клиент протокола MQTT, отправляющую принятую от метеостанции информации на сервер (MQTT-брокер) cloudmqtt.com:
Сервис CloudMQTT позволяет создать акаунт с бесплатным тарифным планом “Cute Cat” (ограничения: 10 соединений, 10 Кб/с):
Для мониторинга показаний метеостанции при этом можно использовать Android-приложение MQTT Dash:
Питание
Для питания метеостанции я использую зарядное устройство от старого мобильного телефона Motorola, выдающее напряжение 5 В с током до 0,55 А и подключаемое к контактам 5V ( ) и GND (-):
Также можно использовать для питания батарейку напряжением 9 В, подключаемую к контактам VIN ( ) и GND (-).
Эксплуатация метеостанции
При запуске происходит инициализация и проверка датчиков.
При отсутствии датчика DS18x20 выдается ошибка “E1”, при отсутствии датчика BMP280 – ошибка “E3”.
Затем запускается рабочий цикл метеостанции:
Видео работы моей метеостанции доступно на моем YouTube-канале: https://youtu.be/vVLbirO-FVU
Отображение температуры
При измерении температуры индицируется две цифры температуры и для отрицательной температуры знак “минус” (с символом градуса в крайнем правом разряде);
для наружной температуры знак градуса отображается вверху:
для комнатной температуры – внизу:
Отображение давления
При измерении давления индицируются три цифры давления в мм ртутного столба (с символом “P” в крайнем правом разряде):
Если давление резко упало, то вместо символа “P” в крайнем правом разряде отображается символ “L“, если резко выросло – то “H“. Критерий резкости изменения – 8 мм рт. ст. за 8 часов:
Так как моя метеостанция отображает абсолютное давление (QFE), то показания оказываются несколько заниженными по сравнению со сведениями в сводке METAR (в которой приводится QNH) (14 UTC 28 марта 2022 года):
Отношение давлений (по сведениями ATIS) составило ${1015 over 998} = 1,017$. Возвышение аэропорта Гомель (код ИКАО UMGG) над уровнем моря составляет 143,6 м. Температура по данным ATIS составляла 1 °C.
Показания моей метеостанции практически совпали с абсолютным давлением QFE по сведениями ATIS!
Максимальное/минимальное давления (QFE), зарегистрированные моей метеостанцией за все время наблюдений:
Отображение относительной влажности воздуха
Относительная влажность воздуха отображается в процентах (в двух правых разрядах отображается символ процента):
Отображение текущего времени
Текущее время отображается на индикаторе в формате “ЧЧ:ММ”, причем разделительное двоеточие мигает раз в секунду:
Отображение фаз Луны и лунного дня
Первые два разряда индикатора отображают текущую лунную фазу, а следующие два – текущий лунный день:
У Луны выделяются восемь фаз (приведены английские и русские (синим цветом – неточные) названия):
На индикаторе фазы отображаются пиктограммами:
Передача данных на компьютер
Если соединить метеостанцию с USB–UART преобразователем (например, на базе микросхемы CP2102), подключенным к USB-порту компьютера, то можно с помощью терминальной программы наблюдать передаваемые метеостанцией данные:
Я разработал на языке программирования golang программу, ведущую журнал метеонаблюдений и отправляющую данные в сервис CloudMQTT, и их можно просматривать на Android-смартфоне с помощью приложения MQTT Dash:
По данным журнала метеонаблюдений можно, например, строить график изменения атмосферного давления:
пример графика с заметным минимумом давления
пример графика с незначительным ростом давления
Планируемые доработки:
В метеостанциях для измерения скорости ветра используется трехчашечный анемометр (1), а для определения направления ветра – флюгер (2):
Также для измерения скорости ветра используются термоанемометры с нитью накала (англ. hot wire anemometer). В качестве нагреваемой проволоки можно использовать вольфрамовую нить накала от лампочки с разбитым стеклом. В промышленно выпускаемых термоанемометрах датчик обычно располагается на телескопической трубке:
Принцип действия этого прибора заключается в том, что тепло отводится от нагревательного элемента вследствие конвекции воздушным потоком – ветром. При этом сопротивление нити накала определяется температурой нити. Закон изменения сопротивления нити накала $R_T$ от температуры $T$ имеет вид:
$R_T = R_0 cdot (1 {alpha cdot (T – T_0)})$ ,
где $R_0$ – сопротивление нити при температуре $T_0$, $alpha$ – температурный коэффициент сопротивления (для вольфрама $alpha = 4,5cdot{10^{-3} {^{circ}{C^{-1}}}}$).
С изменением скорости воздушного потока изменяется температура при неизменном токе накала (анемометр с постоянным током, англ. CCA). Если температура нагревательного элемента поддерживается постоянной, то ток через элемента будет пропорционален скорости воздушного потока (анемометр с постоянной температурой, англ. CTA).
Продолжение следует