Ардуино управление котлом отопления

Отопление загородного дома на arduino с передачей данных в internet

Мне хотелось бы представить очередной пример использования Arduino в реальных задачах. Тут я представлю максимально простой, но реально работающий проект регулировки отопления дома с помощью электрокотла на базе Arduino. Я очень надеюсь, что эта статья поможет кому-то отбросить страхи и попробовать самостоятельно применить свои руки по назначению, это очень здорово тренирует руки, мозги и даёт редкое чувство удовлетворения созданием чего-то интересного. Начав работать с этим контроллером, я до сих пор нахожусь в некотором замешательстве от возможностей, открывающихся при его использовании.

История

Почему, собственно, Arduino? Простота, доступность, масса документации и библиотек. Как, наверное, многие, я долго присматривался к Arduino, с детства люблю всякие батарейки и моторчики, а тут новый уровень, полноценный язык программирования и куча возможностей ввода-вывода. Когда его начали выпускать наши “наиболее вероятные экономические партнёры”, цены на него упали до приемлемого уровня. В результате купил старт кит и, вдоволь наморгавшись светодиодами и индикаторами, поимел желание применить его где-то по хозяйству.

Что отапливаем

У меня бабушка живёт в деревенском доме под Москвой, там нет ни нормального водоснабжения, ни газа, ни отопления, а решение всех этих задач требует больших капиталовложений либо приложения рук. Вот тут и виделось место, где можно полноценно использовать arduino, есть где развернуться. Самый большой плюс деревенского дома в том, что он традиционно не большой и очень простой. Так и мой — типичный дом крестьянской семьи середины 20-го века, представляет из себя бревенчатый сруб с одной большой комнатой и кухней. Других отапливаемых помещений нет, что для нас плюс, достаточно поддерживать и контролировать температуру в единственной комнате.

Отопление

Оборудование для отопления. Традиционно в доме было печное отопление. Одна “немецкая” печь в комнате (греет за счёт длинной извилистой трубы), вторая “русская” на кухне (греет за счёт больших размеров самой топки). Если кто-то витает в киношных представлениях, что печь это классно и к тому же натурально и романтично, то беру на себя смелость предположить, что эти люди никогда не жили в доме с печным отоплением. На самом деле, это не очень комфортно, неудобно и пожароопасно. Поэтому лет 5 назад был заказан и осуществлён проект по разводке простейшего двухтрубного отопления с газовым котлом. Питать котёл предполагалось из газовых баллонов.
Впоследствии решено было систему модернизировать, добавить насос для принудительной рециркуляции теплоносителя и небольшой 2-киловаттный электрокотёл, чтобы не мучиться с разжиганием газа, когда ещё не очень холодно. Вся автоматизация сводилась к наличию большого рубильника на стене, когда становилось холодновато, его включали, а когда жарковато — выключали. Двух киловатт хватало где-то до температуры 0°C, дальше приходилось зажигать газ или печь, что было крайне неудобно.

Экономическая целесообразность

Перед тем как что-либо менять, естественно, было решено посчитать, имеет ли вообще вся эта задумка смысл. Просчитав по опыту расход газа из баллонов, прикинув ожидаемый расход дизтоплива, я пришёл к выводу, что в таких типах отопления нет никакого смысла при наличии достаточного количества электроэнергии. По цене баллоны выходили где то 6-7 тыс в месяц, дизтопливо, если покупать что-то палёное или летнее зимой, можно наэкономить до расхода 5 тысяч в месяц, при этом на чистой электроэнергии получалось 7 тыс. Прибавим сюда стоимость котла, постоянные таскания баллонов и запах от саляры, и станет ясно, что электричество куда проще и вовсе не дороже. Ещё, конечно, есть модные в последнее время пеллетные горелки, но они мне не подходили, так как они не умеют зажигаться сами и потому имеют минимальную мощность, при том совсем не малую (порядка 5кВт), которую 90% времени просто некуда девать, и требуют хотя бы 2 раза в неделю засыпать топливо, что иногда делать некому. Да и стоимость самих котлов на порядок больше предыдущих вариантов, поэтому они подходят для больших домов, где нужна большая мощность и большие затраты, а не в моём случае.

Heavy hardware

Попытался прикинуть требуемую мощность исходя из расхода газа и других прикидок, получилось, что надо 4-5 кВт, с запасом 6. Обзор рынка показал, что существует модель электрокотла, аналогичная уже установленному, но с 3-мя нагревательными элементами по 2 кВт каждый. При том продавалась она без управления, что мне было даже удобнее и дешевле. Вообще, сам котёл это крайне простая конструкция, металлический цилиндр с входной и выходной трубами, сверху притянутая болтами крышка, в которой закреплены ТЭНы. Дополнительно в корпус врезаны 2 датчика, резистивный датчик температуры и датчик, замыкающийся при перегреве, оба от системы охлаждения авто. Теперь встал вопрос о электроэнергии. Моя ситуация упрощалась тем, что рядом с домом находится мастерская, к которой подведены 3 фазы (в народе — 380). Естественно, возник соблазн питать каждый ТЭН от своей фазы, поэтому был куплен и проложен в котельную специализированный 4-жильный кабель в металлической оплётке для подземной укладки. Кабель введён в щиток с последовательно включенными УЗО и блоком из 3-х автоматов по 10А. Далее кабель шёл уже непосредственно в щиток с arduino и уже оттуда к элетрокотлу.

Light hardware

Понятно, что управлять ТЭНами будем с arduino, вопрос — как? Придерживаясь принципа — чем проще, тем надежнее, будем их просто включать или выключать с помощью реле безо всяких переходных вариантов. Облазив алиэкспресс, нашёл блок реле для ардуино, который может управлять сразу 5-ю силовыми линиями. Одна беда, максимальный ток, который эти реле могут выдерживать — 10А, а у меня получается 2кВт / 220В ~ 9А. То есть практически максимум, а желательно иметь запас хотя бы 25%. Однако решил рискнуть. Реле честно продержались почти неделю, затем просто начали плавиться. Надо было что-то решать и быстро, ибо была зима и останавливать отопление было нельзя. Потому были прикуплены 30А реле, правда, с обмотками на 12В. Поэтому быстренько припаял к каждому реле по транзистору, чтобы включать их от 5В ардуино.

Схема неплохо работала почти месяц, а потом я заметил, что дома как-то слишком жарко. Проверка показала, что одно реле “запало” в включенном положении. Постучал по нему — заработало опять, но хватило на несколько дней. Поменял его в надежде, что это брак, но уже через неделю то же самое случилось со 2-м реле. Поставив последнее запасное, отправился опять на али. Там были обнаружены специализированные реле для ардуино на 40А! Этих-то должно хватить наверняка, подумал я. Пара-тройка недель ожидания, и вот опять выкидываю транзисторы и ставлю новые реле с уже готовой обвязкой и индикацией. Радость была недолгой, недели через 2-3 опять залипшее реле. Начал изучать вопрос, оказывается, чтобы уменьшить нагрузку на реле и убрать искрение контактов, реле надо включать не как попало, а в момент, когда синусоида напряжения проходит через 0. Ну, в теории это можно сделать с помощью нашего же ардуино, только на подключить через делить все три фазы и смотреть напряжение. Проблема ещё и в том, что реле имеет некоторое время реагирования и, собственно, нам ещё надо его установить опытным путём. В общем, задачка не такая простая.

И тут я наталкиваюсь на так называемые Solid State Relay, проще говоря — электросхемка, собранная на мощном тиристоре, в корпусе, похожем на обычное реле. Из его плюсов — нет механики, ничего не залипнет. Не создаёт мощных ЭМ-помех, что важно для ethernet’a, о котором ниже. Они уже содержат схему, которая включает и отключает реле при проходе нуля. На реле есть индикатор включения. Ну и ещё они беззвучные, хотя для нашего случае это не так и актуально. После изучения инструкций и характеристик были заказаны SSR-40DA, что по-русски означает — твёрдотельное реле с постоянным управляющим током 3-5В и током нагрузки до 40А. Заодно решил немного отойти от принципа «проще-лучше» и сделать ещё контроль тока в ТЭНах. Это позволило бы узнать о перегоревшем ТЭНе/реле или отключении питания на одной из фаз. Добавил в заказ модуль контроля тока на 20А, хотя выглядели они хлипковато для такого тока (2.5 квадрата кабель даже не лез в их зажим). Когда реле и модули измерения тока пришли, оказалось, что реле достаточно громоздкие, поэтому было решено перенести всё, что связано с высоковольтной частью в новый ящик, а ардуино оставить в старом.
После первых экспериментов оказалось, что я совершенно забыл, что эти реле, так как собраны на тиристорах, довольно сильно греются. Через сутки работы реле нагревались так, что я не мог терпеть, держа на них палец, то есть градусов 60C, а это уже близко к критическим 80C. Опять полез на али, прикидывая, какие радиаторы приспособить, и тут узнал, что для этих SSR есть штатные радиаторы! На момент установки радиаторов также обнаружил, что один модуль контроля тока сам ток больше не пропускает, а со стороны платы видна подгорелая дорожка. Ещё один модуль также не вызывал уверенности, решил снять их все. В таком виде они всё же слабоваты и опасны, а толку от них не так и много. Проблему отключения фаз или ТЭНов пока отложил как не очень актуальную, за 3 года ни первого, ни второго не случалось не разу.

Теперь о ПО


Arduino

Сразу же в примерах был найден кусок, который позволял управлять средней мощностью, имея двоичное управление — вкл и выкл. Смысл простой, берём некое окно времени, скажем, 1 минута, и в цикле включаем либо выключаем нагрузку в зависимости от пройденного времени. То есть, если нам надо 50% мощности, то включаем нагрузку в первые 30 сек и выключаем в последние 30, затем цикл повторяется. Быстренько переделал это под 3 независимых реле, если мощность больше 33%, то включаю второе реле, если больше 66% — то третье, а первое включаю и выключаю по основному алгоритму. Теперь встаёт главный вопрос, а по какому алгоритму подбирать мощность? Будучи программистом по профессии сначала решил, что задачка довольно простая, холодно — добавляй, тепло — отбавляй, и попытался прикинуть всё это в уме.
Оказалось, не так и просто. Полез смотреть, как это делают в продаваемых системах, оказалось, там всё либо максимально просто, как в утюге — +1C = выкл, -1 = вкл. Но тогда мы получаем почти 4C колебаний из-за инертности системы! Это слишком грубо, ибо мы можем получать данные с точностью до десятой доли градуса. Также посмотрел алгоритмы работы с использованием температуры уличного воздуха, они оказались достаточно простые и работали на готовых таблицах, которые были заранее зашиты и просто менялись в зависимости от теплопотерь дома. Копая глубже и глубже, я докопался до промышленных установок, в них повсеместно использовали алгоритмы PID-регуляторов. И, о слава популярности, оказывается, у Arduino есть бесплатная PID-библиотека!
Пару слов о том, что такое PID применительно к нашему случаю. Смысл алгоритма в том, что мы сообщаем ему требуемое значение некоторого параметра (температура внутри дома) и в цикле передаём текущее значение, а он выдаёт нам необходимое воздействие (мощность, которую надо подать на котёл). Не вдаваясь в подробности математической модели, как же он работает с точки зрения программиста. Итак, мы имеем температуру в комнате, пусть 20C, желательную температуру 22С, и даём их нашему PID-алгоритму.
Сам алгоритм имеет 3 независимые части, по имени P, I и D. Первая часть работает крайне просто, смотрит на разницу между желательной температурой и текущей температурами. То есть чем холоднее, тем большую мощность нам даст алгоритм. Вроде бы, этого и достаточно, но ведь у нас есть постоянные теплопотери дома, то есть, чтобы держать нужную температуру, нам надо постоянно давать какую-то мощность. То есть даже если температура в комнате равна заданной, нельзя отключать котёл, а надо как-то искать какую-то мощность, равную теплопотерям. А теплопотери меняются в зависимости от температуры на улице. Вот этим и занимается вторая часть под именем I. Алгоритм пытается подобрать мощность, при которой наша температура будет постоянной. И вроде тут-то уже точно всё, но нет.
Дело в том, что сам котёл, теплоноситель, а тем более дом имеют очень большую инертность. И если вы врубили котёл на 100%, то снижать мощность нужно куда раньше, чем температура достигнет желательной, иначе даже при полном отключении мы всё равно успеем перегреть комнату градуса на 2. То же самое при понижении температуры, добавлять мощность надо ещё до того, как температура дошла до нужной. Вот этим и занимается третья часть алгоритма D. Ну теперь, конечно, всё, осталось только понять, какой части давать какой вес, а вот этим занимаются множители каждой части, которые и надо подбирать. Кстати, подбор этих множителей — отдельная и довольно сложная математическая задача, я подбирал их “на глаз”, вспоминая сказанное выше. Сначала ставил все нули, кроме P, и подбирал его так, чтобы не началось само возбуждение. Потом добавлял I, а в конце и D.

Меряем температуру

Для измерения температуры всё на том же волшебном сайте были заказаны цифровые датчики температуры на базе DS18B20. Датчик сам по себе просто замечательный, его не надо ни калибровать, ни как-то настраивать, при этом он может мерить температуру с заданной точностью, а общается с Arduino по протоколу OneWier. То есть на 3 провода длиной до 50 метров можно вешать практически неограниченное число датчиков. При желании их можно даже не питать, а работать только по 2-м проводам (на самом деле, они питаются, но от провода с сигналом), но работают медленнее. В моём случае датчики я заказал в герметичном корпусе, а соединял обычной витой парой. Я поставил 3 датчика, один в котельной, один в доме, в комнате, и один на чердаке под потолком, чердак никак не отапливается и там я получаю температуру на улице.

Список закупленного железа

— Плата arduino. Я использовал UNO r3. Цена около 350 р.
— Ethernet Shield, около 500 р.
— Витая пара (смотря сколько надо), бухта в 305м обойдётся около 4 тыс.
— Датчики температуры, около 200 р.
— Блок питания на 110-240 — 12В 2А, 420 р.
— Стабилизатор LM7805, где-то 20 р.
— Реле SSR-40DA 3 шт. по 330 р.
— Радиаторы для реле по 200 р.
То есть, не считая витой пары и самого котла, весь проект укладывается в 4 тысячи рублей.
Складываем данные в базу и показываем.
Но всё это, конечно, хорошо, но не стоять же постоянно с компьютером рядом с котлом, всё же хотелось бы знать о том, что происходит дома, удалённо через инет. У меня давно уже был самый простенький VPS сервер от majordomo для чего попало. На нём создал базу данных на MySQL для хранения данных о температуре.
Теперь нам надо как-то положить данные из arduino в эту базу. Для этого, естественно, понадобится как минимум связать arduino с интернетом, это не просто, а очень просто. Для этого нам и понадобится Ethernet Shield и его библиотека. В доме давно уже установлен простенький роутер со “свистком” сначала от megafon, а потом от yota. Тянем стандартную витую пару к роутеру и добавляем в программу передачу данных. Передача идёт через вызов странички на PHP с параметрами — данными. Создаём страничку с именем temp.php на нашем инет-сервере
<?php $dbhost = ‘localhost’; $dbuser = ‘***’; $dbpass = ‘***’; $dbname = ‘nikolaarduino’; $client_ip = $_SERVER; $temp1 = $_GET; $temp2 = $_GET; $temp3 = $_GET; $power = $_GET; $connect = mysql_connect($dbhost, $dbuser, $dbpass); if(! $connect ) { die(‘Could not connect: ‘ . mysql_error()); } mysql_select_db ($dbname, $connect); $sql = «INSERT INTO Temp (datetime, temp1, temp2, temp3, power, ip) VALUES (Now(), ‘$temp1’, ‘$temp2’, ‘$temp3’, ‘$power’, ‘$client_ip’)»; if(!mysql_query($sql)) {echo ‘<p><b>Data upload error!</b></p>’;} else {echo ‘<p><b>OK</b></p>’;} mysql_close($connect); ?>
После этого мы имеем данные о температурах и мощности работы котла, чтобы каждый раз не лазить в базу, а посмотреть последние данные, написал “временный” скриптик на php, но, как известно, нет ничего более постоянного, чем временные вещи, так им и пользуюсь.

gettemp.php
<?php $dbhost = ‘localhost’; $dbuser = ‘***’; $dbpass = ‘***’; $dbname = ‘nikolaarduino’; $client_ip = $_SERVER; $connect = mysql_connect($dbhost, $dbuser, $dbpass); if(! $connect ) { die(‘Could not connect: ‘ . mysql_error()); } mysql_select_db ($dbname, $connect); $query = ‘SELECT * FROM Temp WHERE id=(SELECT MAX(ID) FROM Temp)’; $result = mysql_query($query) or die(‘Error get data: ‘ . mysql_error()); echo «<table style=’text-align: left; width: 100%;’ border=’1′ cellpadding=’2′ cellspacing=’2′>\n»; while ($line = mysql_fetch_array($result, MYSQL_NUM)) { echo «<tr align=’center’><td colspan=’2′ rowspan=’1′>$line</td></tr>»; echo «<tr align=’center’><td>TempIN = $line</td><td> TempOUT = $line</td></tr>\n»; echo «<tr align=’center’><td colspan=’2′ rowspan=’1′>TempKotel = $line</td></tr>\n»; echo «<tr align=’center’><td colspan=’2′ rowspan=’1′>Power = $line</td></tr>\n»; } echo «</table>\n»; mysql_free_result($result); mysql_close($connect); ?>

Что хочется добавить в будущем

Конечно, это, в принципе, минимум, который однако позволяет сделать полноценное и достаточно удобное управление отоплением в небольшом доме. Хотя с некоторыми переделками его можно использовать и в многокомнатных и вообще строениях любой сложности, arduino может тут очень многое, если не всё. Именно в этом проекте хотелось бы добавить в будущем:

  • регулятор температуры. Хотя практика показала, что 22.5 это вполне оптимальное значение и в принципе не требует корректировки. Опять же, регулятор хотелось бы сделать удалённо от основного arduino, но для этого надо либо сложную схему, либо ещё один arduino. В общем, есть о чём подумать.
  • Хотелось бы возможность не только читать температуру, но и менять параметры PID на лету. Возможно, сделать отдельно режим “первоначального прогрева”, а то параметр I долго нормализуется после каждого перезапуска программы.
  • Хочется простенькое приложение под android, чтобы на телефоне не тыкать в мелкий браузер. Это самое простое и уже в процессе.
  • Всё же подключить датчик температуры теплоносителя и передавать его данные, как и другие данные температуры.
  • Сигнализация аварийных случаев. То есть автоматически определять потерю напряжения на линиях, отказ реле или ТЭНов.
  • Сделать “карусель”, менять местами назначения ТЭНов. Иначе получается, что один ТЭН работает всегда больше других, и он в теории должен отказать первым. Надо просто время от времени менять PIN’ы в программке. Вроде просто, но никак не дойдут руки добавить.

Текст программы для Arduino:
#include <OneWire.h> #include <DallasTemperature.h> #include <PID_v1.h> #include <DHT.h> #include <Ethernet.h> #include <SPI.h> // OneWire DS18S20, DS18B20, DS1822 Temperature Example // // http://www.pjrc.com/teensy/td_libs_OneWire.html // // The DallasTemperature library can do all this work for you! // http://milesburton.com/Dallas_Temperature_Control_Library OneWire ds(6); // on pin 10 (a 4.7K resistor is necessary) DallasTemperature sensors(&ds); boolean waithTemp = false; int TEMPERATURE_PRECISION = 10; int lamp1 = 7; int lamp2 = 8; int lamp3 = 9; DeviceAddress IntThermometer = { 0x28, 0x8E, 0xF4, 0x28, 0x05, 0x00, 0x00, 0x07 }; DeviceAddress OutThermometer = { 0x28, 0x65, 0x15, 0x32, 0x05, 0x00, 0x00, 0xE2 }; DeviceAddress KatThermometer = { 0x28, 0x61, 0x43, 0x28, 0x05, 0x00, 0x00, 0x14 }; byte addr; unsigned long StartTime = 0; unsigned long WorkWindow = 60000; // 10min unsigned long WorkTime, TenTime; float maxData = 100; float celsius, temp; double Setpoint, Input, Output; int ThermometerCount; DeviceAddress Thermometer; PID myPID(&Input, &Output, &Setpoint, 10, 0.1, 5, DIRECT); //0.000006 0.03 40 double targetTemp = 22.5; byte mac = { 0xE0, 0x69, 0x95, 0x72, 0x65, 0xE8 }; byte ip = { 192, 168, 1, 100 }; byte server = { ?, ?, ?, ? }; EthernetClient client; byte webskipcount = 10; byte webcount = 0; void setup(void) { Serial.begin(9600); //Ethernet.begin(mac, ip); Ethernet.begin(mac); sensors.begin(); pinMode(lamp1, OUTPUT); pinMode(lamp2, OUTPUT); pinMode(lamp3, OUTPUT); Setpoint = targetTemp; myPID.SetOutputLimits(0, maxData); myPID.SetMode(AUTOMATIC); celsius = targetTemp; StartTime = millis(); } long filter(long x, long Nb, long k) { static long y = 0, z = 0; z += (x — y); return y = (Nb * z) >> k; }; void loop(void) { byte i; byte type_s; byte data; long Out; if (millis() < StartTime) { StartTime = millis(); } WorkTime = millis() — StartTime; if (WorkTime > WorkWindow) { WorkTime = WorkTime — WorkWindow; StartTime = millis() + WorkTime; } //Serial.println(«cycle»); sensors.requestTemperatures(); celsius = sensors.getTempC(IntThermometer); Input = celsius; if (webcount >= webskipcount) { char buffer; String temperatureS1 = dtostrf(celsius, 2, 2, buffer); String temperatureS2 = dtostrf(sensors.getTempC(OutThermometer), 2, 2, buffer); String temperatureS3 = dtostrf(sensors.getTempC(KatThermometer), 2, 2, buffer); String OutputPowerS = dtostrf(Output, 2, 2, buffer); String msg = «GET /temp.php?t1=»+ temperatureS1 + «&t2=» + temperatureS2 + «&t3=» + temperatureS3 + «&p=»+OutputPowerS; Serial.println(msg); client.connect(server, 80); client.println(msg); client.stop(); webcount = 0; } else { webcount += 1; } myPID.Compute(); //Serial.print(Input);Serial.print(» «);Serial.print(Output);Serial.print(» «);Serial.println(Setpoint); if (Output > maxData/3*2) { digitalWrite(lamp1, HIGH); digitalWrite(lamp2, HIGH); Out = Output — maxData/3*2; } else if (Output > maxData/3) { digitalWrite(lamp1, HIGH); digitalWrite(lamp2, LOW); Out = Output — maxData/3; } else { digitalWrite(lamp1, LOW); digitalWrite(lamp2, LOW); Out = Output; } TenTime = map(Out, 0, maxData/3, 0, WorkWindow); Serial.print(celsius); Serial.print(» «); Serial.print(sensors.getTempC(OutThermometer)); Serial.print(» «); Serial.print(sensors.getTempC(KatThermometer)); Serial.print(» «); Serial.print(Output); Serial.print(» «); Serial.print(TenTime); Serial.print(» «); Serial.println(WorkTime); if (WorkTime < TenTime) { digitalWrite(lamp3, HIGH); } if (WorkTime > TenTime) { digitalWrite(lamp3, LOW); } }

Проект 2. Отопление на Arduino

Если допустим вам нужно автоматически отапливать гараж, или дачу, или домик в деревне у бабушки, вам совершенно ни к чему покупать супер-пупер дорогостоящие контроллеры со своими мегафункционалами. Управление отоплением Ардуино справляется на все сто. Только нужно грамотно и правильно написать скетч, да и к тому же вы имеете возможность настраивать систему под себя. А если обращаетесь к программированию на вы, то можно попросить опытного и профессионального программиста написать софт.

Из этой статьи вы узнаете:

Схема отопления
Список оборудования и ПО

Приветствую друзья, с вами автор блога, Гридин Семён. В просторах интернета я наткнулся на замечательный проект по отоплению на Arduino. Сразу хочу поставить все точки над i. Статья не моя, и проект не мой, даже картинки не мои. Это произведение автора под ником Vanalaizer, первоисточник размещён на Geektimes.

К сожалению, связаться мне с ним не удалось. Этот пост я пишу в основном, чтобы зафиксировать на сайте и закрепить для себя и для вас основные аспекты проекта.

Ну а вам решать, какой текст вам удобнее всего читать — мой или уважаемого Vanalaizer’a. А ему кстати говоря отдельное спасибо за проект. Так что не бросайтесь на меня тухлыми помидорами=)). Я не специально.

Схема отопления

Основной принцип данного проекта — это процесс регулирования электрокотла с помощью самой простой и приземлённой платой Arduino UNO.

Вот непосредственно сам шкаф управления, «мозги» на основе Arduino.

Это как раз делалось для дома в деревне. Регулирование температуры ведётся в одной комнате.

Какое же само оборудование? Я не буду расписывать большие тексты. Напишу конкретно. Для системы требуется следующее.

  • Электрокотёл на 4-6 кВт
  • рециркуляционный насос

Сама конструкция котла состоит и металлического цилиндра с тремя нагревательными ТЭНами по 2 кВт. Отсюда следует вывод, что система должна быть трёхфазная на каждой фазе по ТЭНу. Дополнительно в корпус электрокотла врезаны 2 датчика, резистивный датчик температуры и датчик, замыкающийся при перегреве.

Система управления на Arduino не совсем простая, включать и выключать реле по PID-закону. Лучше всего два ТЭНа включать сразу, а одним поддерживать температуру, это самый надёжный и наиболее точный способ.

Ток потребления нагревателя составляет примерно 8 А. Лучше всего управлять твердотельными реле с запасом по мощности, примерно ампер 15-20 и с охлаждающим радиатором.

Есть готовые модули Solid State Relay, проще говоря — электросхема, собранная на мощном тиристоре, в корпусе, похожем на обычное реле. Из его плюсов — нет механики, ничего не залипнет. Не создаёт мощных ЭМ-помех, что важно для ethernet’a, о котором ниже.

Они уже содержат схему, которая включает и отключает реле при проходе нуля. На реле есть индикатор включения. Ну и ещё они беззвучные, хотя для нашего случае это не так и актуально. Были установлены SSR-25DA, что по-русски означает — твердотельное реле с постоянным управляющим током 3-5В и током нагрузки до 25А.

К ним есть штатные радиаторы, они должны быть установлены — ОБЯЗАТЕЛЬНО!! Не забываем смазать термопастой, для улучшения теплообмена.

Для измерения температуры были использованы цифровые датчики температуры на базе DS18B20.

Список оборудования и ПО

Что же применялось в конечном итоге:

  • Плата arduino. Использовалась UNO r3
  • Ethernet Shield
  • Витая пара
  • Датчики температуры
  • Блок питания на 110-240 — 12В 2А
  • Стабилизатор LM7805
  • Реле SSR-40DA 3 шт
  • Радиаторы для реле

Но всё это, конечно, хорошо, но не стоять же постоянно с компьютером рядом с котлом, всё же хотелось бы знать о том, что происходит дома, удалённо через инет. Уже был самый простенький VPS сервер от majordomo для чего попало. На нём создана база данных на MySQL для хранения данных о температуре. (на этом мои познания пока ограничены).

Теперь нам надо как-то положить данные из arduino в эту базу. Для этого, естественно, понадобится как минимум связать arduino с интернетом.

Для этого нам и понадобится Ethernet Shield и его библиотека. Установлен простенький роутер. Тянем стандартную витую пару к роутеру и добавляем в программу передачу данных. Передача идёт через вызов странички на PHP с параметрами — данными. Создаём страничку с именем temp.php на нашем инет-сервере.

PHP

После этого мы имеем данные о температурах и мощности работы котла, чтобы каждый раз не лазить в базу, а посмотреть последние данные, автор написал “временный” скрипт на php, gettemp.php

PHP

Вот и практическое применение языка PHP в сфере автоматизации. Честно говоря, пока не углублялся в такие дебри, но всё равно интересно!!!

Ну и, сам скетч.

Arduino

Здесь я останавливаюсь, спасибо автору за его проект. Было бы интересно пообщаться, я всегда на связи. Спасибо за внимание! Всего доброго!!!

С уважением, Гридин Семён

Сообщества ›
Arduino для автомобиля ›
Блог ›
Управление печным отопление при помощи Arduino

Печь для отопления гаража/дома/дачи

Полный размерСама печь с рубашкой

Зима подкралась незаметно. Но я то подготовился. Еще летом на ум пришла простенькая идейка собрать печь которая могла бы растапливаться на твердом топливе (Дрова, уголь, торфянные брикеты, все что горит ) и поддерживать температуру при прогорание топлива с помощью ТЭНа.

Полный размерСхема системы отопления

Печь выполнена из листового стали СТ3 толщиной 3мм. Так как печь в рубашке, толще не вижу смысла ставить ибо теплоноситель не дает перегорать металлу. Чертеж скину в Kompas V16
В качестве радиатора используется труба профильная 80х40. Простая закольцовка по периметру дома.

Полный размерЧертеж печи

ТЭН — 2 квт Ariston — отапливаемая площадь 78м.кв. полностью утеплена объем системы теплоносителя примерно 30л мощности для поддержания хватает, даже при -10 за бортом, дома заданные +23

ТЭН с термореле, которое выполняет чисто функцию дополнительной защиты

Насос циркуляционный ZOX ZX 32-6 — пока не доработал автоматику работает на минимальной скорости, чего вполне достаточно .

Хороший насос — сопоставим грундфосу

Система контроля выполнена на платформе Arduino Uno + (3 датчика температуры DS18b20, Часы реального времени DS3231, Дисплей HD44780 LCD 16×2, Bluetooth модуль HC-06, двух канальное реле для arduino (ВАЖНО ДЛЯ ТЭНа данное реле не подходит ! Приобретите для него Твердотельные Реле SSR-40 DA ), а так же мелочевка корпус от автомата, провода, автомобильные тактовые кнопки, потенциометр, резисторы на 4.9кОм) Схема обвязки Ардуино прилагается…

Полный размерИспользуйте твердотельные Реле SSR-40 DA

В программе пока написал 4-ре режима работы:
1. Автоматический — пока горит печь, микроконтроллер управляет включением и выключением циркуляционного насоса в зависимости от разности температур труб. Далее проверяется таймер если время в таймере соответствует заданному интервалу, и температура в этот момент ниже заданной, то включается ТЭН, который выключится с окончанием заданного интервала или при превышение температуры выше чем на три градуса от заданной.

Полный размерАвто

2. Ручной -самостоятельно в интерфейсе контроллера выбираем что включить, а что выключить.

Полный размерРучной режим

3. Печь — Управление только циркуляцией теплоносителя как в первом режиме.

Полный размерРежим

4. Электро — в зависимости от разности температур труб, происходит вкл/выкл насоса. В зависимости от заданной температуры вкл/выкл ТЭН.

Полный размерРежим

На главном экране отображается температуры 3-х датчиков (Температура линии нагнетания, линии всасывания, помещения) и часы.

Полный размерГлавный Экран

На втором экране выбирается режим работы.
На третьем отображается Потери градусов в час и в минуту.

Полный размерЭкран расхода

На остальных экранах задаются параметры работы.

В устройстве (правда в начальной стадии) добавлена функция передачи данных по каналу Bluetooth (При наличие модуля HC-06) или через usb на пк. Для этого через программу ТЕРМИНАЛ необходимо отправить команду. По команде «1» — устройство отправит все показатели, а по команде «l» — включит подсветку устройства.

Скетч будет на моей странице

Работа над устройством продолжается ожидается управление по смс, установка дроссельного узла с сервоприводом.

Архив с чертежами скетчем и
фотографиями
cloud.mail.ru/public/HGxh/smv4KtxJZ

Официальная страница проекта

katapuf ›
Блог ›
Управление газовым автономным отопителем с помощью Arduino 1

Здравия хорошим людям.

Полный размерСхема на модулях Полный размерСхема где нужно самому изготовить модуль полевых ключей

Для удобства восприятия, СКЕТЧ состоит из блоков — функций.
Алгоритм остался тот же.
Немного изменилась схема подключения, совсем чуть-чуть.
А теперь, по порядку.

При включении отопителя в сеть(основной тумблер подачи питания), включается термостат W1209,
он показывает температуру в помещении, его можно настроить на заданную температуру и
начинает мигать светодиод, индикации работы системы в течении 1 минуты.
Этого времени, примерно достаточно для прогрева датчиков контроля газов, MQ6 и MQ7.
Как только светодиод погас, отопитель готов к работе.
Также начинают работать датчики газов.
Если утечек газов нет, тишина, если в этом режиме произойдет утечка то включится звуковой сигнал и включаться вентиляторы, звуковой сигнал будет звучать пока не будет нажата кнопка или в течении двух минут, через две минут он сам отключится. А вентиляторы будут работать до тех пор пока помещение не проветрится или не будет перезапущен отопитель(выключен и заново включен). Если отопитель будет работать и в процессе работы сработают модули газов, то отопитель остановится и включится продувка, так же до тех пор пока не будет проветрено помещение или не перезапущен отопитель.
При нажатии на кнопку, включится система и отопитель начнет работать в цикле.
То есть, если температура понизилась до заданной, то он включится, нагреет «помещение» опять же до заданной температуры, отключит газ, продует себя в течении 2 минут и отключится, до тех пор, пока температура не упадет и так по кругу.
В случае, если при запуске кварц окажется замкнутым, то включится продувка и если в течении 2 минут, кварц разомкнется, то отопитель продолжит работать в штатном режиме.
Если же этого не произойдет, то по истечении 2 минут, система отключится.
Если в процессе запуска отопителя, после включения розжига и открытия клапана подачи газа в течении 2 минут кварц не замкнется, (возможно вышел из строя розжиг, закончился газ) отопитель отключит розжиг, закроет клапан подачи газа, продует себя в течении 2 минут и отключится система.
Если в процессе работы отопителя (когда идет обогрев, работает вентилятор и открыт клапан подачи газа, а значит, горит газ) вдруг разомкнется кварц (возможно кончился газ и ли другая причина), то отопитель отключит клапан подачи газа, продует себя в течении 2 минут и отключит систему.
При отключенной системе, работа отопителя не возможна.
Так же при аварийной ситуации включится звуковой сигнал и с частотой 100 мил. сек. начнет мигать светодиод индикации работы системы. Отключить звуковой сигнал можно как в ручную, однократно нажав кнопку или же он отключится сам, по истечении 2 минут.
Светодиод будет мигать пока идет продувка отопителя.
При выключении системы путем нажатия на кнопку (если она включена и не включен звуковой сигнал), отопитель находясь в любом состоянии (полностью работает или в процессе запуска) отключится система, розжиг, клапан, останется работать вентилятор, который через 2 минуты, так же отключится.
В СКЕТЧ добавлена функция термопредохранителя. Который штатно предусмотрен в ШААЗ 030.
В случае выхода из строя термостата и перегрева отопителя, последний отключит клапан подачи газа оставив работать вентилятор, который будет включен до тех пор пока отопитель не остынет или не будет выключен вручную.
Для ШААЗ 015, у которого нет штатного термопредохранителя, его можно установить самому.
Если нет такого желания, то просто закомментировать строку в СКЕТЧ (смотрим скетч там указано какую строку нужно закомментировать в разделе void loop()).
Иначе, если этого не сделать, у вас просто напросто не включится система.

Также столкнулся с ситуацией (сейчас делаю отопитель для друга), когда горелка, которая установлена на место штатного вентилятора, для более эффективной работы, длиннее чем нужно.
То есть ее край перекрывает отверстие в которое устанавливается свеча искрового розжига.
И при всем желании поджечь эту горелку просто так нет возможности.
Для этого в конструкцию добавлен еще один электроклапан для газа и добавлены строки в СКЕТЧ.
Если у вас с размерами горелки нет проблем, скетч изменять не нужно, он «универсальный».

Теперь по поводу доп. клапана, алгоритм такой.
Включается вентилятор, продувка, включается розжиг, затем открывается основной клапан и клапан «фитиля», который стоит после основного клапана.
Газ начинает подаваться как на горелку, так и на свечу розжига(штатное место куда подавался бензин, на конец трубки, которая подает газ на свечу, нужно установить жиклер(нарезать внутреннюю резьбу и вкрутить жиклер), с минимальным отверстием, примерно 0,1 — 0,3 мм.)
Как только кварц нагреется и замкнется, доп. клапан отключится, закроется.
Для управления этим клапаном в схему добавлен еще один ключ на полевом транзисторе.

Для тех кто знаком с электроникой по минимуму, нужно будет лишь купить модули в Китае на Алиэкспресс, соединить их по схеме и залить скетч.
Для этой версии, не понадобится делать, травить, платы.
Останется только сделать (подобрать из готовых) три корпуса, один для деталей искрового розжига, второй для датчиков газов и третий для пульта управления.
Второй и третий корпус размером меньше ладошки, а вот первый, если использовать так же китайский модуль, то тоже будет небольшой.
Если использовать вариант с катушкой, зажиганием от ВАЗ 09 и эмулятором датчика холла (аварийное зажигание), то корпус будет немного больше.
Питание + подается на клемму катушки «Б», а минус на мосфет ключ.

Полный размерРозжиг на основе зажигания ВАЗ 09

СКЕТЧ

Дополнительный вентилятор, это:
Если отопитель установлен в авто, то это вентилятор передней печки.
Так как он работает на вдув, то когда он включится, при утечки пропана или скоплении угара, он будет создавать избыточное давление в салоне, тем самым выдавливая «нехорошие газы».
Если отопитель установлен в помещении, то это вентилятор который установлен для вентилирования помещения.
Если этот вентилятор к примеру на 220 вольт, то нужно будет в схему добавить реле, с управляющим напряжением на 12 вольт (один контакт управляющей катушки подключаем к + 12 В, второй на ключ-мосфет) и теперь 4 ключ — мосфет, отвечающий за управление доп. вентилятор, будет управлять этим реле, а оно в свою очередь включать или отключать доп. вентилятор.

Если будут какие то вопросы пишите, отвечу.

СКЕТЧ готов, вроде бы все продумал, если что то забыл или будут какие то предложения, так же пишите.

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

Ардуино Нано 3.0
Понижающий модуль для питания Ардуино и модулей
Термостат W1209
Понижающий модуль для модуля розжига на основе модуля FMC800
Модуль розжига FMC800.
ВАЖНО.
Высоковольтные провода модуля розжига FMC800, не должны замыкаться во время работы, а так же расстояние между их концами, не должно превышать 2 см.
Иначе модуль выйдет из строя.
То есть включатся он должен, только когда, один высоковольтный провод подключен к корпусу отопителя (к корпусу камеры сгорания), второй провод к вкрученной свече.
Сеча это обычная свеча зажигания с «длинной резьбой», у которой шестигранник под ключ обточен и она свободно входит в футорку, которой крепится в корпусе.
Датчик утечки пропана MQ6
Датчик утечки угарного газа MQ7
пассивный буззер
Полный размерДатчики газов в корпусе

Так же я «модернизировал» узел горения в отопителе.

Теперь то место которое было предназначено для штатного вентилятора и пустовало после переделки, занимает газовая горелка (какие надеваются на баллон, узел крана горелки снят).
При установке, самое важное: отверстия для забора воздуха на горелки должны находиться на против окна подачи воздуха на отопителе. А конец горелки, на против свечи розжига.
Поэтому если кто будет переделывать померяйте свой отопитель и уже зная место крепления и размеры покупайте горелку. (если что, то они разной длинны.) И жиклер в горелке нужно рассверлить до 0,5 мм.
Результат: уменьшился расход, производительность выросла.
Выхлоп как от домашней газовой плиты.
И для лучшей работы была заменена «лягушка» на вот такой редуктор

Полный размерГазовый редуктор

Если кто будет делать ключи на полевых транзисторах сам, а не на китайских модулях,
вот печатная плата в формате Sprint Layout V6.0
расположение деталей(шелкография) в формате Sprint Layout V6.0
Не забываем перед выводом на печать, поставить галочку, отобразить зеркально и контур платы.
Для печати дорожек, оставляем только слой М2.
Для печати «шелкографии», оставляем все слои кроме М2.

Если не требуется установка доп. клапана подачи газа, просто не устанавливаем один мосфет, два резистора и диод.

И самое главное, не забываем, что масса 5 вольтовых модулей и 12 вольтовых, должна быть объединена.

Для «экономии» тока, избавляемся от «пожирателей», на термостате.
А так же от одного «лишнего» провода, который шел от корпуса «пульта управления»,
к корпусу на самом отопителе.
После переделки, +12 Вольт на пульт «тянуть» не надо.
Термостат будет работать как и Arduino от 5 Вольт.
А «пожиратели» тока, реле с платы термостата, и линейный стабилизатор, на котором падает напряжение с 12 В до 5 и просто переходит в тепло, будут удалены.