Программа управления шаговым двигателем для жалюзи

Тема в разделе "Arduino & Shields", создана пользователем duke_nuke, 9 мар 2019.

  1. duke_nuke

    duke_nuke Нуб

    Собственно... Рыл инет - но не нашел. Задача - Нажал кнопку - ШД вращается в одну сторону пока не нажата снова кнопка или не поступил сигнал с геркона - тогда двиг останавливается - это для закрытия/открытия штор.
    Прошу помощи...
     
  2. ostrov

    ostrov Гуру

    Точно рыл интернет? Или это были папки на собственном компе? Если ссылка не поможет, то в "Закажу проект" предварительно зажав в кулак денюжку..
     
    Daniil нравится это.
  3. duke_nuke

    duke_nuke Нуб

    "В этой статье мы с вами узнали, что такое шаговый двигатель, как можно его подключить к ардуино, что такое драйвер шагового двигателя"

    А ты точно ПРОЧИТАЛ, о чем я помощи просил??
     
  4. duke_nuke

    duke_nuke Нуб

    Уважаемые форумчане, Я не прошу сготовить для меня готовую прогу - лишь общий пример, так сказать, направить в нужное русло. Чтобы ШД во время своей работы реагировал на внешние команды.
    Спасибо за понимание
     
  5. DetSimen

    DetSimen Guest

    Не помогло.
     
  6. DetSimen

    DetSimen Guest

    Тогда начни со светлодиодика, кнопки и синтаксиса языка.
     
    ostrov и Daniil нравится это.
  7. a1000

    a1000 Гуру

    В предложенной вам ссылке есть есть тот самый "общий пример". Замените команду с Serial на обработку нажатия кнопки и добавьте Стоп - всё готово.
     
    ostrov и Daniil нравится это.
  8. b707

    b707 Гуру

    искать в интернете "управление шаговым двигателем с помощью кнопок"
    Примеров много.
    Но не стоит рассчитывать, что найдешь вот прямо то, что нужно тебе. Придется немного поправить. За готовым - в платный раздел.
     
  9. parovoZZ

    parovoZZ Гуру

    А шаговик для жалюзи - это прям такая необходимость? Другой никак не поставить?
     
  10. duke_nuke

    duke_nuke Нуб

    Вот набросал код. Но там при нажатии двиг вращается в одном выбранном направлении. А мне надо чтобы в любое время я смог или остановить его или направить противоположно...
    Код (C++):
    /*

       #include<AccelStepper.h>
       
       #define IN1 8
       #define IN2 9
       #define IN3 10
       #define IN4 11

       AccelStepper Stepper1(4, IN1, IN3, IN2, IN4);

       // клавиши выбора режима

       int pinBut []={5,6,7};
       int lBut []={0,0,0};
       int cBut[]={0,0,0};

       //

       boolean go=false;

       void setup(){

       Stepper1.setMaxSpeed(1000);
       Stepper1.setAcceleration(100);
       Stepper1.setSpeed(-500);

       Serial.begin(9600);

         pinMode(pinBut, INPUT_PULLUP);   // включаем внутренний подтягивающий резистор

      }
     
       void loop() {

       // проверка нажатия кнопок

       for(int i=0;i<3;i++) {
       cBut[i] = deb(lBut[i],pinBut[i]);

        // если нажатие...

            if (lBut[i] == 0 && cBut[i] == 1) {

               switch(i) {

                  case 0:   // по часовой
                   
                      Stepper1.setSpeed(500);

                        go=true;

                        Serial.println("Вращение по часовой");

                     break;  

                  case 1:   // стоп

                        Stepper1.stop();
                        go=false;

                        Serial.println("stop");

                     break;  

                  case 2:   // против часовой
                     
                        Stepper1.setSpeed(-500);
                       
                        go=true;

                        Serial.println("Вращение против часовой");

                     break;  

                  default:

                     break;

               }  

            }  

            lBut[i] = cBut[i];

       }

       if(go==true)            
            Stepper1.runSpeed();                              

       }

       // устранение дребезга

       int deb (int l,int pin){
       int c = digitalRead(pin);
       if (l != c) { // если изменение
           delay(5);                          
           c = digitalRead(pin);      
           return c;                    
        }

       }
     
  11. duke_nuke

    duke_nuke Нуб

    Что есть под рукой...
     
  12. ostrov

    ostrov Гуру

    То есть разобраться как шаговик работает никак? Даже с библиотекой? Хотя она нафиг не нужна, зная как стоят катушки подавай в них импульсы хоть шагами хоть полушагами в любом направлении. Есть в Амперкиной вики пример, кстати, без библиотеки, но с ошибкой.
     
  13. a1000

    a1000 Гуру

    Тогда возникают большие сомнения в том, что это ваш код. В нём предусмотрено три кнопки. Одна крутит в одну сторону, другая - стоп, третья в другую сторону. Или вы забыли что писали?
     
  14. ostrov

    ostrov Гуру

    Кошак прав, при возникновении вопросов "как реагировать на нажатие кнопки", следует начинать отсюда. А никак не наезжать на уважаемых людей за то, что не кинулись писать код с подробными построчными разъяснениями.
     
    Последнее редактирование: 10 мар 2019
  15. duke_nuke

    duke_nuke Нуб

    Я сказал что это "мой код" ??
    Я его немного адаптировал под свою задачу.


    Мне нужно больше кнопок, но я вопрос задал с минимумом условий
     
    Последнее редактирование: 10 мар 2019
  16. ostrov

    ostrov Гуру

    На этом прения можно заканчивать, я считаю.
     
  17. duke_nuke

    duke_nuke Нуб

    Как шаговик работает я знаю.
    Я не пойму как во время работы шаговика вставить прерывание для опроса сигнала кнопок (ну или срабатывания геркона, что, в сущности, все равно).
    Пока работает шаговик у меня не работает опрос кнопок.
     
  18. b707

    b707 Гуру

    Ну как. Можно и правда прерывание вставить.
    А можно и без прерываний...
    Общий принцип такой - если вам надо шаговиком сделать 100 шагов - не делайте 100 разом. Иначе пока мотор не прошагает - кнопки вы опросить не сможете.
    Вместо того чтоб делать 100 шагов - делайте один. Один шаг прошагали - после этого проверили кнопку. Потом еще шаг - и снова кнопка.
    И так сто раз.
     
  19. ostrov

    ostrov Гуру

    Нет, я тут не зарабатываю. И сомневаюсь что кто то зарабатывает этим вообще.
     
  20. duke_nuke

    duke_nuke Нуб

    Спасибо Вам.
    Коротко и понятно :)