Добрый день. Заканчиваю проект отопления частного дома на базе ARDUINO MEGA 2560 .
Коротко о главном! Есть 9 комнат в которых установлены инфракрасные теплые полы, которые служат основным отоплением во всем доме. Датчиками проверяем температуру и решаем надо ли включить отопление или можно его выключить.
Из дополнительных обвесов LCD 2004, приёмопередатчик 2,4ГГц .
Ну а теперь обо всем по порядку и с разъяснениями.
Датчики и их подключение
В качестве датчиков я использовал старый проверенный терморезистор на 150 кОм советского образца. НА вопрос почему могу ответить просто и бескомпромиссно — цена! 15р. за штуку меня вполне устроило! Выглядит он примерно вот так:
Немного пришлось повозиться с его взаимоотношением с Ардуино но результат в итоге оказался стабильнее и надежнее при низкой цене монтажа. Тут главное не забывать что до каждого датчика от 5 до 150 метров провода.
К ардуинке датчик подключаем с помощью делителя напряжения, где А(n) это аналоговые входы МЕГИ. Датчиков у нас 9 по этому задействуем входы с А1 по А9.
Схема отличается от классической наличием конденсатора. Это маленькая хитрость про которую я не нашёл информации в сети, по этому пришлось доходить своим мозгом.
Так зачем он нужен? Провода для датчиков спрятаны в кабель канал вместе с нагрузкой в 220 вольт. При работе получается что ток в проводе дает очень большие помехи примерно в 0,5-1,5 вольта. Сами понимаете что ни о какой точности показаний речь не идет. И тут приходит на помощь конденсатор. Он просто сглаживает все помехи, но для его зарядки нужно в начале программы добавить задержку в 2-3 секунды. В сборе у меня получилось вот так:
Далее делаем такое же соединение для всех датчиков + один, чтобы прокрутить датчик для улицы. В процессе сделаем привязку в температуре за бортом. Наше устройство должно думать про свои задачи быстрее чем его владельцы. Так же для каждого датчика я делал отдельное подключение, что оказалось достаточно дорого, но надежно. Проще провод оторвать, чем соединение разомкнуть. Выглядит оно следующим образом:
Теперь что касается питания датчиков. Я не стал снимать 5 вольт с Ардуино(хотя тоже можно). Предпочитаю делать отдельное питание для таких нагрузок, все-таки провода длинные их сопротивление тоже надо учитывать. Все детали далее.
Блок питания
В качестве питания я использовал блок от старого компьютера. Он выдает 380 Вт, чего более чем достаточно, и напряжение он выдает такое, какое нужно для всего проекта.
Внутри корпуса нужно спаять зеленый и любой из черных проводов, чтобы он включался сразу при подаче електричества. К стати, совсем забыл, нашему устройуству необходим отдельны автомат на 16А. желательно с УЗО.
От него мы отрезаем все провода кроме 3-х на 5 вольт(для тех кто не в курсе это красные) и 1 на 3,3 вольта(это оранжевый), ну и по одному черному на каждый(это земля или минус, кому как нравиться). Остальное отрезаем и изолируем, за ненадобностью.
Теперь распишем по проводам какой куда нам нужен:
1 — красный, питание Ардуино,
2 — красный, датчики,
3 — красный, LCD2004,
4 — оранжевый, приёмопередатчик 2,4ГГц
Я запитал ардуино от 5 вольт. Этого в принципе достаточно для работы МК и установки необходимого напряжения на цифровых пинах, но при таком подключении мощности для LCD не хватит. По этому я вывел для него отдельное питание, так оно надежнее.
LCD 2004
Как подключать LCD рассказывать не буду. Вот тут все вполне понятно написано. Только 5 В не с ардуино, а с блока питания.
Приёмопередатчик 2,4ГГц
Про передачу данных и свой опыт работы с ней я буду описывать в следующей статье. Здесь мы рассмотрим автономную работу устройства. Далее будем делать передачу статистики на сайт и изменение настроек через интернет.
Исполнительные устройства
В качестве реле для исполнительных устройств настоятельно рекомендую использовать твердотельное реле:
У меня получилось смонтировать примерно вот так:
На словах схема подключения достаточно проста. 3 пин подключаем в цифровому выводу ардуино, который будем программно включать и выключать. 4 пин на GND ардуино. 1 пин Фаза 220 вольт. 2 пин к исполнительному устройству. Ноль от исполнителей соединяем в общую кучу и на ноль автоматического выключателя.
Использовать модули реле такого плана не советую. В общем я изначально на них и собрал, после чего пришлось выбросить. Не удосужился рассчитать нагрузки. При нормальной работе эти реле самым банальным образом залипают.
Аруино Мега и Скетч
Перейдем к работе с МК и написанию скетча.
Подключаем библиотеку LCD2004.
Пины отличаются от статьи , по этому подключите все правильно.
Объявляем переменные и константы:
Переменные для работы с температурой. Тут нужно пояснение у каждого эти показания будут свои в зависимости от резисторов и конденсатора. В моем случае показания 310 были на аналоговом входе при темперауре терморезистора 30 градусов цельсия. У вас они могут отличаться. И эти параметры мы будем менять с сайта.
Далее объявляем переменные для позиционирования на экране
Следующим шагом прописываем в setup подключение экрана и расположение элементов на нём:
Так же в setup объявляем цифровые выходы для реле
С настройками закончили. Теперь текст самой программы:
Сама программа работает как классический термостат. Код приведен ниже:
На этом первая статья закончена. Продолжение следует…
Arduino.ru
Погодозависимое управление водяным тёплым полом
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
200кг и свободен).
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Наблюдал четыре дня. На улице постоянно скачет температура (фиолетовый график, было от -15°С до +4°С). День был очень сильный ветер — дом конкретно выстужало.
А по графику дома (черный) более менее стабильно, отклонение от -0.4° до +0.7°.
Попробую увеличить Ki до 0.5 (с ограничением -10 > istate Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Наблюдал трое суток. Неплохо.
Но решил еще добавить дифф.составляющую. Kd=50
После этого 16 суток ничего не менял и не трогал. Разное было — отключение электричества, яркое солнце+оттепель (даже отопление отключал на пару суток), сильные ветры, куча народу в доме.
На улице перепады с -13°С до +10°С
Дома с +25.5° до 26.3° (заслуга солнца в южные окна). Ничего не регулирую в котельной уже месяц. Скоро уже отопление отключать.
Мой вердикт — задумка удалась! Возможно, добавил бы еще выключение циркуляционных насосов при перегреве весенним солнцем. Но это уже после проверки новым отопительным сезоном. А пока — надо придумывать для самоделки корпус, подбирать БП и красивый настенный шкаф.
Управление теплым полом через arduino
Дельта принтеры крайне требовательны к точности изготовления комплектующих (геометрия рамы, длины диагоналей, люфтам соединения диагоналей, эффектора и кареток) и всей геометрии принтера. Так же, если концевые выключатели (EndStop) расположены на разной высоте (или разный момент срабатывания в случае контактных концевиков), то высота по каждой из осей оказывается разная и мы получаем наклонную плоскость не совпадающая с плоскостью рабочего столика(стекла). Данные неточности могут быть исправлены либо механически (путем регулировки концевых выключателей по высоте), либо программно. Мы используем программный способ калибровки.
Далее будут рассмотрены основные настройки дельта принтера.
Для управления и настройки принтера мы используем программу Pronterface.
Калибровка принтера делится на три этапа:
1 Этап. Корректируем плоскость по трем точкам
Выставление в одну плоскость трех точек — A, B, C (расположенных рядом с тремя направляющими). По сути необходимо уточнить высоту от плоскости до концевых выключателей для каждой из осей.
Большинство (если не все) платы для управления трехмерным принтером (В нашем случае RAMPS 1.4) работают в декартовой системе координат, другими словами есть привод на оси: X, Y, Z.
В дельта принтере необходимо перейти от декартовых координат к полярным. Поэтому условимся, что подключенные к двигателям X, Y, Z соответствует осям A, B, C.(Против часовой стрелки начиная с любого двигателя, в нашем случае смотря на логотип слева — X-A, справа Y-B, дальний Z-C) Далее при слайсинге, печати и управлении принтером в ручном режиме, мы будем оперировать классической декартовой системой координат, электроника принтера сама будет пересчитывать данные в нужную ей систему. Это условность нам необходима для понятия принципа работы и непосредственной калибровки принтера.
Точки, по которым мы будем производить калибровку назовем аналогично (A, B, C) и позиция этих точек равна A= X-52 Y-30; B= X+52 Y-30; C= X0 Y60.
Алгоритм настройки:
- Подключаемся к принтеру. (В случае “крагозяб” в командной строке, необходимо сменить скорость COM порта. В нашем случае с 115200 на 250000 и переподключится)
После чего мы увидим все настройки принтера. - Обнуляем высоты осей X, Y, Z командой M666 x0 y0 z0.
И сохраняем изменения командой M500. После каждого изменения настроек необходимо нажать home (или команда g28), для того что бы принтер знал откуда брать отсчет. - Калибровка принтера производится “на горячую”, то есть должен быть включен подогрев стола (если имеется) и нагрев печатающей головки (HotEnd’а) (Стол 60град., сопло 185 град.) Так же нам понадобится щуп, желательно металлический, известных размеров. Для этих задач вполне подойдет шестигранный ключ (самый большой, в нашем случае 8мм, он предоставляется в комплекте с принтерами Prizm Pro и Prizm Mini)
- Опускаем печатающую головку на высоту (условно) 9мм (от стола, так, что бы сопло еле касалось нашего щупа, т.к. высота пока что не точно выставлена.) Команда: G1 Z9.
- Теперь приступаем непосредственно к настройке наших трех точек.
Для удобства можно вместо g- команд создать в Pronterface четыре кнопки, для перемещения печатающей головки в точки A, B, C, 0-ноль.
Далее командой меняем параметры высоты оси Y: M666 Y <посчитанная величина>
M666 Y0.75
M500
G28
2 Этап. Исправляем линзу
После того как мы выставили три точки в одну плоскость необходимо произвести коррекцию высоты центральной точки. Из за особенности механики дельты при перемещении печатающей головки между крайними точками в центре она может пройти либо ниже либо выше нашей плоскости, тем самым мы получаем не плоскость а линзу, либо вогнутую либо выпуклую.
Корректируется этот параметр т.н. дельта радиусом, который подбирается экспериментально.
Калибровка:
- Отправляем головку на высоту щупа в любую из трех точек стола. Например G1 Z9 X-52 Y-30
- Сравниваем высоту центральной точки и высоту точек A,B,C. (Если высота точек A, B, C разная, необходимо вернутся к предыдущей калибровки.)
- Если высота центральной точки больше остальных, то линза выпуклая и необходимо увеличить значение дельта радиуса. Увеличивать или уменьшать желательно с шагом +-0,2мм, при необходимости уменьшить или увеличить шаг в зависимости от характера и величины искривления (подбирается экспериментально)
- Команды:
G666 R67,7
M500
G28 - Подгоняем дельта радиус пока наша плоскость не выровняется
3 Этап. Находим истинную высоту от сопла до столика
Третьим этапом мы подгоняем высоту печати (от сопла до нижней плоскости — столика) Так как мы считали, что общая высота заведомо не правильная, необходимо ее откорректировать, после всех настроек высот осей. Можно пойти двумя путями решения данной проблемы:
1 Способ:
Подогнав вручную наше сопло под щуп, так что бы оно свободно под ним проходило, но при этом не было ощутимого люфта,
- Командой M114 выводим на экран значение фактической высоты нашего HotEnd’а
- Командой M666 L получаем полное значение высоты (Параметр H)
- После чего вычитаем из полной высоты фактическую высоту.
- Получившееся значение вычитаем из высоты щупа.
Таким образом мы получаем величину недохода сопла до нижней плоскости, которое необходимо прибавить к полному значению высоты и и записать в память принтера командами:
G666 H 235.2
M500
G28
2 Способ:
Второй способ прост как валенок. С “потолка”, “на глаз” прибавляем значение высоты (после каждого изменение не забываем “уходить” в home), добиваясь необходимого значения высоты, но есть шанс переборщить со значениями и ваше сопло с хрустом шмякнется об стекло.
Как сделать авто калибровку для вашего принтера и что при этом авто калибрует принтер вы узнаете из следующих статей.