В одной из предыдущих статей блога, рассматривался вопрос об изготовлении датчика влажности, основанного на психрометрическом эффекте – разности температур между сухим и влажным температурными датчиками DS18B20. При всей своей простоте реализации, такой датчик влажности имеет недостаток, о котором говорилось в той же статье – необходимость постоянно держать один из элементов во влажном состоянии, что создаёт определенные неудобства. Поэтому, я обещал, что следующим этапом контроля влажности будет рассмотрение применения специализированных датчиков влажности, таких, например, как HIH-4000.
В принципе, всё уже шло к тому, что бы создать измеритель влажности на этом датчике, но тут мне попалась довольно интересная информация о том, что компания Sensirionвыпускает комбинированные датчики температуры и влажности в одном корпусе SHT21 и, кроме того, всем желающим рассылает бесплатно семплы (образцы) этого датчика. Ну, такой возможностью глупо было не воспользоваться, поэтому, была быстренько оформлена заявка, и через две недели пришло письмо от компании Sensirion, в котором оказался образец датчика SHT21 и его подробный даташит. Впрочем, даташит, был ещё раньше скачан с сайта производителя. Поэтому определённое представление, что это за датчик у меня имелось. А вот размеры действительно поразили – всего лишь 3х3 мм. Видимо, всё же основное назначение SHT21 – использование в качестве встраиваемого решения в различную аппаратуру. Внешний вид датчика показан на рис. 1.
Рис.1
Хочу обратить ваше внимание, что датчики SHT21 в зависимости от модификации, могут иметь различный формат представления выходных данных – шина I2C, ШИМ, и аналоговый выход (SDM). Соответственно, они имеют различное обозначение – SHT21D, SHT21P и SHT21S. В дальнейшем, при ссылке на SHT21 будем считать, что имеется ввиду датчик с управлением по шине I2C - SHT21D. Корпус QFN датчика имеет шесть выводов, два из которых не задействованы (рис.2)
Рис. 2
Основные технические характеристики датчика SHT21:
Выходной сигнал
I2C, ШИМ, SDM
Потребляемая мощность
1.5 мкВт
Диапазон измерений относительной влажности
0 - 100%
Диапазон рабочих температур
-40...125°С
Время отклика (измерения отн. влажности)
8 сек.
Точность
2%
Габаритные размеры
QFN корпус, 3х3 мм
Использование шины I2C является удобным способом для организации управления датчиком SHT21 от микроконтроллера. Существует два режима взаимодействия между микроконтроллером и датчиком - Hold и No Hold Master Mode. Остановимся более подробно на режиме Hold (рис.3)
Рис. 3
Как и в любом устройстве, работающем по шине I2C с использованием ведущего (в нашем случае – это микроконтроллер) и ведомого (датчик SHT21) вначале ведущий передаёт стартовый импульс (S). Затем передаётся адрес ведомого устройства по шине I2C с режимом записи. Адрес SHT21 определён как 1000000X. Режим запись/чтение определяет бит X (0-запись, 1-чтение). Затем ведущий ожидает подтверждения от ведомого – команду АСК. После получения подтверждения, микроконтроллер выдаёт в линию команду управления или конфигурации – биты 10-17. В показанном на рис. 3 примере передаётся команда работы измерения влажности в режиме Hold. Полный список команд показан в таблице на рис. 4.
Рис. 4
Далее, согласно стандартным процедурам протокола I2C, передаётся повторный стартовый импульс (S) и адрес датчика с режимом чтения и контролем приёма подтверждения АСК. После приёма подтверждения начинается отсчёт времени измерения выбранного параметра – влажности или температуры (Measurement) . Следовательно, на это время необходимо установить нужные тайм-ауты в процессе считывания информации с датчика.
После измерения начинается непосредственно процесс считывания информации Сначала сохраняется содержимое старшего регистра (MSB) с передачей ведомому (от микроконтроллера к датчику) команды подтверждения АСК. Затем считывается младший байт (LSB) с выдачей подтверждения и контрольная сумма (Checksum). Так как считывание контрольной суммы является завершением процедуры чтения, то ведомому передается команда NACK, что говорит о завершении процесса считывания и стоповый бит (Р). Если контрольная сумма не нужна, то команду NACK необходимо подать вместо команды АСК в позиции 45. При этом считывание Checksum будет игнорировано. Последние два бита младшего разряда (43 и 44, рис.3) как наименее значащие при работе в 14-ти битном режиме используются для передачи статуса работы – если бит 43 равен 0-измерение температуры, если 1 – измерение влажности. Бит 44 не определён и в данном случае не используется.
На других режимах работы и дополнительных регистрах SHT21 останавливаться не будем - всю необходимую дополнительную информацию можно найти в даташите, а лучше на основе приведённого выше примера работы датчика, попытаемся реализовать экспериментальную схему измерителя температуры и влажности.
Но вначале нужно уточнить один момент. Полученные результаты измерения представляют собой 16-ти битное число, которое хранится в двух регистрах – MSB и LSB. Однако это значение необходимо подвергнуть преобразованию по определённой формуле, что бы выводимая информация соответствовала градусам в режиме измерения температуры и процентам в режиме измерения влажности.
Для перевода полученного значения в градусы применяется формула:
Для измерения влажности данная формула преобразования будет иметь несколько иной вид:
Теперь перейдём непосредственно к реализации схемы. Для экспериментов с датчиком SHT21 была использована схема с микроконтроллером 16F628A и ЖКИ индикатором WH0802A (рис.5). В принципе, схема абсолютно стандартная, никаких особенностей не имеет. Некоторые вопросы возникли с организацией питания – пришлось использовать питание 5 В для ЖКИ-индикатора и питание 3,3 В для микроконтроллера и датчика. Это обусловлено тем, что максимально допустимое рабочее напряжение SHT21 составляет 3,6В. Датчик SHT21 подключается по шине I2C, которая в микроконтроллере реализована программным способом. В схеме использован кварцевый резонатор на частоту 4 МГц и внешняя RC-цепь сброса.
Рис. 5
Схема собрана на макетной плате, индикатор устанавливается в разъём платы (рис.6).
Рис. 6
Так как датчик SHT21 имеет миниатюрные размеры (3х3 мм), то он для удобства работы он установлен на небольшой печатной плате, которая так же, как и индикатор, подключается к основной плате через разъём. Необходимо добавить, что паять датчик нужно очень аккуратно - QFN корпус имеет не выводы, а контактные площадки. Рядом с датчиком устанавливается блокировочный конденсатор 100 nF. Внешний вид платы датчика в увеличенном виде показан на рис.7.
Рис. 7
Управляющая программа микроконтроллера работает в циклическом режиме с поочерёдным режимом измерения температуры и влажности, преобразованием полученных значений в градусы и проценты и вывода на дисплей. В верхней строке индикатора показывается температура, а в нижней строке – относительная влажность. Сразу оговорюсь, что эта программа писалась не под завершённое устройство, а под экспериментальный макет, поэтому является неоптимизированной и требующей определенной доработки в плане добавления различных функций. Необходимо ещё дополнительно реализовать индикацию контроля наличия на линии датчика (сейчас, при отсутствии или неработоспособности датчика на дисплей будут выведены значения температуры 25 С и влажности 18%). Кроме того, в этой версии программы используется только работа со старшим байтом (MSB), поэтому индицируются целые значения градусов без дробной части, не реализована индикация отрицательных температур Тем не менее, данная экспериментальная схема позволяет продемонстрировать работу датчика SHT21 в обоих его режимах измерений и создать на её основе вполне нормальный термометр-гигрометр, что я впоследствии и планирую сделать. Внешний вид устройства с подключенным датчиком в режиме измерений показан на рис. 8.
Рис. 8
Что касается погрешности измерений, то при измерении температуры погрешность относительно контрольного термометра почти не наблюдалась. Насчёт относительной влажности пока ничего сказать не могу, т.к. в настоящее время нет в наличии контрольного гигрометра.
Конечно, рассмотренные вопросы далеко не в полной мере отражают возможности использования датчика SHT21. Например, не рассматривался вопрос о программном сбросе датчика (Soft Reset), о пользовательском регистре (User Register), работе в 8….14-битных режимах, и о многом другом. Об этом вы можете почитать в описании производителя на датчик. Не скажу, что я досконально изучил данное изделие компании Sensirion, поэтому если у вас есть вопросы, давайте совместно их обсудим в комментариях или на форуме. Буду благодарен за любые критические замечания и советы по этой статье. По ссылкам в конце страницы, вы можете скачать описание датчика SHT21 (на английском языке) и программу для микроконтроллера.
Внимание!
О измерителе температуры и влажности, выполненном на значительно более дешевом датчике DHT11читайте здесь
Ещё один вариант этого устройства разработал участник нашего форумаmyx. В отличие от предыдущего варианта в стабилизаторе 3,3В используется микросхема LM317 (рис. 9)
Рис. 9
Под этот вариант измерителя myx была разработана печатная плата, в связи с чем хочу выразить ему свою глубокую признательность.
Кто имеет "другой I2C-адрес"? SHT21? Какая разница, мега, пик, STM? Адрес присваивается ведомому устройству, а не микроконтроллеру, в любом случае для SHT21 он имеет значение 1000000X. Бит Х определяет режимы работы - запись(0)/чтение(1)
Большая просьба - все вопросы, по данному устройству, которые касаются схемотеники, прошивки и т.д. задавать на соответствующем форуме - http://lock.3dn.ru/forum/2-25-1. Здесь же оставляем только короткие комментарии, отзывы и пожелания.
Да, большинство прошивок для представленных здесь разработок написано на ASM, но для микроконтроллеров PIC. С AVR сталкиваюсь редко, только если нужно повторить какую-либо конструкцию.
Ах, да, забыл сказать - у меня прибор по температуре немного брешет, показывает на 2 градуса меньше, чем на самом деле. Сравнивал с тремя разными цифровыми термометрами. Кстати, каким-то образом измеряемая влажность зависит от измеряемой температуры. Следовательно и гигрометр тоже брешет). То есть при повышении температуры возле датчика без повышения влажности показания на гигрометре существенно меняется. Надеюсь в новой версии все будет ОК!
Да, есть такой момент. Я же говорил, что это пока макет, экспериментировал с коэффициентами в формуле температуры для разных датчиков, т.к. было небольшое отличие. Коэффициент, который в формуле -46,85 на самом деле в программе -49 - вот и разница.
Ну не преувеличивайте . Я эту "печатку" под датчик вообще вручную нарисовал. И припаять большин проблем не составило. Но безусловно, паять нужно очень аккуратно!
Посмотрите схему! MCLR неправильно подключен. В документации на SHT21 написано что они её калибровали при 3 V. Если стабилизатор вместо 3.3 на 3 В поставить PIC будет работать?