Как-то по долгу службы понадобилось мне знать влажность воздуха. Быстрое гугление по украинским магазинам показало что влажность можно определять двумя способами: точно, но дорого и недорого, но не точно. И, конечно же, был выбран вариант — для начала «не точно и относительно не дорого», а потом посмотрим. Под описание хорошо подходила деталька HMZ333, которую я и взял в количестве двух штук.
В общем виде, состав конструкции для работы с гигрометром был следующим:
- микроконтроллер (Atmega8);
- индикатор (KW4-563ASA);
- гигрометр (HMZ-333B).
Основной деталью конструкции является гигрометр HMZ-333B, который состоит из емкостного датчика влажности HCZ-H6A (по другим данным HCZ-H8A :)) со схемой преобразования емкость-напряжение. Напряжение измеряется встроенным АЦП и пересчитывается согласно таблицам из даташита в значение влажности, которое выводится на семи-сегментный индикатор.
Модуль гигрометра обладает такими характеристиками:
- диапазон рабочих температур: -20…+60°С
- диапазон рабочих значений влажности: 20…90%RH
- точность измерения влажности: +/-5%RH
- цена (в Украине): 3,0-4,0$
Данный гигрометр не имеет встроенного термодатчика, потому при написании программы для обработки напряжения от него я использовал ряд данных для температуры +25°С, просто потому что мне так захотелось :). В даташите же приведены несколько рядов (для температур от +10°С до +40°С), с шагом в 5°С.
Зависимость «влажность-напряжение» несколько нелинейна, потому для несложного пересчета напряжения на выходе датчика в значение относительной влажности хорошо бы свести эту кривую в линию. После чего, по уравнению описывающему эту линию можно будет пересчитывать напряжение в относительную влажность.
В данном случае я использовал простейшую линейную аппроксимацию и получил такую картинку (см. выше) и уравнение (см. ниже):
y = 30,89x — 1,99
где y — значение относительной влажности (RH), а x — напряжение на выходе датчика (Vadc).
Попробуем рассчитать влажность для напряжения 2,0В:
y = 30,89×2,0 — 1,99 => y = 59,79%
или, учитывая собственную точность датчика в +/-5%, y = 60+/-5%, что не так уж и далеко от исходных значений приведенных на графике.
Собственно, из-за невысокой точности датчика дробные части коэффициентов в уравнении не интересны, потому умножим их на 10 и получим следующее уравнение:
RH = 309Vadc — 20,
по которому и будем рассчитывать значение RHx10.
Собственно это все подробности. Все остальное просто:
- меряем напряжение на ножке 5 порта С,
- пересчитываем по формуле как это показано выше (очень желательно одновременно измерять температуру и делать коррекцию)
- выводим значение влажности на дисплей
Схему приводить не буду (хотя если очень нужно, то конечно нарисую и догружу в пост), она есть в проекте протеуса. Рисунок платы тоже не покажу так как он разведен проводками на задней части макетки. Скажу только, что резисторы висят на линиях ведущих к сегментам индикатора и они (резисторы) 300 омные.
И, в завершение, видео как это все вместе работает.
Файлы: Проект CodeVision и симуляция в Proteus. В Proteus конечно же нет модели HMZ-333B, потому вместо него у меня стоит потенциометр на 1 кОм.
Источник: http://we.easyelectronics.ru