Повтор цикла вращения шагового двигателя при нажатии на кнопку.

Тема в разделе "Arduino & Shields", создана пользователем Skiffest, 18 мар 2016.

  1. Skiffest

    Skiffest Нуб

    Прошу Вашей помощи:

    Идея сделать устройство для отмотки кабеля или веревки нужной длинный.

    В частности, есть двигатель устройство драйвер и т.д.

    http://wiki.amperka.ru/продукты:troyka:stepper

    Технически все собрал. Но возникли проблемы с повтором. К примеру чтобы двигатель сделал 10 оборотов, вокруг оси нужно каждый раз перезагружать ардуино, что не удобно.

    Нужен цикл, что при нажатии на кнопку, двигатель бы начинал работу. Останавливался и ждал бы команды для следующего нажатия на кнопку.
     
  2. ostrov

    ostrov Гуру

    В чем проблема конкретно? Вы не пишите программы вообще или в чем то ошибка и не работает? Если первое, то вам сюда, если второе, то копируйте то что есть по программе.
     
  3. Skiffest

    Skiffest Нуб

    Спасибо.
    Нашел вот это наиболее подходящее.
    http://forum.amperka.ru/threads/Автоматический-Намоточный-станок.7272/

    Но, как бы найти логику и составить скетч.

    1. Ловим нажатие на кнопку СТАРТ.
    2. Делаем 100 шагов.
    3. Отключаемся.


    Сейчас скетч такой:
    // Troyka-Stepper подключён к следующим пинам:
    const byte stepPin = 7;
    const byte directionPin = 8;
    const byte enablePin = 11;

    // Выдержка для регулировки скорости вращения
    int delayTime = 20;

    void setup() {
    // Настраиваем нужные контакты на выход
    pinMode(stepPin, OUTPUT);
    pinMode(directionPin, OUTPUT);
    pinMode(enablePin, OUTPUT);

    }

    void loop() {

    // Подаём питание на двигатель
    digitalWrite(enablePin, HIGH);

    // Задаём направление вращения по часовой стрелке
    digitalWrite(directionPin, HIGH);

    // Делаем 20 шагов
    for (int i = 0; i < 200; ++i) {
    // Делаем шаг
    digitalWrite(stepPin, HIGH);
    delay(delayTime);

    digitalWrite(stepPin, LOW);
    delay(delayTime);
    }

    //... на три секунды
    delay(3000);

    // Отключаем двигатель
    digitalWrite(enablePin, LOW);

    // Ничего не делаем до перезагрузки

    while (true) {
    ;
    }

    }




    Соответственно где найти информацию, для добавления кнопки в программу?
     
  4. Tomasina

    Tomasina Сушитель лампочек Модератор

    Код (C++):
    // Troyka-Stepper подключён к следующим пинам:
    const byte stepPin = 7;
    const byte directionPin = 8;
    const byte enablePin = 11;
    const byte buttonPin = 2; // кнопка подключается между пином и GND

    // Выдержка для регулировки скорости вращения
    unsigned int delayTime = 20;

    void setup()
    {
      // Настраиваем нужные контакты на вход и выход
      pinMode(buttonPin, INPUT_PULLUP);
      pinMode(stepPin, OUTPUT);
      pinMode(directionPin, OUTPUT);
      pinMode(enablePin, OUTPUT);
      // Отключаем двигатель
      digitalWrite(enablePin, LOW);
    }

    void loop()
    {
      // если кнопка нажата
      if(!digitalRead(buttonPin))
      {
        // Подаём питание на двигатель
        digitalWrite(enablePin, HIGH);

        // Задаём направление вращения по часовой стрелке
        digitalWrite(directionPin, HIGH);

        // Делаем 20 шагов
        for (int i = 0; i < 200; ++i)
        {
          // Делаем шаг
          digitalWrite(stepPin, HIGH);
          delay(delayTime);

          digitalWrite(stepPin, LOW);
          delay(delayTime);
        }

        //... на три секунды
        delay(3000);

        // Отключаем двигатель
        digitalWrite(enablePin, LOW);
      }
    }
     
    Skiffest нравится это.
  5. Sindbad

    Sindbad Гик

  6. Skiffest

    Skiffest Нуб

    Все, разобрался. Большое спасибо.
     
  7. Skiffest

    Skiffest Нуб

    Немного пришлось переделать проект. Теперь использую motor-shield

    Код (C++):
    #include <StepperAmperka.h>
    const byte buttonPin = 2; // кнопка подключается между пином и GND
    // Параметр конструктора — количество шагов на 1 оборот.
    // Фикированная характеристика используемого шагового двигателя
    StepperAmperka motor = StepperAmperka(200);

    // Если использовать Motor Shield на нестандартных пинах,
    // конструктор будет выглядеть иначе.
    // Например, для пинов 8, 9, 10, 11 конструктор будет таким:
    // StepperAmperka motor = StepperAmperka(200, 8, 9, 10, 11);
    void setup()
    {
      // Устанавливаем скорость вращения 30 оборотов в минуту.
      motor.setSpeed(30);
      pinMode(buttonPin, INPUT_PULLUP);
    }
    void loop()
    {
      // если кнопка нажата
      if(!digitalRead(buttonPin))
    {
      // 180° по часовой стрелке в двуфазном режиме
      motor.step(200, FULL_STEP);
      delay(1000);
     
      }
    }
    Взято из проекта. Как в данном случае отключить двигатель после завершения цикла?
     
  8. Skiffest

    Skiffest Нуб

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