Моя самодельная домашняя метеостанция на Arduino Nano | Мои увлекательные и опасные эксперименты

Моя самодельная домашняя метеостанция на Arduino Nano | Мои увлекательные и опасные эксперименты Анемометр

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

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

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

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

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

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

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

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

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

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

Мини-флюгер для ультразвукового анемометраНо таков путь, у опытного Ардуинщика чего только нет в ящике с компонентами, да и к томуже давно хотел попробовать в действии ультразвуковую конструкцию, описанную на сайте 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):
Arduino Nano 3.0

Для управления индикацией и опросом датчиков я использую таймер 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 кОм.

Для перевода между градусами Цельсия и Фаренгейта можно использовать такую табличку:
перевод градусов Цельсия и Фаренгейта

Я разместил датчик за окном дома в пластиковом корпусе от шариковой ручки:
DS1820

В профессиональных метеостанциях для защиты термометра от прямых солнечных лучей и обеспечения циркуляции воздуха используется экран Стивенсона (англ. Stevenson screen):
экран Стивенсона

Датчик давления и температуры BMP280

Для измерения атмосферного давления традиционно используют ртутные барометры и барометры-анероиды.

В ртутном барометре атмосферное давление уравновешивается весом столба ртути, высота которого и ипользуется для измерения давления:
ртутный барометр

В барометре-анероиде используется сжатие и растяжение коробки под действием атмосферного давления:
барометр-анероид

Для измерения атмосферного давления и комнатной температуры в своей домашней метеостанции я использую датчик BMP280 – маленький SMD-датчик размером 2 x 2,5 мм, основанный на пьезорезистивной технологии:
датчик BMP280
Платка с датчиком приобретена на торговой площадке eBay:
BMP280

Датчик подключается к шине 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

Датчик влажности DHT11 имеет три вывода – питание ( ), данные (out), земля ():

Для работы с датчиком я использую библиотеку от Adafruit – файлы DHT.h, DHT.cpp.

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

Для человека оптимальный интервал влажности воздуха – 40 … 60 %.

Часы реального времени

В качестве часов реального времени я применил модуль RTC DS1302 (платка с часиками приобретена на торговой площадке eBay):
часы реального времени RTC

Модуль DS1302 подключается к шине 3-Wire. Для использования этого модуля совместно с Arduino разработана библиотека iarduino_RTC (от ianemometers.ru).

Плата с модулем DS1302 имеет пять выводов, которые я соединил с  выводами платы Arduino Nano:

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

Точность моего часового модуля оказалась не слишком высокой – часы спешат примерно на одну минуту за четверо суток. Поэтому я сделал сброс минут на “ноль” и часа на ближайший при удержании кнопки, подключенной к выводу A0 Arduino, после включения питания метеостанции. После инициализации вывод A0 используется для передачи данных через последовательное соединение.

Передача данных на компьютер и работа по протоколу MQTT

Для передачи данных через последовательное соединение к Arduino подключается USBUART преобразователь:

Вывод Arduino используется для передачи данных в формате 8N1 (8 бит данных, без бита четности, 1 стоп-бит) со скоростью 9600 бит/с. Данные передаются пакетами, причем длина пакета – 4 символа. Передача данных осуществляется в “bit-bang” режиме, без использования аппаратного последовательного порта Arduino.

Про анемометры:  ВАЗ 2114: Ремонт и замена датчика положения дроссельной заслонки - Как отремонтировать ВАЗ

Формат передаваемых данных:

MQTT

Я разработал на языке программирования Golang приложение – клиент протокола MQTT, отправляющую принятую от метеостанции информации на сервер (MQTT-брокер) cloudmqtt.com:
CloudMQTT
Сервис CloudMQTT позволяет создать акаунт с бесплатным тарифным планом “Cute Cat” (ограничения: 10 соединений, 10 Кб/с):
Cute Cat

Для мониторинга показаний метеостанции при этом можно использовать Android-приложение MQTT Dash:
MQTT Dash

Питание

Для питания метеостанции я использую зарядное устройство от старого мобильного телефона Motorola, выдающее напряжение 5 В с током до 0,55 А и подключаемое к контактам 5V ( ) и GND (-):
блок питания метеостанции
Также можно использовать для питания батарейку напряжением 9 В, подключаемую к контактам VIN ( ) и GND (-).

Эксплуатация метеостанции

При запуске происходит инициализация и проверка датчиков.

При отсутствии датчика DS18x20 выдается ошибка “E1”, при отсутствии датчика BMP280 – ошибка “E3”.

Затем запускается рабочий цикл метеостанции:

YouTube
Видео работы моей метеостанции доступно на моем 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), зарегистрированные моей метеостанцией за все время наблюдений:

Отображение относительной влажности воздуха

Относительная влажность воздуха отображается в процентах (в двух правых разрядах отображается символ процента):
измерение влажности воздуха

Отображение текущего времени

Текущее время отображается на индикаторе в формате “ЧЧ:ММ”, причем разделительное двоеточие мигает раз в секунду:
метеостанция на Arduino

Отображение фаз Луны и лунного дня

Первые два разряда индикатора отображают текущую лунную фазу, а следующие два – текущий лунный день:
погодная станция на Arduino

У Луны выделяются восемь фаз (приведены английские и русские (синим цветом – неточные) названия):
фазы Луны

На индикаторе фазы отображаются пиктограммами:

Передача данных на компьютер

Если соединить метеостанцию с USBUART преобразователем (например, на базе микросхемы CP2102), подключенным к USB-порту компьютера, то можно с помощью терминальной программы наблюдать передаваемые метеостанцией данные:
метеостанция

Я разработал на языке программирования golang программу, ведущую журнал метеонаблюдений и  отправляющую данные в сервис CloudMQTT, и их можно просматривать на Android-смартфоне с помощью приложения MQTT Dash:
метеостанция с MQTT

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

Планируемые доработки:

В метеостанциях для измерения скорости ветра используется трехчашечный анемометр (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).

Продолжение следует

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