Разработка и производство устройств электронной техники и автоматики. Разработка печатных плат, программного обеспечения, составление технической документации. Сопровождение от техзадания до производства, гарантийное обслуживание. Ремонт электроники.

ГЛАВНАЯ

ОБ АВТОРЕ СТАТЬИ ПРОГРАММЫ ФОРУМ F.A.Q. КОММЕРЦИЯ КОНТАКТЫ

 

 
Особенности применения комбинированных измерителей влажности-температуры

Дмитрий Дмитренко
ddn.radioliga.com

 

 

Несколько лет назад мне потребовалось разработать устройство, измеряющее влажность и температуру. На то время (это был 2008 год) для разработки данного устройства было потрачено много времени и средств, пришлось применить дорогостоящие датчики.
В настоящее время ситуация в этой «области» в корне изменилась: появилось большое количество комбинированных датчиков, в подавляющем большинстве имеющих отметку «Made in P.R.C.», что в прошлом оттолкнуло бы или даже испугало. Сейчас же такая наклейка только порадует, в основном – ценой, но и качество заметно улучшилось, по сравнению с прошлыми годами.
На рисунке 1 изображены несколько вариантов таких устройств. Автором были протестированы измерители RHT-02, RHT-03, RHT-04, RHT-05 производства MaxDetect Technology Co., Ltd (официальный сайт: http://www.humiditycn.com), а также АМ2301 производства AOSONG (официальный сайт: http://aosong.com). Все они показали отличную работоспособность, хотя с качеством подаваемой информации были некоторые проблемы. Например, один из датчиков RHT-05 при влажности менее 50% почему-то показывал 99,9%. Но проблемы были только с измерением влажности, по измерению температуры проблем замечено не было. Есть мнение, что такая погрешность измерения влажности связана с конструкцией датчика (см. ниже), он исполнен в открытом состоянии, то есть подвержен внешним воздействиям, например, пыли, которая иногда бывает токопроводной.

Внешний вид датчиков темепратуры-влажности
Рисунок 1.

Основные характеристики датчиков вполне подходят для измерений в любительских условиях, для наблюдения или контроля. В таблице приведены основные параметры большинства датчиков.

Напряжение питания, В

3,3-5,5
Чувствительный элемент измерителя влажности Открытый полимерный конденсатор
Чувствительный элемент измерителя температуры Измеритель температуры DS1820
Пределы измерения влажности 0-100%
Пределы измерения температуры -40…+80°С
Погрешность измерения влажности ±2%
Погрешность измерения температуры ±0,3°С
Минимальное разрешение измерения влажности 0,1%
Минимальное разрешение измерения температуры 0,1°С

На рисунке 2 представлен датчик RHT-05 в разобранном состоянии. Как видно, он состоит из датчика температуры, широко распространенной микросхемы DS18B20, датчика влажности – пластины с нанесенным специальным покрытием, напоминающей конденсатор. Также, для управления этими датчиками применяется специальная микросхема управления (на рисунке не видно, так как она залита компаундом внутри корпуса).

Состав датчика температуры-влажности
Рисунок 2.

Для обмена данными используется специфический протокол, называемый производителем «1-wire», однако сходство с популярным протоколом производства Dallas, применяемым в довольно популярных ключах iButton (DS1901) или датчиках температуры DS18B20 весьма отдаленное.
Рассмотрим процесс получения информации от датчика.
Устройство, принимающее данные от датчика назовём «хост» (англ. host). Это может быть как микроконтроллер, так и персональный компьютер или иное преобразующее данные, полученные от датчика в данные, понятные пользователю, устройство.
Процесс приема данных изображен на рисунке 3.


Рисунок 3.

Сразу следует уточнить, что вывод данных датчика должен быть подключен через подтягивающий к плюсу питания резистор. Поэтому в моменты «простоя» (то есть, когда данные с датчика не снимаются) на этом выводе должна присутствовать логическая единица.
Для начала передачи данных инициирующая получение этих данных сторона (в нашем случае он обозначен как хост) должна подать на информационный вывод датчика сигнал логического нуля, или, в нашем случае, просто подтянуть вывод к земле, на время не менее 1 мс (миллисекунды). После этого хост «отпускает» вывод и ждет отклика датчика в течении 20-40 микросекунд. В течении этого времени датчик должен «откликнуться», то есть со своей стороны подтянуть вывод передачи данных к «земле». Это определяется хостом, как готовность датчика.
Если в течении определенного времени хост не получил сигнал отклика от датчика, дальнейший прием данный не имеет смысла, так как датчик или отсутствует, или неисправен.
После передачи отклика, датчик «отпускает» вывод на время 80 мкс, устанавливая логическую единицу, чтобы дать возможность хосту подготовиться к приему данных.
После этого производится собственно передача данных. Хост никак не может управлять передачей, данные «льются» потоком. При том принцип передачи и логической единицы, и нуля одинаков, разница только в длительности высокого уровня сигнала: для логического ноля он равен не более 28мкс, для единицы – 70мкс.
Таким образом, датчик передает 40 бит информации: 2 байта показаний уровня влажности, 2 байта температуры, и байт четности.
Бинарное значение Десятичное значение Измеренная величина

0000 0010 1000 1100 652 65,2% или 62,5°С
0000 0001 0101 1111 351 35,1% или 35,1°С
1000 0000 0110 0101 101 -10,1°С (только для температуры)

Вычисление последнего, пятого байта производится обычным суммированием предыдущих четырех байт.

Пример.

Данные влажности: 00000010 10001100, данные температуры 00000001 01011111.
Вычисляется контрольная сумма: 00000010+10001100+00000001+01011111=11101110.
Если байт контрольной суммы не равен вычисленной, то принятые данные могут быть не достоверными.

Программная реализация.

Как уже было сказано выше, протокол приема данных описываемых устройств в корне отличается от широко распространенного протокола датчиков температуры DS18B20, хотя и внешне его напоминает. Инициатор приема данных только подает сигнал датчику о начале приема, все остальное время «работает» датчик. То есть, инициатор (хост) работает всё время в режиме ожидания приема данных. По-другому этот режим называется «slave».
Рассмотрим процесс приема данных на языке Си++ для AVRStudio (WinAVR). Ниже приведен листинг, реализующий прием данных.

//назначаем вывод приема данных
#define RH_DDR DDRC
#define RH_PORT PORTC
#define RH_PIN PINC
#define RH_IN PC3
//функции ожидания
#define WHILE_RH1 flag=2;while((PIND&0x40)&&(flag++)){_delay_loop_1(F_CPU/500000);}
#define WHILE_RH0 flag=2;while((!(PIND&0x40))&&(flag++)){_delay_loop_1(F_CPU/500000);}

//функция приема байта данных
 unsigned char rh_com(void)
{unsigned char out=0,i,flag=2;
for(i=0;i<8;i++)
{WHILE_RH0;//ожидание логического нуля
_delay_us(30);//держим паузу
unsigned char temp=0;
if(RH_PIN&(1<<RH_IN))//если на входе единица
{temp=1;
}
WHILE_RH1;//ожидаем логический ноль
if(flag==1)//в случае ошибки выходим
{break;
}
out<<=1;//сдвигаем данные влево
out|=temp;//присваиваем бит
}
return (out);
}

//Функция обработки запроса к датчику
int rh(int *inp[])
{//устанавливаем лог. ноль на выходе
RH_DDR|=(1<<RH_IN);RH_PORT&=(~(1<<RH_IN));
_delay_ms(2);//ждем не менее 1 мс
RH_PORT|=(1<<RH_IN);//устанавливаем лог. единицу
_delay_us(40);//ждем 40 мкс
RH_DDR&=(~(1<<RH_IN));//переключаем порт в режим входа
_delay_loop_1(F_CPU/500000);//ждем время для отклика датчика
if(!(RH_PIN&(1<<RH_IN)))//если на входе логический ноль
{unsigned char flag;
WHILE_RH0;//ждем появление логического ноля
WHILE_RH1; //ждем появление логической единицы
unsigned char c1=rh_com();//получение первого байта
unsigned char c2=rh_com();//получение второго байта
unsigned char c3=rh_com();//получение третьего байта
unsigned char c4=rh_com();//получение четвертого байта
unsigned char c5=rh_com();//получение пятого байта
unsigned char xorr=(c1+c2+c3+c4);//вычисление контрольной суммы
if(c5==xorr)//если контрольная сумма равна пятому байту
{inp[0]=(c1<<8)|c2;//вычисляем данные для передачи
inp[1]=(c3<<8)|c4;
}
RH_PORT|=(1<<RH_IN);//устанавливаем на выходе логическую единицу
}
else//в случае ошибки приема данных
{inp[0]=0;
inp[1]=0;
}
return(inp);
}

То есть, если теперь вставить такой код в основную программу, то можно вычислять влажность и температуру.

Пример.

int main()
{int humidity, temperature;
int data[2];
rh(data);
humidity=data[0];
if(data[1]&0x8000) //если температура отрицательная
{temperature=0xFFFF-(data[1]&0x7FFF);
}
else //если температура положительная
{temperature=data[1];
}
}

Из возможных проблем при реализации кода следует отметить то, что при различных частотах задающего генератора микроконтроллера время ожидания также изменяется. В случае некорректного отображения данных. или полного их отсутствия следует точнее установить время задержки (_delay_loop_1(F_CPU/500000)) в функциях WHILE_RH0 и WHILE_RH1 (значение выделено подчеркиванием) в большую или меньшую сторону. Можно исключить из этих функций, для повышения точности обработки принимаемых данных, _delay_loop_1(ххх), однако при этом переменную flag необходимо применять, как минимум, типа int.
Аппаратная реализация одного из устройств с применением комбинированного датчика влажности-температуры изображена на рисунке 4. Устройство производит считывание данных с датчика и отображает их на светодиодном индикаторе. Отображение производится поочередно через время около 2 секунд.

Схема прибора, позволяющего проводить измерения влажности и температуры
Рисунок 4.

В основе устройства – микроконтроллер ATtiny2313 производства Atmel. Контроллер работает на частоте 8МГц от внутреннего генератора.
Индикация влажности и температуры осуществляется попеременно, через примерно 3-4 секунды. При этом индикация влажности дополнительно индицируется светодиодом D1, а индикация температуры – D2. Фьюзы микроконтроллера устанавливаются на работу с внутренним задающим генератором, также необходимо отключить фьюз CKDIV8.
В остальном схема особых пояснений не требует.
Существует две версии прошивок микроконтроллера: для случая применения индикаторов с общим катодом, и с общим анодом. Прошивку можно скачать как с сайта журнала, так и с сайта автора: http://ddn.radioliga.com.

Ссылки:

1. http://www.humiditycn.com  – сайт производителя комбинированных датчиков температуры-влажности.
2. http://aosong.com  – сайт производителя комбинированных датчиков температуры-влажности.
3. http://ddn.radioliga.com  – сайт автора.
 

Что еще почитать

Сигнализация GSM с применением ключей iButton. Версия 2
Бутлоадер для Меги
Проект UART-осциллограф MyOscill
Tester C328. Тестер JPEG-камер.

Лампа освещения салона автомобиля
JPEG-фотокамера. Введение
Автомобильный цифровой тахометр с автоматическим выбором предела измерения
Сигнализация GSM с применением  ключей iButton
Прибор сигнализации GSM на основе модуля SIM900

SIM900A в SIM900
Температурный «фиксатор»
Устройство управления доступом
Охранная GSM-сигнализация для дома, дачи, гаража

Особенности применения комбинированных измерителей влажности-температуры

 

 

Комментарии
 
Нам интересно Ваше мнение


Поддержка работы сайта:
Z585211219986 (USD)
E693987287372 (EUR)
R427344352799 (RUR)
U793913124801 (UAH)
B217286195816 (BYR)

©®DDN Research CL, Ukraine
Все права на материалы производства DDN Research (автор - Дмитренко Д.Н.) защищены. Копирование материалов без согласования с Администрацией сайта запрещена. При копировании ссылка на сайт обязательна.

 


Copyright - - DDN Research