Измерение температуры и относительной влажности с
помощью сенсора HSM-20G.
Часть 1 - Теория и схема
Во всемирной сети Интернет возможно найти конструкции устройств на
микроконтроллерах, позволяющих измерять температуру окружающей среды и
относительную влажность с помощью датчиков SHT75 и SHT11. Это цифровые
датчики, откалиброванные в заводских условиях. В данной статье мы
рассмотрим конструкцию на базе аналогового сенсора и микроконтроллера Atmel AVR.
 |
Аналоговый датчик температуры и относительной
влажности
HSM-20G представляет собой отдельный миниатюрный модуль, который
преобразует значение указанных параметров окружающей среды в напряжение
на выходе.
Для проведения экспериментов нам понадобиться микроконтроллер ATmega8,
модуль HSM-20G и 4-строчный ЖК индикатор.
Автор для экспериментов использовал отладочную плату собственной
разработки. Для разработки программного обеспечения использовался
компилятор mikroC для AVR от компании mikroElektronika.
В техническом описании датчика производитель дает значения выходного
напряжения для некоторых значений относительной влажности и график
зависимости. Эти данные были использованы автором для построения графика
зависимости для проверки точности. График изображен ниже.
 |
Как видно, зависимость нелинейная, поэтому автор
использовал программную среду MATLAB, чтобы получить выражение для
вычисления значений выходного напряжения в зависимости от окружающей
относительной влажности, при этом используя значения из технического
описания на модуль HSM-20G (стандартные характеристики). Использовалась
при этом функция аппроксимирующего полинома третьей степени (Polyfit).
Первая причина использования полинома третьей степени заключается в том,
что микроконтроллер AVR имеет встроенный аппаратный умножитель, который
работает быстро, и вторая причина – такая точность достаточна для
измерений.
Такую же задачу нужно решить и для получения данных о температуре
окружающего воздуха, однако она несколько сложнее. Если вы посмотрите в
техническое описание сенсора, то увидите схему подключения его к другой
периферии (в нашем случае это микроконтроллер) или к измерительному
прибору. Автор использовал данную типовую схему включения. Однако,
поскольку производитель сенсора не знает, какое значение сопротивления
пользователь будет использовать при измерении температуры, и в связи с
тем, что внутри сенсора HSM-20G находится термистор, а не
полупроводниковый датчик температуры, производитель предоставил
зависимость значения сопротивления при различных температурах. Таким
образом, автор вычислил значение выходного напряжения температурной
части датчика HSM-20G по методике описанной выше.
 |
Схема подключения датчика и ЖК индикатора к
микроконтроллеру несложна, и изображена на рисунке ниже.
Два канала АЦП (ADC0 и ADC1) используются для
подключения сенсора, АЦП измеряет выходное напряжение сенсора, которое
соответствует температуре и относительной влажности. Резисторы и
конденсатор, подключенные к выходу датчика, рекомендованы по теническому
описанию на HSM-20G.
В следующей части мы рассмотрим основные моменты в ПО микроконтроллера.
Часть 2 - Программное обеспечение
В первой части статьи мы рассмотрели принципиальную схему подключения
аналогового сенсора HSM-20G к микроконтроллеру ATmega8 и принципы его
работы.
Программное обеспечение для микроконтроллера разработано с
использованием компилятора mikroC для AVR версии 5.00. Программа проста
для понимания, снабжена комментариями.
Основное – это 6 функций, описание которых ниже.
1. void setup_MCU() – функция настраивает периферию и порты ввода/вывода
микроконтроллера для оптимальной работы, устанавливая определенные биты
в регистрах периферии с помощью встроенных функций компилятора. В нашем
случае используется библиотека функций для работы с АЦП и ЖК индикатором.
2. void display_common() – функция вызывается лишь один раз. Ее
задача – вывод на дисплей текстовой информации “Temperature” (температура)
и “Relative Humidity” (относительная влажность) вместе с единицами
измерения.
3. float read_voltage(unsigned short channel) – функция выполняет
чтение данных АЦП (напряжение) по заданному номера канала АЦП и получает
среднее значение за 64 выборки, что позволяет исключить шумы и наводки и
повысить точность измерения. Результат после выполнения всех
математических операцийя возвращается в вызывающую функцию.
4. float read_humidity() и float read_temperature() – функции
вычисления относительной влажности и температуры с использованием
соответствующих выражений и данных от АЦП. В этих же функциях данные
подготавливаются для отображения на ЖК индикаторе.
5. void display_data(unsigned char x, unsigned char y, float value)
– в этой функции определяются знакоместа для вывода данных и сами данные,
которые будут отображаться в них.
 |
Загрузки
Исходный код и HEX файл для прошивки микроконтроллера - скачать
embedded-lab.com
rlocman.ru
Материалите подготви за сайта:
Иван Парашкевов
e-mail:

|