Термостат своими руками ардуино

Добавил пользователь Alex
Обновлено: 19.09.2024

Термореле для холодильника на Arduino Pro Mini и ds18b20.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Есть у меня холодильник Nord. Уже не молодой, но вполне себе рабочий. Работал он себе, работал, как вдруг стал замечать, что не выключается он. Компрессор работает постоянно, наледь на "потеющей" стенке образовалась. Короче, термореле сломалось. Вызвали мастера и выяснился неприятный момент - данная модель холодильника шла с термореле, которое уже снято с производства, а другие реле имеют не совсем подходящие характеристики. Холодильник - штука полезная, поэтому, вздохнув, сказал, чтобы ставил хоть что-то. Новое реле выключало время от времени компрессор, но всё-таки температуру загоняло в минус и раз в день приходилось холодильник примерно на час-полтора выключать из розетки. Обзвон других мастеров-холодильщиков результатов не дал (кто с нордами вообще не работал, у кого тоже такого термореле не было) и встал извечный вопрос "Что делать?"

Решено было сделать своё термореле "с преферансом и поэтессами" с по-возможности наименьшим вмешательством в сам холодильник. Первым делом озадачился требованиями к реле. Поиск по форумам холодильщиков привёл к следующему списку требований:
- при включении напряжения сети - пауза 10 минут до включения двигателя независимо от температуры;
- при отключении, повторное включение не ранее 10 минут независимо от температуры;
- при перезагрузке - пауза 10 минут до включения двигателя независимо от температуры;
- если компрессор работает более 1 часа - принудительная остановка независимо от температуры.

Пауза перед каждым повторным включением для компрессора необходима. Это связано с тем, что примерно за 5 минут должно стравиться давление в компрессоре. Если компрессор включится раньше, то он будет испытывать повышенную нагрузку. Начнётся перегрев обмоток и для компрессора это может закончиться совсем печально.

Установить датчик в том-же месте, что и обычный не получалось, так как там уже стоял датчик термореле холодильника. Термореле холодильника я решил не трогать, а использовать как резервное, для страховки. Поэтому свой датчик я решил завести через трубку слива конденсата, а на время отладки, временно, завести его через уплотнитель двери (но, чувствую, это временное решение окажется постоянным). Для того, чтобы при случайном обрыве датчика холодильник не остался без управления, ввёл ещё одно правило:
- если температурный датчик оборван или неисправен, то компрессор работает в цикле (20 мин работа/40 мин отдых), при этом загорается аварийный светодиод.

Установка датчика в нестандартном месте привела к тому, что воспользоваться данными из справочника по термореле было нельзя. Там были параметры при установке в штатное место штатным образом. Поэтому, для начала, выбрав место установки датчика ds18b20, промерял температуры, при котором включался и выключался компрессор при уже установленном реле. Поскольку этот диапазон приводил к намораживанию, я просто поднял и температуру включения, и температуру выключения на градус. Это оказалось удачным решением. На другой модели холодильника и в другом месте установки это может оказаться и не так, придётся экспериментировать.

и релейный модуль,


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

Термодатчик выполнен на ds18b20 и подключён к Arduino Pro Mini витой парой, выдернутой из кабеля локальной сети. Для герметичности место выводов залито термоклеем.

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

Платы блока питания, Arduino Pro Mini и релейного модуля были соединены навесным монтажом и помещены в корпус с сетевой вилкой.


На тыльную сторону корпуса прикреплена розетка для наружной проводки, в которую и включается холодильник.


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

Принципиальная схема самодельного четырехканального термостата с отображением температур, построен на основе Arduino UNO, LM325 и с дисплеем 1602А, позволяет управлять четырьмя раздельными нагрузками.

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

Работа четырехканального термометра и его программы очень подробно описана в предыдущей статье (Л.1), поэтому здесь речь будет только об изменениях для реализации работы четырехканального термостата.

Принципиальная схема

Принципиальная схема показана на рис.1.

Рис. 1.Принципиальная схема термостата на Arduino UNO, LM325 с дисплеем 1602А.

В отличие от первой схемы (Л.1) здесь присутствуют четыре транзисторных ключа, нагруженных на обмотки реле К1-К4, управляющие четырьмя различными нагревательными устройствами (Н1-Н4). Управляющие команды на эти ключи поступают от четырех цифровых портов D9-D12 платы ARDUINO UNO.

Программа

Программа приведена в таблице 1.

Первое отличие в том, что заданы порты для управления нагревателями. Это порты D9-D12, заданы они здесь:

Можно выбрать другие свободные цифровые порты, после подключения индикатора остались еще D8 и D13. Но автор выбрал именно эти: D9, D10, D11, D12. Второе отличие в том, что для управления нагревателями используется компараторная функция if. В строках:

if(temp -15)digitalWrite(12, LOW);

if(tempi 1)digitalWrite(11, LOW);

if(temp2 20)digitalWrite(10, LOW);

if(temp3 10)digitalWrite(9, LOW);

В этих строках указывается при какой температуре, какой логический уровень должен быть на соответствующем порту. Например, при температуре первого датчика (Т1) ниже -15°С на порту D12 будет логическая единица. При температуре второго датчика (Т2) ниже 1°С на порту D11 будет логическая единица.

При температуре третьего датчика (ТЗ) ниже 20°С на порту D10 будет логическая единица. При температуре четвертого датчика (Т4) ниже 10°С на порту D9 будет логическая единица. Конечно, температуры можно задать и совсем другие, - любые, которые нужны для конкретного применения данного прибора.

Более того, уже в готовом устройстве, при необходимости их легко изменить. Для этого нужно подключить персональный компьютер к USB-порту платы ARDUINO UNO и загрузить программу с другими данными по температурным порогам. В принципе, для этого можно предусмотреть на корпусе готового прибора разъем USB.

Потому что контакты реле не рассчитаны на такой режим работы, и могут быстро выйти из строя от подгорания из-за искрения. Но гистерезис вносит погрешность в работу термостата. Здесь было решено не создавать гистерезис, а для того чтобы контакты реле переключались не слишком часто просто замедлить работу прибора. Для этого в строке:

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

Детали

Электромагнитные реле К1-К4 можно применить любые с обмотками на 12V и контактами, достаточно мощными для управления конкретными нагревателями.

Литература: 1. Каравкин В. - Четырехканальный термометр на ARDUINO UNO, РК-06-17.

admin

Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Последние посетители 0 пользователей онлайн

Объявления

В общем симуляция говорит что надо собирать всё до кучи. Вроде как всё работает без ошибок, но всё же не могу понять почему в железе работает, а в протеусе приходится увеличивать ёмкость С8 до 100мкФ, чтобы оно нормально срабатывало, иначе там такое дикое пульсирующее, что полевик VT16 даже не открывается. Что же до схемы защиты от постоянки - всё очень порадовало. Действительно минимум деталей, но максимум профита. Надо ехать в микрокап. В протеусе шота не обрёл я щастя. Protect & soft start.pdsprj

Black-мур

Если у чела в АС на ВЧ стоит хотя бы что-то типа JBL hp 02 ti, или какой-нибудь "морельчик" или "сканик" баксов за 200, то может быть и нет(победит рассудок), а если у чела а в его домашней АС() по ВЧ работают драйвера, подобные JBL 2412H, то почему бы и нет. Всё зависит от 3-х величин - размер дома, размер АС, и конечно от того насколько велики понты, дабы чел не ощущал себя ущербным перед таким же аудиофилами-понторезами. ЗЫ. Правда, такие драйвера на 20кГц как правило уже и не работают.

Aliens444

Dr. West

Что-то у вас размеры сердечника указаны неправдоподобные. Вы точно не ошиблись? Там в миллиметрах всё должно быть.

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

Алебастр

С обмотками 36-110V cделать регулируемый и стабилизированный БП 0-100V/1ADC с переключением обмоток, для увеличения КПД. На выводе 230V сделать не стабилизированный регулятор постоянного напряжения 0-300V, с защитой (например известная схема с одним полевиком), для анодных применений.

Похожий контент

Олександр Король

Боба Дронов

Помогите пожалуйста разобраться с питанием
1) надо ли тут понижайка/ повышайка DC-DC?
2) как предохранить плату от помех при нагрузке.

Скетч прошивки тоже могу выложит, он максимально простой.
Также печатную плату тоже выложу как доделаю схему.

_Nikotin_

Доброго времени суток, господа. Никик я не могу прошить атмегу. Всегда выводится такая ошибка:
avrdude: Yikes! Invalid device signature.
Double check connections and try again, or use -F to override
this check.
Раньше у меня получалось прошивать ее, но на 16 МГц. Решил, что способен прошить и на 8 МГц. Скачал пару библиотек и. ничего, выдало ошибку. Первым делом я подумал, что все плохо с проводкой. У меня, кстати, TQFP32 адаптер, но я подумал, что контакт через макетную плату и UNO слишком слаб, поэтому припаял к выводам адаптера провода и вставил их в UNO. Как итог - ничего не поменялось. Менял я и UNO на NANO, переделывал схему (вставлял резистор от RES до VCC и наоборот, вставлял конденсатор между RES и GND у UNO), подключал резонатор на 16 МГц. А ошибка вся таже. Чё делать?

Animashevka Entertaiment

Версия прототипа на февраль 2019:


Идея сделать свой GSM термостат появилась не сразу, но после разочарования в готовых решениях. Читайте обзор WiFi термостата POER и доступных в продаже GSM/SMS-термостатов. Wi-Fi термостат оказался бесполезным в плане пресечения проблем с котлом (отключение электричества на долгий период, нежелание котла зажечься в -20 и т.п.), что приводит к заморозке воды в доме и затратам на ремонт, а готовые термостаты кажутся мне весьма неудобными при излишне завышенной цене (в среднем 7-10 тысяч). Создание своего GSM термостата позволяет за разумные деньги (до 3 тысяч рублей) сделать изделие, которое будет заточено под конкретные пожелания создателя и по возможностям будет превосходить готовые решения за 9 тысяч рублей. Первоначальная идея была взята из темы «Управление отоплением в загородном доме (GSM)«. Там же можете скачать готовые скетчи для девайса, однако, я настоятельно рекомендую разобраться в программировании для Arduino и написать свой скетч, отвечающий Вашим личным нуждам. Так Вы получите не только недорогой GSM термостат, но и новое хобби, которое увлечет Вас как минимум на несколько недель.

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

Итак, вот список того, что, по моему мнению, должен делать нормальный термостат. К сожалению, по мере роста кода, я столкнулся с проблемой ограниченности ресурсов Arduino (32 килобайта на код и 2 килобайта на переменные — это очень мало). Не всё, что я могу сделать, может существовать в рамках одного проекта, но, тем не менее, делюсь идеями, а каждый сам решит, какие фичи ему более полезны и интересны.

Что хотелось бы, но еще не сделано:

  • Для разбирательств в проблемных случаях хорошо бы вести лог температур и действий термостата на MicroSD карту. С точки зрения железа и программирования проблем тут никаких нет, но проблема в ресурсах Arduino. Подключение одной только библиотеки SD сжирает чуть ли ни половину доступной памяти. Как вариант, библиотека SdFat, которая не столь требовательна к памяти, но и с ней мой код не влез в лимит 32 кб. На Arduino UNO это точно не выйдет, разве что переделывать всё на Arduino Mega. Так что эта задумка пока под вопросом.

Команды (посылаются через терминал или SMS, или со смартфона, подключенного по Bluetooth):

Технические и отладочные команды для проведения первоначальной настройки.

В ответ получаем SMS о состоянии прибора после проведенных действий:

T=20.63; R=1111; A=1(21.00+0.30); W=1(10.00-30.00); VW=0; G=10/15; N=8; V=USB; DT=2019.10.15/10:44:48

Ну как-то так все и работает.

Отправка данных на интернет-сервер по GPRS.

Модем, в моем случае на базе SIM900, умеет выходить в интернет без дополнительного оборудования. Это можно использовать, чтобы сохранять данные об ошибках и периодически вести лог параметров устройства (температуры в доме, состояния реле в разное время и т.п.). Эти данные можно использовать как для удаленного контроля без необходимости оплаты SMS, так и для выяснения обстоятельств в случае проблем с котлом (когда именно котел встал, как быстро падала температура в доме и т.п.).

Самая простая реализация следующая:

Если еще нет своего сайта, делаем сайт (можно на бесплатном хостинге, но обязательно с поддержкой PHP).

В результате получаете лог типа такого при проветривании помещения:

2019-02-14,09:54:20,23.25
2019-02-14,09:55:20,22.50
2019-02-14,09:56:19,22.00
2019-02-14,09:57:24,20.75
2019-02-14,09:58:25,20.25
2019-02-14,09:59:19,20.25
2019-02-14,10:00:19,20.25
2019-02-14,10:01:20,19.75
2019-02-14,10:02:19,19.50

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

Ну а имея данные на сервере в интернете, с ними уже можно делать что угодно — выводить на экране в удобном виде, строить графики, рассылать тревожные email’ы при выходе параметров за разумные границы и т.п. Я также думал об обратной связи — чтобы из интернета слать команды на модем, но пока не вижу в этом большой необходимости — это излишнее нагромождение в проекте, а у меня уже на это нет памяти — 31.8 кб из 32 занято. Да и если всё исправно работает, то и слать на термостат ничего не нужно. А я все же надеюсь, что термостат будет работать исправно 🙂 Если же кто-то планирует это сделать, у меня в мыслях два варианта:

Остальное…

Теперь несколько слов о потенциальных проблемах, которые я обнаружил в скетчах, имеющихся в интернете.

Об использовании millis(); в качестве таймера.

Классический пример, который можно видеть чуть ли ни во всех скетчах, которые мне попались:

unsigned long currentTime;
unsigned long loopTime;
currentTime = millis();
if(currentTime >= (loopTime + 10000)) loopTime = currentTime;
/* какое-то важное действие, которое надо выполнять каждые 10 секунд */
>

Это часто работает при первоначальных проверках, но копнем глубже, прочитаем инструкцию:

millis() — Возвращает количество миллисекунд с момента начала выполнения текущей программы на плате Arduino. Это количество сбрасывается на ноль, в следствие переполнения значения, приблизительно через 50 дней.


ct=238 lt=230 lt+10=240
ct=239 lt=230 lt+10=240
ct=240 lt=230 lt+10=240 WIN!
ct=241 lt=240 lt+10=250
ct=242 lt=240 lt+10=250
ct=243 lt=240 lt+10=250
ct=244 lt=240 lt+10=250
ct=245 lt=240 lt+10=250
ct=246 lt=240 lt+10=250
ct=247 lt=240 lt+10=250
ct=248 lt=240 lt+10=250
ct=249 lt=240 lt+10=250
ct=250 lt=240 lt+10=250 WIN!
ct=251 lt=250 lt+10=4 WIN!
ct=252 lt=251 lt+10=5 WIN!
ct=253 lt=252 lt+10=6 WIN!
ct=254 lt=253 lt+10=7 WIN!
ct=255 lt=254 lt+10=8 WIN!
ct=0 lt=255 lt+10=9
ct=1 lt=255 lt+10=9
ct=2 lt=255 lt+10=9
ct=3 lt=255 lt+10=9
ct=4 lt=255 lt+10=9
ct=5 lt=255 lt+10=9
ct=6 lt=255 lt+10=9
ct=7 lt=255 lt+10=9
ct=8 lt=255 lt+10=9
ct=9 lt=255 lt+10=9 WIN!
ct=10 lt=9 lt+10=19
ct=11 lt=9 lt+10=19

Так что ходящий по рукам код выполнения действий через заданные промежутки, рассчитанные с помощью millis() кажется мне весьма сомнительным. Понятно, что большая часть поделок на arduino не используются 50 дней подряд, а если и используются, автор уже считает, что отладка завершена и может просто не заметить странного поведения, ведь через какое-то время программа снова должна начать выполняться как следует (если только многоразовое выполнение того, что должно выполняться редко, не выведет всю систему из строя.

Варианты решения проблемы (как я их вижу):

Об отсутствии проверок на текущее состояние оборудования.

Например типичное включение модема, которое можно видет в скетчах:

digitalWrite(GSM_PIN, HIGH);
delay(800);
digitalWrite(GSM_PIN, LOW);

Но эти же команды и выключают модем. Так что если по какой-то причине модем уже был включен, выполняя эти команды, мы его выключаем. Далее авторы скетчей беззаботно выполняют команды отправки SMS, даже не проверив, работает модем или нет. Имхо, вреда от такого оборудования будет больше, чем пользы — если Вы выключите модем, полагая, что вы его включаете, то вовсе останетесь без удаленного контроля.

Как я это себе представляю (на практике пока работает без проблем):

О выводе SMS в сериал порт без сохранения.

Статья будет дополняться и исправляться со временем. Если кто-то тоже работает над подобным проектом — делитесь своими мыслями в комментах. Также пишите о граблях, на которые уже пришлось наступить при подобных разработках.

Дополнение 2019-10-15:

После некоторого опыта использования, в новом сезоне внес в прошивку следующие изменения:

Дополнение 2019-11-03:


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

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


Также потребовалось сделать и вентиляционные отверстия для выброса тепла из контейнера. Я сделал их на высоте 1 см от верхнего края, через каждые 1.5 см, на всех сторонах кроме лицевой и того угла, где находится термодатчик, чтобы тепло, выходящее изнутри, его не подогревало.



Ну и последний шаг – наклеить 4 подушечки из толстого двухстороннего скотча на нижнюю часть разделочной доски и хорошенько прижать ее к дну контейнера, чтобы при вставлении штекера питания или USB, вся сборка не отодвигалась от отверстий для штекеров. Можно использовать для фиксации и термоклей, но в случае необходимости вынуть сборку из контейнера для проведения ремонта или апгрейда, отдирать термоклей будет сложнее, чем скотч. Теперь контейнер можно закрывать: замена сим-карты, подключение питания и USB кабеля для программирования, а также кабеля для котла, будет производиться снаружи.



Дополнение 2019-11-05:

Пока попробую так, а там видно будет. Единственный недостаток, который я пока вижу в такой реализации, заключается в том, что при потере электропитания прибора все собранные данные сбрасываются. Можно, конечно, писать их в энергонезависимую память, но смысла в этом я пока не вижу, так как у меня прибор работает и от розетки, и от резервного аккумулятора, и хочется надеяться, что до полного обесточивания прибора я всё же успею ознакомиться с логом и решить, что делать дальше.

Примеры общения с термостатом по Wi-Fi:

По SMS общение происходит так же, только за деньги 🙁 Кстати, благодаря статистике теперь видно, что температура гуляет в пределах 1.25 градусов, что намного приятнее, чем 2-3 градуса перепадов при использовании термостата Poer. Вынесенный наружу цифровой датчик Dallas значительно быстрее улавливает иизменения температуры в помещении, чем встроенная внутрь корпуса аналоговая термопара Поера. Также теперь можно оценить циклы работы/простоя котла. В примере на втором скриншоте видно, что котел работал примерно по 15 минут с последующим отдыхом около 60-70 минут, чтобы прогреть дом до 20-21 градусов при уличной температуре около 0 градусов.

Уголок технаря

ВСЕ ВЕРСИИ:
v1.0 реле+DHT22+esp01
v1.1 добавлены уведомления о порогах
v2.0 прикручен LCD+Переход на NodeMCU+другая библиотека для DHT
v3.1 переход на Dallas до 5 шт, запись в память, гистерезис, стабильная работа после отключения
питания и отвала от интернета
v3.2 ДВУХКАНАЛЬНЫЙ РЕГУЛЯТОР
Добавлены 2 датчика далласа, добавлен еще один канал реле со своим регулятором температуры
и установкой гистерезиса

РЕШЕНИЕ ПРОБЛЕМ (спасибо подписчикам):
У меня наблюдались частые проблемы с подключением к Blynk, решил эту проблему следующим образом в закладке Connect.h в строке 43 значение delay(500); заменил на delay(1000); подключение стало стабильным

Дмитрий Крылов:
Если кому то поможет: увеличил везде delay 2000 стало работать стабильнее!

Читайте также: