Не совсем понял про регулятор. Ощущаемая температура будет колебаться, согласен. Только вот я читал про теплые полы, что они равномерно прогревают воздух и не являются источником инфракрасного тепла как радиаторы. В моем проекте радиаторы нужны только в качестве дополнительного быстрого нагрева воздуха.
/**/
unsigned long mill; // переменная под millis()
int temproom = 25; //объявляем переменную текущая температура в комнате
//--------------------------------
// класс регулятор
class Cl_regulator {
protected:
const byte pin;
int temp;
int setTemp;
public:
/*конструктор*/
Cl_regulator(byte pin_, int &temp_, int setTemp_): pin(pin_), temp(temp_), setTemp(setTemp_) {}
/*инициализация-вставить в setup()*/
void init() {
pinMode (pin, OUTPUT);
}
/*работа-вставить в loop()*/
void run() {
if (temp >= setTemp)digitalWrite (pin, LOW);
else digitalWrite (pin, HIGH);
}
};
//---Компоновка-----------------------------
Cl_regulator Radiator(/*пин*/3,/*температура в комнате*/temproom,/*темпер сраб*/24);//подключаем радиатор на 3-й пин
Cl_regulator Warm_floor(/*пин*/4,/*температура в комнате*/temproom,/*темпер сраб*/23); //подключаем pol на 4-й пин
//---main-----------------------------
void setup() {
Serial.begin(9600); // открываем порт для имитации показаний с датчика температуры
Radiator.init();
Warm_floor.init();
}
void loop() {
mill = millis();
Radiator.run();
Warm_floor.run();
if (Serial.available () > 0) {// для работы с портом
temproom = Serial.parseInt (); // чтобы переменная принимала цифровые значения
Serial.println (temproom); // чтобы видеть, что ввел
}
}
/*Скетч использует 2582 байт (8%) памяти устройства. Всего доступно 30720 байт.
Глобальные переменные используют 202 байт (9%) динамической памяти, оставляя 1846 байт для локальных переменных. Максимум: 2048 байт.
*/
Не совсем понял про регулятор. Ощущаемая температура будет колебаться, согласен.
Насколько я понял, Yulian имел в виду. что регулировать нагрев надо не тогда, когда температура уже ушла за предел, а раньше, отлавливая не значение температуры, а ее изменение.
Altar, во-первых, Вы устанавливаете режим на оснеовании только текущей температуры, не принимая во внимание, что было до этого. (В Вашей терминологии - в Москву Вы едете или в Ярославль)
Во-вторых, Ваша программа чувствительна к погрешностям измерения.
В-третьих, она не учитывает тепловую инерционность помещения.
В-четвертых она не защищена от того, что режимы будут переключаться по нескольку тысяч раз в секунду.
Я не настаиваю на своей программе. Это только мои первые шаги. Буду разбиратьсмя дальше с ПИД-регулированием в том числе.
Что касается учета того, что было до этого, то здесь я не согласен. То, как я описал алгоритм работм в первом посте, этой программой прекрасно выполняется. История заложена последовательностью выполнения, и оно, блин, работает. Если не трудно проверьте. Я меняю температуру так, как бы она изменялась в реальности в идеальных условиях. Пришли холода в комнате +22 нужно +25, я включаю ардуино первый раз и включаются оба выхода. +23 включены оба +24 включены оба, +25 оба выключены, +24 вклечен пол, +25 выключен пол, +24 включен пол, +23 дополнительно включается радиатор, +24 оба включены так как мы понимаем, что пол не справляется и отключив сейчас радиатор температура опять упадет, +25 оба выключены.
Что касается 2, 3, 4 пунктов согласен полностью.
Еще раз повторюсь, я не настаиваю на единственно верном своем решении. Все мои несогласия с вами - это попытка разобраться и научиться, поэтому я и написал на форум. То решение, котрое написал qwone, для меня вообще темный лес, пока. Буду разбираться.
Не совсем понял про регулятор. Ощущаемая температура будет колебаться, согласен. Только вот я читал про теплые полы, что они равномерно прогревают воздух и не являются источником инфракрасного тепла как радиаторы. В моем проекте радиаторы нужны только в качестве дополнительного быстрого нагрева воздуха.
ну ваш код я бы написал так
Не совсем понял про регулятор. Ощущаемая температура будет колебаться, согласен.
Насколько я понял, Yulian имел в виду. что регулировать нагрев надо не тогда, когда температура уже ушла за предел, а раньше, отлавливая не значение температуры, а ее изменение.
Почитайте про ПИД-регулирование.
Altar, во-первых, Вы устанавливаете режим на оснеовании только текущей температуры, не принимая во внимание, что было до этого. (В Вашей терминологии - в Москву Вы едете или в Ярославль)
Во-вторых, Ваша программа чувствительна к погрешностям измерения.
В-третьих, она не учитывает тепловую инерционность помещения.
В-четвертых она не защищена от того, что режимы будут переключаться по нескольку тысяч раз в секунду.
Я не настаиваю на своей программе. Это только мои первые шаги. Буду разбиратьсмя дальше с ПИД-регулированием в том числе.
Что касается учета того, что было до этого, то здесь я не согласен. То, как я описал алгоритм работм в первом посте, этой программой прекрасно выполняется. История заложена последовательностью выполнения, и оно, блин, работает. Если не трудно проверьте. Я меняю температуру так, как бы она изменялась в реальности в идеальных условиях. Пришли холода в комнате +22 нужно +25, я включаю ардуино первый раз и включаются оба выхода. +23 включены оба +24 включены оба, +25 оба выключены, +24 вклечен пол, +25 выключен пол, +24 включен пол, +23 дополнительно включается радиатор, +24 оба включены так как мы понимаем, что пол не справляется и отключив сейчас радиатор температура опять упадет, +25 оба выключены.
Что касается 2, 3, 4 пунктов согласен полностью.
Еще раз повторюсь, я не настаиваю на единственно верном своем решении. Все мои несогласия с вами - это попытка разобраться и научиться, поэтому я и написал на форум. То решение, котрое написал qwone, для меня вообще темный лес, пока. Буду разбираться.
Спасибо!
Ну вот такой скетч вы можете проверить у себя. Причем датчик температуры заменил на потенциометр, а вместо радиатора подключил светодиод на плате.
Ну и наконец уже скетч с ШИМ.
Чуть подправил программу.
Спасибо огромное, буду разбираться.