Измерение относительной влажности воздуха психрометрическим методом при помощи МК

Если погуглить по фразе «измерение влажности при помощи микроконтроллера«, то поисковая система предложит вам использовать специальные датчики для измерения влажности — SHT21, DHT11 (DHT12, DHT21), BME280. HR202L (HR31), HTU21D и так далее. Зачастую эти датчики работают по шине I2C, и подключить их можно не более 1-2 штук к одному микроконтроллеру (например, BME280 и SHT21). Датчики семейства DHT требуют отдельный вывод микроконтроллера каждому датчику, да и точность их не велика. Точность датчиков BME280 выше чем у DHT11, но подключить их можно всего 2 . Но что делать если необходимо измерять влажность сразу в нескольких точках одновременно. да ещё и с достаточно высокой точностью? Что делать если точки измерения разнесены на значительные расстояния? Выход — использовать датчики температуры DS1820, для которых есть и герметичное исполнение для измерения температуры жидкости. Часть датчиков будет измерять температуру воздуха, другая часть температуру воды. расчеты будет проводить микроконтроллер, благо они не сложные. А теперь собственно к алгоритму измерения влажности.

Что бы измерить относительную влажность в процентах необходимо использовать формулу 

где е — парциальное давление водяного пара,

Ec(t) — давление насыщенного водяного пара. при температуре t (температура сухого термометра).

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

где Ec(t’) — давление насыщенного водяного пара. при температуре t (температура влажного термометра),

А — психрометрический коэффиицент: 0,795е-6 при естественном движении воздуха или 0,662е-6 при принудительном обдуве 2 м/с,

р — общее давление парогазовой смеси в гПа,

t — температура сухого термометра,

t’ — температура влажного термометра,

а — ещё один коэффициент равный 0,00115 (в подробности вдаваться не буду).

Температуру мы замерили, коэффициенты есть, необходимо вычислить давление насыщенного водяного пара, вычислить два раза, для сухого и влажного термометров. Это можно сделать по этой формуле (которую я не буду использовать, потому и не буду рассматривать её подробнее)

или по упрощенной, но менее точной формуле

где Е0=6,1121 гПа,

а = 17,5043

в = 241,2

t — температура (воды или воздуха, смотря в какую формулу вы собрались подставлять вычисленное значение)

Эту формулу я и буду использовать.

Сразу возникает вопрос насколько точна упрощенная формула. Ответ выражен в виде графика.

В пределах от 0 до 54 градусов по Цельсию погрешность примерно равна 0,1%, далее она начинает возрастать и при температуре 80 градусов составляет 1%, что все же выше точности датчика DHT11.

Я проверил эти формулы при помощи программы SMathStudio и получил достоверные, совпадающие с психрометрическими таблицами результаты.

Теперь собственно перейдем к программе для МК. Я специально не добавил в программу функции измерения температуры, так же закоментировал все выводы в serial port и задержки, для того что бы проверить, какой размер занимает скомпилированная программа. Несмотря на то, что программа была написана в ArduinoIDE, который не отличается бережным использованием памяти МК, размер скомпилированной программы составил всего 444 байт и 9 байт под переменные. 

Полный код программы для ArduinoIDE привожу ниже.

int Tc = 30; //температура сухого термометра
int Tv = 25; //температура влажного термометра

void setup() {
// Serial.begin(9600);
}

void loop() {
// Serial.print(«Tc=»);
// Serial.println(Tc);
// Serial.print(«Tcv=»);
// Serial.println(Tv);
/// Serial.print(«HR=»);
float Hum=HR(Tc, Tv);
// Serial.println(Hum);
//delay(1000);
}

float HR(float Tc, float Tv)
{
float Ec = E(Tc);
float Ev = E(Tv);
float e1 = Ev — 0.7945 * (Tc — Tv);
float HR = 100.0 * (e1 / Ec);
return HR;
}

float E(float T)
{
float E = 6.1121 * exp((17.5043 * T) / (241.2 + T));
return E;
}

Для того, чтобы увидеть результат работы программы в терминале уберите комментарии.

Поскольку давление насыщенного водяного пара необходимо вычислить два раза, для сухого и влажного термометров, то это формулу я вывел в отдельную функцию. Измерение давления здесь не производится и установлено давление воздуха 1000 гПа. 

P.S. Что можно измерить ещё двумя термометрами? Поскольку мы уже научились вычислять влажность воздуха, то можно так же вычислить точку росы по формулам 

и индекс жары по формуле (которая тоже является упрощенной формулой, подробнее смотрите на https://en.wikipedia.org/wiki/Heat_index )

где T и Air temperature — температура воздуха (формулу рисовал не я, не знаю почему так отделили),

Н — относительная влажность в процентах.

Эти формулы я так же проверил в программе SMathStudio, и они так же выдали достоверные результаты.

И наконец стоит рассказать о недостатке такого способа измерения влажности — необходимо постоянно доливать воду в колбу с влажным термометром.

Надеюсь эта короткая заметка будет вам полезна как начинающим, так и более опытным радиолюбителям.

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

Ваш адрес email не будет опубликован.