автоматика ворот

Тема в разделе "Arduino & Shields", создана пользователем Адам, 11 мар 2017.

?

Как правильно?

Голосование закрыто 11 ноя 2018.
  1. Скетч?

    100,0%
  2. Скейч?

    0 голосов
    0,0%
  3. Скретч?

    0 голосов
    0,0%
  4. Скрейтч?

    0 голосов
    0,0%
  1. asam

    asam Гик

    Ну вот у вас предусмотрено 3 возможных состояния ворот
    Код (Text):

    enum{STOP, OPEN, CLOSE};// возможные состояния системы
     
    (c сточки зрения английско было бы правильнее opening/closing). А в каком сотоянии находятся ворота когда в течении минуты концевик так и не сработал? А мы не знаем. То есть может оно уже открылось или закрылось, но концевик сломался, а может просто заело и не двигается. И в любом случае при таймауте надо бы не просто мотор выключить но и включить звуковую и/или световую сигнализацию. Поэтому нужно еще одно состояние. Например FAILURE

    А вообще у вас, на самом деле в начальном коде 4 состояни а не 3. Просто вы кодируете доп состояние с помощью byte lastDir;// предыдущее направление открытия ворот

    Логичнее сделать в еnume все состояния
    OPENING, CLOSING, OPENED, CLOSED, FAILURE
     
    Адам нравится это.
  2. Адам

    Адам Нерд

    мне самое главное чтоб она силовой трансформатор отключила , а открыто оно или закрыто я и так увижу наверно , всучае отказа одного концевика устраню неполадку и перезапушю прогу , мне наверно так проще будет .
     
    Последнее редактирование: 5 ноя 2019
  3. asam

    asam Гик

    Так прогу я вам дал. Пользуйтесь. Чего еще надо?
     
    Адам нравится это.
  4. Адам

    Адам Нерд

    я не русский , для меня 50% скидка )))

    я вам очень благодарен добрый человек , просто хотелось уточнить если не трудно , при отказе концевика отключится трансформатор и заработает мигалка или просто отключится трансформатор? Если я захочю под коректировать время закрытия и открытия ворот в разделе ("#define MOTOR_TIMEOUT (60*1000) // Время допустимой работы мотора в миллисекундах") поменять время и все ?
     
    Последнее редактирование модератором: 5 ноя 2019
  5. asam

    asam Гик

    просто отключится
     
    Адам нравится это.
  6. Адам

    Адам Нерд

    Если я захочю под коректировать время закрытия и открытия ворот в разделе ("#define MOTOR_TIMEOUT (60*1000) // Время допустимой работы мотора в миллисекундах") поменять время и все (60*1000) ?
     
  7. asam

    asam Гик

    да
     
    Адам нравится это.
  8. Адам

    Адам Нерд

    (60*1000) и в конце какое из них число мне менять подскажите ,и спасибо Вам за время выделенное для меня
     
  9. asam

    asam Гик

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

    PS Звездочка это умножение
     
    Адам нравится это.
  10. alp69

    alp69 Форумчанин

    60*1000=60000 миллисекунд. Меняйте что удобнее. Даже 20*3000 даст такой же результат - 60 секунд.
     
    Адам нравится это.
  11. Адам

    Адам Нерд

    теперь для меня все ясно ! еще раз спасибо, Вы мне очень помогли
     
  12. asam

    asam Гик

    "Спасибо" много будет. Достаточно если понажимаете "Mне нравится" на моих сообщениях :)
     
    b707, Адам и KindMan нравится это.
  13. Bronetapok

    Bronetapok Нуб

    Здравствуйте,прочитал про ваш проект
    У меня также имеется идея про распашные ворота на ардуино, только управление я хочу организовать через 3 кнопки(Отк,Закр,Стоп) и Раздельное управление на 2 воротины с задержкой открытия.Сможете помочь?
     
  14. b707

    b707 Гуру

    а чем помочь то? тоже написать все за вас, как ТС? - второй раз неинтересно
    Код простенький. может сами попробуете? - а будут вопросы - приходите
     
  15. Bronetapok

    Bronetapok Нуб

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

    Вложения:

  16. b707

    b707 Гуру

    а что за ошибки?
     
  17. Airbus

    Airbus Радиохулиган Модератор

    Bronetapok Учимся вставлять код правильно!

    [​IMG]
    Типа так
    Код (Text):
    int A_RelPin = 12; //  реле А
    int LedPin = 13; // Сигналиация работы
    int B_RelPin = 11; // реле  В
    int ButPin = 10; // кнопка упраления
    int limit_switch_A = 9; //кнопка ограничения А
    int limit_switch_B = 8; //кнопка ограничения В
    int flag = 0 ;
    int reqim = 0 ;
    const int buttonPin = 2;    // кнопка для включения света на улице
    const int ledPin = 3;      //выход кнопки на улице
    const int buttonPin1 = 4;    // кнопка света в гараже
    const int ledPin1 = 5;      // выход кнопки в гараже

    // Variables will change:
    int ledState = LOW;         // the current state of the output pin
    int buttonState;             // the current reading from the input pin
    int lastButtonState = LOW;   // the previous reading from the input pin
    int ledState1 = LOW;         // the current state of the output pin
    int buttonState1;             // the current reading from the input pin
    int lastButtonState1 = LOW;   // the previous reading from the input pin
    unsigned long lastDebounceTime = 0;  // the last time the output pin was toggled
    unsigned long debounceDelay = 50;    // the debounce time; increase if the output flickers

    void setup()
    {
      pinMode(A_RelPin, OUTPUT);
      pinMode(B_RelPin, OUTPUT);
      pinMode(LedPin, OUTPUT);
      pinMode(limit_switch_A, INPUT);
      pinMode(limit_switch_B, INPUT);
      pinMode(buttonPin, INPUT);
      pinMode(ledPin, OUTPUT);
      pinMode(buttonPin1, INPUT);
      pinMode(ledPin1, OUTPUT);
      digitalWrite(ledPin, ledState);
      digitalWrite(ledPin1, ledState1);
    }

    void loop()
    {
      if(digitalRead(ButPin) == HIGH && flag == 0 )
      {
        delay(300);
        reqim ++;
        flag = 1 ;
        if(reqim > 3 )
        {
          reqim = 0;
        }
      }
      if(digitalRead(ButPin) == LOW && flag ==1 )
      {
        flag = 0;
      }
      if(reqim == 0)
      {
        digitalWrite(A_RelPin, HIGH);
        digitalWrite(LedPin, HIGH);
        digitalWrite(B_RelPin, HIGH);
      }
      if(reqim == 1)
      {
        if(digitalRead(limit_switch_A)== HIGH)
        {
          reqim = 2;
        }
         digitalWrite(A_RelPin, LOW);
        digitalWrite(LedPin, LOW);
        digitalWrite(B_RelPin, HIGH);
        }
        if(reqim ==2)
        {
          digitalWrite(A_RelPin, HIGH);
        digitalWrite(LedPin, HIGH);
        digitalWrite(B_RelPin, HIGH);
      }
      if(reqim ==3)
      {
        if(digitalRead(limit_switch_B) == HIGH)
        {
          reqim=0 ;
        }
        digitalWrite(A_RelPin, HIGH);
        digitalWrite(LedPin, LOW);
        digitalWrite(B_RelPin, LOW);
        }
          int reading = digitalRead(buttonPin);
      if (reading != lastButtonState) {
        // reset the debouncing timer
        lastDebounceTime = millis();
      }

      if ((millis() - lastDebounceTime) > debounceDelay) {
     
       
        if (reading != buttonState) {
          buttonState = reading;

         
          if (buttonState == HIGH) {
            ledState = !ledState;
          }
        }
      }

      // set the LED:
      digitalWrite(ledPin, ledState);

      lastButtonState = reading;
       int reading1 = digitalRead(buttonPin1);
      if (reading1 != lastButtonState1) {
      lastDebounceTime = millis();
      }
      if ((millis() - lastDebounceTime) > debounceDelay) {
      if (reading1 != buttonState1) {
          buttonState1 = reading1;
                if (buttonState1 == HIGH) {
            ledState1 = !ledState1;
          }
        }
      }
        digitalWrite(ledPin1, ledState1);


      lastButtonState1 = reading1;
    }
     
  18. dmitron1036

    dmitron1036 Гик

    Прошу кинуть ссылку на механическую часть.
    ( Желательно Самую дешовую)
     
  19. Bronetapok

    Bronetapok Нуб

    В моем скетче,управление одной воротиной ,а мне надо контроль за обоими(т.е надо на 4 реле )
     
  20. Un_ka

    Un_ka Гуру

    Вы продали букву Ё и решили на полученное купить механическую часть?
    Ну, вы купите её, поставите, а моторы с трением покоя или с ветром не справятся. Надо Термех знать, рассчитать это дело хотя бы в статике.