управление электрокотлом и насосом отопления
- Войдите на сайт для отправки комментариев
Втр, 29/03/2016 - 23:05
Ребята помогите имею электрокотел и термоконтроллер в комнате который управляет котлом методом включения и выключения реле взависимости от температуры в комнате хотелось бы штобы при выключении реле при достежении нужной температуры котел выключался а насос работал ище 2 или 3 минуты чтобы вода не закипела в котле а при включении все включалось вместе имею ардуино уно и два реле но неимею мозгов написать код а учиться уже позно да и в школе я французкий учил так што очень туго помогите пожалуста хто может зарание спасибо.
Самый примитивный вариант =)
да да именно е то и было нужно огромное спасибо
попытался запустить по етому коду неполучается задержка идет сразу на два реле
Код в студию
вот етот код
Проблема решена в моей статье , сотри выше !
Если малость подшаманишь код . все получится (Тело сдери)
Необходимо вывести температуру DS18B20 и положение РЕЛЕ на TFT 2.4 дисплей (ХЕЛП)
в том то и дело я не вкурсе как его шаманить
Сорямба , не внимательно прочел .... У меня все малость на иначе =)))
Если все правельно понял то вот так должно быть ... Могу и ошибатся , не гуру в этих делах ... Но из кода видно что операторы IF так сказать глотают задержку ! т.е не видят ее
Примерно так
#define rele1 9 #define rele2 8 #define termocontrol 2 unsigned long timer =0;//таймер для задержки #define pause 180000 void setup() { pinMode(termocontrol, INPUT); pinMode(rele1, OUTPUT); pinMode(rele2, OUTPUT); //термоконтроллер вход, реле 1 и 2 выход: } void loop() { if (DIn(termocontrol) == 1){ // Замыкаем оба реле DOut (rele1,HIGH); DOut (rele2,HIGH); } if (DIn(termocontrol) == 0 && DIn(rele1)==1){//выполняеться один раз для сброса таймера timer=millis();//начало отсчета задержки DOut(rele2,LOW);// выключаем реле 2 } if (millis()-timer >= pause && DIn(rele1)==0){//задержка отключения второго реле DOut(rele1,LOW); // Размыкаем первое релe } }//end LOOP //эти функции не обязательны //-------функция переключения реле---------- void DOut (byte pin, boolean state){ digitalWrite(pin,state); } //-------функция опроса цифровых входов---------- boolean DIn (byte pin){ return digitalRead(pin); }Имею авто неизвестной породы, у него есть какой-то двигатель и какието тормоза, хочу чтоб они работали согласованно с разницей в три минуты методом включения и выключения, чтоб двигатель не закипел, а при включении все включалось. У меня есть АРДУИНО!!!! Я сам учился ездить на танке, а там вообще руля не было, да и педали были другие. Помогите хто может.
ТРОЛЬ =,D
о, да, только так меня еще не обзывали... Вы хоть (как минимум) спросили у ТС схему подключения, что за термоконтроллер он использует, как на этом контроллере образуются ноль или единица? Или таки экстрасенсы вышли из отпуска?
Нуууу, парень знает видать че он делает...... Но если нет , будет печалька )
может я чегото не понимаю но работает все через жопу при нажатии на кнопку типа сигнал с термодатчика и ее удерживании диоды типа реле загораются через задоное время delay (60000); при отпускании кнопки тухнет один диод а второй горит при нажатии через задержку включается первый при отпускании кнопки тухнет а второй как горел так и горит
ето я екстросенсу с ником okta слишиш ты пидрило пизьдеть и я умею а помоч слабо в микроконтроллере сигнал на котел дает обыкновенная реле
if(millis()-timer >= pause && DIn(rele1)==0){//задержка отключения второго релеDOut(rele1,LOW);// Размыкаем первое релeв етой строчке у меня выдает ошибку
Ошибки устранил, в Proteus`e проверил, всё работает.
#define pump 9 #define heather 8 #define termocontrol 2 unsigned long timer =0;//таймер для задержки #define pause 180000 void setup() { pinMode(termocontrol, INPUT); pinMode(pump, OUTPUT); pinMode(heather, OUTPUT); //термоконтроллер вход, реле 1 и 2 выход: } void loop() { if (DIn(termocontrol) == HIGH){ // Замыкаем оба реле DOut (pump,HIGH); DOut (heather,HIGH); } if ( DIn(heather)==HIGH && DIn(termocontrol) == LOW){//выполняеться один раз для сброса таймера timer=millis();//начало отсчета задержки DOut(heather,LOW);// выключаем реле 2 } if (millis()-timer >= pause && DIn(heather)==LOW){ DOut(pump,LOW); // Размыкаем первое релe } }//end LOOP //-------функция переключения реле---------- void DOut (byte pin, boolean state){ digitalWrite(pin,state); } //-------функция опроса цифровых входов---------- boolean DIn (byte pin){ return digitalRead(pin); }Но использовать для этого микроконтроллер это черезчур, вот если им есче температуру мерить и с его помощью управлять нагревом по закону регулирования и реализовать погодо-зависимое управление, тогда будет GOOD.
ето я екстросенсу с ником okta слишиш ты пидрило пизьдеть и я умею а помоч слабо в микроконтроллере сигнал на котел дает обыкновенная реле
Голубок, твои на других сайтах тусят.
добрый день все работает отлично только когда стоит в режиме ожидания реле включены а при нажатии выключены я понимаю что реле двусторонее но попробовал поменять местами LOW с HIGH нечего не вышло наверное совсем плохой из меня програмист а контроллер у меня стоял но пока все на роботе и котел держал температуру +5 тоесть почти не работал насос гонял холодную воду ну теперь я надеюсь устраню ету проблему так што огромное вам всем спасибо есть ищо добрые люди
вот такой у меня термопрограматор
Ну как, работает или нет?
Добавил индикацию режима работы светодиодом на 13 пине.
#define pump 9//насос #define heather 8//нагреватель #define termocontrol 2//термостат #define StatLed 13//индикатор состояния unsigned long timer =0;//таймер для задержки unsigned long StatTime =0;//таймер инд состояния #define pause 3000//180000//задержка отключения насоса int pauseLed=1000;//частота индикатора состояния void setup() { pinMode(termocontrol, INPUT); pinMode(pump, OUTPUT); pinMode(heather, OUTPUT); pinMode(StatLed, OUTPUT); //термоконтроллер вход, реле 1 и 2 выход: } void loop() { if (DIn(termocontrol) == HIGH){//если термостат замкнут // Замыкаем оба реле DOut (pump,HIGH);//включаем насос DOut (heather,HIGH);//включаем нагреватель pauseLed=1000;//период мигания индикатора состояния 1с } if ( DIn(heather)==HIGH && DIn(termocontrol) == LOW){//выполняеться один раз для сброса таймера timer=millis();//начало отсчета задержки DOut(heather,LOW);// выключаем нагреватель pauseLed=500;//период мигания индикатора состояния 0,5с } if (millis()-timer >= pause && DIn(heather)==LOW){ DOut(pump,LOW); // выключаем насос pauseLed=1500;//период мигания индикатора состояния 1,5с } if(millis()- StatTime > pauseLed){ StatTime=millis(); DOut(StatLed,!DIn(StatLed)); } }//end LOOP //-------функция переключения реле---------- void DOut (byte pin, boolean state){ digitalWrite(pin,state); } //-------функция опроса цифровых входов---------- boolean DIn (byte pin){ return digitalRead(pin); } //Спасибо http://yasobe.ru/na/buter#form_submit //http://allduino.forum2x2.ru/t12-topic#17 //http://arduwir.netdo.ru/article/6264При замкнутом термостате мигает 1 раз в 2 сек
При разомкнутом термостате и работающем насосе (до его отключения) 1 раз в сек
При отключеном насосе и нагреватели 1 раз в 3 сек
да все работает отлично БОЛЬШОЕ спасибо
Подправил код (выровнял продолжительность вспышек индикатора независемо от периода).
#define pump_OUT 9//насос #define heather_OUT 8//нагреватель #define termostat_IN 2//термостат #define StatLed 13//индикатор состояния unsigned long timer =0;//таймер для задержки unsigned long StatTime =0;//таймер инд состояния #define pause 180000//задержка отключения насоса #define ledON 250//продолжительность вспышки статуса <500 int pauseLed=0;//частота индикатора состояния void setup() { pinMode(termostat_IN, INPUT); pinMode(pump_OUT, OUTPUT); pinMode(heather_OUT, OUTPUT); pinMode(StatLed, OUTPUT); } void loop() { if (DIn(termostat_IN) == HIGH){//если термостат замкнут DOut (pump_OUT,HIGH);//включаем насос DOut (heather_OUT,HIGH);//включаем нагреватель PL(1000);//период мигания индикатора состояния 1с } if (DIn(heather_OUT)==HIGH && DIn(termostat_IN) == LOW){//выполняеться один раз для сброса таймера timer=millis();//начало отсчета задержки DOut(heather_OUT,LOW);// выключаем нагреватель PL(500);//период мигания индикатора состояния 0,5с } if (millis()-timer >= pause && DIn(heather_OUT)==LOW){ DOut(pump_OUT,LOW); // выключаем насос PL(3000);//период мигания индикатора состояния 3с } if(millis()> StatTime){ switch (DIn(StatLed)){//поверяем состояние индикатора case 0://если выключен StatTime=millis()+ledON;//устанавливаем время включенного состояния DOut(StatLed,1);//включаем break; case 1: StatTime=millis()+pauseLed; DOut(StatLed,0); break; } } }//end LOOP //-------изменение паузы между вспышками индикатора------- void PL(unsigned int p){ pauseLed=p-ledON;//период мигания индикатора } //-------функция переключения реле---------- void DOut (byte pin, boolean state){ digitalWrite(pin,state); } //-------функция опроса цифровых входов---------- boolean DIn (byte pin){ return digitalRead(pin); } //Спасибо yasobe.ru/na/buter#form_submit //allduino.forum2x2.ru/t12-topic#17 //arduwir.netdo.ru/article/6264При включеном насосе и тене 1 раз в сек.
При выключеном тене и включеном насосе 2 раза в сек.
При выключенном насосе и тене 1 раз в 3 сек.
Продолжительность вспышки 0,25 сек. в любом режиме.
Чуть изменил часть отвечающую за индикацию (уменьшил скетч).
#define pump_OUT 9//насос #define heather_OUT 8//нагреватель #define termostat_IN 2//термостат #define StatLed 13//индикатор состояния unsigned long timer =0;//таймер для задержки unsigned long StatTime =0;//таймер инд состояния #define pause 180000//задержка отключения насоса #define ledON 250//продолжительность вспышки статуса <500 int pauseLed=3000;//период индикатора состояния void setup() { pinMode(termostat_IN, INPUT); pinMode(pump_OUT, OUTPUT); pinMode(heather_OUT, OUTPUT); pinMode(StatLed, OUTPUT); } void loop() { if (DIn(termostat_IN) == HIGH){//если термостат замкнут DOut (pump_OUT,HIGH);//включаем насос DOut (heather_OUT,HIGH);//включаем нагреватель pauseLed=1000;//период мигания индикатора состояния 1с } if (DIn(heather_OUT)==HIGH && DIn(termostat_IN) == LOW){//выполняеться один раз для сброса таймера timer=millis();//начало отсчета задержки DOut(heather_OUT,LOW);// выключаем нагреватель pauseLed=500;//период мигания индикатора состояния 0,5с } if (millis()-timer >= pause && DIn(heather_OUT)==LOW){ DOut(pump_OUT,LOW); // выключаем насос pauseLed=3000;//период мигания индикатора состояния 3с } //----------Индикатор состояния----------------------- if (millis()-StatTime>=pauseLed){//если интервал прошел StatTime=millis();//засекаем снова } if(millis()<ledON+StatTime){//если время свечения индикатора не прошло DOut(StatLed,1);//включаем } else//иначе { DOut(StatLed,0);//выключаем } }//end LOOP //-------функция переключения реле---------- void DOut (byte pin, boolean state){ digitalWrite(pin,state); } //-------функция опроса цифровых входов---------- boolean DIn (byte pin){ return digitalRead(pin); } //Спасибо yasobe.ru/na/buter#form_submit