Прошу помощи с скетчем, без бросания тапками!

Тема в разделе "Закажу проект", создана пользователем YuriiOd, 4 окт 2019.

  1. YuriiOd

    YuriiOd Нерд

    Имеется готовый (с технической части) проект манипулятора. Если с техникой на короткой ноге, то вот с программным обеспечением возникли трудности. Манипулятор базируется на шаговых двигателях 28BYJ-48. На просторах интернета был взят вот этот скетч:
    Код (C++):
    // подключение библиотеки
    #include<AccelStepper.h>
    #define HALFSTEP 8  
    // Инициализируемся с последовательностью выводов IN1-IN3-IN2-IN4
    // для использования AccelStepper с 28BYJ-48
    AccelStepper stepper1(HALFSTEP, 8, 10, 9, 11);

    // клавиши выбора режима
    int pinButtons[]={5,6,7};
    int lastButtons[]={0,0,0};
    int currentButtons[]={0,0,0};
    //
    boolean go=false;

    void setup(){
       Serial.begin(9600);
      stepper1.setMaxSpeed(1000.0);
      stepper1.setAcceleration(100.0);
      stepper1.setSpeed(-500);
    }

    void loop() {
      // проверка нажатия кнопок выбора программ
      for(int i=0;i<3;i++) {
         currentButtons[i] = debounce(lastButtons[i],pinButtons[i]);
         // если нажатие...
         if (lastButtons[i] == 0 && currentButtons[i] == 1) {
            switch(i) {
               case 0:   // против часовой
                     stepper1.setSpeed(500);
                     go=true;
                     Serial.println("CW");
                  break;    
               case 1:   // стоп
                     stepper1.stop();
                     go=false;
                     Serial.println("stop");
                  break;    
               case 2:   // по часовой
                     stepper1.setSpeed(-500);
                     go=true;
                     Serial.println("CCW");
                  break;    
               default:  
                  break;
            }  
         }  
         lastButtons[i] = currentButtons[i];
      }
      if(go==true)            
         stepper1.runSpeed();                            

    }
    // Функция сглаживания дребезга
    int debounce(int last,int pin1){
      int current = digitalRead(pin1);   // Считать состояние кнопки
      if (last != current)                     // если изменилось...
        {
        delay(5);                              // ждем 5мс
        current = digitalRead(pin1);         // считываем состояние кнопки
        return current;                        // возвращаем состояние кнопки
        }
      }

     
    Он работает, но там 3 двигателя, то бишь нужно еще добавить управление 2 двигателями и одной сервой. Пробовал править, добавить еще 2 двигателя на другие пины (использую Мегу 2560), но не получается.
    Помогите пожалуйста подсказками.
    (Желающие покидаться тапками, да я знаю нужно учить мат часть и все такое, но затея эта с благими намерениями, дабы заинтересовать робототехникой детей в школе, сам выучить все физически не успеваю. Спасибо за понимание).
     
  2. Asper Daffy

    Asper Daffy Иксперд

    Тапками кидаться ты запретил, пива не ставишь, вот скажи, какой интерес тебе что-то советовать и с тобой возиться? Мотивация-то какова?

    И, да, этот скетч не будет нормально работать на 2 и более моторов. Надо не добавлять, а переписывать, в частности, избавляться от delay.
     
    Daniil, DetSimen и NikitOS нравится это.
  3. ostrov

    ostrov Гуру

    1. Используйте уже готовые драйверы для шаговиков,где импульсом шаг, а комбинацией направление и размер этого шага. Избежите лишних сложностей, рывков и глюков.
    2. Избавьтесь от delay даже на 5 мс.
     
  4. vvr

    vvr Инженерище

    Для начала продумайте и распишите ваш алгоритм управления манипулятором.
    Прикиньте свои финансовые возможности для этого проекта и озвучьте.
    Тогда народ или возмется или что то посоветует или озвучит за сколько сделают.
     
  5. YuriiOd

    YuriiOd Нерд

    Насчет пива, я не отказывался! Понимаю что за спасибо ничего не бывает!)
     
  6. YuriiOd

    YuriiOd Нерд

    Алгоритм работы без цыклов, то бишь просто движение по нажатию кнопки на пульте. Пульт по 3 кнопки на каждый двигатель (стоп, лево (перед), (назад) право) и энкодер для управления сервоприводом на захвате.
    Составные, манипулятор взят вот тут: https://www.thingiverse.com/thing:2838859
    Есть ардуины всех моделей: Mega 2560, Uno, Nano. Двигатели шаговые 28BYJ-48, сервоприводы.
    Финансовые возможности не большие, делается на энтузиазме, дабы заинтересовать подрастающие поколения. Манипулятор будет показываться в школе на уроках информатики.
    Но как я уже писал, понимаю что за просто так ничего не бывает. В пределах разумного разумеется.
     
  7. YuriiOd

    YuriiOd Нерд

    Использую драйвера которые в комплекте с шаговиками, других нету увы. За совет спасибо, попробую сделать!)
     
  8. vvr

    vvr Инженерище

    к сожалению это ну никак не алгоритм работы вашего манипулятора.
    у вас движение вперёд-назад сложное. участвуют два мотора.

    для вас самый простой способ-посидеть вечерок в гуглях и найти готовую программу.
    раз на видео всё работает, значит есть.....
     
  9. Mable

    Mable Нерд

    Напишите мне mable@mail.ru, https://t.me/Mr_Mable
    Сделаем вашего робота умным и ловким.
     
  10. Mable

    Mable Нерд

  11. YuriiOd

    YuriiOd Нерд

    Спасибо большое за помощь! Такую ответственность в подходе к работе в наше время трудно встретить! Манипулятор теперь работает как швейцарские часы)))