Автоматическое управление ГВС
- Войдите на сайт для отправки комментариев
Добрый день! Ищу исполнителя для написание arduino скетча Автоматическое управление ГВС (горячие водоснабжение) Имеется: 1 газовая колонка китайская собранная в России с электроподжигом от 2 батареек 3 вольта (когда буду все переделывать в место батареек будет подано питание 3 вольта) 2 водопровод с гуляющим напором от 0,5 до 4,5 атм. Идея заключается в таком решении http://ru.aliexpress.com/item/Intelligent-thermostatic-shower-faucet-sho... Недостатки у китайцев все работает от 2 труб горячая и холодная, стабильное давление воды, цена и как всегда что-то не доделали (управление клапанами не даст ровный поток) Алгоритм Т. к. газовая колонка снабжает ГВС всю квартиру, то надо делать так При открывании любого крана горячей воды срабатывает выключатель на газовой колонке S1 (стоит в проточном регуляторе) подаётся питание + (открывается газ, срабатывает электроподжиг и колонка работает) http://kotel.kr.ua/image/cache/data/rele_valliant/CIMG2122-500x500.JPG Нужно сделать задержку на 2-3 сек. и включить колонку релейними контактами К1 ради безопасности последовательно с S1 Датчик температуры LM35 (T1) измеряет температуру выходящий воды на теплообменнике Клапан с электроприводом М1 (http://ru.aliexpress.com/item/-/1938495319.html?recommendVersion=1 )стоит на входе воды в колонку. управление двигателем (http://ru.aliexpress.com/item/Special-promotions-L298N-motor-driver-boar...), в приводе есть 2 контакта S2 полностью открыт S3 полностью закрыт, можно сделать 1 или 0 на обоих. При срабатывание S2 включается насос повышения давления К2 реле (http://ru.aliexpress.com/item/-/1946710301.html?recommendVersion=1) управление 0, насос выключается при достижения 2 атм (датчик пока не нашел) или при закрытии любого крана (разомкнулся S1) Когда газовая колонка работает: поддержание 37 град (данные c T1), выше 50 град выключается (обнуляется 50 град при разомкнутых контакте S1) Когда газовая колонка выключается (разомкнулся S1) М1 электропривод остается в последнем положении Алгоритм работы контроля температуры Т.к. поток воды постоянно меняется, то регулировать надо постоянно 1 напряжение по ШИМ задается в строке, открываем (закрываем) подаем питание на М1 на 1 сек. ждем показания с T1 1,5 сек., повторяем или останавливаемся если условия совпали 2 напряжение по ШИМ задается в строке, открываем (закрываем) 0,5 град. 0,5 сек, 1 град 1 сек и т. д. ждем 2 сек показания с Т1, повторяем или останавливаемся если условия совпали Вот примел подсветки лестницы, очень удобно для себя настроить //************************* Все что ниже - определить самостоятельно ********************* unsigned int sensorRef = 1010; // Референсное значение сенсора освещенности, выше которого считается ночь; #define timer 20 // Таймер для задержек при включении/выключении последовательности ступенек; #define SwitchOffDelay 15000 // Задержка выключения посветки, милисекунды (здесь 15 секунд) ; #define SwitchOnBright 180 // Яркость включенных ступенек, максимально - 255; #define NightBright 30 // Яркость подсвеченных ступенек в ночном режиме (первая, последняя); //int timeForBlink = 100; // Число циклов мерцания включенной подсветки; #define bottomDistance 140 // Расстояние в см для срабатывания нижнего ультрасоника #define topDistance 55 // Расстояние в см для срабатывания верхнего ультрасоника #define smoothSwitchDelayStep 5 // Скорость нарастания яркости ступеньки мс., чем меньше тем быстрее нарастает; //**************************************************************************************** Как то вот так Дальше сам душ 4 сенсорные кнопки (http://ru.aliexpress.com/item/Touch-Sensor-Jog-type-touch-module-capacit...) 1 сенсор душ верхний А1 2 сенсор душ нижний А2 3 сенсор температура “+” А3 4 сенсор температура “–“ А4 Дисплей (http://ru.aliexpress.com/store/product/Free-Shipping-Red-Color-1-5-inch-...) 4 знака (пример 27,5 значок градусы и давление 1, 5Р) китаец пока не ответил что за чип стоит Работа При срабатывание А1 (так же и А2)включается реле К3 (К4) (открывается клапан и вода потекла) на S1 появляется 3 вольта и пошел работать верхний алгоритм, но температура должна регулироваться с А3 или А4 и дисплей показывать текущую температуру ,при нажимании А3 или А4 дисплей должен моргать и показывать температуру заданную с панели. При повторном нажатии А1 (А2) что было нажато, но не при переключении с А1 на А2 или с А2 на А1 все должно выключатся (реле К3 или К4, подсветка дисплея) При нажатии в выключенном состоянии А3 или А4 или одновременно А3 и А4 (как удобнее сделать) дисплей загорается на 7 сек и показывает давление Хотелось бы влезь в UNO, так что датчик давления аналог, вход с S1 аналог и все что можно в аналоговые входа Вроде всё, хотя аппетит приходит во время еды.
вы предлагаете разобраться в этой каше?
водопровод с гуляющим напором от 0,5 до 4,5 атм
насос повышения давления не поможет, вам нужно установить гидроаккумулятор литров на 100....200 в зависимости от потребления воды, колонкой газовой управлять в зависимости от водоразбора - плохой вариант, проще но дороже бойлер-теплообменник на 100 литров с поддержанием в нём Т 70 гр, например
колонка не успеет отработать температуру ГВС :( , она хороша только в установившемся режиме расхода ГВС
накопитель ГВС + постоянная циркуляция воды из накопителя через колонку в накопитель + клапан подмеса ХВС в ГВС при водоразборе
вот тут можно задействовать МК для управления колонкой - Т < 65 - включить , Т > 72 - выключить
определитесь с системой ГВС.... в вашей задаче есть несопоставимые штуки - ШИМ ( миллисекунды ) и тепловые процессы, нагрев воды ( минуты )
простой душ превратится в контрастный душ , в зависимости от помывки посуды и др. :)
могу прислать ворд, там всё по строкам
насос с гидроаккумулятором уже стоит и помогает, есть еще регулятор давления, вся механика требует внимания и постоянного регулирования
лучше газовой колонки ни чего нет, остальное требует много внимание
лучше газовой колонки ни чего нет, остальное требует много внимание
есть - двухконтурный котёл - отопление и ГВС , нооооо..... да, требует денег и мало внимания :)
есть другие места где на эту тему можно пообщаться
дисплеи на чипе Philip 74hc595
это последовательно-параллельный регистр....
какие ещё новости есть ? :)
остальное в описании
.....смемителя - да , вашей системы - нет :(
есть, читайте текст, там все описано
Так ка я не могу здесь нормально напечатать условия то оставляю ссылку на вордовский документ, там все описано https://cloud.mail.ru/public/75095e065139/%D0%93%D0%92%D0%A1%202.doc
Тема закрыта
#define RAIN 2 //дождь #define SHOWER 3 //душ #define LIGHT 4 //освещение #define IND1 5 //индикатор кнопки дождь #define IND2 6 //индикатор кнопки душ #define PUMP 7 //реле насоса #define BUTTON_R A0 //контакт А0 для кнопки 1 #define BUTTON_S A1 //контакт А1 для кнопки 2 #define PRESSURE A2 //контакт А2 для датчика давления #define END A3 //контакт А3 для концевика воды boolean lastButtonR = LOW; //переменная для хранения последнего состояния кнопки boolean currentButtonR = LOW; //переменная для хранения текущего статуса кнопки boolean lastButtonS = LOW; //переменная для хранения последнего состояния кнопки boolean currentButtonS = LOW; //переменная для хранения текущего статуса кнопки int P; //датчик давления int S; // концевик int D; //перемнная концевика float P_vkl = 1.8 ; // Порог напряжения для включения насоса float P_vikl = 2.5 ; // Порог напряжения для выключения насоса int lmodeR = 0; //переменная для статуса светодиода int lmodeS = 0; //переменная для статуса светодиода int IND_INTERVAL = 350; //350 мс для моргания int SWITCH_INTERVAL = 600; //переключение с душ на дождь и на оборот unsigned long LIGHT_INTERVAL = 100000; //задержка отключения освещения unsigned long previousTimeI = 1; unsigned long previousTimeS = 1; unsigned long previousTimeL = 1; void setup() { pinMode (LIGHT, OUTPUT); //устанавливаем пин 4 как выход pinMode (SHOWER, OUTPUT); //устанавливаем пин 3 как выход pinMode (RAIN, OUTPUT); //устанавливаем пин 2 как выход pinMode (IND1, OUTPUT); //устанавливаем пин 5 как выход pinMode (IND2, OUTPUT); //устанавливаем пин 6 как выход pinMode(PUMP, OUTPUT); //устанавливаем пин 8 как выход //pinMode (BUTTON_R, INPUT); //устанавливаем пин 8 как вход //pinMode (BUTTON_S, INPUT); //устанавливаем пин 12 как вход } boolean debounce(boolean lastR) //функция сглаживания, выдает значения HIGH или LOW { boolean currentR = digitalRead(BUTTON_R); //считываем состояние кнопки if (lastR != currentR) //если не такое, как было { delay(10); //ждём 10 мс currentR = digitalRead(BUTTON_R); //опять считываем состояние кнопки return currentR; //возвращаем состояние } return currentR; //возвращаем состояние } boolean debounce1(boolean lastS) //функция сглаживания, выдает значения HIGH или LOW { boolean currentS = digitalRead(BUTTON_S); //считываем состояние кнопки if (lastS != currentS) //если не такое, как было { delay(10); //ждём 10 мс currentS = digitalRead(BUTTON_S); //опять считываем состояние кнопки return currentS; //возвращаем состояние } return currentS; //возвращаем состояние } void setModeR (int modeR) //функция для выполнения моргания. void т.к. она ничего не вычисляет { if (modeR == 0) //если режим равен 0 { Blink (IND_INTERVAL, IND1); //моргаем на выводе IND1 с интервалом IND_INTERVAL digitalWrite (LIGHT, 0); //включаем питание digitalWrite (RAIN, 0); //включаем питание lmodeS=1; //если включенно, отключаем } else if (modeR == 1) //если режим равен 1 { Switch (SWITCH_INTERVAL, RAIN); //задержка переключения Off (LIGHT_INTERVAL, LIGHT);//задержка выключения освещения digitalWrite (SHOWER, 1); //выключаем питание digitalWrite (IND1, 1); //выключаем питание } } void setModeS (int modeS) //функция для выполнения моргания. void т.к. она ничего не вычисляет { if (modeS == 0) //если режим равен 0 { Blink (IND_INTERVAL, IND2); //моргаем на выводе IND2 с интервалом IND_INTERVAL digitalWrite (LIGHT, 0); //включаем питание digitalWrite (SHOWER, 0); //включаем питание lmodeR=1; //если включенно, отключаем } else if (modeS == 1) //если режим равен 1 { Switch (SWITCH_INTERVAL, SHOWER); //задержка переключения Off (LIGHT_INTERVAL, LIGHT); //задержка выключения освещения digitalWrite (RAIN, 1); //выключаем питание digitalWrite (IND2, 1); //выключаем питание } } void Blink (unsigned long INTERVAL, int LED_PIN) //функция воспринимает интервал и пин вывода в качетсве входных параметров { unsigned long TimeI = millis(); //записываем время работы контроллера моргания if (TimeI - previousTimeI > INTERVAL) //если прошло достаточно времени, то { previousTimeI = TimeI; //перезаписываем время digitalWrite(LED_PIN, !digitalRead(LED_PIN)); } } void Off (unsigned long INTERVALl, int LED_L) //функция воспринимает интервал и пин вывода в качетсве входных параметров { unsigned long TimeL = millis(); //записываем время работы контроллера освещения if (TimeL - previousTimeL > INTERVALl) //если прошло достаточно времени, то { previousTimeL = TimeL; //перезаписываем время digitalWrite(LED_L, 1); } } void Switch (unsigned long INTERVALs, int SOL_S) //функция воспринимает интервал и пин вывода в качетсве входных параметров { unsigned long TimeS = millis(); //записываем время работы контроллера переключения if (TimeS - previousTimeS > INTERVALs) //если прошло достаточно времени, то { previousTimeS = TimeS; //перезаписываем время digitalWrite(SOL_S, 1); } } void loop() { /*extern int P; extern int S; extern int D; extern float P_vkl; extern float P_vikl; S = 0; P = 0; D = 1; //S = analogRead(END);//Считали концевик воды //P = analogRead(PRESSURE);//Считали датчик давления воды if (S >= 412)//Кран воды открыт D=0; if(!D) { if(P < (P_vkl * 1024. / 5.)) // было /5 { digitalWrite(PUMP, 0); } else if(P > (P_vikl * 1024. / 5.)) // было /5 { digitalWrite(PUMP, 1); } } if (S <= 312)//Кран воды закрыт D=1; if(D) { if(P < (P_vkl * 1024. / 5.)) // было /5 { digitalWrite(PUMP, 1); } else if(P > (P_vikl * 1024. / 5.)) // было /5 { digitalWrite(PUMP, 1); } }*/ // currentButtonR = debounce(lastButtonR); //подаём функции debounce текущее состояние кнопки, по сути считываем состояние с учётом дребезга if (lastButtonR == LOW && currentButtonR == HIGH) //если кнопка нажата { lmodeR++; //увеличиваем состояние счётчика режима на 1 } lastButtonR = currentButtonR; //запоминаем последнее состояние кнопки if (lmodeR == 2) //если счётчик дошёл до значения 1, которое не предусмотрено в теле функции setMode lmodeR = 0; //то мы его обнуляем setModeR (lmodeR); //и передаём значение функции setMode // currentButtonS = debounce1(lastButtonS); //подаём функции debounce текущее состояние кнопки, по сути считываем состояние с учётом дребезга if (lastButtonS == LOW && currentButtonS == HIGH) //если кнопка нажата { lmodeS++; //увеличиваем состояние счётчика режима на 1 } lastButtonS = currentButtonS; //запоминаем последнее состояние кнопки if (lmodeS == 2) //если счётчик дошёл до значения 1, которое не предусмотрено в теле функции setMode lmodeS = 0; //то мы его обнуляем setModeS (lmodeS); //и передаём значение функции setMode }Помогите решить проблемму, 2 выход (RAIN) светит пол накала
Если нет выделенного софта в скобках, то выход равен 2,45 вольт, мери по GND, если убрать скобки то равно 3,55 вольт, если задействовать чтения аналог END или PRESSURE или вместе, то падает до 4,5 вольт
выход 2 менял, источник питания минял, аналоги А0 и А1 на цифру переключал ни чего не помогло
при переключение через SWITCH_INTERVAL на выходе 2- 0,5 вольт и светит как надо
все остальные выходы работают нормально
нашел, но не понял в чем причина, убрал строку 93 и все нормально работает
кто подскажет в чем причина, где я ошибся.
Во первых - этот пост в теме "за деньги"
Во вторых - вы сами "закрыли" тему
В третьих - по вашему коду , так и должно работать.
Я не понимаю, что вам нужно подсказать, поскольку мне не понятно, чего вы хотите получить в итоге.....
Спасибо, разобрался.