Термостат на Arduino

Давайте соорудим для начала на Arduino что‑нибудь простенькое. В главе 12 мы уже изобретали термостаты на чисто аналоговых компонентах. Теперь посмотрим, как можно привлечь к этому полезному в хозяйстве делу цифровую технику.

Мы уже упоминали (см. главу 18 ), что в состав AVR‑контроллеров входит 10‑разрядный многоканальный АЦП. На платах Arduino его выводы специально помечены, как аналоговые входы (буквой А с цифрами от нуля до пяти). Заметьте, что они могут быть задействованы и как обычные цифровые с номерами от 14 до 18, и мы в таком качестве ими еще воспользуемся. Один из этих входов мы как раз и применим для измерения температуры, а управлять подключением нагрузки будем с одного из цифровых выходов.

Итого нам понадобятся:

□ плата Arduino Uno (годится и любая другая);

Я термистор в качестве датчика температуры. Подойдет, например, имеющийся

□ «Амперке» В57164‑К 103‑J с номинальным сопротивлением 10 кОм при 25 °C – именно его характеристики приведены в главе 13 в качестве иллюстрации к свойствам термисторов;

□ переменный резистор 10 кОм, постоянный резистор 620 Ом;

□ исполнительное реле – электромагнитное (обязательно с усилительным транзисторным ключом, см. далее) или твердотельное.

В продаже имеются модули на основе 5‑вольтовых электромагнитных реле, специально подогнанных под управление от выходов Arduino. Электромагнитные реле сами по себе требуют довольно большого тока управления (и он тем больше, чем мощнее реле, – непосредственно от логики могут работать только самые маломощные герконовые реле), потому во всех подобных релейных модулях обязательно имеется транзисторный усилительный ключ[41]. Например, в «Амперке» продается такой модуль на основе реле HLS8L‑DC5V‑S‑C. Если вас электромагнитное реле не устраивает, и вы стремитесь к предельной простоте схемы, то можно поискать твердотельные реле – подойдут, например, CX240D5R фирмы Crydom или аналогичные с напряжением срабатывания 3‑15 В. У них ток управления составляет около 15 мА при 5 вольтах на входе, что допустимо для AVR, потому их управляющий вход можно подключать к цифровому выводу Arduino напрямую. Правда, при напряжении 220 вольт коммутировать нагрузку мощностью больше киловатта CX240D5R не может, но нам в данной задаче больше и не требуется.

Схема термостата на Arduino Uno показана на рис. 21.2.

 

 

Рис. 21.2. Схема термостата на Arduino Uno

 

На схеме обмотка реле К1 (с нормально разомкнутыми контактами) условно присоединяется прямо к цифровому выходу Arduino – подразумевается, что либо это упомянутое ранее твердотельное реле с нужными характеристиками, либо просто управляющий вход готовой платы релейного модуля. Для контроля состояния схемы одновременно с нагревателем срабатывает светодиод. Программа термостата в соответствии с подобной схемой крайне проста:

 

 

Величины резисторов подогнаны под указанный термистор В57164‑К с номинальным сопротивлением 10 кОм при 25 °C (103‑J). В соответствии с программой срабатывание реле будет происходить вблизи значения на выходе АЦП, равного 500. Это составляет примерно середину 10‑разрядного диапазона (вся шкала – 1024 градации), т. е. такое значение установится при приблизительном равенстве верхнего и нижнего сопротивлений относительно входа АО (напряжение на этом входе тогда составит примерно 2,5 вольта).

Обратите внимание, что обе функции if не заканчиваются привычным else . Для предотвращения дребезга в программу введен гистерезис: реле включается при превышении значения кода 510, а выключается при снижении до значения 490. В промежутке оно будет сохранять предыдущее состояние. Двадцать единиц кода (то, что в главе 12 мы называли зоной нечувствительности ) соответствуют примерно 10 милливольтам, т. е. гистерезис при температуре в пределах 30–40 градусов составит чуть меньше одной десятой градуса (проверьте сами с помощью табл. 13.1 из главы 13 ).

Установка температуры срабатывания с помощью резистора R2 при таких параметрах возможна в пределах примерно от 22 до 96 °C. Разумеется, на практике такой широкий диапазон регулировки не требуется, потому целесообразно номинал R2 уменьшить. Величина R1 подбирается так, чтобы R1 и номинальное значение R2 в сумме составляли сопротивление термистора при нижнем значении желаемого диапазона температур (в соответствии с табл. 13.1). Для более точной подгонки можно провести калибровку и изменить пороговые значения в программе, измеряя установившуюся температуру обычным термометром.

Если вы примените в этой схеме другие датчики, то не забудьте про знак температурного коэффициента. Обычный диод или транзистор в диодном включении (как в схемах из главы 13 ) также имеют отрицательный наклон характеристики, потому для них в программе придется поменять только числовые значения порога срабатывания. А вот полупроводниковые датчики типа ТМР35 (см. главу 13 ) или просто металлические термометры сопротивления (как в конструкции из главы 17 ) имеют положительный температурный коэффициент, поэтому условия срабатывания придется изменить на обратные. Причем не просто поменять «больше» на «меньше» и наоборот, а изменить и соотношение порогов для гистерезиса – в новой ситуации нагреватель должен будет включаться, если значение меньше меньшего порога, а выключаться – если больше большего.

Как видите, обращаться с Arduino не просто, а очень просто. Работа с АЦП относится к базовым функциям платформы и не требует даже подключения отдельных библиотек. Оцените, насколько облегчили создатели платформы жизнь разработчику: вызову функции anaiogRead () соответствуют операции установки режима АЦП, тактовой частоты его работы, выбора канала и пр.

Попробуем на радостях решить задачку посложнее – научимся выводить данные через последовательный порт и на графический индикатор.

 

 








Дата добавления: 2016-05-11; просмотров: 8546;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.006 сек.