Если погуглить по фразе "измерение влажности при помощи микроконтроллера", то поисковая система предложит вам использовать специальные датчики для измерения влажности - 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, и они так же выдали достоверные результаты.
И наконец стоит рассказать о недостатке такого способа измерения влажности - необходимо постоянно доливать воду в колбу с влажным термометром.
Надеюсь эта короткая заметка будет вам полезна как начинающим, так и более опытным радиолюбителям.
Комментарии (22) | Я собрал (0) | Подписаться
Для добавления Вашей сборки необходима регистрация
Даже если использовать дистиллированую воду, то все-равно придется периодически менять ткань или вату, подводящую воду к влажному датчику температуры. Гниение. А если заливать не дистиллят, то проблемы утраиваются.
Защищать все это от движения воздуха, не говоря уж о прямых лучах солнца. Т.е. требуется периодическое (вряд ли сильно реже, чем раз в неделю) техническое обслуживание. А так ли уж важна такая точность? С ДНТ все будет куда проще и стабильнее. Решайте сами, стоит ли идти таким путем на нескольких точках, разнесенных на значительные расстояния.
[Автор]
[Автор]
[Автор]
[Автор]
[Автор]
[Автор]
[Автор]
Мне интересно откуда возникли эти расхождения. По многочисленным психрометрическим таблицам (которые один в один переписаны по сути) значения совпадают с вычисленными.
отсутствие коэффициента для воды увеличивает показание на пол процента. Отсутствие обдува значительно увеличивает показание. Ветер измерял специальным тестером с платиновой нитью. Показания сравнивал с BME280 и другим ранее поверенным датчиком. Проверю с дистиллированной водой и вентилятором от процессора.
float Tv = 14.3;
float e1 = Ev - 1.11 * (Tc - Tv);
Hum=50.4
https://www.uu.ru/medicina/81679156.html
с таким коэффициентом хотя бы теоретически начинает работать.
Расчет взят видимо из регистратора Ф1771-АД
http://www.vbrspb.ru/files/20131211-143614_529808899.PDF
http://avianua.com/programs/Precise_psychrometer.pdf
http://docs.cntd.ru/document/1200014512
ПРИЛОЖЕНИЕ 7 коэффициент 0.795 для 0.8 м/с
https://helpiks.org/1-113576.html
вот коэффициенты, которые осталось проверить на практике
Коэффициент 0.795 соответствует скорости воздуха 0.8 м/c (обдув вентилятором от компьютерного блока питания). Многие таблицы даны для скорости 2 м/c.
float e1 = Ev - 2.2 * (Tc - Tv); //0,2 м/с без обдува
float e1 = Ev - 1.42 * (Tc - Tv); // 0,5 - 1,0 м/с
метод очень не точный и зависящий сильно от скорости охлаждения