четверг, 16 июля 2020 г.

Система поддержания постоянной температуры

Сделал зимой 2018-19 года маме систему отопления. Однотрубную горизонтальную. Главный элемент системы насос. Если он не качает, то даже на 3ке не греются батарейки, медленно остывают... А насос 1200 Вт, мощный. Он много накручивает энергии и фонит, шумит.

Придумал систему, которая бы отслеживала температуру в комнате и включала-отключала этот насос!

Назвал ее система поддержания постоянной температуры или сокращенно СППТ.
Вот схема ее:


Итак трансформатор взял с UPSа. Он называет RT-425B. Там тослые провода черный, красный, синий заизолировать. Это вторичка синий и черный дают переменку 18в, но они не нужны!
Нужны тонкие синий и черный 220в и зеленый и черный другая обмотка переменка 18в.

Диодный мост любой. Я взял пластмассовый квадратик длинной меньше 2 пальцев.
Кондер нашел 10000 мкф 46в.

На выходе получил постоянное напряжение 20в. Это нормальное напряжение, 32в нельзя превышать. Преобразователь LM2596 настроил на 7.1в. для питания МК Arduino PRO mini.
Реле HF-2100-1A с какого-то водонагревателя. Оно как раз на 220В расчитано 2 кв, ТЭНы же включает! Транзистор Н-канал полевой IRF-3808.











Это как программатор подключать, как резистор подключать, какие значение от полуоборота выдавал резистор.


Программа:


//

#include <OneWire.h>
#include <DallasTemperature.h>

// Data wire is plugged into port 2 on the Arduino
#define ONE_WIRE_BUS 10

// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);

// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);

int pol = 13;  //выход на затвор полевика IRF3808, который управляет релюхой 220В, которая включает отопление
int t0;//значение предустановленной температуры
boolean hot;//признак нагрева (пора нагревать)
double tmp;//температура текущая

void setup(void)
{
  // start serial port
  Serial.begin(9600);
  // Start up the library
  sensors.begin();
  pinMode(pol, OUTPUT);     //цифровые выходы
  hot=FALSE;
}

void loop(void)
{
 // call sensors.requestTemperatures() to issue a global temperature
 // request to all devices on the bus
  sensors.requestTemperatures(); // Send the command to get temperatures
  tmp=sensors.getTempCByIndex(0);
t0=analogRead(A0);//значение тока, с шунта снимаю (от 0 до 1023).
t0 = map(t0,0,513,5,20);
if(tmp>0&&tmp<100){//1 если температура хотя бы правдоподобная
Serial.print(millis());Serial.print(" ");Serial.print(tmp);Serial.print(" ");//печатаю ее
if(tmp<t0*1.0-1.5&&hot==FALSE) hot=TRUE;
if(tmp>t0*1.0+1.5&&hot==TRUE) hot=FALSE;
if(hot) digitalWrite(pol, HIGH); else digitalWrite(pol, LOW);//управляем релюхой
Serial.print(" ");Serial.print(t0);//печатаю ее
Serial.print(" ");Serial.print(hot);
}//1
Serial.println();
}

Два модуля надо скинуть на c:\Program Files (x86)\Arduino\libraries\
Переменный резистр с неисправного преобразователя.
Оттарировал его, чтобы посередке было