Контроллер газового котла
- Войдите на сайт для отправки комментариев
Ср, 07/03/2018 - 19:30
Привет всем!
Пытаюсь собрать контроллер газового котла со следующим алгоритмом:
Вентилятор вкл. постоянно.
Продувка: продолжительность 20 сек. заслонка 100%.
Поджиг: открытие клапана подачи газа, заслонка 50%, искра, мониторим датчик огня.
Огонь есть: выключаем искру, заслонка 100% (открыта)
Рабочий режим.
Огня нет - повтор цикла.
После 3х неудачных попыток - аврийный режим:
Клапан подачи газа - закрыт. Продувка. Аварийная лампа.
Собрано на датчике огня с дискретным сигналом, блоке реле с управлением землей и серве управления заслонкой.
Что-то пошло не так:
#include <Servo.h>
Servo servo;
boolean f_fire = 0; // наличие пламени (0 - нет, 1 - есть)
boolean f_vent = 0; // продувка (0 - не продуто, 1 - продуто)
boolean f_servo = 0; // полжение серво (0 - рабочее, 1 - зажигание)
boolean f_ready = 0; // готовность
boolean f_work = 0; // рабочий режим
boolean f_ignit = 0; // зажигание
int gasPin = 8;
int fanPin = 9;
int ignitPin = 10;
int servoPin = 11;
int sensPin = 12;
void setup()
{
servo.attach(11);
pinMode(sensPin, INPUT);
pinMode(gasPin, OUTPUT);
pinMode(fanPin, OUTPUT);
pinMode(ignitPin, OUTPUT);
pinMode(13, OUTPUT); // ALARM LED
digitalWrite(fanPin, HIGH);
digitalWrite(gasPin, HIGH);
digitalWrite(ignitPin, HIGH);
servo.write (0);
}
void ventilation() {
delay (1000);
servo.write (90);
f_servo = 0;
digitalWrite(fanPin, LOW);
delay (5000);
servo.write (0);
f_servo = 1;
f_vent = 1;
f_ready = 1;
}
void ignition() {
if (f_vent == 1 && f_servo == 1 && f_ready == 1 && f_servo == 1) {
digitalWrite(gasPin, LOW);
digitalWrite(ignitPin, LOW);
f_ignit = 1;
}
else {
digitalWrite(gasPin, HIGH);
digitalWrite(ignitPin, HIGH);
f_ignit = 0;
}
}
void fire() {
if (digitalRead(sensPin == HIGH)) {
f_fire = 1;
}
else {
f_fire = 0;
}
}
void loop()
{
ventilation();
delay (1000);
ignition();
delay (1000);
fire();
delay (1000);
if (f_ignit == 1 && f_fire == 1 && f_servo == 1 && f_vent == 1)
{ digitalWrite(gasPin, LOW);
digitalWrite(ignitPin, HIGH);
servo.write (0);
f_work = 1;
}
else {
digitalWrite(gasPin, HIGH);
digitalWrite(ignitPin, HIGH);
servo.write (0);
f_work = 0;
ventilation();
}
}
Задумка интересная но вот от deley я бы на вашем месте отказался тем более при работе с газовым оборудованием. Лечше поставить часы и из них секунды считать. и можно еще добавить проверку во время работы на всякий случай. типо заслонка открыта - искра была - огонь горит. если огня нет то вырубаем газ
А я бы вапще с такими знаниями к газу не лез. Пока.
А то, мало того, что сам на марс улетишь, по частям, на своем котле, дак еще и соседей прихватишь
Датчик пламени обязательно нужно проверять до подачи газа.
И если он покажет пламя - газ подавать нельзя.
Также и после выключения газа.
Датчики иногда врут.
И без собаки тоже совсем нельзя.
Иногда вижу как мой Церапур сам перегружается.
А вообще то дед Семён прав на все 100.
И совсем не понятно как вам подключат газ к чему-то непонятному.
А если уже подключен вас должны поймать и крепко выпороть.
это все от малообразованности и незнания.. незнания правил, сводов и законов, незнания что должна быть собака, незнаний основ написания программы для сложного устройства и т.д.
ТС не появлялся в ветке с марта, а вы все воюете :) Он, наверно, давно на марс улетел и счастлив там
0
Привет всем!
Пытаюсь собрать контроллер газового котла со следующим алгоритмом:
Вентилятор вкл. постоянно.
Продувка: продолжительность 20 сек. заслонка 100%.
Поджиг: открытие клапана подачи газа, заслонка 50%, искра, мониторим датчик огня.
Огонь есть: выключаем искру, заслонка 100% (открыта) всё это интересно написанно газ горит допустим а тепло куда отводится ? трубы у автора уже сгорели в котле так как по ним не поступала вода или ещё лучше три цикла говорите .... ну вот первые два цикла поджиг не контачил а на третий котёл взорвался и куски летели от котла на 80 метров вот автор давно в земле и лежит... по этому его и нет...
Он же написал «что то пошло не так»