Измерение относительной влажности

Views: 1536


Измерение относительной влажности. Использование аналоговых датчиков фирмы honeywell (HIH-36xx, HIH-40xx)  (проект использует для программирования Serial Bootloader AN1310).  большая корпорация, одним из направления деятельности – есть производство разнообразных сенсоров. Одни из которых, это аналоговые датчики относительной влажности. Аналоговый – говорит, что датчик преобразует измеряемую относительную влажность в напряжение.

HIH-4000_150x130

Получить полную техническую информацию по датчикам влажности можно на сайте http://sensing.honeywell.com. Остановимся на основных параметрах датчика. Для проекта мы будем использовать Датчик HIH-4000 (хотя с успехом подойдут любые датчики из серий HIH-36xx или HIH-40xx).

Датчики предназначены для определения относительной влажности. Дятчики имеют три вывода, два из которых это питание датчика, третий выход аналогового напряжения пропорционального измеряемой влажности.

honeywell_illissi_01

На рисунки приведены габаритные размеры датчиков. Обратите внимание на назначение выводов. Левая ножка, -ve – это минус питания, права, +ve – это плюс питания, по центру OUT – аналоговый выход датчика. Величина напряжения питания 5 вольт (если датчики поставляются с калибровочной ведомостью, то именно под это напряжение они калибруются). Хотя можно использовать и при более низком напряжении питания.

Диапазон измеряемой относительной влажности составляет от 0 до 100%.

Обратите внимание на диапазон рабочих температур.

honeywell_illissi_02

Важно понимать о ресурсе жизни датчика, обратите внимание на рекомендуемые зоны эксплуатации. Еще, на чтобы хотелось обратить внимание, этот тип датчика – не влагозащищенный. Что это значит? Не допускается попадание капель воды на чувствительный элемент датчика.

Основные электрические параметры датчика.

honeywell_illissi_03

Зависимость напряжения от относительной влажности имеет практически линейную характеристику. Для нас как для разработчика измерителя влажности будет интересовать два параметра датчика, это величина напряжения на выходе датчика при 0% влажности и наклон (крутизна) характеристики. Если вы приобретаете датчик с калибровочной ведомостью, то эти параметры мы берем из нее. Обозначаются они так: Vout @0%RH (или Zero Offset) – напряжение 0% влажности и Slope – наклон характеристики. Если вам попался датчик без калибровки, то данные можно взять с нашего проекта, при этом точность будет не хуже 4-5%, что для бытовых применений вполне приемлемо.


Схема подключения датчика с использованием PIC-контроллера.

honeywell_illissi_04

Для подключения датчика нам потребуется всего один нагрузочный резистор. Нагрузочная способность датчика не менее 80 кОм. Мы выберем сопротивление из стандартного ряда 100 кОм.

Для реализации проекта мы будем использовать плату ILLISSI-4B-09-primum и плату индикации ILLISSI-4С-02-secundo.

Для того чтобы подключить датчик влажности к нашей платы на плате необходимо запаять два резистора R30 – 100 кОм и R26 – 0 Ом (перемычка). Сам датчик подключается к выводам платы (верхнего дополнительного соединителя).

honeywell_illissi_05honeywell_illissi_06

Как видно из рисунков схема подключения очень простая. Но простота схемы подключения накладывает определенные нагрузки на программу. В чем заключается проблема.

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

Какие в этом случае могут быть методы борьбы, чтобы отфильтровать помеху и “сгладить” сигнал датчика. Если у нас был простой АЦП (без контроллера), то мы пошлибы по следующему пути:

1. Применили экранирование датчика.

2. Применили бы экранированный кабель соединяющий датчик и контроллер.

3. Поставили в цепи данных датчика фильтрующие конденсаторы.

Что мы имеем? Первое – все эти пункты это удорожание конструкции и при том без каких либо гарантий. Второе – фильтрующие конденсаторы значительно замедлили реакцию самого датчика на изменение влаги в воздухе.

Если бы и эти методы не дали результатов, то единственное решение это выполнять измерение через длительные промежутки времени (например 1 раз в секунду) и реже, и также реже выводить данные измерение на индикацию.

Но при использовании PIC-контроллера мы имеем не просто АЦП, мы имеем микроЭВМ для выполнения нашей поставленной задачи.


Программирование.

Следующим этапом после подключения датчика это написание программы. Для вывода данных на индикацию мы будем использовать библиотеку вывода информации для плат на драйвере MAX7221. Что избавит нас от головной боли как рисовать цифры на семисегментные индикаторах.

Для включения в работу АЦП необходимо в модуле инициализации контроллера “прописать” следующие строки:

Мы подключивший датчик к аналоговому порту AN1 контроллера. Это вход RA1. Настроим вход на ввод информации.

// настройка портов
 TRISA = 0b00000010; // RA1- аналоговый вход для измерение влажности

Настроим, что этот вход будет аналоговый.

ANSELA = 0b00000010;// RA1- аналоговый вход для измерение влажности

Настроим и включить АЦП.

//настройка АЦП
 ADCON2=0b10111111;//Right justified-20 TAD-FRC(1)
 ADCON1=0b00000000;
 ADCON0=0b00000101;//AN1

Кратко по последним строкам,

Выравнивание данных – вправо, количество тактов для измерения 20 (хотя можно и 12), источник тактовой частоты внутренний RC генератор, диапазон опорных напряжений – напряжение питания контроллера, АЦП подключен к аналоговому входу AN1.

Далее сам процесс измерение влажности заключается в следующем, мы должны “запустить” АЦП на измерение, по окончанию измерения сосчитать с регистров АЦП данные. Произвести над данными вычисление и вывести на дисплей значение полученной относительной влажности.

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

Основная структура измерения:

// измерение влажности
 if(GO==0)  
 {  
     // сосчитать занчение АЦП
     ADCIZ=ADRESL;  
     ADCIZ+=ADRESH<<8;  
     // начать измерение
     GO=1; 
 }

Обработку (преобразование данных АЦП во значение влажности) данных, по преобразованию значения АЦП в значение влажности, выполним используя целочисленную математику это даснам значительную экономию памяти программ.

// вычислить влажность
 ADCIZ=ADCIZ*48875; // величина = (напряжение питания/1024 * 10 000 000)
 ADCIZ=ADCIZ/100000; // 
 ADCIZ=ADCIZ-83; // ноль датчика в вольтах*100
 ADCIZ=ADCIZ*100; // 
 ADCIZ=ADCIZ/31; // наклон характеристики slope

Добавим немного комментарий к данному фрагменту. Полученное значение АЦП ADCIZ мы должны преобразовать в измеряемое напряжение. Мы знаем, что у нас 10 разрядный АЦП это значит, то весь диапазон опорного напряжения (для нас 5,0 вольт, напряжение питания контроллера) – 1024. Т.е. значение на выходе АЦП будет иметь диапазон значение от 0 до 1023. Разделив диапазон опорного напряжения на разрядность АЦП получим число ~0,004887585532… Для целочисленной математики вы возьмем первые 5 значащих цифр 48875. А далее чтобы полученное число имело “вменяемый вид” разделим его на 100000.

Из полученного значения нам необходимо отнять напряжения нуля датчика. Значение тоже будем брать только значащие цифры. Например, если в пасторте Zero Offset = 0,827260 берем только 83 (округляем). Далее опять приводим в нормальный вид умножая на 100. И следующее вычисляем влажность используя коэффициент наклона Slope, только целое значение.

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

Как программно, нам из “шума”, выделить полезный сигнал.

Первое будем находить среднее из 10 измерений, но делать это будем немножно по новому. Мы не будем делать 10 измерений, а потом суммировать и делить на 10. Мы будем, Брать 1/10 от измеренного сигнала и прибавлять его к значению регистра индикации, предварительно из него (регистра индикации) отняв 1/10 его хранящегося значения. Это значительно сэкономит на память ОЗУ.

// вычисление среднего из 10 измерений // 
 ADCIZ=ADCIZ/10; // 
 p_hum=p_hum-p_hum/10; // 
 p_hum=p_hum+ADCIZ; //

И последнее если нам необходимо получить, только целые значения процентов, разделим еще наши данные на 10.

p_humi=p_hum/10; //

Вычисляя среднее значение нам поможет на 90% избавиться от помех, но нас еще будут беспокоить условие когда будет переход значения, т.е. изменение показаний влажности, например, было 40%, влажность увеличивается и будет видно как начнет “блымать” на индикаторе 40/41 процент, пока значение будет находиться на границе измерений. Для решения этой проблемы применим “накапливающий интегратор”. Суть его заключается в том, когда новое значение превышает (подразумевается чаще предоставляется для индикации) старое (индицируемое) значение (по измерениям) в N раз, то только тогда происходит смена индикации. Все очень просто.

// ФИЛЬТР устранения дрожания индикации при смене показаний "накапливающий интегратор"
 if(p_humi^p_humip && timer)timer--;
 else 
 {
    p_humip=p_humi;
    timer=200;
 }

В нашем примере N=200, хотя может быть любое число (это зависит от необходимой быстроты смены индикации). Работа модуля следующая сравнивается новое и действующее (исключающее или) значение и проверяется условие накопления нового значения, если оно достигло заданного порога (200) происходит смена индикации.

После этого выводим полученные данные на индикатор.

Весь процесс измерения выглядит так:

//--------------------------- 
 // измерение влажности
 if(GO==0) // 
 { // 
 // сосчитать занчение АЦП
     ADCIZ=ADRESL; // 
     ADCIZ+=ADRESH<<8; // 
 // начать измерение
     GO=1; // 
 // вычислить влажность
     ADCIZ=ADCIZ*48875; // величина = (напряжение питания/1024 * 10 000 000)
     ADCIZ=ADCIZ/100000; // 
     ADCIZ=ADCIZ-83; // ноль датчика в вольтах*100
     ADCIZ=ADCIZ*100; // 
     ADCIZ=ADCIZ/31; // наклон характеристики slope
 // вычисление среднего из 10 измерений // 
     ADCIZ=ADCIZ/10; // 
     p_hum=p_hum-p_hum/10; // 
     p_hum=p_hum+ADCIZ; // 
     p_humi=p_hum/10; // 
 } // 
 //---------------------------
// ФИЛЬТР устранения дрожания индикации при смене показаний "накапливающий интегратор"
 if(p_humi^p_humip && timer)timer--;
 else 
 {
     p_humip=p_humi;
     timer=200;
 } 
 //---------------------------
 // вывод значение относительной влажности на индикатор
 bin_dec (p_humip,0);
 indic (0,miln,stys,dtys,tysc,sotn,dest,edin,0);

 P.s. Все эти программные навороты нам дают “стабильную” индикацию и быстроту слежения за измеряемым параметром. Эти методы можно применить для измерения и индикации в других приложениях.


Загрузка демонстрационного проекта.

Версия – 1.1

Значок

Измерение относительной влажности - v1.1 15.88 KB 692 downloads

Измерение относительной влажности. Использование...
Версия – 1.2
Значок

Измерение относительной влажности - v1.2 16.05 KB 714 downloads

Измерение относительной влажности - v1.2 ...

обновлено 04/09/12  v1.1 honeywell_illissi_07 


Это может быть интересно


  • Часы-кухонный таймерЧасы-кухонный таймер
    Views: 2887 Каждая кухня должна иметь кухонный таймер, который позволяет напоминать хозяйке когда проходить определенный промежуток времени. Например, печем пирог, варим яйца… , чтобы не смотреть постоянно на часы, установим таймер и …
  • LED модуль P10 (1R) V706ALED модуль P10 (1R) V706A
    Views: 7941 Это еще одно чудо от китайского брата. Это монохромные матрицы, называются они P10 (1R) V706A, ну типа  R-красные, но не верьте паяют светики и зеленые и синие, в общем …
  • Altium Designer my Libraries, Project templates, System settings by Catcatcat V24.0 PROAltium Designer my Libraries, Project templates, System settings by Catcatcat V24.0 PRO
    Views: 523 Назвемо цей варіант поновлення для професіоналів і не тільки. Що нового? 1. Повністю змінено структуру параметрів бази даних компонента. Це дозволило повноцінної роботи Актив ВОМ. Ви відразу отримуєте …
  • ESP8266  процедура получение данных даты и времени от серверов точного времени.ESP8266 процедура получение данных даты и времени от серверов точного времени.
    Views: 6187 Эта функция доступна уже в версии 1.6.1. Для многих приложений, необходимо часы реального времени,  если в вашем проекте есть модуль WiFI ESP8266, то легко можно сделать следующим образом. …
  • Гаджеты для домашней автоматики – Емкостной сенсорГаджеты для домашней автоматики – Емкостной сенсор
    Views: 1813 Управление светодиодным освещением – Сенсор емкостной. Данный гаджет предназначен для управления освещением где необходимо включением освещение сенсорным прикосновением. Датчик позволяет управлять светодиодной нагрузкой в виде модулей или светодиодных лент …
  • Акриловый корпус для платы ch-4000Акриловый корпус для платы ch-4000
    Views: 856 Плата ch-4000 подходит для монтажа в корпуса на дин рейку, но для домашней автоматики необходимо что-то другое, поэтому был разработан корпус из акрила который позволит создавать настольные и настенные устройства. Корпус …
  • HVLD модуль на примере PIC24FJ128GA204HVLD модуль на примере PIC24FJ128GA204
    Views: 817 HVLD модуль представляет собой простое устройство, для контроля напряжения питания микроконтроллера или внешнего напряжения (через делитель). Его задача при “выходе” напряжения за заданные пределы сформировать сообщение микроконтроллеру, что …
  • Стробоскоп для автомобиляСтробоскоп для автомобиля
    Views: 2239 Одним из популярных решений светового тюнинга автомобиля, мотоцикла или скутера стал эффект –  “полицейский стробоскоп“. На база платы ch-c0050 реализовано несколько проектов. В этой статье приводятся две версии …
  • TDA7294 part 1TDA7294 part 1
    Views: 478 TDA7294 має унікальні дані для створення підсилювачів звукової частоти HI-FI класу. Варіант застосування є конфігурація BRIDGE (мостова схема включення), де використовуються два TDA7294, як показано на схематичній діаграмі …
  • Toyota Auto Fader – Модуль включения усилителяToyota Auto Fader – Модуль включения усилителя
    Views: 2077 Toyota Auto Fader – Модуль включения усилителя. Часто автолюбители прибегают к замене штатного головного устройства на универсальное мультимедийное, в котором значительно расширены функциональные возможности. Если возникает желание оставить …



Поделись этим!