Подьемные ворота с дверью в полотне. Эконом :)

daniilguz
Offline
Зарегистрирован: 13.01.2020

Видео работы:

https://youtu.be/Ttp6blBUtNU

Нужно:

2 двигателя Ваз Дворники :) не китай.

вал 40 над воротами

опорные подшипники для вала вверху.

шестеренки для велосипеда на 40 вал минимальное количество зубов - 4 шт

маленькая самодельная шестерня на 8 зубов

4 цепи велосипед Украина.

шим контроллер(драйввер) двигателя  на 40 ампер.

источник питания 24 вольта ( у меня 2 аккумулятора по 12 вольт от ибп) и зарядное из dc-dc повышайки с защитой по току.

Концевики 4 шт

ардуино нано.

макетная плата

бипер активный.

4 канальный брелок с приемником (в комплекте 2 брелка).

код ниже

001#include <SPI.h>
002#include <MFRC522.h>
003 
004 
005#define L_PWM      2     // включаем опускание
006#define EN         3     // сюда подаем шим  
007#define R_PWM      4     // включаем подьем
008 
009// свободны пока 5,
010 
011#define pin_dveri  6    //  свободны. для светодиода RGB
012 
013#define pinPult1   7   // кнопка пульта 1
014#define pinPult2   8   // кнопка пульта 2
015 
016//#define RST_PIN    9    // пины спай ридера меток
017//#define SS_PIN    10    // пины спай ридера меток
018//// так же спай  11,12,13
019 
020#define buzer_pin    14    // пинпищалки
021 
022#define pinstopV    A4   // концевик верх
023#define tok_pin    A6   // по этому пину меряем ток
024#define pinstopN    A7   // концевики замедления и останова
025 
026int verh_konc=0;
027int niz_konc=0;
028 
029  unsigned long currentTime;  //тайминг
030  unsigned long loopTime;     //тайминг
031 
032boolean pult1=false;
033boolean pult2=false;
034 
035byte prpult1=0;
036byte prpult2=0;
037 
038byte zamedl1=0;
039byte zamedl2=0;
040byte Speed=0;
041byte status_vorot=8;
042byte wey=0;
043 
044int tokmot=0;
045 
046int ibuz=0;
047int ispeed=0;
048 
049int iserial=0;
050int timer_stop1=0;
051 
052int timer_hoda =0;
053int timer_verh =0;
054int timer_niz  =0;
055int timer_dovod=0;
056 
057byte prev_way=1;
058 
059byte stsatkoncV=0;
060byte stsatkoncN=0;
061 
062void setup() {
063   
064   Serial.begin(9600);
065//   SPI.begin(); // инициализация SPI
066//   mfrc522.PCD_Init(); // инициализация MFRC522
067 
068    pinMode(pinPult1,    INPUT);
069    pinMode(pinPult1,    INPUT);
070    
071    pinMode(pin_dveri,    OUTPUT);
072     
073    pinMode(buzer_pin,    OUTPUT);
074     
075    pinMode(EN,      OUTPUT);     // Конфигурируем вывод EN    как выход (выход Arduino, вход драйвера)
076    pinMode(L_PWM,   OUTPUT);     // Конфигурируем вывод L_PWM как выход (выход Arduino, вход драйвера)
077    pinMode(R_PWM,   OUTPUT);     // Конфигурируем вывод R_PWM как выход (выход Arduino, вход драйвера)
078//
079//TCCR2A = TCCR2A & 0xe0 | 3;
080//TCCR2B = TCCR2B & 0xe0 | 0x09;
081// Пины D3 и D11 - 8 кГц
082TCCR2B = 0b00000010;  // x8
083TCCR2A = 0b00000011;  // fast pwm
084 
085 
086}
087 
088void loop() {
089   
090  knopki ();
091  vorota ();
092  currentTime  = millis(); //
093  if(currentTime - loopTime  >  100)
094 {   ///// тут события 10  раз в секунду.
095     
096     //tokmot = analogRead(tok_pin);
097    Serial.print("verh_konc = "    );Serial.println(verh_konc);
098//    Serial.print("in1 = ");Serial.println(pult1);
099//    Serial.print("in2=  ");Serial.println(pult2);
100 
101  
102switch (wey) {
103  case 0:
104      whear();if ( Speed > 0 ) {Speed=Speed-20;}
105  break;
106  case 1:
107if ( status_vorot== 10     ) {status_vorot= 1;Speed=0;}             ////////// запуск разгона вверх
108 
109if ( status_vorot== 1      ) {if ( Speed < 120) { Speed = Speed+20;}
110                              Speed = Speed+4;              ////////// изменение скорости набора скорости
111if ( Speed >= 240          ) {Speed = 254;status_vorot= 2;}} ////////// изменение скорости набора скорости
112 
113 
114if ( status_vorot== 2      ) {Speed = 254    ;}              ////////// задаем максимальную скорость вверх
115if ( status_vorot== 3      ) {Speed = Speed-15;              ////////// задаем шаг изменения скорости при торможении
116if ( Speed < 190           ) {Speed = 190;     }}           ////////// минимальную скорость доводки вверх
117if ( stsatkoncV==1         ) {status_vorot = 3 ;}              ////////// задаем максимальную скорость вверх
118if ( stsatkoncV==2         ) {status_vorot = 8;}              ////////// задаем максимальную скорость вверх
119if (status_vorot== 8) {wey=0;};
120  break;
121  case 2:
122if ( status_vorot== 8     ) {status_vorot= 4;Speed=0;}               ////////// запуск разгона вниз
123 
124if ( status_vorot== 4      ) {if ( Speed < 120) { Speed = Speed+20;}
125                              Speed = Speed+4;               ////////// изменение скорости набора скорости
126if ( Speed >= 210          ) {Speed = 220;status_vorot= 5;}} ////////// изменение скорости набора скорости
127 
128if ( status_vorot== 5      ) {Speed = 220    ;}              ////////// задаем максимальную скорость вниз
129 
130if ( status_vorot== 6      ) {Speed = Speed-6;               ////////// задаем шаг изменения скорости при торможении
131if ( Speed < 140            ) {Speed = 140;}}                  ////////// минимальную скорость доводки вниз
132 
133if ( status_vorot== 7      ) {Speed = 140;}                   ////////// задаем шаг изменения скорости при торможении
134if ( stsatkoncN==1         ) {status_vorot = 6;}              ////////// задаем максимальную скорость вверх
135if ( stsatkoncN==2         ) {status_vorot = 7;}              ////////// задаем максимальную скорость вверх
136if (status_vorot== 10){wey=0;}  // стоим внизу
137  break;}
138 
139 
140 
141if (status_vorot==7 ){timer_dovod++;
142if (timer_dovod>10  ){timer_dovod=10; status_vorot=10; wey=0; }
143                }else{timer_dovod=0;}
144if (status_vorot==6){timer_niz++;
145if (timer_niz>30  ) {timer_niz=30;    status_vorot=10; wey=0; }
146               }else{timer_niz=0;}
147if (status_vorot==3){timer_verh++;
148if (timer_verh>30  ){timer_verh=30;    status_vorot=8; wey=0; }
149               }else{timer_verh=0;}
150 
151if (status_vorot!=8 && status_vorot!=10){timer_hoda++;
152if (timer_hoda>170){  timer_hoda=170;
153                    if ( status_vorot==1){prev_way=1;}else{prev_way=2;}
154                    status_vorot=0;
155                    }
156                    }else{timer_hoda=0;}
157 
158/////////////////////////////////бузер
159 
160if (status_vorot!=8 && status_vorot!=10){ ibuz++;
161if (ibuz>5)  {digitalWrite(buzer_pin, HIGH);       }
162if (ibuz>10) {digitalWrite(buzer_pin, LOW); ibuz=0;}
163} else {digitalWrite(buzer_pin, LOW);ibuz=0;}
164//////////////////////////печать в сериал
165iserial++;
166if (iserial==11){iserial=0;
167//   Serial.print("tokmot = ");Serial.println(tokmot);
168//   Serial.print("verh_konc = "    );Serial.println(verh_konc);
169//   Serial.print("status_vorot=  "     );Serial.println(status_vorot);
170////
171// Serial.print(" stsatkoncN = "      );Serial.println(stsatkoncN);
172// Serial.print("  stsatkoncV = "      ); Serial.println (stsatkoncV);
173}
174       
175       
176      loopTime = currentTime;
177  }
178}
179void knopki ()
180{
181   
182 /////////////////////////////////////////////концевики
183verh_konc = analogRead(pinstopV);
184 
185if (verh_konc<250                 ){stsatkoncV=2;prev_way=1;}
186if (verh_konc>250 && verh_konc<550){stsatkoncV=1;prev_way=1;}
187if (verh_konc>750                 ){stsatkoncV=0;}
188 
189 niz_konc = analogRead(pinstopN);
190if (niz_konc<250                 ){stsatkoncN=2;prev_way=2;}
191if (niz_konc>250 && niz_konc <550){stsatkoncN=1;prev_way=2;}
192if (niz_konc>750                 ){stsatkoncN=0;}
193 
194   
195  ////////////////////////////////Кнопки пульта
196if (digitalRead (pinPult1) == HIGH) {
197 if (prpult1==0){prpult1=1;
198switch (wey) {
199  case 0:
200  whear ();
201  if ( prev_way==1){wey=2;}else{wey=1;}
202  break;
203  case 1:
204  wey=0; status_vorot=8;prev_way=1;
205  break;
206  case 2:
207  wey=0; status_vorot=10;prev_way=2;
208  break;}
209}}else {prpult1=0; }
210 
211///////////////////////////////////определяем место положения
212 
213 
214///////////////////////////////////Управление движком на основе данных
215 
216 
217///////////////////////////////////Укправление дверью
218//if (digitalRead (pinPult2) == HIGH) {
219//if (prpult2=0){  prpult2=1;
220//digitalWrite(pin_dveri, HIGH);
221//}}
222//else{prpult2=0; digitalWrite(pin_dveri, LOW);}
223   
224 
225 
226 
227}
228    /*Управление драйвером мотора по 3 проводам:
229    Движение вперёд с регулировкой скорости: «L_PWM» = 0, «R_PWM» = 1, «EN» = ШИМ (чем выше ШИМ тем выше скорость).
230    Движение назад с регулировкой скорости: «L_PWM» = 1, «R_PWM» = 0, «EN» = ШИМ (чем выше ШИМ тем выше скорость).
231    Свободное вращение: «L_PWM» и «R_PWM» не имеют значения, «EN» = 0 (мотор электрически отключён).
232    Торможение: «L_PWM» = «R_PWM» = 0 или 1, «EN» = ШИМ (чем выше ШИМ тем сильнее торможение).*/
233    void vorota ()
234    {
235       
236      if (status_vorot== 1) {digitalWrite (L_PWM, LOW   ); digitalWrite(R_PWM, HIGH); analogWrite (EN, Speed  );prev_way=1;}//разгон вверх
237      if (status_vorot== 2) {digitalWrite (L_PWM, LOW   ); digitalWrite(R_PWM, HIGH); analogWrite (EN, Speed  );prev_way=1;}//полный ход вверх
238      if (status_vorot== 3) {digitalWrite (L_PWM, LOW   ); digitalWrite(R_PWM, HIGH); analogWrite (EN, Speed  );prev_way=1;}//торможение вверх
239       
240      if (status_vorot== 4) {digitalWrite (L_PWM, HIGH  ); digitalWrite(R_PWM, LOW ); analogWrite (EN, Speed  );prev_way=2;}//разгон вниз
241      if (status_vorot== 5) {digitalWrite (L_PWM, HIGH  ); digitalWrite(R_PWM, LOW ); analogWrite (EN, Speed  );prev_way=2;}//полный ход вниз
242      if (status_vorot== 6) {digitalWrite (L_PWM, HIGH  ); digitalWrite(R_PWM, LOW ); analogWrite (EN, Speed  );prev_way=2;}//торможение вниз
243      if (status_vorot== 7) {digitalWrite (L_PWM, HIGH  ); digitalWrite(R_PWM, LOW ); analogWrite (EN, Speed  );prev_way=2;}//доводка вниз
244       
245      if (status_vorot== 8) {analogWrite  (EN,  0);prev_way=1;}  //стоим вверху
246      if (status_vorot== 10){analogWrite  (EN,  0);prev_way=2;}  // стоим внизу
247       
248    }
249    void whear ()
250    {
251    if (Speed==0 && stsatkoncV>0                   ){status_vorot= 8 ; prev_way=1;}
252    if (Speed==0 && stsatkoncN>0                   ){status_vorot= 10; prev_way=2;}
253    if (Speed==0 && stsatkoncN==0 && stsatkoncV==0 ){status_vorot= 8 ; prev_way=1;}
254      }

 

 

daniilguz
Offline
Зарегистрирован: 13.01.2020

Немного доработать
Не рекомендую повторять
Опасно, может упасть на голову.

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Хорошо! Хотя стоило бы контролировать ток на двигателях. Мало-ли чего.

Вот как-нибудь соберусь и перерисую силовую схему ворот NICE. Там реле и полевики.

-Nord_Air-
Offline
Зарегистрирован: 21.08.2021

 daniilguz В данном случае, эконом, является синонимом слова колхоз.

 Меня эта тема беспокоила, скажем так.

 Самое впечатляющее решение я видел в игре Deus Ex Human Revolution, где ворота складываются по горизонтали, пополам и поднимаются к потолку. И я не вижу серьезных контр-оснований чтобы не сделать точно так-же.

 Цепные передачи в этом случае и надежнее и практичнее заменить трапецеидальный винт или на ШВП или на крайняк строительную шпильку.  Ехать будет медленно, но ворота можно будет использовать вместо домкрата ;)

daniilguz
Offline
Зарегистрирован: 13.01.2020

Упали ворота

bizzon
Offline
Зарегистрирован: 29.03.2016

Слабоваты моторчики. Отпишись к лету.Не для зтого они. Чем питаем? Ампер 30 тоже надо где-то взять. А в целом респект! Плюсик поставил.

Pyotr
Offline
Зарегистрирован: 12.03.2014

Пусковой ток этих моторов не более 4-5 А при 12 В. Рабочий 0.5 - 3 А. Могут кратковременно работать и на 24 В.

У меня на гараже распашные ворота. Вот тоже иногда "почешу репу" - хорошо бы сделать простую автоматику... махну рукой, ничо, Петя, поднимешь свой зад и откроешь вручную)))

daniilguz
Offline
Зарегистрирован: 13.01.2020

Упали

daniilguz
Offline
Зарегистрирован: 13.01.2020

Ворота упали. На машину, не повторяйте моих ошибок.

b707
Offline
Зарегистрирован: 26.05.2017

daniilguz пишет:
Ворота упали. На машину, не повторяйте моих ошибок.

по-моему, это троллинг.

 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Буду теперь всем "улудшателям" газовых котлов ссылку давать на эту тему