// проект автозапуск бензинового генератора на ARDURINO
//задаю константы
#define limitSwitchPin 2 // переключатель контакт D2
const int city = A3; // напряжение из города
const int he_voltage = A4; //напряжение на генераторе
const int starter_relay = 6; //реле стартера
const int choke_on = 13; // подсос включить
const int choke_of = 12; // подсос выключить
const int magnetic = 5; // включает пускатель
const int disconnection = 7; //реле датчика масла
const int magnetic_of = 3; // вЫключает пускатель
const int ledPin_11 = A2; // номер порта к которому подключен желтый диод
const int ledPin_12 = 10; // номер порта к которому подключен красный диод
const int ledPin_13 = 11; // номер порта к которому подключен авария диод
const int ton = 1; // номер порта к которому подключена пищалка
// задаю переменные
bool t = LOW; //отображает работу генератора
bool m = LOW; //отображает наличие напряжения в сети
int a = 0; //количество попыток запуска ген
int pop = 0; //отображает тревогу
int g = 0; //количество команд на пускатель
bool limitSwitchStatus = HIGH; // LOW = door open, HIGH = door closed
bool lastLimitSwitchStatus = LOW;
void setup()
{
//pinMode(ledPin_4, OUTPUT); // устанавливает режим работы - выход
pinMode(ledPin_11, OUTPUT); // устанавливает режим работы - выход
pinMode(ledPin_12, OUTPUT); // устанавливает режим работы - выход
pinMode(ledPin_13, OUTPUT); // устанавливает режим работы - выход
pinMode(ton, OUTPUT); // устанавливает режим работы - выход
pinMode(limitSwitchPin, INPUT_PULLUP); // переключатель контакт
pinMode(city, INPUT); // назначаем входом напряжение из города в схеме
pinMode(he_voltage, INPUT_PULLUP); // назначаем the_voltage входом напряжение с генератора
pinMode(starter_relay, OUTPUT); //назначаем starter_relay выходом реле стартера
pinMode(choke_on, OUTPUT); //назначаем choke_on выходом подсос включает
pinMode(choke_of, OUTPUT); //назначаем choke_of выходом подсос вЫключает
pinMode(magnetic, OUTPUT); //назначаем magnetic выходом переключает пускатели на генератор
pinMode(disconnection, OUTPUT); //назначаем disconnection выходом включает и выключает зажигание
pinMode(magnetic_of, OUTPUT); //назначаем magnetic выходом переключает пускатели на генератор
Serial.begin(9600); // установка связи по serial
digitalWrite(magnetic, LOW);
digitalWrite(magnetic_of, LOW);
digitalWrite(disconnection, LOW);
digitalWrite(starter_relay, LOW);
digitalWrite(city, LOW);
digitalWrite(he_voltage, LOW);
}
void loop()
{
// Serial.println(a);
m = LOW; //digitalRead(city);
t = digitalRead(he_voltage);
delay(500);
//digitalWrite(ledPin_11, HIGH);
Serial.print("наличие напряжения в сети :");
Serial.println(m);
Serial.print("работает генератор :");
Serial.println(digitalRead(he_voltage));
limitSwitchStatus = digitalRead(limitSwitchPin);
if (limitSwitchStatus != lastLimitSwitchStatus)
{
delay(500);
limitSwitchStatus = digitalRead(limitSwitchPin);
if (limitSwitchStatus == LOW)
{
Serial.print("попытка запускa ");
Serial.println(a);
// запуск гены
if (t == LOW && m == LOW && a < 4)
{
Serial.println("запуск гены");
digitalWrite(disconnection, LOW); //подаюм команду + на включение зажигания
Serial.println("включение зажигания");
delay(3000); //пауза 3 сек
digitalWrite(choke_on, HIGH); //подаюм команду + на открытие подсоса
delay(700); //пауза 0,7 сек
digitalWrite(choke_on, LOW); //прекращаем команду - на открытие подсоса
delay(500);
digitalWrite(starter_relay, HIGH); //подаюм команду + на реле стартера
delay(2800);
Serial.println("включение реле стартера"); //пауза 2,8сек
digitalWrite(starter_relay, LOW); //прекращаем команду - на реле стартера
delay(2500);
digitalWrite(choke_of, HIGH); //подаюм команду + на закрытие подсоса
delay(500); //пауза 0,5 сек
digitalWrite(choke_of, LOW); //прекращаем команду - подсоса на закрытие
Serial.println("подсос закрытие");
a++;
pop = 0;
}
//света нет, гена не включился - включаем тревогу
if ( t == LOW && m == LOW && a >= 4 && pop == 0 )
{
Serial.println("ошибка");
digitalWrite(ledPin_11, HIGH);
digitalWrite(ton, HIGH); //подаюм команду тон
delay(1500);
digitalWrite(ledPin_11, LOW); //пауза 2 сек
digitalWrite(ton, LOW); //подаюм команду - тон
delay(1000);
digitalWrite(ledPin_11, HIGH);
digitalWrite(ton, HIGH); //подаюм команду тон
delay(1500);
digitalWrite(ledPin_11, LOW); //пауза 2 сек
digitalWrite(ton, LOW); //подаюм команду - тон
delay(1000);
digitalWrite(ledPin_11, HIGH);
digitalWrite(ton, HIGH); //подаюм команду тон
delay(1500); //пауза 2 сек
digitalWrite(ton, LOW); //подаюм команду - тон
delay(1000);
digitalWrite(ton, HIGH); //подаюм команду тон
delay(1500); //пауза 2 сек
digitalWrite(ton, LOW); //подаюм команду - тон
digitalWrite(ledPin_11, LOW);
pop++;
digitalWrite(disconnection, HIGH);
}
//света нет, гена работает - включаем пускатель.
if (t == HIGH && m == LOW && g == 0 )
{
Serial.println("гена работает - включаем пускатель");
digitalWrite(ledPin_13, HIGH);
digitalWrite(disconnection, LOW);
delay(6000);
digitalWrite(ledPin_13, LOW);
digitalWrite(magnetic, LOW);
delay(1000); //пауза 1 сек
digitalWrite(ledPin_13, HIGH);
digitalWrite(magnetic, HIGH);
g++;
}
}
if (limitSwitchStatus == HIGH)
{
Serial.println("глушим гену");
lastLimitSwitchStatus = HIGH;
//свет есть, гена работает - через 30 сек. глушим гену
if (t == HIGH && m == LOW )
{
Serial.println("свет есть, глушим гену");
delay(3000); //пауза 30 сек
digitalWrite(disconnection, LOW);
delay(500);
//digitalWrite(he_voltage, LOW);
delay(2000);
digitalWrite(magnetic, LOW);
delay(500);
digitalWrite(ledPin_12, LOW);
digitalWrite(ledPin_11, LOW);
g = 0;
}
}
}
// если гена не работает свет есть или гена работает, света нет
if (t == LOW && m == HIGH || t == HIGH && m == LOW )
{
a = 0; //количество попыток запуска ген
pop = 0; // отображает тревогу
}
}