Страница 1 из 2
Автоматический ввод резерва
Добавлено: Вс янв 08, 2017 7:28 pm
andrew
Может чет с поиском, но не нашел такого...
(Актуально для частного домовладения)
В общем смысл: переключение вводной линии ЛЭП при отключении на инвертер, а затем (после запуска) на генератор.
Re: Автоматический ввод резерва
Добавлено: Вс янв 08, 2017 7:46 pm
andrew
Пока для себя решил делать на Arduino + релейный модуль, управление нагрузкой контакторами, связь с генератором Serial (или аналоговая 2 провода - пока не решил, на генераторе отдельный модуль управления)
-Линия света отдельно, сразу при пропадании питания сети - запитывается инвертером с акб (максимум на 5 минут), после запуска переходит на генератор.
-У меня Вход трехфазный - решил одна фаза для света и необходимого, остальные прочее... + Генератор однофазный + при отсутствии хочется отключить прочее, поэтому дополнительный контактор управляющий 2,3 фазой.
[img]схема1.jpg[/img]
Re: Автоматический ввод резерва
Добавлено: Пн янв 09, 2017 1:14 am
andrew
Скрипт:
Код: Выделить всё
// v. 1.0
// Скрипт управления резервным вводом питания,
// отключением двух фаз по состоянию "отсутствие, присутствие", с WatchDog`ом.
// - не забываем затереть загрузчик (для работы WatchDog`a.).
// Формат запроса: {адрес},{состояние}
// адрес: 3 цифровых знака. Пример: 151 (занесен в переменную addr)
// состояние: 00 - никого нет дома, генератор не нужен
// 01 - никого нет дома, генератор нужен
// 11 - дома кто-то есть
#include <avr/wdt.h>
#include <SoftwareSerial.h>
String addr = "151"; // адрес контроллера
#define ESKchek A4 //датчик входа тока на контактор ЛЭП
#define Outchek A5 //датчик выхода тока с контактора
#define GENchek A6 //датчик входа тока в контактор генератора
#define INVchek A7 //датчик тока с инвертера
//#define GENoutchek A7 //датчик выхода контактора генератора
#define GENerrorLED A3 // индикатор ошибки генератора
#define GENonLED A2 // индикатор вкл линии генератора
#define GENoffLED A1 // индикатор выкл линии генератора
#define ESKonLED A0 // индикатор вкл линии ЛЭП
#define ESKoffLED 13 // индикатор выкл линии ЛЭП
#define INVon 9 // вкл инвертера
#define INVrel 8 // реле вкл-выкл инвертера
#define ESKon 2 // реле вкл контактора ЛЭП
#define ESKoff 3 // реле выкл контактора ЛЭП
#define GENon 4 // реле вкл контактора Генератора
#define GENoff 5 // реле выкл контактора Генератора
#define NBDon 6 // реле вкл контактора НЕТ НИКОГО
#define NBDoff 7 // реле выкл контактора НЕТ НИКОГО
SoftwareSerial mySerial(10, 11); // RX, TX
volatile int i = 0;
volatile bool ON = LOW; // включить 0
volatile bool OFF = HIGH; // выключить 1
volatile bool OldESK = HIGH; // предыдущее состояние ввода ЛЭП
volatile bool State = HIGH; // состояние присутствия
volatile bool GenOK = LOW; // ошибка генератора
volatile bool GenState = LOW; // состояние генератора
void setup() {
Serial.begin (9600);
mySerial.begin(4800);
pinMode (INVchek, INPUT_PULLUP);
pinMode (ESKchek, INPUT_PULLUP);
pinMode (GENchek, INPUT_PULLUP);
pinMode (Outchek, INPUT_PULLUP);
pinMode (GENerrorLED, OUTPUT);
pinMode (GENonLED, OUTPUT);
pinMode (GENoffLED, OUTPUT);
pinMode (ESKonLED, OUTPUT);
pinMode (ESKoffLED, OUTPUT);
pinMode (INVon, OUTPUT);
pinMode (INVrel, OUTPUT);
pinMode (ESKon, OUTPUT);
pinMode (ESKoff, OUTPUT);
pinMode (GENon, OUTPUT);
pinMode (GENoff, OUTPUT);
pinMode(NBDon, OUTPUT);
pinMode(NBDoff, OUTPUT);
digitalWrite (GENerrorLED, HIGH);
digitalWrite (GENonLED, HIGH);
digitalWrite (GENoffLED, HIGH);
digitalWrite (ESKonLED, HIGH);
digitalWrite (ESKoffLED, HIGH);
digitalWrite (INVon, OFF);
digitalWrite (INVrel, OFF);
digitalWrite (ESKon, OFF);
digitalWrite (ESKoff, OFF);
digitalWrite (GENon, OFF);
digitalWrite (GENoff, OFF);
digitalWrite (NBDon, OFF);
digitalWrite (NBDoff, OFF);
delay (1000);
digitalWrite (GENerrorLED, LOW);
digitalWrite (GENonLED, LOW);
digitalWrite (GENoffLED, LOW);
digitalWrite (ESKonLED, LOW);
digitalWrite (ESKoffLED, LOW);
wdt_enable(WDTO_8S);
}
void pause(byte tm) {
for (i = 0; i < tm; i++) {
wdt_reset();
delay(1000);
}
}
void ESKstart() {
pause(20);
if (!digitalRead(ESKchek)) {
digitalWrite (GENoff, ON);
delay(500);
digitalWrite (GENoff, OFF);
delay(500);
byte i = 0;
while (digitalRead(Outchek) || i<10){
digitalWrite (ESKon, ON);
if (State) {digitalWrite (NBDon, ON);}
delay(500);
digitalWrite (ESKon, OFF);
digitalWrite (NBDon, OFF);
delay(500);
i++;
}
if (digitalRead(Outchek)) {
digitalWrite (ESKoff, ON);
digitalWrite (NBDoff, ON);
digitalWrite (GENoff, ON);
delay(500);
digitalWrite (ESKoff, OFF);
digitalWrite (NBDoff, OFF);
digitalWrite (GENoff, OFF);
}
}
}
void GenAnswer(byte ansver) {
switch (ansver) {
case 11:
digitalWrite (GENerrorLED, LOW);// заглушен все ок
GenOK = 1;
GenState = 0;
break;
case 22:
digitalWrite (GENerrorLED, LOW);// заведен все ок
GenOK = 1;
GenState = 1;
break;
case 33:
digitalWrite (GENerrorLED, HIGH);// заглушен, авария
GenOK = 0;
GenState = 0;
break;
case 44:
digitalWrite (GENerrorLED, HIGH);// заведен, авария
GenOK = 0;
GenState = 1;
break;
default:
digitalWrite (GENerrorLED, HIGH);
GenOK = 0;
GenState = 1;
}
}
void GenStart() {
if (digitalRead(GENchek)) {
mySerial.println ("start");
byte ansver = 0;
for (i = 0; i < 120; i++) {
wdt_reset();
delay(1000);
if (mySerial.available()) {
ansver = mySerial.read();
break;
}
}
GenAnswer (ansver);
}
}
void GenStop() {
mySerial.println ("stop");
byte ansver = 0;
for (i = 0; i < 100; i++) {
wdt_reset();
delay(1200);
if (mySerial.available()) {
ansver = mySerial.read();
break;
}
}
GenAnswer (ansver);
}
void loop() {
wdt_reset();
if (digitalRead(ESKchek) != OldESK) {
OldESK = digitalRead(ESKchek);
if (!OldESK) {
ESKstart();
pause(5);
GenStop();
}
else {
// выключаем ЛЭП и 2,3 фазы
digitalWrite (ESKoff, ON);
digitalWrite (NBDoff, ON);
delay(500);
digitalWrite (ESKoff, OFF);
digitalWrite (NBDoff, OFF);
delay(500);
// включаем инвертер
digitalWrite (INVon, ON);
delay(500);
digitalWrite (INVrel, ON);
// запускаем генератор если нужен
if (State) {
GenStart();
if (!digitalRead(GENchek)) {
digitalWrite (INVrel, OFF);
digitalWrite (INVon, OFF);
delay(500);
byte i=0;
while (digitalRead(Outchek) || i<10) {
digitalWrite (GENon, ON);
delay(500);
digitalWrite (GENon, OFF);
i++;
}
if (digitalRead(Outchek)) {
digitalWrite (ESKoff, ON);
digitalWrite (NBDoff, ON);
digitalWrite (GENoff, ON);
delay(500);
digitalWrite (ESKoff, OFF);
digitalWrite (NBDoff, OFF);
digitalWrite (GENoff, OFF);
}
}
}
}
}
//подсветка кнопок
if (!digitalRead(ESKchek)) {
if (!digitalRead(Outchek)) {
digitalWrite (ESKoffLED, LOW);
digitalWrite (ESKonLED, HIGH);
}
else {
digitalWrite (ESKonLED, LOW);
digitalWrite (ESKoffLED, HIGH);
}
}
if (!digitalRead(GENchek)) {
if (!digitalRead(Outchek)) {
digitalWrite (GENoffLED, LOW);
digitalWrite (GENonLED, HIGH);
}
else {
digitalWrite (GENonLED, LOW);
digitalWrite (GENoffLED, HIGH);
}
}
//end light button
//состояние никого при вкл генераторе
if (!State && !digitalRead(GENchek)) {
digitalWrite (GENoff, ON);
delay(500);
digitalWrite (GENoff, OFF);
pause(5);
GenStop();
}
//end состояние
}
void serialEvent() {
if (Serial.available() > 4) {
String incomingData = Serial.readString();
if (incomingData.substring(0, 3) == addr) {
int dS = incomingData.substring(4, 6).toInt();
Serial.print(addr);
Serial.print(":");
switch (dS) {
case 11:
digitalWrite (NBDoff, ON);//присутствие нет, генератор нет
delay(500);
digitalWrite (NBDoff, OFF);
State = LOW;
break;
case 22:
digitalWrite (NBDoff, ON);//присутствие нет, генератор да
delay(500);
digitalWrite (NBDoff, OFF);
State = HIGH;
break;
case 33:
digitalWrite (NBDon, ON);//присутствие да,генератор да
delay(500);
digitalWrite (NBDon, OFF);
State = HIGH;
break;
default:
Serial.print("L:");
Serial.print(digitalRead(ESKchek));
Serial.print(":G:");
Serial.print(digitalRead(GENchek));
Serial.print(":G:");
Serial.print(digitalRead(GENchek));
}
Serial.print(":");
Serial.println(dS);
}
}
}
Re: Автоматический ввод резерва
Добавлено: Пн янв 09, 2017 1:15 am
andrew
Какие замечания?
Re: Автоматический ввод резерва
Добавлено: Пн янв 09, 2017 9:33 am
Victor_S
Немного общих замечаний из собственного опыта по резервному питанию...
1. При 3-фазном вводе разумно нагружать все фазы симметрично. В деревне часто бывает отключение одной или двух фаз из трех, а не сразу всего. Поэтому выделять одну фазу для освещения и необходимого, ИМХО, не самый правильный вариант.
2. Инвертор и так должен автоматически переключаться сам. АВР имеет смысл только для генератора. 5 минут - ниочем, даже автоматический запуск и прогрев генератора могут потребовать большего времени.
3. САП выполняет гораздо больше функций, чем просто контроль наличия входного напряжения. Это и напряжение аккумулятора генератора(и его подзарядка), и контроль аккумуляторов инвертора, и параметров(а не только наличия) входной сети и периодический запуск генератора...
Если САП делать не планируете, то лучше и ввод резерва делать вручную(рубильником через ноль), если будете - то заодно с АВР.
У меня довольно паршивая сеть в деревне, хотя и сделана реконструкция. Имею 2 трехфазных ввода. Один полностью резервирую, второй пока нет. Стоит 3 стабилизатора с байпасами, дальше 3 инвертора(объеденены для работы по 3 фазам) на общий банк аккумуляторов, тоже с байпасами. Один инвертор подключен через САП со своим байпасом. Генератор тоже однофазный, мощность номинальная равна одной фазе, работает на тот же банк аккумуляторов через один из инверторов. Смысл всего в том, что при отключении одной или двух фаз, оставшийся инвертор продолжает подавать напряжение на все фазы и заряжать банк аккумуляторов. При отключении всех фаз, после снижения напряжения на аккумуляторах ниже определенного предела автоматически запускается генератор, который заряжает банк аккумуляторов и через инверторы подает напряжение на все фазы. По достижению верхнего предела заряда аккумуляторов(при отсутствии сети), генератор отключается и цикл повторяется. При появлении питания хотя бы на одной фазе генератор отключается и система переходит на внешнее питание. Дополнительно имеется возможность подкачки мощности от аккумуляторов при превышении лимита потребления от сети.
Re: Автоматический ввод резерва
Добавлено: Пн янв 09, 2017 9:37 am
Victor_S
Да, забыл добавить...
При переходе на резервное питание, автоматика отключает все мощные не приоритетные нагрузки, а при возврате включает(в зависимости от режима - нормальный/экономичный/охрана). Вот для этих целей уже можно разные ардуинки использовать...

Re: Автоматический ввод резерва
Добавлено: Пн янв 09, 2017 12:46 pm
andrew
У вас больше похоже на объект пво.)))
-А по сути: у нас сеть новая, за год особых нареканий нет, кроме отключения когда попало на сколько попало...
1. Фазы примерно симметрично и будут нагружены при 3 фазах:
-свет, холодильник, насос
-духовка, розетки 1 этажа
-бойлер, розетки 2 этажа, улица свет
2. Инвертер маломощный (инвертер - громко сказано - преобразователь напряжения 12DC-220AC) 1200 вт - нужен только для того чтоб до запуска генератора не сидеть впотьмах, питание от автомобильного аккумулятора, вместе с генератором, контроль за состоянием акб и гены будет на др. контроллере.
3. В итоге "сап" (не понял что такое) Cистема автоматического пуска? - будет на генераторе - контроллер генератора, Если что-то иное то ненужно...
Re: Автоматический ввод резерва
Добавлено: Пн янв 09, 2017 1:42 pm
Victor_S
Просто у меня пмж предполагается. Соответственно кроме хреновой электрики никаких внешних коммуникаций, вот и приходится о резерве подумать основательно...
У Вас же, как я понял, небольшая дача с дровяной печкой.
Тогда такой момент... Насос с резерва уберите, Ваш инвертор его пуска не выдержит. Ну и генератор ведь на улице? А уличное освещение Вы не резервируете. Может в Вашем случае правильнее будет отдельная линия дежурного освещения(дом,улица) в параллель к основной? Можно даже 12В. Генератор уже есть? Хороший генератор с автозапуском и АВР стоит приличных денег, а на китайский ширпотреб, лучше ручное переключение, ИМХО.
Re: Автоматический ввод резерва
Добавлено: Пн янв 09, 2017 4:09 pm
andrew
Освещение и Резерв одна фаза, но две разные ветки - от инвертера только освещение. На улице свет в основном понты... там не так темно ночью как в доме.
Генератор уже есть без АВР, без Автозапуска, но со стартером. Запуск буду городить все равно сам (в продолжении темы)... некоторые впаривают эти самоделки достаточно не за дешево, и еще даж какую-никакую гарантию дают.... Чем мы хуже?
PS. Печка кстати да дровяная, но немецкая, в паре с эл.котлом (жаль не немецким).))
ЗЫ. Эл. котел на резервной фазе висит мозгами и одним теном, для плюса будет достаточно...
Re: Автоматический ввод резерва
Добавлено: Пн янв 09, 2017 9:26 pm
Victor_S
andrew писал(а):Генератор уже есть без АВР, без Автозапуска, но со стартером.
Стартер не главное...сам генератор смотрите, ну и движек. Надеюсь Вы его уже проверили на "совместимость" с холодильником, насосом и "мозгами" котла.
andrew писал(а):Запуск буду городить все равно сам (в продолжении темы)... Чем мы хуже?
"Ни что так не убеждает как собственный опыт..."

Удачи!