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

Содержание

Термостат на arduino и DS1820

1481443450 pic 0003

Изначально термостат делался просто как термометр, для контроля температуры за окном. Затем во время морозов, стала подмерзать картошка в подполье и был добавлен функционал для контроля за микроклиматом. Паспортные данные коммутационного реле – 250В и 10А( 2,5кВт). Т.к жара в подполье не нужна, тэна на киловатт вполне хватит.

Необходимые материалы и инструменты:
-коробка от средство ухода за обувью
-USB-зарядка для для телефона(любая,не менее 0,7А)
-Arduino-Pro-Mini
-2-х строчный 8 символьный дисплей(WH0802A-NGA-CT он более компактный)
-энкодер с кнопкой (можно приобрести в любом радиомаг, кнопку можно и не встроенную)
-шильд с 5В реле (я приобрел в свое время кучу китайских реле без опторазвязки, поэтому мне понадобился еще Оптрон PC817 и резистор на 470 Ом. Если у вас на шильде собрана опторазвязка, то вы можете подключить шильд непосредственно к порту arduino)
-USB-разъем
-2 USB-удлинителя 3 метровых (один для шнура питания, ко второму подпаяем DS1820)
— DS1820 (с любой буквой)
-паяльник
-клеевой пиcтолет
-шильд FTDI232

Шаг 1: Первым делом нам надо прошить ардуинку, т.к у меня Pro Mini (она идет без преобразователя USB-RS232) мне необходимо впаять линейку с пинами на ардуинку. С той стороны где выведены DTR, TXD, RXD, VCC, GND, GND. Теперь соединяем FTDI232 DTR к DTR, VCC к VCC, GND к GND, TXD к RXD, RXD к TXD. Запускаем arduino IDE загружаем скетч и прошиваем(скетч в конце).

1481026463 pro mini modul atmega328 5 v 16 m dlya arduino sovmestimyy s

1481026481 ft232rl ftdi basic usb posledovatelnyy port dlya arduino pro mini skachat kabel usb k 232

Шаг 2: Теперь займемся корпусом. Отрываем губку у «ФУКС», все хорошо обезжириваем, глубокую часть коробочки можно пройти наждачкой (что-бы крепче приклеилось). Размечаем отверстие под энкодер, USB-разъем(маму) и сам дисплейчик. На крышку коробки приклеиваем реле. Надо постараться расположить реле подальше от процессора и расположить компоненты так, что-бы потом крышка закрылась (место предостаточно).

Шаг 3: Теперь берем USB-удлинитель отрезаем разъем гнездо (мама). Разделываем отрезанный конец, сверлим в корпусе отверстие под кабель, просовываем его и проклеиваем кл.пистолетом. Плюс у кабеля красный, минус черный(я на всякий проверяю), плюс на плюс разъема, минус на минус (распиновку разъема я не привожу – в инете есть). Между плюсом разъема и 2 средними(у меня они соединены) надо распаять резистор 4.7кОм.

1481026652 snapshot 20161206 1

1481026711 doc001204975

1481026783 termostat

Шаг 5: Все компоненты схемы соединены. Подключаем наш датчик(без него дисплей останется черным),подаем питание. В первой строке – значение температуры, во 2 если горит “*” – реле вкл, нет – выкл. Теперь попробуем выставить пределы переключения реле. Нажимаем вал энкодера(или вашу кнопку) появится значение предела при котором реле будет включаться, вращая вал – значение увеличивается или уменьшается. Нажав на вал еще раз – получим верхний предел(реле будет выключаться),выставляем значение и нажимаем еще раз. Прибор будет контролировать температуру, значение пределов сохраняется при отключении питания. Все.

Источник

Автоматическая регулировка температуры в доме с помощью терморезистора и Arduino

Наверняка многие из вас задумывались об автоматической регулировке температуры в доме – то есть чтобы нагрев дома включался автоматически (без вашего участия) при понижении температуры ниже некоторого минимального порога. В этой статье мы рассмотрим подобный проект автоматического управления температурой в доме на основе использования платы Arduino и терморезистора. Ранее на нашем сайте мы уже рассматривали подключение терморезистора к плате Arduino.

control relay using arduino based on temperature 0

Необходимые компоненты

Работа схемы

Схема устройства представлена на следующем рисунке.

control relay using arduino based on temperature circuit diagram

Схема содержит такие элементы как плата Arduino, ЖК дисплей, реле (Relay) и терморезистор (термистор). При повышении температуры реле будет включаться, а при понижении температуры ниже заданного порога – выключаться. Реле управляет цепью электрической лампочки – оно выполняет роль домашнего устройства, управляемого в зависимости от температуры. Весь процесс измерения температуры и включения/выключения лампочки выполняется платой Arduino. Также плата Arduino выводит информацию о температуре и статусе системы на экран ЖК дисплея.

Реле (Relay)

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

spdt relay working

Когда к катушке реле не приложено никакого напряжения общий провод реле COM соединен с контактом NC (normally closed contact – нормально замкнутым контактом). Когда же к катушке реле будет приложено управляющее напряжение, то оно переключит рычаг (якорь) реле и тогда контакт COM будет уже соединен с контактом NO (normally open contact – нормально разомкнутым контактом), что позволит сравнительно большому току протекать через эти контакты. Реле изготавливаются на различные номиналы напряжения, мы в нашем проекте использовали реле на 5 В, которое позволяет коммутировать переменный ток 7A-250VAC.

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

5v relay driver circuit module 0 rotated

Внутренняя схема соединений реле показана на рисунке ниже и она содержит в своем составе транзистор, диод и резистор.

5v relay driver circuit module circuit diagram 0

Расчет температуры с помощью терморезистора

Схема используемого нами делителя напряжения представлена на следующем рисунке.

formation of voltage divider circuit by thermistor and resistor 0

Напряжение на терморезисторе в этой схеме можно определить из известного напряжения:

Из этой формулы можно выразить значение сопротивления терморезистора Rt (R – известное сопротивление 10 кОм):

Значение Vout мы затем будем определять в коде программы с помощью считывания значения на выходе АЦП на контакте A0 платы Arduino.

Математически, сопротивление терморезистора можно вычислить с помощью известного уравнения Стейнхарта-Харта (Stein-Hart equation).

T = 1/(A + B*ln(Rt) + C*ln(Rt) 3 ).

В этой формуле A, B и C — константы, Rt – сопротивление терморезистора, ln — натуральный логарифм.

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

Объяснение программы для Arduino

Полный текст программы приведен в конце статьи, здесь же рассмотрим его наиболее важные фрагменты.

Источник

Еще один термостат на Arduino, но с OpenTherm

53105733876d4483b6f08190f00b19b8

Читая первую часть заголовка многие из вас, наверняка, подумали – еще один термостат на многострадальной Arduino. И… Это правда – да, это очередной термостат для очередного котла, очередного дома, но правда это только отчасти – в статье я не хочу концентрироваться на самом устройстве – их (статей) действительно предостаточно. Несомненно, я опишу термостат, но больше хотел бы рассказать о том, как я связывал сам микроконтроллер с котлом. Итак, кому интересно – прошу…

Как все начиналось

Прежде всего хочу сказать, что я нисколько не программист и с настоящим микроконтроллером дела до этого не имел. Мое первое знакомство с МК AVR (да и вообще с МК) было еще в старшей школе, когда мне захотелось узнать, как же все-таки работает эта загадочная штука. Я прочел несколько статей и с тех пор в памяти у меня остались лишь отрывки, которые можно было описать всего двумя словами – DDR и PORT – на этом мои познания и обрывались. Потом был универ, 5-й курс – «Программирование микроконтроллеров» где мы все познакомились с MSC51 в виртуальной среде. Тут уже были и прерывания, и таймеры, и все остальное. Ну, вот с таким багажом знаний я и пришел к проблеме. Закончим на этой автобиографической ноте и перейдем к более интересной части.

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

Решалась эта проблема очень просто – датчиком OTC (Outside Temperature Compensation), который подключается к котлу и позволяет ему автоматически подстраивать температуру теплоносителя в зависимости от уличной температуры. Проблема, казалось бы, решена, но чтение сервис-мануала на котел (Ferolli Domiproject C24D) быстро растоптало мою надежду – подключение датчика внешней температуры в данной модели не предусмотрено. Все? Все. И вот, наверное, можно было бы закончить, но летом в котле в грозу до сих пор непонятным мне способом сгорает плата управления, и разговаривая с сервис-мэном (плату в последствии отремонтировали) я спросил, возможно ли подключение OTC на мой котел? Он ответил, что подключают, используя внешние термостаты. Это отложилось у меня в памяти, но я не особо на этом концентрировался до наступления холодов, а дальше всё таже проблема.

Листая все ту же сервисную инструкцию, но уже с целью посмотреть, как же подключается термостат, я заметил, что на те же клеммы подключается «OpenTherm регулятор». Тут-же я понял – вот ОНО! Поиск в Google «OpenTherm Arduino» же меня опять огорчил – ничего особо толкового. Был монитор сообщений, но это не то – мне и слушать, то нечего – нужен именно термостат.

Тут я наткнулся на статью habrahabr.ru/post/214257, окончание которой меня огорчило – автору без осциллографа так и не удалось связать котел с микроконтроллером. И тут уж если у человека знакомого с МК не вышло, то, что пробовать мне?! В интернете было найдено полное описание протокола Opentherm v2.2, что еще больше охлаждало мой пыл – физический уровень протокола был несколько замудренный – токовая петля в которой данные от котла передаются уровнем тока (5-7мА – низкий уровень, 17-23мА — высокий), а от термостата котлу уровнем напряжения ( Скетч

Формулу вычисления требуемой температуры теплоносителя долго крутил-выводил, пока она, в результате, не оказалась ПИ регулятором. В настройки добавил изменение коэффициентов и индикацию интегральной составляющей. До самого ПИ регулятора, для вычисления требуемой температуры я взял формулу из первой статьи, но без интегральной составляющей температура либо не соответствовала требуемой, либо, при большом пропорциональном коэффициенте не соответствовала требуемой и прыгала туда-сюда. Но чтение Хабра быстро дало мне ссылку с описанием ПИД-регулятора, который и был реализован.

Вообще я сделал два режима работы:

1) Прямое управление CH Setpoint – в результате получилось ни что иное как выносная передняя панель котла(ну плюс еще показывает температуры снаружи/внутри и влажность).
2) Собственно термостат с OTC.

Возможно, еще добавлю отключение датчика ОТС и настройку наклона кривой (коэффициент при (settings.indoor_target_temp-ext_temp)), но пока не вижу в этом смысла.

Пару слов добавлю о размещении датчика OTC. Сверлить дыры в окнах и стенах не хотелось, и, обдумывая эту проблему, взгляд случайно упал на старый шлейф MIDI разъема. Недолго думая я припаял провод датчика и загерметизировал место соединения термоклеем (т.к. оно будет находиться на улице). Сам датчик я разместил в тени за внешним блоком кондиционера, чтоб его не нагревали прямые солнечные лучи.

70c7380d19dd47e8a3d8d8bcc3c76eeb
fe04dd345a424590822d143b5f9d3327
ffce317b627b4da893b3f17c089cb4d1

Энергосбережение

Те, кто пролистали код чуть внимательнее, наверное, заметили неизвестную библиотеку Power. Собственно на нее я возлагал надежды по снижению энергопотребления всего устройства. Смысл в том, чтобы вместо delay(1000) в главном цикле, отправлять МК в сон на 1с. Проблема в том, что режим сна нужен специфический, с работающим Timer2 для отправки/приема OpenTherm сообщений, как вы помните, они происходят асинхронно. Но увы, Proteus не очень хорошо работает со Sleep, и отладить эту часть я не смог. Сон работает, показания millis() корректируются (для этого я реализовал замер точности watchdog-таймера), но ОТ перестает работать. Именно с этой целью я и хотел приобрести Pro Mini (с последующим удалением стабилизатора и светодиодов) – меньше плата+ возможна работа на 3.3В, что дает надежду на питания прямиком от ОТ интерфейса. Привожу код библиотеки Power, для тех, кому интересно:

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

1bfdfae62f964f738cad226be7fcaf03

Стало значительно лучше – энкодер перестал проскакивать такты и добавлять лишние значения. Да и новая панель управления стала поудобнее, и должна ровно встать в корпус:

423b9aefdb3f4e4d88278622bee4b30c

— А ты знаешь, какие корпуса испокон веков лучше всего подходили для радиолюбительских поделок?
— Никакие?
— Тоже, конечно, вариант, но вообще – мыльницы.

Немного фото термостата во время испытаний и показаний в разных режимах на главном экране:

c1e84077451548e8a98564ba09591432
aacfa89a68cf4867bc7cae723dec3c7b
119e8b5ab86d4137b8e2e67e9648da2e

Ссылки

P.S. Ну и, естественно, прошу строго не судить – я не писатель — ошибки проверил, как мог. А результатом просто решил поделиться с публикой, т.к. больше рабочих библиотек, реализующих протокол OpenTherm, я в интернете не нашел.
P.P.S. В личку поступило много вопросов по поводу распиновки платы сопряжения, действительно не заметил своей оплошности. Итак, сверху вниз — +5В, TX (от контроллера к котлу), RX (от котла к контроллеру) — резистор 1,5к, GND.
Касательно проверки платы сопряжения:

Плату сопряжения проверить не сложно — подключаете к котлу, подаете питание. Вывод RX не используете(если есть лог. анализатор то будет проще потом) вывод TX (после R3) на +5В. На контактах к котлу должно быть около 20В. после этого вывод R3 на землю — должно быть меньше 7В (около 5ти). Это значит, что плата на передачу работает нормально. На прием можно проверить только после прошивки МК.

Источник

Терморегулятор на базе Ардуино

Сообщений 10

1 Тема от gorniy 2017-04-18 13:44:06

Тема: Терморегулятор на базе Ардуино

p1be073nnntfsas5ep81va817o54 p1be073tkr77gds78u91gu21lp26

реклама Google

2 Ответ от gorniy 2017-04-20 16:08:44

Re: Терморегулятор на базе Ардуино

1. Плата Ардуино, например Arduino UNO, или ее недорогой китайский аналог.

p1be5c29bq1nt21ji476ikab1hjc4

2. Дисплей, например LCD 1602 с клавиатурой. (Или можно взять отдельно дисплей и отдельно кнопки.)

p1be5cbk32s227gljtabm2rqo6

p1be5d7b24adjucsskbmst1ls38 p1be5d7b2512oi1lj1rdjfb811dc9

4. Твердотельное реле с радиатором.

p1be5ff3h27cak5rva1rijum04

3 Ответ от gorniy 2017-11-18 08:22:20

Re: Терморегулятор на базе Ардуино

Видеоинструкция по сборке терморегулятора на базе Ардуино:

4 Ответ от vtorykh.89 2018-01-07 19:58:29

Re: Терморегулятор на базе Ардуино

А можете такой изготовить на заказ?если да то сколько будет стоить готовый комплект для керамики?

5 Ответ от ra3rpj 2018-11-28 17:53:45

Re: Терморегулятор на базе Ардуино

Спасибо за проделанную работу, самое то, для обжига глиняных изделий в муфильной печи. Буду пробовать.

6 Ответ от gorniy 2018-11-28 19:20:24

Re: Терморегулятор на базе Ардуино

Спасибо за проделанную работу, самое то, для обжига глиняных изделий в муфильной печи. Буду пробовать.

Будет очень здорово, если вы поделитесь своим опытом!

7 Ответ от ra3rpj 2018-11-28 19:33:13 (2018-11-28 20:48:33 отредактировано ra3rpj)

Re: Терморегулятор на базе Ардуино

О результате отпишусь обязательно.
Остаётся ожидать посылок из Китая.

8 Ответ от sergpopov76 2018-11-29 17:14:14 (2018-11-29 17:15:46 отредактировано sergpopov76)

Re: Терморегулятор на базе Ардуино

Хотелось бы предупредить, что если используете ПИД-регулирование, то сам алгоритм работы должен быть не вполне таков, как в учебниках. Особое внимание следует уделять не переполнению интегральной компоненты, иначе результат будет весьма нехорошим.

Ну и определение коэффициентов штука не такая простая, автонастройки (которые есть в специализированных приборах) в этом смысле весьма полезны. Не знаю насколько они реализованы в тех библиотеках, которые вы собрались ковырять.

Лет 10 назад я делал себе такую поделку, там надо было двумя каналами управлять так, чтобы не было большого разбега температур, т.е. довольно сложная логика. Тогда готовые библиотеки ничего не умели, пришлось самому всё писать.

С преобразованием температуры надо смотреть как реализована компенсация температуры холодных концов.

Все эти штуки довольно ненадежны. Даже не аппаратно, а программно.

9 Ответ от ra3rpj 2018-12-17 00:20:52

Re: Терморегулятор на базе Ардуино

В данный момент использую REC 100 пид регулятор, не отойти. Обжиг около 12-три часов. Прикинул бегло, температурных полок получилось 14. Задача пройти, как можно плавнее 330° и 573°, как при нагреве, так и остывании. Думаю пока поиграть со временем и % мощности. Дальше будет видно, в какую сторону лопатить материал!
Микро CD накопитель брать за ориентир, для начала.

Источник

Блог Евгения Николаенко

1 2

Контроль отопления и вентиляции на базе Arduino

Представляю мой новый проект — автоматическое управление отоплением и вентиляцией на базе Arduino Nano 3.0.

Довольно долго я бился над решением задачи создания оптимального микроклимата в ванной комнате, и наконец-то, благодаря знаниям, полученным в процессе изучения Arduino и различных датчиков температуры и влажности, мне это удалось! 🙂

Началось все с того, что в весенний и осенний периоды, когда погода на улице еще не стабилизировалась, в ванной комнате наблюдались постоянные перепады температуры и влажности. Обогреватель то и дело перегревал воздух в дневное время, а если его отключить, то воздух становился неприемлемо холодным для ванной комнаты. То же самое и с влажностью. Постоянно включенная вытяжка приводила к переохлаждению комнаты в ночное время, а днем, если вытяжку не включить, происходило чрезмерное оседание конденсата, о борьбе с которым я уже писал ранее. В итоге, устав от необходимости бегать включать/выключать батарею и вытяжку по нескольку раз в день, а также имея практический опыт создания автоматизированной заслонки на базе Arduino, решил сконструировать прибор для автоматического управления отоплением и вентиляцией в ванной комнате. О результатах проделанной работы рассказано в этом видео.

А теперь предлагаю подробнее рассмотреть как все работает, включая программу (скетч) для Arduino!

Устройство системы

На передней панели системы управления отоплением и вентиляции находится двухстрочный дисплей LCD 1602 I2C, который отображает текущие значения температуры и влажности, а также позволяет просматривать меню установок прибора. Красная и зеленая кнопки — кнопки управления (оказалось вполне достаточно двух кнопок для изменения настроек и управления устройством). Красный светодиод загорается при включении отопления, а зеленый — при включении вентиляции. На левой стороне расположен датчик температуры и влажности DHT22 а также USB-порт модуля Arduino, который пришлось заклеить для лучшей сохранности.

2 2 Система для управления отоплением и вентиляцией на базе Arduino. Вид сбоку

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

3 2 Система для управления отоплением и вентиляцией на базе Arduino. Вид сбоку

Система контроля микроклимата работает от сети 220 вольт и подключена к ближайшей розетке.

4 2 Система для управления отоплением и вентиляцией на базе Arduino.

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

5 2 Система для управления отоплением и вентиляцией на базе Arduino со снятой лицевой панелью

Внутри находится сборка из модуля ардуино нано 3.0, силовых реле с максимальным током до 10 ампер, и блоком питания на 9 вольт.

6 2 Система для управления отоплением и вентиляцией на базе Arduino. Вид изнутри

Панель управления подключена к основному модулю при помощи шлейфов.

7 2 Система для управления отоплением и вентиляцией на базе Arduino. Вид изнутри

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

8 2 Панель управления системы контроля микроклимата на базе Arduino

Управляющий модуль сконструирован на монтажной плате и имеет разъемы для подключения датчика влажности и температуры DHT22, панели управления, нагрузки (4 разъема), а также источника питания. Первый, второй и четвертый разъемы работают в режиме ключа (замыкают и размыкают цепь). Третий разъем обеспечивает выход с напряжением 5 вольт для управления дистанционной розеткой.

9 2 Главный модуль системы контроля микроклимата на базе Arduino

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

10 2 Главный модуль системы контроля микроклимата на базе Arduino. Монтажная плата

Корпус системы — обычная электрическая разветвительная коробка стандартного размера.

11 2 Корпус системы контроля микроклимата

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

12 1 Настенный конвектор, управляемый системой на базе Arduino

13 1 Розетка с дистанционным управлением системы контроля микроклимата на базе Arduino

Управляющая программа (скетч для ардуино)

Теперь, пожалуй, самое интересное 🙂 Предлагаю вашему вниманию полный скетч для управления отоплением и вентиляцией на базе Arduino. Скажу сразу, что скетч модернизировался после первого запуска системы целых 3 раза. И на то были определенные причины.

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

Решением данной ситуации стало изменение алгоритма программы таким образом, чтобы измерения проводились 5 раз подряд (в течение 10 секунд), а затем для всех показателей вычислялось среднее значение, на основании которого применялись правила включения/отключения нагрузки. Это позволило избавиться от таких «скачков» с выключением вытяжки или батареи!

Итак, скетч под этим спойлером:

Скетч занимает около 50% памяти ардуино и требует дополнительных библиотек для работы с датчиком DHT22 и экраном LCD через интерфейс I2C, найти которые можно на просторах интернета.

На момент написания статьи уже месяц система работает в штатном режиме, микроклимат в ванной стал практически идеальным, конечно пришлось несколько раз менять настройки включения и выключения вытяжки и батареи, но подобрав нужные параметры все стало просто идеально — и днем и ночью комфортные ощущения при нахождении в этом помещении! 🙂

Обновлено 05.11.2018

Зависание контроллера Arduino

Прошло пол года с момента начала активной эксплуатации устройства, и обнаружились некоторые проблемы, а именно, периодические зависания модуля ардуино. Начав разбираться, первым делом наткнулся на некий WatchDog, который способен автоматически перезагрузить систему при зависании микроконтроллера. Подумал — вот оно подходящее решение. Но как выяснилось, на моей китайской копии Arduino Nano 3.0 WatchDog работает неправильно из-за некорректной прошивки загрузчика. Для того чтобы это исправить, нужна «правильная» прошивка загрузчика, найти которую можно в интернете, и программатор, которым все это дело будет «зашиваться» внутрь чипа. Пока ждал программатор с Китая, решил поискать реальные причины зависания контроллера.

Просадка напряжения

Пытаясь найти объективную причину зависания, я стал грешить на некачественный блок питания и просадку напряжения при включении реле, особенно когда несколько реле включаются одновременно, ведь зависания происходили не так часто, а всего лишь 1-2 раза в месяц.

Первым делом решил добавить 2 конденсатора по 1000 мкф в надежде, что они уменьшат просадку напряжения при срабатывании реле. Первый поставил параллельно выходу с блока питания (там кстати уже был свой конденсатор, но второй лишним не будет, подумал я), а второй — установил параллельно выходу +5V на плате ардуино, откуда как раз берется питание для реле. С этого же выхода питается и сам микроконтроллер. Складывается логичная ситуация — когда все реле включаются одновременно, микроконтроллеру не хватает напряжения и он зависает.

После добавление конденсаторов зависания практически прекратились, но все же, 1 раз в месяц могло и зависнуть.

Доработка скетча Ардуино

Поигравшись с конденсаторами, решил проверить программное обеспечение устройства на наличие неоптимального кода, который мог бы приводить к зависаниям микроконтроллера. Первым делом начал с проверки процедуры DoAll(), которая управляет включением и отключением реле. И тут меня как осенило, откуда берутся просадки напряжения.

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

Исправив код этой процедуры, а именно, добавив искусственную задержку в 200 миллисекунд после включения/отключения какого-либо реле, я был крайне удивлен стабильной работой прибора. Зависания вовсе прекратились, и вот уже 2 месяца прибор работает стабильно. Теперь и WatchDog не нужен, хотя конечно он не помешает, на всякий случай.

В итоге можно сказать, что причиной зависания являлась несбалансированность нагрузки на источник питания при выполнении программного кода, а также низкое качество источника питания. Исправив программу, исчез и дисбаланс. Ниже представлен исправленный фрагмент кода процедуры DoAll(). Жирным текстом выделены те самые задержки по 200 мсек, которые были добавлены в программу и кардинально повысили стабильность работы микроконтроллера.

Обновлено 02.02.2019

Раздельное включение вентиляторов вытяжки

Зимой обнаружилось, что из одной из вытяжет стал капать конденсат, поэтому было решено отключать на зиму этот вентилятор. И чтобы не лазить каждый сезон с отверткой в развет коробку и уж тем более в само устройство, решил сделать все программно, поскольку каждый вентилятор управляется отдельным реле. Немного переработал скетч, добавив дополнительный экран настроек, на котором можно задействовать или отключить каждый вентилятор по отдельности Также уменьшил время одновременного нажатия кнопок для переключения между экранами настроек с 3 до 2 секунд. Свежий скетч можно скачать по ссылке ниже

Источник

Поделиться с друзьями
admin
Здоровая спина
Adblock
detector