Контроллер газовой пушки
- Войдите на сайт для отправки комментариев
Втр, 16/02/2016 - 16:24
Есть желание спаять контроллер для газовой пушки одной известной немецкой фирмы. Написал программу поведения девайса, но не полностью. Родной контроллер делает три попытки запуска, после чего уходит в ошибку при неудачном старте. Как мне добавить эту функцию ? Также прошу совета, можно ли это впихнуть в ATtiny13a ?
Так как в Arduino 1.0.5 размер скетча 1.5кБ. Пока ориентируюсь на ATtiny2313
int gassens = 6; // датчик наличия газа пин 6
int airsens = 7; // датчик наличия воздуха пин 7
int flamesens = 0; // датчик наличия пламени пин 0
int air = 4; // вентилятор пин 4
int gas = 5; // газовый клапан пин 5
int ignition = 9; // ШИМ электроподжиг пин 9
void setup() {
pinMode(gassens, INPUT);
pinMode(airsens, INPUT);
pinMode(flamesens, INPUT);
pinMode(air, OUTPUT);
pinMode(gas, OUTPUT);
pinMode(ignition, OUTPUT);
}
void loop() {
analogRead(flamesens); // есть пламя?
if(flamesens < 100) { // если нет пламени
digitalWrite(gas, LOW); // закрыть газовый клапан
digitalWrite(air, HIGH); // пуск вентилятора если первое включение
delay(10000); // задержка на продувку
digitalWrite(gas, HIGH); // открыть подачу газа
if(airsens, HIGH) { // есть ли воздух ?
if (gassens, HIGH) { // есть ли газ ?
analogWrite(ignition, 127); // подать ШИМ электроподжиг
delay(1000); // длительность ШИМ электроподжиг
digitalWrite(ignition, LOW); // выключить ШИМ электроподжиг
}
else { // если нет газа
digitalWrite(gas, LOW); // закрыть газ
delay(10000); // задержка на продувку
digitalWrite(air, LOW); // стоп вентилятор
delay(1000); // задержка останов вентилятора
}
}
else { // если нет воздуха
digitalWrite(gas, LOW); // закрыть газ
delay(10000); // задержка на продувку
digitalWrite(air, LOW); // стоп вентилятор
delay(1000); // задержка останов вентилятора
}
}
else { // если есть пламя
delay(1000); // задержка на следующий опрос датчика пламени
}
}
В коде ошибки. Строки 19, 20, 25...
Если пины объявишь как #define сэкономишь 12 байт памяти данных.
Речь о тепловой пушке, работающей на газе или легкогазовой пушке?
А что это такое у Вас написано?
С какой целью читать значение, если никуда его на присваивать?
Это всегда ИСТИНА, т.к. flamesens равен 0 и разумеется меньше 100
Это всегда ИСТИНА, т.к.HIGH всегда равен 1.
Каков глубокий смысл писать условия, которые всегда инстинны, да ещё и else к ним приписывать?
Благодарю за проверку !!! исправил скетч, 706 байт, проверьте плиззз. Не могу найти инфу по attempt. Куда его вставлять и как???
int gassens = 6; // датчик наличия газа пин 6 int airsens = 7; // датчик наличия воздуха пин 7 int flamesens = 0; // датчик наличия пламени пин 0 int air = 4; // вентилятор пин 4 int gas = 5; // газовый клапан пин 5 int ignition = 9; // ШИМ электроподжиг пин 9 int val = 0; // переменная для хранения значения пламени int val2 = 0; // переменная для хранения значения воздуха int val3 = 0; // переменная для хранения значения газа void setup() { pinMode(gassens, INPUT); pinMode(airsens, INPUT); pinMode(flamesens, INPUT); pinMode(air, OUTPUT); pinMode(gas, OUTPUT); pinMode(ignition, OUTPUT); } void loop() { val = analogRead(flamesens); // читаем датчик пламени if(val < 100) { // если нет пламени digitalWrite(gas, LOW); // закрыть газовый клапан digitalWrite(air, HIGH); // пуск вентилятора если первое включение delay(10000); // задержка на продувку digitalWrite(gas, HIGH); // открыть подачу газа val2 = digitalRead(airsens); // читаем датчик воздуха val3 = digitalRead(gassens); // читаем датчик газа if(val2 == HIGH && val3 == HIGH) { // есть ли и воздух и газ ? analogWrite(ignition, 127); // подать ШИМ электроподжиг delay(1000); // длительность ШИМ электроподжиг digitalWrite(ignition, LOW); // выключить ШИМ электроподжиг } else { // если нет газа digitalWrite(gas, LOW); // закрыть газ delay(10000); // задержка на продувку digitalWrite(air, LOW); // стоп вентилятор delay(1000); // задержка останов вентилятора } } else { // если есть пламя delay(1000); // задержка на следующий опрос датчика пламени } }Речь о тепловой пушке, работающей на газе или легкогазовой пушке?
на магистральном газе, марка пушки kroll (euronord). Вышел из строя менеджер горения HONEYWELL DVI980
Переменную нужно объявить: byte popytka=0; В том месте, где делается электроподжиг добавить popytka++; И где-то в цикле добавить проверку: if (popytka>=3) Error(); Что должна делать функция Error(); я понятия не имею... можно уйти в бесконечный цикл, начать моргать светодиодами, опрашивать кнопки и т.п.
Добавил в начало цикла оператор while с условием попыток менее 4х. Но по достижении 4-й попытки запуска цикл становится пустым. Так можно ?
int gassens = 6; // датчик наличия газа пин 6 int airsens = 7; // датчик наличия воздуха пин 7 int flamesens = 0; // вентилятор пин 4 int gas = 5; // газовый клапан пин 5 int ignition = 9; // ШИМ электроподжиг пин 9 int val = 0; // переменная для хранения значения пламени int val2 = 0; // переменная для хранения значения воздуха int val3 = 0; // переменная для хранения значения газа byte counter = 0; // счётчик попыток электроподжига void setup() { pinMode(gassens, INPUT); pinMode(airsens, INPUT); pinMode(flamesens, INPUT); pinMode(air, OUTPUT); pinMode(gas, OUTPUT); pinMode(ignition, OUTPUT); } void loop() { while(counter < 4) { val = analogRead(flamesens); // читаем датчик пламени if(val < 100) { // если нет пламени digitalWrite(gas, LOW); // закрыть газовый клапан digitalWrite(air, HIGH); // пуск вентилятора если первое включение delay(10000); // задержка на продувку digitalWrite(gas, HIGH); // открыть подачу газа val2 = digitalRead(airsens); // читаем датчик воздуха val3 = digitalRead(gassens); // читаем датчик газа if(val2 == HIGH && val3 == HIGH) { // есть ли и воздух и газ ? analogWrite(ignition, 127); // подать ШИМ электроподжиг counter++; // прибавляем счёт попыток delay(1000); // длительность ШИМ электроподжиг digitalWrite(ignition, LOW); // выключить ШИМ электроподжиг } else { // если нет газа и\или воздуха digitalWrite(gas, LOW); // закрыть газ delay(10000); // задержка на продувку digitalWrite(air, LOW); // стоп вентилятор delay(1000); // задержка останов вентилятора } } else { // если есть пламя delay(1000); // задержка на следующий опрос датчика пламени } } }С точки зрения программирования можно.
С точки зрения здравого смысла - правильнее наверно все таки проверить, что поджиг не произошел, газ закрыть, включить индикацию и после этого уйти в бесконечный цикл.