Измерение сопротивления с помощью Arduino

Отлично подходит для тестирования датчиков влажности.

Автор: Burkhard Kainka (Германия)

Наряду с осциллографом омметр является наиболее широко используемым устройством. Используя его, вы можете измерять характеристики компонентов, тестировать провода, находить ошибки в цепях и оценивать многие типы датчиков. Но обычный омметр или мультиметр не всегда может удовлетворить требованиям, предъявляемым к нему, например, когда нам нужно измерить переменный ток (AC). В этом может помочь микроконтроллер. Конечно, еще одна возможность использовать Arduino Uno, наш Extension Shield и Bascom!

Отправной точкой для этого проекта стали некоторые новые резистивные датчики влажности воздуха, сопротивление которых варьируется в диапазоне от 1 кОм до 10 МОм. В техническом описании прямо указано, что они должны измеряться с использованием переменного тока. И это именно то, что обычный омметр не может сделать.

Типичным примером таких резистивных датчиков (рис. 1) является HCZH8A (N), который вы можете найти у Farnell, Conrad, Mantech и других поставщиков. Таблицу можно найти здесь [1]. Обычно эти датчики приводятся в действие переменным напряжением 1 Veff. Если вы подключите их к генератору сигналов с помощью делителя напряжения, вы сможете четко увидеть результат на осциллографе (рисунок 2). Поднесите руку к датчику, и влажность увеличится; вы можете наблюдать падение сопротивления и повышение напряжения сигнала на входе осциллографа.

Рисунок 1. Резистивный датчик влажности.

Рисунок 2. Первый тест.

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

Тот же эффект возникает при измерении проводимости воды; и здесь мы должны использовать только переменный ток. Давным-давно я даже наблюдал этот эффект при измерении проводимости древесины в зависимости от влажности. Сопротивление начинается с низкого уровня, а затем медленно повышается. Пара гвоздей из нержавеющей стали, вдавленных во влажное дерево, даже ведут себя как аккумулятор, который можно зарядить. В те дни я был поражен. Однако с тех пор я обнаружил, что это тот же принцип, что и в двухслойных конденсаторах, также известных как суперконденсаторы или GoldCaps.
Рисунок 3. Измерение сопротивления с использованием только одного контакта.

Рисунок 4. Оптимизированная схема измерения.

Рисунок 5. Мини-плата для измерения сопротивления.

Измерение сопротивления

Как обойти тот факт, что микроконтроллеры предпочитают DC? Или что обработка огромного диапазона измерений не является легкой задачей для 10-разрядного аналого-цифрового преобразователя? Следовательно, мысли обратились к элементам R-C и измерению времени. О, да, было бы очень удобно, если бы мы могли обойтись только одним выводом микроконтроллера. В результате получается простая измерительная схема, использующая вывод порта PB3 (рисунок 3).

Rx и C1 образуют элемент R-C, чьи постоянные времени должны быть измерены. C2 работает в фоновом режиме, как резервная батарея, которая обеспечивает необходимый зарядный ток. Тем не менее, поскольку C2 также заряжается через измеряемое сопротивление, постоянный ток, проходящий через Rx в середине, равен нулю. Фактический процесс измерения (тааблица 1) проходит в три этапа: 

1. Зарядка. Порт подключен к VCC через низкое сопротивление, так что C1 заряжается немедленно, а C2 медленнее.

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

3. Измерение. Порт настроен как вход с высоким сопротивлением. Затем мы измеряем время, необходимое для ввода, чтобы вернуться к 1.


Метод производит отсчеты, которые в широких пределах пропорциональны сопротивлению. При неподключенном входе результат теста ограничен максимум 32,768.

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

Таблица 1. Измерение времени зарядки.

Улучшение схемы

По этой причине лучше добавить дополнительный резистор 1 кОм последовательно, который вы можете легко исключить позже. Поскольку Rx и C2 соединены последовательно, вы также можете изменить их (рисунок 4). Это работает лучше, потому что измеряемый элемент теперь подключен на одном конце к земле. Правило «нет постоянного тока» все еще применяется, поэтому это только измерения переменного тока. Тот же метод должен использоваться для резистивных датчиков влажности. Небольшое количество задействованных компонентов может быть припаяно к кусочку соединительной платы (рисунок 5) для подключения к соответствующей полоске разъемов Arduino. Это делает наш тестовый адаптер своего рода Mini Shield. Для индикации измеренного значения мы еще раз используем дисплей на плате расширения Elektor [2], на котором дублируются соединительные планки Arduino. Когда вы подключаете Arduino Uno, Extension Shield и тестовый адаптер все вместе, вся комбинация выглядит как наша фотография.

Таблица 2. Преобразование в кОм.

Используя линейное преобразование (таблица 2), мы можем вывести сопротивление в кОм. Результат не должен быть между 1 кОм и 1 МОм, тогда мы достигаем действительно хорошей линейности около 5%. В диапазоне до 10 МОм дисперсия немного больше. В любом случае, абсолютная точность также зависит от допусков конденсаторов и точного порога переключения входа. Метод не отличается прежде всего высокой точностью, а также широким диапазоном измерений и простой схемотехникой.

Рисунок 6. Сопротивление датчика по отношению к влажности и температуре (Источник: техническое описание [1]).

Логарифмическое измерение

Резистивные датчики влажности воздуха имеют более или менее экспоненциальные характеристические кривые (рис. 6). Вам нужно измерить сопротивление, а затем выразить его логарифмически. Для Arduino это простое упражнение. Расчет выполняется в несколько этапов (таблица 3), в которых мы производим натуральный логарифм в Bascom с использованием функции Log. Следующая формула выводит влажность воздуха в процентах от значения Count: Air humidity [%] =  (103 – 8.9 × ln (Count))

Ошибки возникают из-за некоторой кривизны характеристической линии в логарифмическом масштабе. Значения в формуле выбираются таким образом, чтобы наименьшие ошибки возникали при 40% и 80%. Однако наибольшее отклонение возникает из-за различий между различными примерами датчиков. Калибровка стоит денег, и множество простых приборов для измерения влажности, которые продаются, одинаково неточны.

Таблица 3. Преобразование в относительную влажность воздуха. 

Более того, температурная зависимость не учитывается; вместо этого предполагается комнатная температура 20 ° C. Тем не менее, вы можете видеть изменения влажности воздуха очень четко. Неизбежная ошибка измерения в меньшей степени связана с неточностью измерения сопротивления, поскольку в процессе логарифмизации эти ошибки практически сводятся к нулю.

Рисунок 7. Мини-плата с прикрепленным датчиком.

Воздух в помещении довольно сухой, и датчик (рисунок 7) показывает 40%. Это может быть правильно, согласно одному из моих гигрометров. Мои цветы нужно срочно полить. Как только я это сделаю, влажность воздуха поднимется сразу до 41%, а через некоторое время до 42%. Большие отклонения возникают, когда вы подносите руку к датчику. С пальцем, расположенным по обе стороны от сенсора, он довольно быстро достигает более 80%. 

Рисунок 8. Тест омметра.

Кстати, схема, конечно, может быть использована в качестве омметра. Все значения от 1 кОм до нескольких МОм могут отображаться надежно (рисунок 8).

Ссылки

[1] HCZ-H8 datasheet

[2] Материалы проекта

Другие статьи

Комментарии0

Оставить комментарий