Давайте соорудим для начала на Arduino что‑нибудь простенькое. В главе 12 мы уже изобретали термостаты на чисто аналоговых компонентах. Теперь посмотрим, как можно привлечь к этому полезному в хозяйстве делу цифровую технику.
Мы уже упоминали (см. главу 18 ), что в состав AVR‑контроллеров входит 10‑разрядный многоканальный АЦП. На платах Arduino его выводы специально помечены, как аналоговые входы (буквой А с цифрами от нуля до пяти). Заметьте, что они могут быть задействованы и как обычные цифровые с номерами от 14 до 18, и мы в таком качестве ими еще воспользуемся. Один из этих входов мы как раз и применим для измерения температуры, а управлять подключением нагрузки будем с одного из цифровых выходов.
Итого нам понадобятся:
□ плата Arduino Uno (годится и любая другая);
Я термистор в качестве датчика температуры. Подойдет, например, имеющийся
□ «Амперке» В57164‑К 103‑J с номинальным сопротивлением 10 кОм при 25 °C – именно его характеристики приведены в главе 13 в качестве иллюстрации к свойствам термисторов;
□ переменный резистор 10 кОм, постоянный резистор 620 Ом;
□ исполнительное реле – электромагнитное (обязательно с усилительным транзисторным ключом, см. далее) или твердотельное.
В продаже имеются модули на основе 5‑вольтовых электромагнитных реле, специально подогнанных под управление от выходов Arduino. Электромагнитные реле сами по себе требуют довольно большого тока управления (и он тем больше, чем мощнее реле, – непосредственно от логики могут работать только самые маломощные герконовые реле), потому во всех подобных релейных модулях обязательно имеется транзисторный усилительный ключ. Например, в «Амперке» продается такой модуль на основе реле 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 ) имеют положительный температурный коэффициент, поэтому условия срабатывания придется изменить на обратные. Причем не просто поменять «больше» на «меньше» и наоборот, а изменить и соотношение порогов для гистерезиса – в новой ситуации нагреватель должен будет включаться, если значение меньше меньшего порога, а выключаться – если больше большего.
Автоматический вентилятор Ардуино, который включается сам, когда температура в помещении достигнет определенной величины.
В этом уроке вы узнаете о вентиляторах с регулятором температуры на Ардуино, используя датчик и реле DHT22. Мы будем использовать датчик DHT22 для получения значения температуры и выведем это значение температуры на ЖК-дисплее. Затем мы проверим, будет ли значение температуры больше 35 или нет, если температура будет больше 35, тогда реле будет активировано и вентилятор начнет вращаться.
Нам понадобятся следующие детали для нашего проекта:
Принципиальная схема нашего вентилятора выглядит так:
Давайте разберемся с соединением всех деталей. Прежде всего сделайте подключение ЖК-дисплея к Ардуино следующим образом:
Затем подключите релейный модуль к Arduino. На стороне входа модуля реле выполните соединения следующим образом:
На выходной стороне модуля реле подключите минус 9В-батареи к общему (C) модулю реле и подключите NC модуля реле к минусу вентилятора. Затем подключите плюс батареи к плюсу вентилятора.
В конце сделайте соединения для датчика температуры и влажности DHT22.
Ниже вы можете скопировать и загрузить код в свою Ардуино Уно.
#include "DHT.h" #include "LiquidCrystal.h" LiquidCrystal lcd(7, 8, 9, 10, 11 ,12); #define DHTPIN 6 #define DHTTYPE DHT22 DHT sensor(DHTPIN, DHTTYPE); int relay_pin = 9; void setup() { lcd.begin(16,2); sensor.begin(); pinMode(relay_pin, OUTPUT); digitalWrite(relay_pin, HIGH); } void loop() { lcd.clear(); float t = sensor.readTemperature(); //считывание температуры с датчика // Проверка, посылает ли датчик значения или нет if (isnan(t)) { lcd.print("Failed"); delay(1000); return; } lcd.setCursor(0,0); lcd.print("Temp: "); lcd.print(t); lcd.print(" C"); if (t > 35){ digitalWrite(relay_pin, LOW); lcd.setCursor(0,1); lcd.print("Fan is ON "); delay(10); } else{ digitalWrite(relay_pin, HIGH); lcd.setCursor(0,1); lcd.print("Fan is OFF "); } delay(2000); }Прежде всего, мы включили библиотеки для датчика DHT22 и для ЖК-дисплея. Библиотеки помогут сделать код более простым.
Скачать все необходимые библиотеки для своих проектов вы можете на нашем сайте в разделе - .
#include "DHT.h" #include "LiquidCrystal.h"Затем мы инициализировали контакты к которым мы подключили ЖК-дисплей и датчик DHT22. После этого мы определили тип датчика DHT, который используется. Существует множество других типов датчиков DHT, таких как DHT11, поэтому здесь важно определить тип.
LiquidCrystal lcd(2, 3, 4, 5, 6, 7); #define DHTPIN 8 #define DHTTYPE DHT22 DHT sensor(DHTPIN, DHTTYPE);
В функции настройки мы дали команду DHT22 и LCD, чтобы начать общение с Arduino. Затем мы объявили контакт реле как выходной вывод, потому что мы дадим напряжение от Ардуино к реле для активации реле. Реле работает обратно (High означает Low для реле).
Lcd.begin(16,2); sensor.begin(); pinMode(relay_pin, OUTPUT); digitalWrite(relay_pin, HIGH);
В функции цикла мы очищаем ЖК-экран, а затем считываем значение температуры от датчика.
Lcd.clear(); float t = sensor.readTemperature(); if (isnan(t)) { lcd.print("Failed"); delay(1000); return; }
Затем мы печатаем значение температуры на ЖК-дисплее, и если значение температуры будет больше 35, тогда реле будет активировано, и вентилятор начнет вращаться.
Lcd.setCursor(0,0); lcd.print("Temp: "); lcd.print(t); lcd.print(" C"); if (t > 35){ digitalWrite(relay_pin, LOW); lcd.setCursor(0,1); lcd.print("Fan is ON "); delay(10); }
На этом всё. Хороших вам проектов!
Поделится с вами опытом создания умного регулятора вращения вентиляторов, с участием термодатчика, LCD-дисплея и, конечно же, Arduino.
Несколько месяцев назад я прочел ряд статей об Arduino и весьма заинтересовался данным девайсом, а вскоре решил приобрести. Надо отметить, что я далек от микроэлектроники, поэтому плата расположила к себе прежде всего относительной простотой в освоении. Набаловавшись с LED-ами и «Hello world»-ами, захотелось сделать что-нибудь практичное, заодно более детально ознакомиться с возможностями Arduino . Памятуя об аномально жарком лете 2010 года, возникла идея собрать регулятор оборотов кулера в зависимости от температуры с выводом всех сопутствующих характеристик на LCD. Надеюсь, что кому-нибудь данная схема или ее вариации смогут пригодиться, поэтому решил выложить свои наброски.
Для данной схемы нам понадобится:
Компьютерный кулер имеет три провода , два из которых - красный (+12V) и черный (GND) используются для питания, а третий (желтый) связан с таходатчиком, построенном на элементе Холла. К сожалению, 5V с платы нам явно недостаточно, но 6 цифровых выходов Arduino могут работать в режиме ШИМ (они отмечены на самой плате белыми квадратиками, либо буквами PWM), поэтому мы можем регулировать подачу сигнала с платы на реле, которое будет отвечать за изменение напряжения, подаваемого на вентилятор.
Получать информацию об оборотах мы будем с третьего провода от таходатчика, воспользовавшись модифицированным способом , основанным на реализации прерываний , которые у большинства Arduino могут приходить на цифровые pin 2 (прерывание 0) и 3 (прерывание 1). Кстати, у Arduino Mega наличествует еще 4 дополнительных пина с возможностью получения прерываний.
Теперь необходимо расположить цифровой датчик температуры , данные которого мы будем использовать для регулирования напряжения, подаваемого на цифровой выход с ШИМ, а следовательно для «открытия» канала напряжения вентилятора. Для датчиков фирмы Dallas существует собственная библиотека Arduino – DallasTemperature , которую впоследствии мы и будем подключать в скетче. Библиотеку необходимо распаковать в каталог arduino-0018/libraries /.
Осталось последнее – подключить LCD , где у нас будет отображаться вся текущая информация о температуре и скорости вентилятора. Поскольку я использовал для сборки экран WH1601A, могут иметь место известные проблемы с отображением строк. Для их устранения мы воспользуемся библиотекой LiquidCrystalRus , которую необходимо также распаковать в каталог arduino-0018/libraries/ .
//Подключаем библиотеку для термодатчика #includeЧитая первую часть заголовка многие из вас, наверняка, подумали – еще один термостат на многострадальной Arduino. И… Это правда – да, это очередной термостат для очередного котла, очередного дома, но правда это только отчасти – в статье я не хочу концентрироваться на самом устройстве – их (статей) действительно предостаточно. Несомненно, я опишу термостат, но больше хотел бы рассказать о том, как я связывал сам микроконтроллер с котлом. Итак, кому интересно – прошу…
Прежде всего хочу сказать, что я нисколько не программист и с настоящим микроконтроллером дела до этого не имел. Мое первое знакомство с МК AVR (да и вообще с МК) было еще в старшей школе, когда мне захотелось узнать, как же все-таки работает эта загадочная штука. Я прочел несколько статей и с тех пор в памяти у меня остались лишь отрывки, которые можно было описать всего двумя словами – DDR и PORT – на этом мои познания и обрывались. Потом был универ, 5-й курс – «Программирование микроконтроллеров» где мы все познакомились с MSC51 в виртуальной среде. Тут уже были и прерывания, и таймеры, и все остальное. Ну, вот с таким багажом знаний я и пришел к проблеме. Закончим на этой автобиографической ноте и перейдем к более интересной части.
Итак, собственно, с чего началось создание термостата – после установки автономного отопления с газовым котлом, я, как и многие, столкнулся с обычными проблемами – температура в доме очень зависела от погоды на улице – мороз – в квартире холодно, нужно увеличивать температуру теплоносителя в батареях, потеплело – наоборот. Такие танцы с бубном меня не сильно устраивали, т.к. регулировка котла осложнялась тем, что он был установлен за дверцей, а дверца подперта микроволновкой, на которой лежала куча хлама. Ну, вы поняли – иголка в яйце, яйцо в утке и т.д.
Решалась эта проблема очень просто – датчиком OTC (Outside Temperature Compensation), который подключается к котлу и позволяет ему автоматически подстраивать температуру теплоносителя в зависимости от уличной температуры. Проблема, казалось бы, решена, но чтение сервис-мануала на котел (Ferolli Domiproject C24D) быстро растоптало мою надежду – подключение датчика внешней температуры в данной модели не предусмотрено. Все? Все. И вот, наверное, можно было бы закончить, но летом в котле в грозу до сих пор непонятным мне способом сгорает плата управления, и разговаривая с сервис-мэном (плату в последствии отремонтировали) я спросил, возможно ли подключение OTC на мой котел? Он ответил, что подключают, используя внешние термостаты. Это отложилось у меня в памяти, но я не особо на этом концентрировался до наступления холодов, а дальше всё таже проблема.
Листая все ту же сервисную инструкцию, но уже с целью посмотреть, как же подключается термостат, я заметил, что на те же клеммы подключается «OpenTherm регулятор». Тут-же я понял – вот ОНО! Поиск в Google «OpenTherm Arduino» же меня опять огорчил – ничего особо толкового. Был монитор сообщений, но это не то – мне и слушать, то нечего – нужен именно термостат.