В общем занялся я тут одним делом, а так как мало чего в нем понимаю решил на форуме тематическом зарегицца, но что то не пошел процесс, какие то пользователи вялые оказались, так что я теперь сюда пишу.
Есть старый газовый котел, который работает от баллонов и обогревает два небольших помещения. Поскольку его мощность 24 кВт, а разбор батарей всего 5 кВт, то приходится постоянно его контролировать (включать-отключать), чтобы он не закипятил теплоноситель. Т.е. он сейчас работает по принципу шим с очень маленькой частотой и ручным управлением.
Есть мысль сделать для него систему управления, которая будет автоматически его зажигать и тушить. С возможностью работать по таймеру, с кучей защит, которая будет контролировать температуру в обоих помещениях, регулировать ее отдельно в каждом и возможно даже управлением с помощью смс.
В первом приближении, то чем нужно управлять:
Клапан отключения газа - при его закрытии колонка гаснет - можно использовать от газового автомобильного оборудования, электромагнитный 12 Вольт
Розжиг - готовый модуль из газовой плиты - 220В
Циркуляционный насос - обычный грюнфос 220В
Датчик освещенности - по нему судить о том зажегся ли газ
Датчик температуры теплоносителя на выходе (мах до 120С) - по нему судить о перегреве теплоносителя, о выходе из строя насоса либо просто контролировать и поддерживать температуру теплоносителя
Два датчика температуры в каждое помещение
Кран с приводом, для отключения ветки отопления во второе помещение.
Как все это работает:
Задается температура либо в каждом помещении либо температура теплоносителя.
Задается режим работы: быстрый нагрев (температура на выходе из котла примерно 98С) или экономичный (температура на выходе не больше 60С к примеру)
Дальше производится запуск: Включается циркуляционик, подается газ, включается розжиг и контролируется датчик освещенности. Если нет сигнала освещенности - закрывается газ и выдержка 1 минута (что то типа продувки). Так повторяется 3 раза и если запуск не был произведен, то система выдает ошибку об аварии.
Аварией также считается: температура теплоносителя больше 100С, не изменение температуры теплоносителя в течении 30 секунд после поджига (сдох насос, нет теплоносителя), неизменение температуры в помещениях при условии высокой температуры теплоносителя в течении длительного времени и может быть что то еще.
Также можно было бы придумать подсчет расхода газа и предупреждение о замене балона.
Температура в первом помещении поддерживается путем ШИМ колонки, во втором путем открытия крана в ту ветку.
Еще в планах потом изготовить сигнализацию+оповещение по смс, и связать его с этим, чтобы удаленно управлять температурой. Как тоже им общаться друг с другом.
В общем планов много, а опыта в программирование мало, так что жду ваших советов, либо вообще отговорите меня от этой идеи. Вот.
Потом были придуманы алгоритмы и схема девайса




По схеме до сих пор существуют неразрешенные вопросы:
1) Датчик освещенности как думаете может на АЦП посадить, типа возможностей побольше, хотя с другой стороны нафиг надо и так должен понимать когда есть горение а когда нет.
2) Дисплей (хотя я вообще хотел заюзать от нокии или типа того, в целях обучения, но это все на год затянется тогда) по 4 битам общаться будет, хотя вроде как такая тема и сложнее но все библиотеки и образцы кода есть. Или не парится и целый порт дисплею отдать?
3) Датчики даллосовские, кто то советовал каждый на свою ногу вешать (при условии что ног хватает), типа обработка проще, но я хз, кажись это не правильно
4) Ну и мега собственно, как мы видим 2 порта еще полностью свободны не считая уарта, так может че попроще выбрать?
по уарту кстати, я бы хотел чтобы эта схемка общалась с блоком сигнализации по gsm каналу (в будущем). Отправляла аварии и предупреждения или наоборот получала указания, температуру поднять или вообще выключится.
В общем, советуйте, я то в этом вообще не петрю, первый раз схему на мк рисовал
Потом, нарисовался такой интерфейс управления:



Вроде как 2-х кнопок даже хватило.
Ну и наконец, начал читать о программировании и дочитался до того, что попробывал кусок кода написать
#include <mega16.h>
#include <delay.h>
// Порт А
#define DS PINA.0 // Датчики температуры
#define FOTO PINA.1 // Фотодиод
// Порт С
#define Knp1 PINC.0 // Кнопка упр. 1
#define Knp2 PINC.1 // Кнопка упр. 2
#define Knp3 PINC.2 // Кнопка упр. 3
#define Klapan PORTC.3 // Газовый клапан
#define Rozjig PORTC.4 // Розжиг
#define Nasos PORTC.5 // Насос
#define Kran PORTC.6 // Задвижка
unsigned char volatile tim_roz=0;
unsigned char volatile Bit_roz=0;
unsigned char volatile Bit_gor=0;
void main(void){
tim_roz=0; // Обнуляем таймер розжига
while (Bit_roz==1){ // Если розжиг требуется (бит розжига=1)
Klapan=1; // Открываем клапан
delay_ms(100); // Делаем задержку
Rozjig=1; // Включаем зажигалку
if(FOTO==1){ // Если розжиг произошел
Rozjig=0; // Отключаем зажигалку
Bit_gor=1; // Устанавливаем бит горения
Bit_roz=0; // Сбрасываем бит розжига
goto cickl; // И уходим в цикл
} // если розжиг не произошел
tim_roz++; // записываем в таймер 0,1 с
if (tim_roz=50){ // и проверяем, не превысил ли он значение 5 сек
Klapan=0; // если это произошло - закрываем клапан
Rozjig=0; // выключаем зажигалку
count_roz++ // Инкрементируем счетчик запусков
if (count_roz=3){ // и проверяем количество пусков
goto avar // если их больше 3 - авария
} // если меньше
delay_ms(6000) // делаем задержку в 1 минуту
}
}
}
Писал в кодевизионавр, первый раз на С, поэтому наверное в этом коде ж*па, так что поправте, кто в курсе.
И сразу несколько вопросов:
1. Я под бит (Bit_roz, Bit_gor) убиваю целый байт и не знаю другого способа, как его зарезервировать. Это вообще возможно?
2. Вот эта строчка меня пугает. Получается, что контроллер стоит 1 минуту и ничего больше не делает? Или я не прав? Вообще как задержка сделанная на С работает на самом деле? По прерыванию от таймера?
Как видите, пока еще ничего не понимаю, ну да ладно придет еще (наверно)
Вот такая тема, жду критики, подсказок и советов.