Видео работы:
https://youtu.be/Ttp6blBUtNU
Нужно:
2 двигателя Ваз Дворники :) не китай.
вал 40 над воротами
опорные подшипники для вала вверху.
шестеренки для велосипеда на 40 вал минимальное количество зубов - 4 шт
маленькая самодельная шестерня на 8 зубов
4 цепи велосипед Украина.
шим контроллер(драйввер) двигателя на 40 ампер.
источник питания 24 вольта ( у меня 2 аккумулятора по 12 вольт от ибп) и зарядное из dc-dc повышайки с защитой по току.
Концевики 4 шт
ардуино нано.
макетная плата
бипер активный.
4 канальный брелок с приемником (в комплекте 2 брелка).
код ниже
005 | #define L_PWM 2 // включаем опускание |
006 | #define EN 3 // сюда подаем шим |
007 | #define R_PWM 4 // включаем подьем |
011 | #define pin_dveri 6 // свободны. для светодиода RGB |
013 | #define pinPult1 7 // кнопка пульта 1 |
014 | #define pinPult2 8 // кнопка пульта 2 |
018 | //// так же спай 11,12,13 |
020 | #define buzer_pin 14 // пинпищалки |
022 | #define pinstopV A4 // концевик верх |
023 | #define tok_pin A6 // по этому пину меряем ток |
024 | #define pinstopN A7 // концевики замедления и останова |
029 | unsigned long currentTime; |
030 | unsigned long loopTime; |
068 | pinMode(pinPult1, INPUT); |
069 | pinMode(pinPult1, INPUT); |
071 | pinMode(pin_dveri, OUTPUT); |
073 | pinMode(buzer_pin, OUTPUT); |
076 | pinMode(L_PWM, OUTPUT); |
077 | pinMode(R_PWM, OUTPUT); |
092 | currentTime = millis(); |
093 | if (currentTime - loopTime > 100) |
094 | { ///// тут события 10 раз в секунду. |
097 | Serial .print( "verh_konc = " ); Serial .println(verh_konc); |
104 | whear(); if ( Speed > 0 ) {Speed=Speed-20;} |
107 | if ( status_vorot== 10 ) {status_vorot= 1;Speed=0;} ////////// запуск разгона вверх |
109 | if ( status_vorot== 1 ) { if ( Speed < 120) { Speed = Speed+20;} |
110 | Speed = Speed+4; ////////// изменение скорости набора скорости |
111 | if ( Speed >= 240 ) {Speed = 254;status_vorot= 2;}} ////////// изменение скорости набора скорости |
114 | if ( status_vorot== 2 ) {Speed = 254 ;} ////////// задаем максимальную скорость вверх |
115 | if ( status_vorot== 3 ) {Speed = Speed-15; ////////// задаем шаг изменения скорости при торможении |
116 | if ( Speed < 190 ) {Speed = 190; }} ////////// минимальную скорость доводки вверх |
117 | if ( stsatkoncV==1 ) {status_vorot = 3 ;} ////////// задаем максимальную скорость вверх |
118 | if ( stsatkoncV==2 ) {status_vorot = 8;} ////////// задаем максимальную скорость вверх |
119 | if (status_vorot== 8) {wey=0;}; |
122 | if ( status_vorot== 8 ) {status_vorot= 4;Speed=0;} ////////// запуск разгона вниз |
124 | if ( status_vorot== 4 ) { if ( Speed < 120) { Speed = Speed+20;} |
125 | Speed = Speed+4; ////////// изменение скорости набора скорости |
126 | if ( Speed >= 210 ) {Speed = 220;status_vorot= 5;}} ////////// изменение скорости набора скорости |
128 | if ( status_vorot== 5 ) {Speed = 220 ;} ////////// задаем максимальную скорость вниз |
130 | if ( status_vorot== 6 ) {Speed = Speed-6; ////////// задаем шаг изменения скорости при торможении |
131 | if ( Speed < 140 ) {Speed = 140;}} ////////// минимальную скорость доводки вниз |
133 | if ( status_vorot== 7 ) {Speed = 140;} ////////// задаем шаг изменения скорости при торможении |
134 | if ( stsatkoncN==1 ) {status_vorot = 6;} ////////// задаем максимальную скорость вверх |
135 | if ( stsatkoncN==2 ) {status_vorot = 7;} ////////// задаем максимальную скорость вверх |
136 | if (status_vorot== 10){wey=0;} |
141 | if (status_vorot==7 ){timer_dovod++; |
142 | if (timer_dovod>10 ){timer_dovod=10; status_vorot=10; wey=0; } |
143 | } else {timer_dovod=0;} |
144 | if (status_vorot==6){timer_niz++; |
145 | if (timer_niz>30 ) {timer_niz=30; status_vorot=10; wey=0; } |
147 | if (status_vorot==3){timer_verh++; |
148 | if (timer_verh>30 ){timer_verh=30; status_vorot=8; wey=0; } |
151 | if (status_vorot!=8 && status_vorot!=10){timer_hoda++; |
152 | if (timer_hoda>170){ timer_hoda=170; |
153 | if ( status_vorot==1){prev_way=1;} else {prev_way=2;} |
158 | /////////////////////////////////бузер |
160 | if (status_vorot!=8 && status_vorot!=10){ ibuz++; |
161 | if (ibuz>5) {digitalWrite(buzer_pin, HIGH); } |
162 | if (ibuz>10) {digitalWrite(buzer_pin, LOW); ibuz=0;} |
163 | } else {digitalWrite(buzer_pin, LOW);ibuz=0;} |
164 | //////////////////////////печать в сериал |
166 | if (iserial==11){iserial=0; |
176 | loopTime = currentTime; |
182 | /////////////////////////////////////////////концевики |
183 | verh_konc = analogRead(pinstopV); |
185 | if (verh_konc<250 ){stsatkoncV=2;prev_way=1;} |
186 | if (verh_konc>250 && verh_konc<550){stsatkoncV=1;prev_way=1;} |
187 | if (verh_konc>750 ){stsatkoncV=0;} |
189 | niz_konc = analogRead(pinstopN); |
190 | if (niz_konc<250 ){stsatkoncN=2;prev_way=2;} |
191 | if (niz_konc>250 && niz_konc <550){stsatkoncN=1;prev_way=2;} |
192 | if (niz_konc>750 ){stsatkoncN=0;} |
195 | ////////////////////////////////Кнопки пульта |
196 | if (digitalRead (pinPult1) == HIGH) { |
197 | if (prpult1==0){prpult1=1; |
201 | if ( prev_way==1){wey=2;} else {wey=1;} |
204 | wey=0; status_vorot=8;prev_way=1; |
207 | wey=0; status_vorot=10;prev_way=2; |
211 | ///////////////////////////////////определяем место положения |
214 | ///////////////////////////////////Управление движком на основе данных |
217 | ///////////////////////////////////Укправление дверью |
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;} |
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;} |
245 | if (status_vorot== 8) {analogWrite (EN, 0);prev_way=1;} |
246 | if (status_vorot== 10){analogWrite (EN, 0);prev_way=2;} |
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;} |
Немного доработать
Не рекомендую повторять
Опасно, может упасть на голову.
Хорошо! Хотя стоило бы контролировать ток на двигателях. Мало-ли чего.
Вот как-нибудь соберусь и перерисую силовую схему ворот NICE. Там реле и полевики.
daniilguz В данном случае, эконом, является синонимом слова колхоз.
Меня эта тема беспокоила, скажем так.
Самое впечатляющее решение я видел в игре Deus Ex Human Revolution, где ворота складываются по горизонтали, пополам и поднимаются к потолку. И я не вижу серьезных контр-оснований чтобы не сделать точно так-же.
Цепные передачи в этом случае и надежнее и практичнее заменить трапецеидальный винт или на ШВП или на крайняк строительную шпильку. Ехать будет медленно, но ворота можно будет использовать вместо домкрата ;)
Упали ворота
Слабоваты моторчики. Отпишись к лету.Не для зтого они. Чем питаем? Ампер 30 тоже надо где-то взять. А в целом респект! Плюсик поставил.
Пусковой ток этих моторов не более 4-5 А при 12 В. Рабочий 0.5 - 3 А. Могут кратковременно работать и на 24 В.
У меня на гараже распашные ворота. Вот тоже иногда "почешу репу" - хорошо бы сделать простую автоматику... махну рукой, ничо, Петя, поднимешь свой зад и откроешь вручную)))
Упали
Ворота упали. На машину, не повторяйте моих ошибок.
по-моему, это троллинг.
Буду теперь всем "улудшателям" газовых котлов ссылку давать на эту тему