Автоматические ворота гаража

Zaakk
Offline
Зарегистрирован: 16.05.2016

Есть гараж, есть ворота, однажды я задумался над тем, что было бы неплохо подъезжая к дому нажать кнопу и чтобы ворота сами открылись, а не глушить авто, заходить во двор, заходить в гараж, открывать ворота, заезжать, закрывать ворота и прочее и прочее. Решил что это можно сделать с помощью ардуино, который будет принимать сигнал(посоветуйте что лучше для этого использовать, я работаю iOS/Android разработчиком могу сделать управление с телефона) и через драйверы открывать/закрывать ворота.

Вопрос вот в чём: есть ли у кого идеи какие моторы использовать для того, чтобы открывать не самые лёгкие ворота и которые могли бы их крепко держать в закрытом состоянии?

Спасибо!

Alex_Mirko
Alex_Mirko аватар
Offline
Зарегистрирован: 16.05.2016

самые слабые линейные приводы для распашных ворот стоят от 10 т.р. за штуку, плюс монтаж. Если ворота тяжелые, проще будет их заменить на секцыонные.

OlegK
OlegK аватар
Offline
Зарегистрирован: 26.11.2014

Zaakk пишет:
могу сделать управление с телефона

Блютус, думается, лучше, чем СМС, в этом случае - будет работать в пределах визуального контроля, т.е. дети или кто другой случайно СМС на открытие ворот не отправит...

Цитата:
есть ли у кого идеи какие моторы использовать для того

Гуглите по "электромеханический привод распашных гаражных ворот" - с червячным редуктором вариантов масса. И учитывайте, в каком регионе проживаете - если снежные сугробы не редкость, то с распашными воротами может возникнуть проблема и придётся думать о смене конструкции на откидные или другого типа.

Цитата:
которые могли бы их крепко держать в закрытом состоянии?

Не обязательно требовать этого от привода, можно применить и отдельный запорный ригель, управляемый сервоприводом или соленоидом.

 

 

axill
Offline
Зарегистрирован: 05.09.2011

Прежде чем прикручивать ардуино надо решить вопрос с механикой

вы даже не описали конструкцию ворот. Откатные? Распашные?

если обычные распашные то пытаться их механизировать дело не очень благодарное. Никакой привод не будет их держать надежно в закрытом состоянии, нужно будет еще городить электрозамок

Zaakk
Offline
Зарегистрирован: 16.05.2016

Цитата:
самые слабые линейные приводы для распашных ворот стоят от 10 т.р. за штуку, плюс монтаж. Если ворота тяжелые, проще будет их заменить на секцыонные.

секционные у нас стоят от 40к и это открываемые вручную и без монтажа. А можете ссылкой поделиться на приводы?

Ворота не самые тяжёлые, я хочу их немного нарастить, но думаю учитывая что петли смажутся и обработаются графитовой смазкой особо ничего не изменится

Zaakk
Offline
Зарегистрирован: 16.05.2016

OlegK пишет:
И учитывайте, в каком регионе проживаете - если снежные сугробы не редкость, то с распашными воротами может возникнуть проблема и придётся думать о смене конструкции на откидные или другого типа.

Ворота распашные, гараж на небольшом подъёме, чищу снег регулярно, с сугробами быть проблемы не должно

Zaakk
Offline
Зарегистрирован: 16.05.2016

axill пишет:

Прежде чем прикручивать ардуино надо решить вопрос с механикой

вы даже не описали конструкцию ворот. Откатные? Распашные?

если обычные распашные то пытаться их механизировать дело не очень благодарное. Никакой привод не будет их держать надежно в закрытом состоянии, нужно будет еще городить электрозамок

Распашные

Ну сделать на соленоиде механизм запирания не проблема, да и в принципе надеятся на привод в плане длительного запирания нельзя, нужна страховка.

Посоветуете привод?

axill
Offline
Зарегистрирован: 05.09.2011

Ну есть готовые приводы для распашных ворот

Zaakk
Offline
Зарегистрирован: 16.05.2016

axill пишет:

Ну есть готовые приводы для распашных ворот

Посмотрел решения, цены впечатлили :) Мне вчера перед сном пришла ещё идея червячной передачи, в ней ведь усилие обратнопропорционально шагу резьбы, скорость мне не особо важна, а механизм простой и ведущую шестерню может вращать не особо то и мощный моторчик, обычный, а не шаговый.

axill
Offline
Зарегистрирован: 05.09.2011

В заводских приводов распашных ворот и стоит червячная передача

конструкция простая, кроме мотора и червяка есть еще концевые выключатели

можете сами сделать - делайте

Zaakk
Offline
Зарегистрирован: 16.05.2016

axill пишет:

В заводских приводов распашных ворот и стоит червячная передача

конструкция простая, кроме мотора и червяка есть еще концевые выключатели

можете сами сделать - делайте

Ну мне мысль пришла использовать не ведомую шестерню, а рейку, как в рулевом механизме автомобилей, то есть ведущая шестерня толкает рейку, а рейка толкает воротину, чем ближе к стене, тем короче рейка нужна, но нужно большее усилие. Надо чертёж набросать.

James
Offline
Зарегистрирован: 26.02.2016

все верно, привод, на нем шестерня, рейка зубчатая, два концевика

James
Offline
Зарегистрирован: 26.02.2016

кстати привод и будет удерживать ворота в замкнутом состоянии, вопрос только что когда света нет, нужно продумать открытие вручную

axill
Offline
Зарегистрирован: 05.09.2011

James пишет:

кстати привод и будет удерживать ворота в замкнутом состоянии, вопрос только что когда света нет, нужно продумать открытие вручную

можно так же как в фирменных - делать выведение червяка из зацепления

либо делать легко сьемные концы приводов

Zaakk
Offline
Зарегистрирован: 16.05.2016

axill пишет:

В заводских приводов распашных ворот и стоит червячная передача

конструкция простая, кроме мотора и червяка есть еще концевые выключатели

можете сами сделать - делайте

А можете подсказать мотор и шилд для ардуинки? Мотор нужен компактненький, можно попробовать конечно посчитать по передаточному числу какая мощность нужна будет, но сейчас хотя б навскидку?

axill
Offline
Зарегистрирован: 05.09.2011

моторы которые видел для ардуины слишком маленькеи и маломощные

здесь что то помощнее нужно

а в заводских приводах поторы стоят от сетевого напряжения переменного тока, в фирменном же контроллере комутируются банально реле

axill
Offline
Зарегистрирован: 05.09.2011

кстати вот может быть будет интересно, там про самодельные приводы тоже есть http://asis-kbr.ru/forum/viewtopic.php?f=9&t=118&sid=9d386486eaac3cd1b7f...

Aaz
Offline
Зарегистрирован: 21.05.2016

Два года уже работает "открывалка" ворот по такой схеме: ворота распашные, одна створка, открываются внутрь, подвес ворот сделан с небольшим (около1,5 см) отклонением от вертикали с таким расчётом, что ворота всегда стремятся открыться. В закрытом состоянии створка ворот удерживается защёлкой, открываемой с помощью дверного пистолета(актюатора), который приводится в действие дешёвой автомобильной сигналкой. Пульт от сигналки закреплен в автомобиле около козырька под потолком. Подъехал, нажал кнопочку, ворота распахнулись, заехал, вышел из авто - закрыл ворота. Сигналка питается от автомобильного аккумулятора, подзарядку который просит раз в два-три месяца. Конструкция была собрана в порыве вдохновения за полчаса. Бюджет проэкта - 200 рублей (покупка нового актюатора), сигналка использована старая- полусгоревшая(остался рабочий только один канал управления - он и был использован для управления защёлкой). Аккумулятор также использован Б/У.

Short Circuit
Short Circuit аватар
Offline
Зарегистрирован: 17.05.2015

Aaz пишет:

Два года уже работает "открывалка" ворот по такой схеме: ворота распашные, одна створка, открываются внутрь, подвес ворот сделан с небольшим (около1,5 см) отклонением от вертикали с таким расчётом, что ворота всегда стремятся открыться.......

ууу вам  створкой ворот еще от ветра в боковуху со всей дури не залетало?  а рано или поздно так и будет.

dachnik
Offline
Зарегистрирован: 26.07.2013

Как насчёт использовать линейные актуаторы? у меня завалялись 2 штуки 36дюймов, громадные и тяжёлые. 36вольт питание. усилие ппц...  модель qarl-3636+

Статическая нагрузка: макс. 1350 кг
Динамическая нагрузка: макс. 540 кг

Zaakk
Offline
Зарегистрирован: 16.05.2016

чопочом? :) Можете написать в какой-нибудь мессенджер на номер 7 g27 I60 b5 bb? Есть вайбер и телеграм.

Short Circuit
Short Circuit аватар
Offline
Зарегистрирован: 17.05.2015

dachnik пишет:

Как насчёт использовать линейные актуаторы? у меня завалялись 2 штуки 36дюймов, громадные и тяжёлые. 36вольт питание. усилие ппц...  модель qarl-3636+

Статическая нагрузка: макс. 1350 кг
Динамическая нагрузка: макс. 540 кг

с каким актуатором ворота нафик не нужны, машину можно тягать вверх через забор..

а то еще на ворота тратится..

Zaakk
Offline
Зарегистрирован: 16.05.2016

идея отличная, но у меня бибика тяжелая - средний рамный внедорожник, примерно 2,5 тонны :)

dachnik
Offline
Зарегистрирован: 26.07.2013

Написал в вайбер

SOCHINEC
Offline
Зарегистрирован: 01.05.2016

http://fermer.ru/forum/elektronika-dlya-fermerskogo-khozyaistva/122607

Вот здесь почитайте! У меня откатные, на трещетке от тормазов КамаЗ :)

2 года полет нормальный! Движок от вентилятора охлаждения ВаЗ :)

SOCHINEC
Offline
Зарегистрирован: 01.05.2016

Short Circuit пишет:

Aaz пишет:

Два года уже работает "открывалка" ворот по такой схеме: ворота распашные, одна створка, открываются внутрь, подвес ворот сделан с небольшим (около1,5 см) отклонением от вертикали с таким расчётом, что ворота всегда стремятся открыться.......

ууу вам  створкой ворот еще от ветра в боковуху со всей дури не залетало?  а рано или поздно так и будет.

открываются внутрь! Это прозевали?

Ветер исключен, а вот по спиняке в гараже кто то может и получить)))

Dedan
Offline
Зарегистрирован: 18.12.2016

Почитал тему. Пишу первый пост.

С почином!

Работатют ворота на актуаторах уже 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 файл в уно и нано, но дисплей не работает, хотя что-то там заливается. Никак не разобраться. Темен пока в ардуинах, хоть и стар уже. 

Можно скоординировать усилия. За мной силовуха, а с Вас скетч. )))

Dedan
Offline
Зарегистрирован: 18.12.2016

dachnik пишет:

Как насчёт использовать линейные актуаторы? у меня завалялись 2 штуки 36дюймов, громадные и тяжёлые. 36вольт питание. усилие ппц...  модель qarl-3636+

Статическая нагрузка: макс. 1350 кг
Динамическая нагрузка: макс. 540 кг

Отличный комплект. Еще надо закрепить грамотно. Есть нюансы. 

В них встроена аварийная остановка. Отключает актуатор в конце хода. Можно настраивать его величину.

Микрик останавливает мотор, но позволяет ему крутиться в другую сторону. Два микрика и два диода, вот и вся коммутация. Есть еще герконовый датчик импульсов.

петрович33
Offline
Зарегистрирован: 04.11.2016

Dedan Получилось залить фаил ? Тоже интересует сия тема 

Dedan
Offline
Зарегистрирован: 18.12.2016

Нет не получилось. Но я в этом деле совсем профан. Поэтому отложил.

Вроде как заливает, но при подключении экрана на нем ничего нет. 

Если получится залить отпишитесь. Заманчивее в готовую плату все влить, чем с ЛУТом мучиться. 

петрович33
Offline
Зарегистрирован: 04.11.2016

Вы какой програмой фаил открываете ?

петрович33
Offline
Зарегистрирован: 04.11.2016
#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&&regim==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;
           }  
      }
}

 

Вот мой код С задержкой одной воротни на открытие и другой на закрытие 

Но задержка рабботает не коректно То с задержкой откроется (закроется ) То без задержки Может кто подкоректирует ?

Aibo
Offline
Зарегистрирован: 06.10.2016

петрович 33: Удалось ли доделать скетч ???

Andrey12
Andrey12 аватар
Offline
Зарегистрирован: 26.12.2014

Aibo пишет:

петрович 33: Удалось ли доделать скетч ???

А у тебя есть решение или та же проблема?

Aibo
Offline
Зарегистрирован: 06.10.2016

Решения пока нет , только собираюсь делать

Andrey12
Andrey12 аватар
Offline
Зарегистрирован: 26.12.2014

Вот тут пробовали допилить скетч, а так же доработать схему протеуса.

arDubino
Offline
Зарегистрирован: 12.01.2017

мне просто интересно че народ парится с распашными воротами когда наверно можно сделать тупо жалюзи в каркас ворот.

или типа как у амеров в гараже. открывать вообще можно на грузе вот закрывать приводом

Dedan
Offline
Зарегистрирован: 18.12.2016

arDubino пишет:

мне просто интересно че народ парится с распашными воротами когда наверно можно сделать тупо жалюзи в каркас ворот.

или типа как у амеров в гараже. открывать вообще можно на грузе вот закрывать приводом

Потому, что распашние уже есть и привод, лишь вишенка на торте!))

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

петрович33 пишет:
Mожет кто подкоректирует ?

Полный скетч здесь 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);
}

 

Aibo
Offline
Зарегистрирован: 06.10.2016

qwone: Буду пробовать

Aibo
Offline
Зарегистрирован: 06.10.2016

qwone: а схемы нет ? конечно по скетчу понять можно ...но 

петрович33
Offline
Зарегистрирован: 04.11.2016

В 35 ообщение есть ссылка на схему и на вариант  скетча 

петрович33
Offline
Зарегистрирован: 04.11.2016

Что то не компилируе пишит 

In file included from Cl_do_btn.cpp:4:
Cl_do_btn.h:16: error: ISO C++ forbids initialization of member 'bounce_btn'
Cl_do_btn.h:16: error: making 'bounce_btn' static
Cl_do_btn.h:16: error: ISO C++ forbids in-class initialization of non-const static member 'bounce_btn'
Cl_do_btn.h:17: error: ISO C++ forbids initialization of member 'past'
Cl_do_btn.h:17: error: making 'past' static
Cl_do_btn.h:17: error: ISO C++ forbids in-class initialization of non-const static member 'past'
 

 

Andrey12
Andrey12 аватар
Offline
Зарегистрирован: 26.12.2014

петрович33 пишет:

Что то не компилируе пишит 

In file included from Cl_do_btn.cpp:4:
Cl_do_btn.h:16: error: ISO C++ forbids initialization of member 'bounce_btn'
Cl_do_btn.h:16: error: making 'bounce_btn' static
Cl_do_btn.h:16: error: ISO C++ forbids in-class initialization of non-const static member 'bounce_btn'
Cl_do_btn.h:17: error: ISO C++ forbids initialization of member 'past'
Cl_do_btn.h:17: error: making 'past' static
Cl_do_btn.h:17: error: ISO C++ forbids in-class initialization of non-const static member 'past'

 
Не силен в библиотеках, я так понимаю не хочет инициализировать bounce_btn и past
Как исправить лучше спросить у автора.
Опять же надо смотреть какие версии компилятора у кого.
/*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

 

 

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

У меня версия 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);
}

 

Aibo
Offline
Зарегистрирован: 06.10.2016

Вот попробовал нарисовать схему для скетча Петровича 33:

https://yadi.sk/d/gTPj1kku3F3Qne

Попробовал скетч qwone , у меня 1.80 ,

все загрузилось , скомпилировалось . Приводы работают всего 5 сек. 

Т.е. общее время работы приводов ограничено 5 секундами .

 

 

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Aibo пишет:

Попробовал скетч qwone , у меня 1.80 ,

все загрузилось , скомпилировалось . Приводы работают всего 5 сек. 

Т.е. общее время работы приводов ограничено 5 секундами .

const uint32_t time_5sec = 5000; // 5 секунд

Поставьте другое значение.

const uint32_t time_5sec = 10000; // будет 10 секунд

 

Aibo
Offline
Зарегистрирован: 06.10.2016

Спасибо большое , завтра попробую!!

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016
void Do_Power_OFF() {
 // Motor1.Stop();  // так вообще уберете зависимость от времени
 // Motor2.Stop(); // Моторы будут работать когда сработают конечники
}

Можно вообще убрать полностью убрать класс Power и все связаное с ним.

Aibo
Offline
Зарегистрирован: 06.10.2016

Может я не там смотрю , но у меня в скетче Gate, так и есть , я так и пробовал...

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Вот так в скетче 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);
}