Теплый пол во всем доме


Добрый день. Заканчиваю проект отопления частного дома на базе 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.

//подключение библиотеки LCD-экрана
#include <LiquidCrystal.h>
//указываем пины LCD
LiquidCrystal lcd (7, 6, 5, 4, 3, 2);

Пины отличаются от статьи, по этому подключите все правильно.

Объявляем переменные и константы:

//переменная выбора комнаты
byte RoomNomber = 0;
//колличество подключенных комнат
byte RoomNomberEnd = 9;
//выходы реле отопления цыфровые выходы
byte pinOutputRoom[9] = {22,23,24,25,26,27,28,29,30};
//аналоговые входы датчиков
byte pinInputTemp[9] = {1,2,3,4,5,6,7,8,9};
//индекс счетчика
byte i=1;

Переменные для работы с температурой. Тут нужно пояснение у каждого эти показания будут свои в зависимости от резисторов и конденсатора. В моем случае показания 310 были на аналоговом входе при темперауре терморезистора 30 градусов цельсия. У вас они могут отличаться. И эти параметры мы будем менять с сайта.

//Температура пола
int tempEtalon[9] = {310,310,310,310,310,310,310,310,310};
//Коэффициент включения и выключения
byte deltaTemp = 10;
// температура пола
int temp=0;

Далее объявляем переменные для позиционирования на экране

//расположение элементов на LCD X для setup
byte PX[3] = {0,7,13};
//расположение элементов на LCD Y для setup
byte PY[3] = {1,2,3};
//расположение элементов на LCD X для программы
byte PosX[9] = {2,9,15,2,9,15,2,9,15};
//расположение элементов на LCD Y для программы
byte PosY[9] = {1,1,1,2,2,2,3,3,3};

Следующим шагом прописываем в setup подключение экрана и расположение элементов на нём:

Serial.begin(9600);
  //вкуючение LCD
  lcd.begin(20,4);
  lcd.setCursor(5,0);
  lcd.print("Hot Floor");
  //расположение елементов на экране
  for(iy=0; iy<3; iy++){
   for(ix=0; ix<3; ix++){
        lcd.setCursor(PX[ix],PY[iy]);
        lcd.print(i);
        lcd.print(":");
        i++;
        delay(100);
      }
    }
  i=0;

  Serial.println("LCD2004 On");
  //Задержка для конденсаторов датчики температуры
  delay(2000);

Так же в setup объявляем цифровые выходы для реле

//объявляем цифровые выходы для реле нагрузки
  for (RoomNomber=0; RoomNomber

С настройками закончили. Теперь текст самой программы:

//сброс индекса комнаты по завершению цикла
  if (RoomNomber==RoomNomberEnd){
    RoomNomber = 0;
    //задержка цикла на 1 секунду
    delay(1000);
  }

Сама программа работает как классический термостат. Код приведен ниже:

temp = analogRead(pinInputTemp[RoomNomber]);
lcd.setCursor(PosX[RoomNomber],PosY[RoomNomber]);
if (temp<(tempEtalon[RoomNomber]-deltaTemp)){
  //включаем реле
  digitalWrite (pinOutputRoom[RoomNomber],HIGH);
  //выводим информацию на LCD
  lcd.setCursor(PosX[RoomNomber],PosY[RoomNomber]);
  lcd.print("ON ");
  //выводим сообщение в серийный порт
  Serial.print("Room");
  Serial.print(RoomNomber+1);
  Serial.println(" ON");
  }
if (temp>(tempEtalon[RoomNomber]+deltaTemp)){
  //отключаем реле
  digitalWrite (pinOutputRoom[RoomNomber],LOW);
  //выводим информацию на LCD
  lcd.setCursor(PosX[RoomNomber],PosY[RoomNomber]);
  lcd.print("OFF");
  //выводим сообщение в серийный порт
  Serial.print("Room");
  Serial.print(RoomNomber+1);
  Serial.println(" OFF");
}
RoomNomber++;

На этом первая статья закончена. Продолжение следует...


Добавить комментарий

Arduino

Что такое Arduino?
Зачем мне Arduino?
Начало работы с Arduino
Для начинающих ардуинщиков
Радиодетали (точка входа для начинающих ардуинщиков)
Первые шаги с Arduino

Разделы

  1. Преимуществ нет, за исключением читабельности: тип bool обычно имеет размер 1 байт, как и uint8_t. Думаю, компилятор в обоих случаях…

  2. Добрый день! Я недавно начал изучать программирование под STM32 и ваши уроки просто бесценны! Хотел узнать зачем использовать переменную типа…

3D-печать AI Arduino Bluetooth CraftDuino DIY Google IDE iRobot Kinect LEGO OpenCV Open Source Python Raspberry Pi RoboCraft ROS swarm ИК автоматизация андроид балансировать бионика версия видео военный датчик дрон интерфейс камера кибервесна манипулятор машинное обучение наше нейронная сеть подводный пылесос работа распознавание робот робототехника светодиод сервомашинка собака управление ходить шаг за шагом шаговый двигатель шилд юмор

OpenCV
Робототехника
Будущее за бионическими роботами?
Нейронная сеть - введение