Реклама ⓘ
Главная » Автоматика в быту
Призовой фонд
на апрель 2024 г.
1. 100 руб.
От пользователей

Реклама ⓘ

Разработка модуля управления электро-отоплением дачного домика

Друг построил на дачном участке баню из бруса. Возникла необходимость отапливать ее зимой и как-то управлять этим процессом. Без узла автоматики приходилось приезжать в субботу рано утром включать котел и в лучшем случае в субботу вечером собираться компанией. После установки автоматики стало возможным поддерживать в помешивании температуру +8 градусов экономить на электроэнергии и по мире необходимости прогревать помещение за ранее. Стало возможным не собираться в субботу вечером, а к примеру, в ночь с четверга на пятницу прогреть помещение по ночному тарифу, в течении дня пятницы поддерживать в помещении температуру +22, а в пятницу сразу после работы ехать закупаться пивом рыбой и всей компанией собираться в бане. На участке из коммуникаций только свет, газа нет, центрального отопления тоже нет, вода из скважины, был установлен водяной электро-котел, смонтирован коллектор и сделан водяной теплый пол в стяжке.

Сам котел на фото:

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

  • плата Arduino Nano
  • модуль GSM Neoway M590
  • датчик температуры на DS18B20
  • твердотельное реле SSR-40DA
  • блок питания 220В -> 5В 2А я воткнул что было, а вы можете поставить минвел

Основная задача — необходимо собрать и запрограммировать блок управления твердотельным реле, к которому будет подключаться нагрузка посредством SMS и отслеживание температуры.

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

Схема:

Фото в собранном виде.

Основные команды SMS:

  • T=** (** — установка температуры, по умолчанию установлено +3 градуса)
  • Stat — получение состояние реле, текущей температуры и уставки.
  • On — включение модуля управления
  • Off — отключение модуля управления (модуль по умолчанию выключен)

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

Исходный код для ArduinoIDE:

#include <SoftwareSerial.h>
#include <microDS18B20.h>
#include "GyverRelay.h"

//#define SETPOINT 30.0 // установка (ставим на 25 градусов)
#define HYSTER 3  // ширина гистерезиса

GyverRelay regulator(REVERSE);  // установка, гистерезис, направление регулирования

MicroDS18B20<2> sensor1; //датчик на D2
SoftwareSerial mySerial(10, 11); //RX, TX пины

byte R1 = 9; //пин D9 реле 1
byte R2 = 8; //пин D8 реле 2
int val1 = 0; //переменная для хранения значения R1
int val2 = 0; //переменная для хранения значения R2
String tel = "+7**********"; //номер телефона куда будут отправляться данные
String availablePhone = "+7**********"; //номер телефона только с которого будут приниматься сообщения
int setTemperature = 3; //уставка температуры по умолчанию
bool state = false; //состояние включено/выключено

void setup() {
  delay(2000);  //задержка
  
  regulator.setpoint = setTemperature;    
  regulator.hysteresis = HYSTER;   
  regulator.k = 0.5;  // коэффициент обратной связи (подбирается по факту)
  
  pinMode(R1, OUTPUT);  //устанавливаем режим работы пина 8 как Выход
  digitalWrite(R1, LOW); //устанавливаем низкое значение пина 1
  pinMode(R2, OUTPUT);  //устанавливаем режим работы пина 9 как Выход
  digitalWrite(R2, LOW); //устанавливаем низкое значение пина 2
  Serial.begin(9600);  //инициируем последовательное соединение и задаем скорость передачи данных в бит/c
  mySerial.begin(9600);
  Serial.println("GSM NEOWAY M590");
  Serial.println();
  Serial.println("Turn on AOH:");
  mySerial.println("AT+CLIP=1");  //включить АОН
  delay(300);
  Serial.println("Text format sms:");
  mySerial.println("AT+CMGF=1"); // текстовый формат SMS
  delay(300);
  Serial.println("Mode GSM:");
  mySerial.println("AT+CSCS=\"GSM\"");  // кодировка текста - GSM
  delay(300);
  Serial.println("SMS to terminal:");
  mySerial.println("AT+CNMI=2,2,0,0,0"); // вывод смс в консоль
  delay(10000);

  sms(String("GSM NEOWAY M590 ON"), String(tel)); // отправка смс о включении модема

}

void loop() 
{ 
  if(mySerial.available()) //если модуль что-то послал
  { //проверка всех условий  
    char ch = ' ';
    String val = "";
    
    while(mySerial.available()) //получение символов для чтения из последовательного порта
    {  
      ch = mySerial.read();
      val += char(ch); //собираем принятые символы в строку
      delay(3);
    }

    Serial.print("Neoway send> ");
    Serial.println(val);
    
    if(val.indexOf("+CMT") > -1) //если есть входящее sms
    {
      String phoneSend = val.substring(val.indexOf("+7"), val.indexOf("+7") + 12);
      Serial.println("PhoneSend: " + phoneSend);
      if (phoneSend == availablePhone){
        if(val.indexOf("On") > -1 || val.indexOf("on") > -1 || val.indexOf("ON") > -1) //если есть входящее sms
        { 
          state = true;
          Serial.println("State ON");
        }
        
        if(val.indexOf("Off") > -1 || val.indexOf("off") > -1 || val.indexOf("OFF") > -1) //если есть входящее sms
        { 
          state = false;
          Serial.println("State OFF");
        }  
        
        if(val.indexOf("T=") > -1) // смотрим, что за команда
        {
          setTemperature = val.substring(val.indexOf("T=")+2).toInt();
          regulator.setpoint = setTemperature;
          Serial.println("Set TEMP: " + setTemperature);
        }

        if(val.indexOf("Stat") > -1) // смотрим, что за команда
        { 
          Serial.println("Stat1");
          val1 = digitalRead(R1);  //чтение значения пина на реле R1
          val2 = digitalRead(R2);  //чтение значения пина на реле R2
          Serial.println("Stat2");
          sensor1.requestTemp(); // запрос температуры
         
          Serial.println("Stat3");
          String val1Str, val2Str;
          if (val1 == 0){
            val1Str = "Off";
          }
          else{
            val1Str = "On";
          }

          if (val2 == 0){
            val2Str = "Off";
          }
          else{
            val2Str = "On";
          }

          Serial.println("Stat4");
          String result = "R1:" + String (val1Str) + " " + "R2:" + String (val2Str) + " " + "Temp:" + String (sensor1.getTemp()) + " SetTemp: " + String(setTemperature);
          Serial.println("Stat5");
          sms(result, String(tel)); 
        }
      }
    }
  }
  regul();
  debug();
}

void sms(String text, String phone)  // отправка СМС
{
  Serial.println("Start SMS send");
  mySerial.println("AT+CMGS=\"" + phone + "\"");
  delay(500);
  mySerial.print(text);
  delay(500);
  mySerial.print((char)26);
  delay(500);
  Serial.println("SMS send OK");
  delay(2000);
}

void regul() {
  static uint32_t tmr;
  if (millis() - tmr > 500) {
    if (state){
      Serial.println(sensor1.getTemp());
      Serial.println(regulator.getResult());
      tmr = millis();
      sensor1.requestTemp(); // запрос температуры
      regulator.input = sensor1.getTemp(); // сообщаем регулятору текущую температуру
      digitalWrite(R1, regulator.getResult());   // отправляем на реле (ОС работает по своему таймеру)
    }
    else{
      digitalWrite(R1, LOW);
    }
  }
}
void debug() {
  static uint32_t tmr;
  if (millis() - tmr > 50) {
    tmr = millis();
    /*Serial.print(regulator.input);    // фактическая
    Serial.print(',');
    Serial.print(setTemperature);  // гистерезис
    Serial.print(',');
    Serial.print(setTemperature + HYSTER);  // гистерезис
    Serial.print(',');
    Serial.print(setTemperature - HYSTER);  // гистерезис
    Serial.print(',');
    Serial.println(regulator.output * 2 + 30); // сост. реле*/
  }
}

 

 

 

 
Опубликована: 0 0
Я собрал 0 Участие в конкурсе 0
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 0 Проголосовало: 0 чел.

От производителя купить бетон с хорошим составом

Комментарии (3) | Я собрал (0) | Подписаться

0
Публикатор #
На форуме автоматически создана тема для обсуждения статьи.
Ответить
+1
Sergeant #
После установки автоматики стало возможным поддерживать в помешивании температуру +8 градусов экономить на электроэнергии и по мире необходимости прогревать помещение за ранее
Кровь из глаз... Ну в ворде бы написали для проверки...
Ответить
0
Александр #
Да уж... всё что можно было нарушить сделать плохо - всё сделано. Сочувствую вашему другу. Хорошо что постройки не сгорели ещё.
Помещение с котлом.
Кабель проложенный по деревянной стене не имеет защиты от: механического повреждения на установленных высотах прокладки КЛ до электрооборудования, отсутствует противопожарная защита в местах установки розетки и щита, кабель пересекается с трубами которые могут иметь высокую температуру, розетка расположена в близи водопроводных труб.
А ещё в районе колена от красного бака есть щель в стене. Она светится.
Схема.
Отсутствует защита всей схемы и отдельно взятых её узлов, а именно нет: защиты БП, твёрдотельного реле и его нагрузки от токов КЗ и перегрузки, отсутствует дополнительная защита нагревательного бака по температуре ( защита от выкипания воды), защита минимального уровня воды в нагревательном баке, контроля работы циркуляционного насоса.
Блок управления
Радиатор с реле установлен не правильно. БП закреплён на два винта даже не по диагонали, да ещё в подвешенном состояние на стойках, а его выход низкого напряжения подключен с оголёнными жилами в не клемм. Крепление внешних проводов входящих в блок автоматики не имеют механической фиксации. Резистор навесом припаян к кнопке, а платы закреплены на жевачку Turbo и стяжку, а одна плата так вообще лежит на корпусе. Жгуты как попало проложены, маркировки проводов и блоков нет.
Не зачёт. Оценка не удовлетворительно.
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется электрическая мощность?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Радиореле 220В
Радиореле 220В
Arduino UNO Модуль радиореле на 4 канала
вверх