Подьемные ворота с дверью в полотне. Эконом :)
- Войдите на сайт для отправки комментариев
Чт, 04/11/2021 - 10:20
Видео работы:
Нужно:
2 двигателя Ваз Дворники :) не китай.
вал 40 над воротами
опорные подшипники для вала вверху.
шестеренки для велосипеда на 40 вал минимальное количество зубов - 4 шт
маленькая самодельная шестерня на 8 зубов
4 цепи велосипед Украина.
шим контроллер(драйввер) двигателя на 40 ампер.
источник питания 24 вольта ( у меня 2 аккумулятора по 12 вольт от ибп) и зарядное из dc-dc повышайки с защитой по току.
Концевики 4 шт
ардуино нано.
макетная плата
бипер активный.
4 канальный брелок с приемником (в комплекте 2 брелка).
код ниже
#include <SPI.h> #include <MFRC522.h> #define L_PWM 2 // включаем опускание #define EN 3 // сюда подаем шим #define R_PWM 4 // включаем подьем // свободны пока 5, #define pin_dveri 6 // свободны. для светодиода RGB #define pinPult1 7 // кнопка пульта 1 #define pinPult2 8 // кнопка пульта 2 //#define RST_PIN 9 // пины спай ридера меток //#define SS_PIN 10 // пины спай ридера меток //// так же спай 11,12,13 #define buzer_pin 14 // пинпищалки #define pinstopV A4 // концевик верх #define tok_pin A6 // по этому пину меряем ток #define pinstopN A7 // концевики замедления и останова int verh_konc=0; int niz_konc=0; unsigned long currentTime; //тайминг unsigned long loopTime; //тайминг boolean pult1=false; boolean pult2=false; byte prpult1=0; byte prpult2=0; byte zamedl1=0; byte zamedl2=0; byte Speed=0; byte status_vorot=8; byte wey=0; int tokmot=0; int ibuz=0; int ispeed=0; int iserial=0; int timer_stop1=0; int timer_hoda =0; int timer_verh =0; int timer_niz =0; int timer_dovod=0; byte prev_way=1; byte stsatkoncV=0; byte stsatkoncN=0; void setup() { Serial.begin(9600); // SPI.begin(); // инициализация SPI // mfrc522.PCD_Init(); // инициализация MFRC522 pinMode(pinPult1, INPUT); pinMode(pinPult1, INPUT); pinMode(pin_dveri, OUTPUT); pinMode(buzer_pin, OUTPUT); pinMode(EN, OUTPUT); // Конфигурируем вывод EN как выход (выход Arduino, вход драйвера) pinMode(L_PWM, OUTPUT); // Конфигурируем вывод L_PWM как выход (выход Arduino, вход драйвера) pinMode(R_PWM, OUTPUT); // Конфигурируем вывод R_PWM как выход (выход Arduino, вход драйвера) // //TCCR2A = TCCR2A & 0xe0 | 3; //TCCR2B = TCCR2B & 0xe0 | 0x09; // Пины D3 и D11 - 8 кГц TCCR2B = 0b00000010; // x8 TCCR2A = 0b00000011; // fast pwm } void loop() { knopki (); vorota (); currentTime = millis(); // if(currentTime - loopTime > 100) { ///// тут события 10 раз в секунду. //tokmot = analogRead(tok_pin); Serial.print("verh_konc = " );Serial.println(verh_konc); // Serial.print("in1 = ");Serial.println(pult1); // Serial.print("in2= ");Serial.println(pult2); switch (wey) { case 0: whear();if ( Speed > 0 ) {Speed=Speed-20;} break; case 1: if ( status_vorot== 10 ) {status_vorot= 1;Speed=0;} ////////// запуск разгона вверх if ( status_vorot== 1 ) {if ( Speed < 120) { Speed = Speed+20;} Speed = Speed+4; ////////// изменение скорости набора скорости if ( Speed >= 240 ) {Speed = 254;status_vorot= 2;}} ////////// изменение скорости набора скорости if ( status_vorot== 2 ) {Speed = 254 ;} ////////// задаем максимальную скорость вверх if ( status_vorot== 3 ) {Speed = Speed-15; ////////// задаем шаг изменения скорости при торможении if ( Speed < 190 ) {Speed = 190; }} ////////// минимальную скорость доводки вверх if ( stsatkoncV==1 ) {status_vorot = 3 ;} ////////// задаем максимальную скорость вверх if ( stsatkoncV==2 ) {status_vorot = 8;} ////////// задаем максимальную скорость вверх if (status_vorot== 8) {wey=0;}; break; case 2: if ( status_vorot== 8 ) {status_vorot= 4;Speed=0;} ////////// запуск разгона вниз if ( status_vorot== 4 ) {if ( Speed < 120) { Speed = Speed+20;} Speed = Speed+4; ////////// изменение скорости набора скорости if ( Speed >= 210 ) {Speed = 220;status_vorot= 5;}} ////////// изменение скорости набора скорости if ( status_vorot== 5 ) {Speed = 220 ;} ////////// задаем максимальную скорость вниз if ( status_vorot== 6 ) {Speed = Speed-6; ////////// задаем шаг изменения скорости при торможении if ( Speed < 140 ) {Speed = 140;}} ////////// минимальную скорость доводки вниз if ( status_vorot== 7 ) {Speed = 140;} ////////// задаем шаг изменения скорости при торможении if ( stsatkoncN==1 ) {status_vorot = 6;} ////////// задаем максимальную скорость вверх if ( stsatkoncN==2 ) {status_vorot = 7;} ////////// задаем максимальную скорость вверх if (status_vorot== 10){wey=0;} // стоим внизу break;} if (status_vorot==7 ){timer_dovod++; if (timer_dovod>10 ){timer_dovod=10; status_vorot=10; wey=0; } }else{timer_dovod=0;} if (status_vorot==6){timer_niz++; if (timer_niz>30 ) {timer_niz=30; status_vorot=10; wey=0; } }else{timer_niz=0;} if (status_vorot==3){timer_verh++; if (timer_verh>30 ){timer_verh=30; status_vorot=8; wey=0; } }else{timer_verh=0;} if (status_vorot!=8 && status_vorot!=10){timer_hoda++; if (timer_hoda>170){ timer_hoda=170; if ( status_vorot==1){prev_way=1;}else{prev_way=2;} status_vorot=0; } }else{timer_hoda=0;} /////////////////////////////////бузер if (status_vorot!=8 && status_vorot!=10){ ibuz++; if (ibuz>5) {digitalWrite(buzer_pin, HIGH); } if (ibuz>10) {digitalWrite(buzer_pin, LOW); ibuz=0;} } else {digitalWrite(buzer_pin, LOW);ibuz=0;} //////////////////////////печать в сериал iserial++; if (iserial==11){iserial=0; // Serial.print("tokmot = ");Serial.println(tokmot); // Serial.print("verh_konc = " );Serial.println(verh_konc); // Serial.print("status_vorot= " );Serial.println(status_vorot); //// // Serial.print(" stsatkoncN = " );Serial.println(stsatkoncN); // Serial.print(" stsatkoncV = " ); Serial.println (stsatkoncV); } loopTime = currentTime; } } void knopki () { /////////////////////////////////////////////концевики verh_konc = analogRead(pinstopV); if (verh_konc<250 ){stsatkoncV=2;prev_way=1;} if (verh_konc>250 && verh_konc<550){stsatkoncV=1;prev_way=1;} if (verh_konc>750 ){stsatkoncV=0;} niz_konc = analogRead(pinstopN); if (niz_konc<250 ){stsatkoncN=2;prev_way=2;} if (niz_konc>250 && niz_konc <550){stsatkoncN=1;prev_way=2;} if (niz_konc>750 ){stsatkoncN=0;} ////////////////////////////////Кнопки пульта if (digitalRead (pinPult1) == HIGH) { if (prpult1==0){prpult1=1; switch (wey) { case 0: whear (); if ( prev_way==1){wey=2;}else{wey=1;} break; case 1: wey=0; status_vorot=8;prev_way=1; break; case 2: wey=0; status_vorot=10;prev_way=2; break;} }}else {prpult1=0; } ///////////////////////////////////определяем место положения ///////////////////////////////////Управление движком на основе данных ///////////////////////////////////Укправление дверью //if (digitalRead (pinPult2) == HIGH) { //if (prpult2=0){ prpult2=1; //digitalWrite(pin_dveri, HIGH); //}} //else{prpult2=0; digitalWrite(pin_dveri, LOW);} } /*Управление драйвером мотора по 3 проводам: Движение вперёд с регулировкой скорости: «L_PWM» = 0, «R_PWM» = 1, «EN» = ШИМ (чем выше ШИМ тем выше скорость). Движение назад с регулировкой скорости: «L_PWM» = 1, «R_PWM» = 0, «EN» = ШИМ (чем выше ШИМ тем выше скорость). Свободное вращение: «L_PWM» и «R_PWM» не имеют значения, «EN» = 0 (мотор электрически отключён). Торможение: «L_PWM» = «R_PWM» = 0 или 1, «EN» = ШИМ (чем выше ШИМ тем сильнее торможение).*/ void vorota () { if (status_vorot== 1) {digitalWrite (L_PWM, LOW ); digitalWrite(R_PWM, HIGH); analogWrite (EN, Speed );prev_way=1;}//разгон вверх if (status_vorot== 2) {digitalWrite (L_PWM, LOW ); digitalWrite(R_PWM, HIGH); analogWrite (EN, Speed );prev_way=1;}//полный ход вверх if (status_vorot== 3) {digitalWrite (L_PWM, LOW ); digitalWrite(R_PWM, HIGH); analogWrite (EN, Speed );prev_way=1;}//торможение вверх if (status_vorot== 4) {digitalWrite (L_PWM, HIGH ); digitalWrite(R_PWM, LOW ); analogWrite (EN, Speed );prev_way=2;}//разгон вниз if (status_vorot== 5) {digitalWrite (L_PWM, HIGH ); digitalWrite(R_PWM, LOW ); analogWrite (EN, Speed );prev_way=2;}//полный ход вниз if (status_vorot== 6) {digitalWrite (L_PWM, HIGH ); digitalWrite(R_PWM, LOW ); analogWrite (EN, Speed );prev_way=2;}//торможение вниз if (status_vorot== 7) {digitalWrite (L_PWM, HIGH ); digitalWrite(R_PWM, LOW ); analogWrite (EN, Speed );prev_way=2;}//доводка вниз if (status_vorot== 8) {analogWrite (EN, 0);prev_way=1;} //стоим вверху if (status_vorot== 10){analogWrite (EN, 0);prev_way=2;} // стоим внизу } void whear () { if (Speed==0 && stsatkoncV>0 ){status_vorot= 8 ; prev_way=1;} if (Speed==0 && stsatkoncN>0 ){status_vorot= 10; prev_way=2;} 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 В.
У меня на гараже распашные ворота. Вот тоже иногда "почешу репу" - хорошо бы сделать простую автоматику... махну рукой, ничо, Петя, поднимешь свой зад и откроешь вручную)))
Упали
Ворота упали. На машину, не повторяйте моих ошибок.
по-моему, это троллинг.
Буду теперь всем "улудшателям" газовых котлов ссылку давать на эту тему