Добрый день. Хочу поделиться, своим первым проектом на arduino . Задача была в том , чтобы при отключении электроэнергии ( в частном доме) автоматически заводился бензиновый генератор и питания дома переключалось на генератор, а при включении электроэнергии всё переключалось обратно. В двух словах о работе устройства: Как я уже говорил задача стояла в том, чтобы при отключения электроэнергии в частном доме автоматически запускался генератор, и питание дома переключалось на него, а при включении электроэнергии все переключалось обратно. Так вот, устройство проверяет наличие напряжения в сети, датчик сделан из обычного реле с катушкой управления 220В, если напряжение пропадает, то проверяется запущен генератор или нет, если не запущен, тогда смотрим на уровень топлива, если он больше 1/10 бака, тогда производим запуск генератора, а если топливо меньше чем 1/10,то включаем ошибку и генератор не запускаем. При нормальном уровне топлива у генератора есть 4 попытки запуска, это если с первого раза запуск не удался. После успешного запуска включаются пускатели и питание дома переключается на генератор, как только появится напряжение в сети, то система переключит пускатели обратно и заглушит генератор. Все команды с arduino на исполнительные механизмы подаются через оптрон и реле. У меня генератор с механическим подсосом, поэтому пришлось учить его закрывать и открывать подсос в процессе запуска, это реализовал с помощью электромагнитов от центрального замка автомобиля. Датчик уровня топлива использовал от ВАЗ 21014 значительно переделав его . Питание этого устройства осуществляется от блока бесперебойного питания (ББП) 12В 3А с аккумулятором 7AЧ далее с 12В понижаю до 9В это для питания самого arduino и до 5В для питания блоков реле. Также в системе имеется силовой аккумулятор 12В 18АЧ,но он питает только стартер и электромагниты для включения и выключения подсоса. Алгоритм работы: Ещё были мысли дополнительно учитывать температуру воздуха, а так же научить разговаривать генератор и сообщать мне с помощью смс о режиме работы, но свободных пинов у arduino uno больше нет, да и дорого получается ,а технического смысла мало. скетч: Код (C++): // проект автозапуск бензинового генератора на ARDURINO UNO декабрь 2015 //задаю константы const int analogPin = 3; // номер порта к которому подключен датчик уровня топлива const int ledPin_4 = 3; // номер порта к которому подключен зеленый диод const int ledPin_11 = 11; // номер порта к которому подключен желтый диод const int ledPin_12 = 12; // номер порта к которому подключен красный диод const int ledPin_13 = 13; // номер порта к которому подключен авария диод const int ton = 1; // номер порта к которому подключена пищалка const int city = 2; // напряжение из города const int he_voltage = 4; //напряжение на генераторе const int starter_relay = 5; //реле стартера const int choke_on = 6; // подсос включить const int choke_of = 7; // подсос выключить const int magnetic = 8; // включает пускатель const int disconnection = 9; //реле размыкания зажигания const int magnetic_of = 10; // вЫключает пускатель // задаю переменные int t = 0; //отображает работу генератора int m = 0; //отображает наличие напряжения в сети int a = 0; //количество попыток запуска ген int val = 0; // переменная для хранения считываемого значения с int rav = 0; //переменная для хранения диапозона уровня топлива int pop = 0; //отображает тревогу int g = 0; //количество команд на пускатель void setup() { pinMode(ledPin_4, OUTPUT); // устанавливает режим работы - выход pinMode(ledPin_11, OUTPUT); // устанавливает режим работы - выход pinMode(ledPin_12, OUTPUT); // устанавливает режим работы - выход pinMode(ledPin_13, OUTPUT); // устанавливает режим работы - выход pinMode(ton, OUTPUT); // устанавливает режим работы - выход pinMode(city, INPUT); // назначаем входом напряжение из города в схеме pinMode(he_voltage, INPUT); // назначаем 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 } void loop() { val = analogRead(analogPin); // считываем значение // Serial.println(rav); // выводим полученное значение if (val<180) rav = 1 ; if (val>120 && val < 350) rav = 2 ; if (val>340 && val < 420) rav = 3 ; if (val>500) rav = 4 ; // Serial.println(val); if (rav == 1) digitalWrite(ledPin_4, HIGH); // включает светодиод5 if (rav==2) digitalWrite(ledPin_11, HIGH); // включает светодиод6 if (rav==3) digitalWrite(ledPin_12, HIGH); // включает светодиод7 if (rav==4 || a >= 4 ) digitalWrite(ledPin_13, HIGH); // включает светодиод8 delay(1000); // ожидаем digitalWrite(ledPin_4, LOW); // выключает светодиод6 digitalWrite(ledPin_11, LOW); // выключает светодиод6 digitalWrite(ledPin_12, LOW); // выключает светодиод6 digitalWrite(ledPin_13, LOW); // выключает светодиод6 // Serial.println(rav); // выводим полученное значение // Serial.println(a); m = digitalRead(city); t = digitalRead(he_voltage); if (t == LOW && m == LOW && a < 4 && rav != 3) { if (a==0) { digitalWrite(ton, HIGH); //подаюм команду тон delay(2000); //пауза 2 сек digitalWrite(ton, LOW); //подаюм команду - тон } digitalWrite(choke_on, HIGH); //подаюм команду + на открытие подсоса delay(700); //пауза 0,7 сек digitalWrite(choke_on, LOW); //подаюм команду - на открытие подсоса delay(1000); digitalWrite(starter_relay, HIGH); //подаюм команду + на реле стартера delay(1800); //пауза 1,8сек digitalWrite(starter_relay, LOW); //подаюм команду - на реле стартера delay(2500); digitalWrite(choke_of, HIGH); //подаюм команду + на закрытие подсоса delay(500); //пауза 0,5 сек digitalWrite(choke_of, LOW); //подаюм команду - на закрытие подсоса a++; } if (t == LOW && m == LOW && rav == 3 && pop == 0 || t == LOW && m == LOW && a >= 4 && pop == 0 ) { digitalWrite(ton, HIGH); //подаюм команду тон delay(1500); //пауза 2 сек digitalWrite(ton, LOW); //подаюм команду - тон delay(1000); digitalWrite(ton, HIGH); //подаюм команду тон delay(1500); //пауза 2 сек digitalWrite(ton, LOW); //подаюм команду - тон delay(1000); digitalWrite(ton, HIGH); //подаюм команду тон delay(1500); //пауза 2 сек digitalWrite(ton, LOW); //подаюм команду - тон delay(1000); digitalWrite(ton, HIGH); //подаюм команду тон delay(1500); //пауза 2 сек digitalWrite(ton, LOW); //подаюм команду - тон pop++; } if (t == HIGH && m == LOW && g == 0 ) { delay(60000); digitalWrite(magnetic, HIGH); delay(1000); //пауза 1 сек digitalWrite(magnetic, LOW); g++; } if (t == HIGH && m == HIGH || rav == 3 && t == HIGH ) { digitalWrite(magnetic_of, HIGH); delay(1000); //пауза 1 сек digitalWrite(magnetic_of, LOW); digitalWrite(disconnection, HIGH); delay(4000); //пауза 4 сек digitalWrite(disconnection, LOW); g = 0; } if (t == LOW && m == HIGH || t == HIGH && m == LOW ) { a = 0; } if (t == LOW && m == HIGH || t == HIGH && m == LOW ) { pop = 0; } } Ну вот вкратце все, что хотел сказать, строго не судите это мой первый проект. если есть какие-нибудь идеи или вопросы буду рад услышать.