Автоматические ворота гаража
- Войдите на сайт для отправки комментариев
Пнд, 16/05/2016 - 16:06
Есть гараж, есть ворота, однажды я задумался над тем, что было бы неплохо подъезжая к дому нажать кнопу и чтобы ворота сами открылись, а не глушить авто, заходить во двор, заходить в гараж, открывать ворота, заезжать, закрывать ворота и прочее и прочее. Решил что это можно сделать с помощью ардуино, который будет принимать сигнал(посоветуйте что лучше для этого использовать, я работаю iOS/Android разработчиком могу сделать управление с телефона) и через драйверы открывать/закрывать ворота.
Вопрос вот в чём: есть ли у кого идеи какие моторы использовать для того, чтобы открывать не самые лёгкие ворота и которые могли бы их крепко держать в закрытом состоянии?
Спасибо!
самые слабые линейные приводы для распашных ворот стоят от 10 т.р. за штуку, плюс монтаж. Если ворота тяжелые, проще будет их заменить на секцыонные.
Блютус, думается, лучше, чем СМС, в этом случае - будет работать в пределах визуального контроля, т.е. дети или кто другой случайно СМС на открытие ворот не отправит...
Гуглите по "электромеханический привод распашных гаражных ворот" - с червячным редуктором вариантов масса. И учитывайте, в каком регионе проживаете - если снежные сугробы не редкость, то с распашными воротами может возникнуть проблема и придётся думать о смене конструкции на откидные или другого типа.
Не обязательно требовать этого от привода, можно применить и отдельный запорный ригель, управляемый сервоприводом или соленоидом.
Прежде чем прикручивать ардуино надо решить вопрос с механикой
вы даже не описали конструкцию ворот. Откатные? Распашные?
если обычные распашные то пытаться их механизировать дело не очень благодарное. Никакой привод не будет их держать надежно в закрытом состоянии, нужно будет еще городить электрозамок
секционные у нас стоят от 40к и это открываемые вручную и без монтажа. А можете ссылкой поделиться на приводы?
Ворота не самые тяжёлые, я хочу их немного нарастить, но думаю учитывая что петли смажутся и обработаются графитовой смазкой особо ничего не изменится
Ворота распашные, гараж на небольшом подъёме, чищу снег регулярно, с сугробами быть проблемы не должно
Прежде чем прикручивать ардуино надо решить вопрос с механикой
вы даже не описали конструкцию ворот. Откатные? Распашные?
если обычные распашные то пытаться их механизировать дело не очень благодарное. Никакой привод не будет их держать надежно в закрытом состоянии, нужно будет еще городить электрозамок
Распашные
Ну сделать на соленоиде механизм запирания не проблема, да и в принципе надеятся на привод в плане длительного запирания нельзя, нужна страховка.
Посоветуете привод?
Ну есть готовые приводы для распашных ворот
Ну есть готовые приводы для распашных ворот
Посмотрел решения, цены впечатлили :) Мне вчера перед сном пришла ещё идея червячной передачи, в ней ведь усилие обратнопропорционально шагу резьбы, скорость мне не особо важна, а механизм простой и ведущую шестерню может вращать не особо то и мощный моторчик, обычный, а не шаговый.
В заводских приводов распашных ворот и стоит червячная передача
конструкция простая, кроме мотора и червяка есть еще концевые выключатели
можете сами сделать - делайте
В заводских приводов распашных ворот и стоит червячная передача
конструкция простая, кроме мотора и червяка есть еще концевые выключатели
можете сами сделать - делайте
Ну мне мысль пришла использовать не ведомую шестерню, а рейку, как в рулевом механизме автомобилей, то есть ведущая шестерня толкает рейку, а рейка толкает воротину, чем ближе к стене, тем короче рейка нужна, но нужно большее усилие. Надо чертёж набросать.
все верно, привод, на нем шестерня, рейка зубчатая, два концевика
кстати привод и будет удерживать ворота в замкнутом состоянии, вопрос только что когда света нет, нужно продумать открытие вручную
кстати привод и будет удерживать ворота в замкнутом состоянии, вопрос только что когда света нет, нужно продумать открытие вручную
можно так же как в фирменных - делать выведение червяка из зацепления
либо делать легко сьемные концы приводов
В заводских приводов распашных ворот и стоит червячная передача
конструкция простая, кроме мотора и червяка есть еще концевые выключатели
можете сами сделать - делайте
А можете подсказать мотор и шилд для ардуинки? Мотор нужен компактненький, можно попробовать конечно посчитать по передаточному числу какая мощность нужна будет, но сейчас хотя б навскидку?
моторы которые видел для ардуины слишком маленькеи и маломощные
здесь что то помощнее нужно
а в заводских приводах поторы стоят от сетевого напряжения переменного тока, в фирменном же контроллере комутируются банально реле
кстати вот может быть будет интересно, там про самодельные приводы тоже есть http://asis-kbr.ru/forum/viewtopic.php?f=9&t=118&sid=9d386486eaac3cd1b7f...
Два года уже работает "открывалка" ворот по такой схеме: ворота распашные, одна створка, открываются внутрь, подвес ворот сделан с небольшим (около1,5 см) отклонением от вертикали с таким расчётом, что ворота всегда стремятся открыться. В закрытом состоянии створка ворот удерживается защёлкой, открываемой с помощью дверного пистолета(актюатора), который приводится в действие дешёвой автомобильной сигналкой. Пульт от сигналки закреплен в автомобиле около козырька под потолком. Подъехал, нажал кнопочку, ворота распахнулись, заехал, вышел из авто - закрыл ворота. Сигналка питается от автомобильного аккумулятора, подзарядку который просит раз в два-три месяца. Конструкция была собрана в порыве вдохновения за полчаса. Бюджет проэкта - 200 рублей (покупка нового актюатора), сигналка использована старая- полусгоревшая(остался рабочий только один канал управления - он и был использован для управления защёлкой). Аккумулятор также использован Б/У.
Два года уже работает "открывалка" ворот по такой схеме: ворота распашные, одна створка, открываются внутрь, подвес ворот сделан с небольшим (около1,5 см) отклонением от вертикали с таким расчётом, что ворота всегда стремятся открыться.......
ууу вам створкой ворот еще от ветра в боковуху со всей дури не залетало? а рано или поздно так и будет.
Как насчёт использовать линейные актуаторы? у меня завалялись 2 штуки 36дюймов, громадные и тяжёлые. 36вольт питание. усилие ппц... модель qarl-3636+
Статическая нагрузка: макс. 1350 кг
Динамическая нагрузка: макс. 540 кг
чопочом? :) Можете написать в какой-нибудь мессенджер на номер 7 g27 I60 b5 bb? Есть вайбер и телеграм.
Как насчёт использовать линейные актуаторы? у меня завалялись 2 штуки 36дюймов, громадные и тяжёлые. 36вольт питание. усилие ппц... модель qarl-3636+
Статическая нагрузка: макс. 1350 кг
Динамическая нагрузка: макс. 540 кг
с каким актуатором ворота нафик не нужны, машину можно тягать вверх через забор..
а то еще на ворота тратится..
идея отличная, но у меня бибика тяжелая - средний рамный внедорожник, примерно 2,5 тонны :)
Написал в вайбер
http://fermer.ru/forum/elektronika-dlya-fermerskogo-khozyaistva/122607
Вот здесь почитайте! У меня откатные, на трещетке от тормазов КамаЗ :)
2 года полет нормальный! Движок от вентилятора охлаждения ВаЗ :)
Два года уже работает "открывалка" ворот по такой схеме: ворота распашные, одна створка, открываются внутрь, подвес ворот сделан с небольшим (около1,5 см) отклонением от вертикали с таким расчётом, что ворота всегда стремятся открыться.......
ууу вам створкой ворот еще от ветра в боковуху со всей дури не залетало? а рано или поздно так и будет.
открываются внутрь! Это прозевали?
Ветер исключен, а вот по спиняке в гараже кто то может и получить)))
Почитал тему. Пишу первый пост.
С почином!
Работатют ворота на актуаторах уже 15 лет (в Питере).
Актуаторы 24" 36в. 36" будут еще интереснее, только открываются относительно медленно. У меня установлено на полхода и это 35 секунд. Усилия хватает с головой. Зимой можно даже снег не отгребать, правда, пока от свежий. ))
Автономность, при отключении света, решается акумуляторами. В гараже всегда пригодятся резервные. При зарядке, коммутировать их на 12в, а в режиме ожидания на 36. Решается авторелюшками.
Управление сделано даже без триггеров, еще на поляризованных реле. но пора бы переделать на ардуино и с дисплеем.
А вот сделано на атмеге8.
http://tehnoobzor.com/schemes/automatics/40-samodelnye-avtomaticheskie-vorota.html
Другие публикации этих ворот.
http://el-shema.ru/publ/avtoehlektronika/samodelnye_raspashnye_vorota/3-1-0-143
http://radioskot.ru/publ/raznoe/raspashnye_avtomaticheskie_vorota/18-1-0-507
Пробовал залить HEX файл в уно и нано, но дисплей не работает, хотя что-то там заливается. Никак не разобраться. Темен пока в ардуинах, хоть и стар уже.
Можно скоординировать усилия. За мной силовуха, а с Вас скетч. )))
Как насчёт использовать линейные актуаторы? у меня завалялись 2 штуки 36дюймов, громадные и тяжёлые. 36вольт питание. усилие ппц... модель qarl-3636+
Статическая нагрузка: макс. 1350 кг
Динамическая нагрузка: макс. 540 кг
Отличный комплект. Еще надо закрепить грамотно. Есть нюансы.
В них встроена аварийная остановка. Отключает актуатор в конце хода. Можно настраивать его величину.
Микрик останавливает мотор, но позволяет ему крутиться в другую сторону. Два микрика и два диода, вот и вся коммутация. Есть еще герконовый датчик импульсов.
Dedan Получилось залить фаил ? Тоже интересует сия тема
Нет не получилось. Но я в этом деле совсем профан. Поэтому отложил.
Вроде как заливает, но при подключении экрана на нем ничего нет.
Если получится залить отпишитесь. Заманчивее в готовую плату все влить, чем с ЛУТом мучиться.
Вы какой програмой фаил открываете ?
#define INTERVAL1 5000UL #define INTERVAL2 5000UL int eng11 = 2; // двигатель 11 откр int eng12 = 3; // двигатель 12 int eng21 = 4; // двигатель 21 откр int eng22 = 5; // двигатель 22 int end1 = 6; // концевик 1 int end2 = 7; // концевик 2 int end3 = 8; // концевик 3 int end4 = 9; // концевик 4 int power =10; // силовая линия int on=11; // вкл радиоканал int off=12; // выкл радиоканал int ikch=13; //ИК датчик int radion=0; // переменная радио вкл int radioff=0; //переменная радио октл int regim=0; //переменная режима вкл int onradio=0; int offradio=0; int openg=0; int closeg=0; int count1=0; int count2=0; void setup() { pinMode(eng11, OUTPUT); pinMode(eng12, OUTPUT); pinMode(eng21, OUTPUT); pinMode(eng22, OUTPUT); pinMode(power,OUTPUT); pinMode(end1,INPUT); pinMode(end2,INPUT); pinMode(end3,INPUT); pinMode(end4,INPUT); pinMode(on,INPUT); pinMode(off,INPUT); pinMode(ikch,INPUT); digitalWrite(eng11, HIGH);//канал1 Питание откл digitalWrite(eng12, HIGH);//канал1 Питание откл digitalWrite(eng21, HIGH);//канал1 Питание откл digitalWrite(eng22, HIGH);//канал1 Питание откл digitalWrite(power, LOW);//канал1 Питание откл radion=0; // вкл радиоканал radioff=0; // откл радиоканал regim=0; count1=0; count2=0; } void loop(){ //--------------------------------------------обработка радио -------------------------------- static unsigned long previousMillis1 = 0; // храним время последнего переключения светодиода static unsigned long previousMillis2 = 0; if(digitalRead(on)==LOW&&radion==0&®im==0)//если кнопка ON нажата // и перемення "radion" равна 0 , то ... { regim=1; // вкл режим работы radion++;//пишем 1 в переменную //это нужно для того что бы с каждым нажатием кнопки //происходило только одно действие // плюс защита от "дребезга" } if(digitalRead(on)==HIGH&&radion==1)//если кнопка НЕ нажата //и переменная равна - 1 ,то ... { radion=0;//обнуляем переменную } ////___________________________________________________________________________________________ if(digitalRead(off)==LOW&&radioff==0)//если кнопка OFF нажата // и перемення "radioff" равна 0 , то ... { regim=2; // вкл режим работы radioff++;//пишем 1 в переменную //это нужно для того что бы с каждым нажатием кнопки //происходило только одно действие // плюс защита от "дребезга" } if(digitalRead(off)==HIGH&&radioff==1)//если кнопка НЕ нажата //и переменная равна - 1 ,то ... { radioff=0;//обнуляем переменную } if(digitalRead(ikch)==HIGH)//если сработал ик канал { digitalWrite(eng11, HIGH);// двигатель 1 выкл digitalWrite(eng12, HIGH);// двигатель 2 выкл digitalWrite(eng21, HIGH);// двигатель 2 выкл digitalWrite(eng22, HIGH);// двигатель 2 выкл digitalWrite(power, LOW); // выкл силовую линию regim=0; } //--------------------------------------------ОКРЫТИЕ-------------------------------- if(regim==1)// если пришел радиосигнал откр и все ворота закрыты - открываем ворота { if(digitalRead(end1)==LOW&&digitalRead(end2)==LOW) // ЕСЛИ 2 КОНЦЕВИКА ОТКЛЮЧЕНЫ { digitalWrite(power, HIGH); // вкл силовую линию digitalWrite(eng11, LOW);// двигатель 1 вкл открытие if(millis() - previousMillis1 > INTERVAL1) // задан интервал 2сек. { count1++; previousMillis1 = millis(); } if(count1==3) { digitalWrite(eng21, LOW);// двигатель 2 вкл закрытие count1=0; } } if(digitalRead(end1)==HIGH) //если сработал концевик 1 и воротина закрыта выключаем двигатель 1 { digitalWrite(eng11, HIGH);// двигатель 1 выкл } if(digitalRead(end2)==HIGH) //если сработал концевик 2 и воротина закрыта выключаем двигатель 2 { digitalWrite(eng21, HIGH);// двигатель 2 выкл digitalWrite(power, LOW); // выкл силовую линию digitalWrite(eng11, HIGH);// двигатель 1 выкл regim=0; openg=0; } } //-------------------------------------ЗАКРЫТИЕ------------------------------- if(regim==2)// если пришел радиосигнал закр и все ворота открыты - закр ворота { if(digitalRead(end3)==LOW&&digitalRead(end4)==LOW) // ЕСЛИ 2 КОНЦЕВИКА ОТКЛЮЧЕНЫ { digitalWrite(power, HIGH); // вкл силовую линию digitalWrite(eng12, LOW);// двигатель 1 вкл закрытие if(millis() - previousMillis2 > INTERVAL2) //проверяем не прошел ли нужный интервал, если прошел то { count2++; previousMillis2 = millis(); // сохраняем время последнего переключения } if(count2==3) { digitalWrite(eng22, LOW);// двигатель 2 вкл закрытие count2=0; } } if(digitalRead(end3)==HIGH) //если сработал концевик 3 и воротина открыта выключаем двигатель 1 { digitalWrite(eng12, HIGH);// двигатель 1 выкл } if(digitalRead(end4)==HIGH) //если сработал концевик 4 и воротина открыта выключаем двигатель 2 { digitalWrite(eng22, HIGH);// двигатель 2 выкл digitalWrite(power, LOW); // выкл силовую линию digitalWrite(eng12, HIGH);// двигатель 1 выкл regim=0; closeg=0; } } }Вот мой код С задержкой одной воротни на открытие и другой на закрытие
Но задержка рабботает не коректно То с задержкой откроется (закроется ) То без задержки Может кто подкоректирует ?
петрович 33: Удалось ли доделать скетч ???
петрович 33: Удалось ли доделать скетч ???
А у тебя есть решение или та же проблема?
Решения пока нет , только собираюсь делать
Вот тут пробовали допилить скетч, а так же доработать схему протеуса.
мне просто интересно че народ парится с распашными воротами когда наверно можно сделать тупо жалюзи в каркас ворот.
или типа как у амеров в гараже. открывать вообще можно на грузе вот закрывать приводом
мне просто интересно че народ парится с распашными воротами когда наверно можно сделать тупо жалюзи в каркас ворот.
или типа как у амеров в гараже. открывать вообще можно на грузе вот закрывать приводом
Потому, что распашние уже есть и привод, лишь вишенка на торте!))
Полный скетч здесь https://yadi.sk/d/vzSB5RwW3Ev5eL не проверял
Головной файл выкладываю сюда
/*Gate.ino */ // повер #include "Cl_power.h" const uint32_t time_5sec = 5000; // 5 секунд const byte Power_pin = 10; // силовая линия Cl_power Power(Power_pin, 1); // 1 вкл // моторы #include "Cl_motor.h" const byte Motor1_Open_pin = 2; // двигатель 1 откр 0 вкл / 1 выкл const byte Motor1_Close_pin = 3; // двигатель 1 закр 0 вкл / 1 выкл const byte Gate1_Open_pin = 6; // концевик 1 1 сработал / 0 нет const byte Gate1_Close_pin = 8; // концевик 3 1 сработал / 0 нет Cl_motor Motor1(Motor1_Open_pin, Motor1_Close_pin, Gate1_Open_pin, Gate1_Close_pin, 0, 1); const byte Motor2_Open_pin = 4; // двигатель 2 откр 0 вкл / 1 выкл const byte Motor2_Close_pin = 5; // двигатель 2 закр 0 вкл / 1 выкл const byte Gate2_Open_pin = 7; // концевик 2 1 сработал / 0 нет const byte Gate2_Close_pin = 9; // концевик 4 1 сработал / 0 нет Cl_motor Motor2(Motor2_Open_pin, Motor2_Close_pin, Gate2_Open_pin, Gate2_Close_pin, 0, 1); // кнопки и датчики #include "Cl_do_btn.h" const byte Btn_Open_pin = 11; // вкл радиоканал 0 нажата / 1 нет Cl_do_btn Btn_Open(Btn_Open_pin, 0); // сработка 0 void Do_Btn_Open() { Power.ON(); Motor1.Open(); Motor2.Open(); } void Do_Power_OFF() { Motor1.Stop(); Motor2.Stop(); } const byte Btn_Close_pin = 12; // выкл радиоканал 0 нажата / 1 нет Cl_do_btn Btn_Close(Btn_Close_pin, 0);// сработка 0 void Do_Btn_Close() { Power.ON(); Motor1.Close(); Motor2.Close(); } const byte IR_sens_pin = 13; //ИК датчик 1 сработал / 0 нет Cl_do_btn IR_sens(IR_sens_pin, 1);// сработка 1 void Do_IR_sens() { Motor1.Stop(); Motor2.Stop(); Power.OFF(); } void setup() { Power.setup(); Power.time_OFF = time_5sec; // максимальное время для закрытия дверей Motor1.setup(); Motor2.setup(); Btn_Open.setup(); Btn_Close.setup(); IR_sens.setup(); } void loop() { Power.loop(& Do_Power_OFF); Motor1.loop(); Motor2.loop(); Btn_Open.loop( & Do_Btn_Open); Btn_Close.loop(& Do_Btn_Close); IR_sens.loop(& Do_IR_sens); }qwone: Буду пробовать
qwone: а схемы нет ? конечно по скетчу понять можно ...но
В 35 ообщение есть ссылка на схему и на вариант скетча
Что то не компилируе пишит
Что то не компилируе пишит
/*Cl_do_btn.h */ #ifndef Cl_do_btn_h #define Cl_do_btn_h #include "Arduino.h" class Cl_do_btn { public: Cl_do_btn(byte _pin,bool _logic); void setup(); void loop(void (* Do)()); private: byte pin ; bool btn, btn_old; bool logic; bool bounce_btn = 0; // антидребезговый флаг uint32_t past = 0 ; }; #endif //Cl_do_btn_hУ меня версия 1.8.0 Компиляция проходит нормально. А видно не нравится присвоение при объявлении внутри класса . Можно присвоить значение в конструкторе. Cl_do_btn
Eсли кого-то интересует упрощеный вариант то он здесь https://yadi.sk/d/aGaHMPcm3ExnHy
/*Gate_v2.ino кнопка ОТКРЫТЬ -> 2 (Btn_Open_pin) -> GND кнопка ЗАКРЫТЬ -> 3 (Btn_Close_pin) -> GND */ // мотор #include "Cl_motor.h" const byte Motor_Open_pin = 4; // двигатель 1 откр 0 вкл / 1 выкл const byte Motor_Close_pin = 5; // двигатель 1 закр 0 вкл / 1 выкл const byte Gate_Open_pin = 6; // концевик 1 1 сработал / 0 нет const byte Gate_Close_pin = 7; // концевик 2 1 сработал / 0 нет Cl_motor Motor(Motor_Open_pin, Motor_Close_pin, Gate_Open_pin, Gate_Close_pin, 0, 1); //кнопки #include "Cl_do_btn.h" const byte Btn_Open_pin = 2; // Кнопка ОТКРЫТЬ ВОРОТА 0 нажата / 1 нет Cl_do_btn Btn_Open(Btn_Open_pin, 0); // сработка 0 void Do_Btn_Open() { Motor.Open(); } const byte Btn_Close_pin = 3; // Кнопка ЗАКРЫТЬ ВОРОТА 0 нажата / 1 нет Cl_do_btn Btn_Close(Btn_Close_pin, 0);// сработка 0 void Do_Btn_Close() { Motor.Close(); } void setup() { // мотор Motor.setup(); //кнопки Btn_Open.setup(); Btn_Close.setup(); } void loop() { // мотор Motor.loop(); //кнопки Btn_Open.loop( & Do_Btn_Open); Btn_Close.loop(& Do_Btn_Close); }Вот попробовал нарисовать схему для скетча Петровича 33:
https://yadi.sk/d/gTPj1kku3F3Qne
Попробовал скетч qwone , у меня 1.80 ,
все загрузилось , скомпилировалось . Приводы работают всего 5 сек.
Т.е. общее время работы приводов ограничено 5 секундами .
Попробовал скетч qwone , у меня 1.80 ,
все загрузилось , скомпилировалось . Приводы работают всего 5 сек.
Т.е. общее время работы приводов ограничено 5 секундами .
Поставьте другое значение.
Спасибо большое , завтра попробую!!
void Do_Power_OFF() { // Motor1.Stop(); // так вообще уберете зависимость от времени // Motor2.Stop(); // Моторы будут работать когда сработают конечники }Можно вообще убрать полностью убрать класс Power и все связаное с ним.
Может я не там смотрю , но у меня в скетче Gate, так и есть , я так и пробовал...
Вот так в скетче Gate класс повер отключен.
/*Gate.ino */ // повер //#include "Cl_power.h" //const uint32_t time_5sec = 5000; // 5 секунд //const byte Power_pin = 10; // силовая линия //Cl_power Power(Power_pin, 1); // 1 вкл // моторы #include "Cl_motor.h" const byte Motor1_Open_pin = 2; // двигатель 1 откр 0 вкл / 1 выкл const byte Motor1_Close_pin = 3; // двигатель 1 закр 0 вкл / 1 выкл const byte Gate1_Open_pin = 6; // концевик 1 1 сработал / 0 нет const byte Gate1_Close_pin = 8; // концевик 3 1 сработал / 0 нет Cl_motor Motor1(Motor1_Open_pin, Motor1_Close_pin, Gate1_Open_pin, Gate1_Close_pin, 0, 1); const byte Motor2_Open_pin = 4; // двигатель 2 откр 0 вкл / 1 выкл const byte Motor2_Close_pin = 5; // двигатель 2 закр 0 вкл / 1 выкл const byte Gate2_Open_pin = 7; // концевик 2 1 сработал / 0 нет const byte Gate2_Close_pin = 9; // концевик 4 1 сработал / 0 нет Cl_motor Motor2(Motor2_Open_pin, Motor2_Close_pin, Gate2_Open_pin, Gate2_Close_pin, 0, 1); // кнопки и датчики #include "Cl_do_btn.h" const byte Btn_Open_pin = 11; // вкл радиоканал 0 нажата / 1 нет Cl_do_btn Btn_Open(Btn_Open_pin, 0); // сработка 0 void Do_Btn_Open() { // Power.ON(); Motor1.Open(); Motor2.Open(); } void Do_Power_OFF() { Motor1.Stop(); Motor2.Stop(); } const byte Btn_Close_pin = 12; // выкл радиоканал 0 нажата / 1 нет Cl_do_btn Btn_Close(Btn_Close_pin, 0);// сработка 0 void Do_Btn_Close() { // Power.ON(); Motor1.Close(); Motor2.Close(); } const byte IR_sens_pin = 13; //ИК датчик 1 сработал / 0 нет Cl_do_btn IR_sens(IR_sens_pin, 1);// сработка 1 void Do_IR_sens() { Motor1.Stop(); Motor2.Stop(); // Power.OFF(); } void setup() { // Power.setup(); // Power.time_OFF = time_5sec; // максимальное время для закрытия дверей Motor1.setup(); Motor2.setup(); Btn_Open.setup(); Btn_Close.setup(); IR_sens.setup(); } void loop() { // Power.loop(& Do_Power_OFF); Motor1.loop(); Motor2.loop(); Btn_Open.loop( & Do_Btn_Open); Btn_Close.loop(& Do_Btn_Close); IR_sens.loop(& Do_IR_sens); }