Регулятор влажности ch-3800

Views: 1426   И еще один проект на плате ch-c3xxx –  универсальный регулятор влажности ch-3800. Регулятор позволяет работать как в режиме индикатора влажности, так и в режиме регулятора. Рабочий диапазон измеряемой относительной влажности от 0 до 100%. Регулирование влажности возможно как в режиме осушения воздуха, так и в режиме увлажнения. Регулировка выполняется по дискретному закону …
Читать далее Регулятор влажности ch-3800

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

Views: 1422


Измерение относительной влажности. Использование аналоговых датчиков фирмы 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 686 downloads

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

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

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

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


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


  • Analog-to-Digital Converter with Computation Technical BriefAnalog-to-Digital Converter with Computation Technical Brief
    Views: 1273 Аналого-цифровой преобразователь с вычислительным модулем. ВВЕДЕНИЕ Аналого-цифровой преобразователь (ADC) с вычислительным модулем (ADC2) в 8-разрядном микроконтроллере Microchip имеет встроенные вычислительные функции, которые обеспечивают функции пост-обработки, такие как передискретизация, …
  • MPLAB® Harmony – или как это просто! Часть 2.MPLAB® Harmony – или как это просто! Часть 2.
    Views: 2684 Часть вторая – Первая программа на PIC32. Музыкальная тема к статье, слушаем: Для начала изучения PIC32 надо иметь или демоплату или самому её изготовить имея микроконтроллер. Начнем из …
  • Индикатор температурыИндикатор температуры
    Views: 2671 Проект для начинающих, на демо плате BB-2T3D-01. Простой индикатор температуры. Проект никак не задумывался, просто на витрину магазин Ворон нужна была демонстрационная модель на макетной плате, чего нибудь работающего. Остановились на индикаторе …
  • Одноканальный емкостной сенсор – AT42QT1012Одноканальный емкостной сенсор – AT42QT1012
    Views: 2336 Описание сенсора [wpdm_file id=242] Незаконченный проект, так-как сенсор не оправдал своего назначения, не рекомендую, просто выброшенные деньги. Особенности. • Количество сенсоров – один, режим переключения ( touch-on/touch-off ), а также программируемая …
  • Development of temperature control and management systemsDevelopment of temperature control and management systems
    Views: 115 Catcatcat Electronics Пошта для контакту e-mail: catcatcat.electronics@gmail.com
  • Гаджеты для домашней автоматики – Датчик движенияГаджеты для домашней автоматики – Датчик движения
    Views: 1452 Управление светодиодным освещением – Датчик движения. Данный гаджет предназначен для управления освещением рабочих столов (кухонных столов), освещение прихожих, освещение зеркал в прихожих, автоматическое включение света в коридорах. Датчик позволяет …
  • AD9833 – Programmable Waveform Generator – part twoAD9833 – Programmable Waveform Generator – part two
    Views: 1768 Прошло время и появилась тема, что-бы закончить проект AD9833 – Programmable Waveform Generator. Приехали печатные платы. В этот раз я печатные платы заказывал в https://jlcpcb.com/ делал это в …
  • Kitchen timer with contactless gesture controlKitchen timer with contactless gesture control
    Views: 639    Кухонний таймер з безконтактним керуванням жестами дозволяє встановити необхідний період часу для приготування страв, не торкаючись пристрою. Дуже зручно під час приготування їжі, коли руки забрудниться. Усі …
  • Часы-кухонный таймерЧасы-кухонный таймер
    Views: 4020 Каждая кухня должна иметь кухонный таймер, который позволяет напоминать хозяйке когда проходить определенный промежуток времени. Например, печем пирог, варим яйца… , чтобы не смотреть постоянно на часы, установим таймер и …
  • HVLD модуль на примере PIC24FJ128GA204HVLD модуль на примере PIC24FJ128GA204
    Views: 638 HVLD модуль представляет собой простое устройство, для контроля напряжения питания микроконтроллера или внешнего напряжения (через делитель). Его задача при “выходе” напряжения за заданные пределы сформировать сообщение микроконтроллеру, что …



Регулятор влажности

Views: 1386 Регулятор ILLISSI-CH-1000 предназначен для контроля и регулировки относительной влажности в диапазоне от 0 до 100%. Регулятор позволяет работать как в режиме осушения, так и увлажнения. Для измерения возможно использовать аналоговые датчики фирмы honeywell с типами HIH-xxx. Структура меню работы регулятора. Режимы работы регулятора: Основной режим работы Режим настройки Функции клавиш в основном режиме …
Читать далее Регулятор влажности