Arduino и шаговый двигатель 28BYJ-48

Что такое шаговый двигатель? Название говорит само за себя: двигатель, который может не просто “крутиться”, а крутиться размеренно, управляемо… шагами! То есть, мы сами в программе “говорим” ему, на какой угол нужно повернуться. Для чего это может понадобиться? Например, вы хотите собрать свой станок с ЧПУ, 3d принтер… или любое другое устройство, которое нуждается в точном позиционировании движущихся частей. Подробнее о шаговых двигателях можно почитать в википедии.

step_motor_3

 

Существует огромное разнообразие шаговых двигателей различных размеров и характеристик. Чтобы управлять ими нужно специальное устройство – драйвер.

step_motor_4

В этой статье мы будем использовать:

Итак, задача: подключить к arduino uno шаговый двигатель и покрутить им.

Казалось бы, количество проводов, идущих к двигателю, может ввести в ступор, зачем так много и куда все это втыкать? На самом деле, ничего сложного ни в подключении, ни в коде. И сейчас мы с вами в этом убедимся!

Подключаем двигатель к драйверу, а драйвер, в свою очередь к плате arduino к цифровым пинам 2, 3, 4, 5 и к питанию (5В) как показано на фото.

step_conn

Настоятельно рекомендую в своих проектах использовать отдельное питание для двигателя (от другого блока питания, а не от arduino), потому как если дать серьезную нагрузку на двигатель – на плате arduino может перегреться микросхема, отвечающая за питание – что не есть хорошо!

step_motor_1

Чтобы управлять двигателем, воспользуемся библиотекой Stepper, которую не нужно ни от куда качать – она входит в поставку Arduino IDE – среду разработки, в которой мы пишем код для arduino. В качестве параметров передаем количество шагов полного оборота и пины, к которым подключаем двигатель.

Stepper myStepper(2048,2,3,4,5);

Методом setSpeed() можно управлять скоростью, а step() отвечает за перемещение вала на заданное количество шагов (если значение отрицательное – вал крутится в обратную сторону).

Полный код программы:

#include   <Stepper.h>
 
Stepper myStepper(2048,2,3,4,5);
 
void setup() {
  myStepper.setSpeed(10);
}
 
void loop() {
 
  myStepper.step(2048);
  delay(1000);  
  myStepper.step(-2048);
  delay(1000);
}

Небольшое замечание по драйверу. Плата согласования Arduino и шагового двигателя на основе UNL2003A имеет всего одну перемычку, которая замыкает 3 и 4 выводы. Данная перемычка подаёт питание на светодиоды. Если на шаговый двигатель подаётся питание +5 В (как в нашем случае), то данная перемычка позволяет наблюдать за переключением выводов управления шаговым двигателем. Если для кого-то важен потребляемый ток (например, для увеличения времени работы от батареи) и не нужна индикация, то перемычку можно смело снимать.

Вот и видео того, что получилось.

Удачных экспериментов!

Возможно, вам потребуются файлы:

15 thoughts on “Arduino и шаговый двигатель 28BYJ-48

  1. baspav says:

    Здравствуйте. Вопрос: Будет ли работать такой вариант с двумя UNL2003A и двумя шаговиками 28BYJ-48

    #include

    Stepper_28BYJ Stepper1(2048,6,7,8,9);
    Stepper_28BYJ Stepper2(2048,10,11,12,13);
    void setup() {
    Stepper1.setSpeed(10);
    Stepper2.setSpeed(10);
    }

    void loop() {

    Stepper1.step(2048);
    delay(1000);
    Stepper1.step(-2048);
    delay(1000);
    Stepper2.step(1024);
    delay(1000);
    Stepper2.step(-1024);
    delay(1000);

    }
    Библиотека взята отсюда:
    http://robot-kit.ru/article_info.php/articles_id/21/article/-font-color—993300–Podklyuchenie-shagovogo-dvigatelya-28BYJ-48-5V-k-Arduino–font-

  2. Дмитрий says:

    Снял перемычку, чтобы потушить светодиоды, но вместе с ними перестал работать двигатель.

    • Андрей says:

      Взял другой скетч – получилось. А как сделать чтобы движок управлялся с кнопок? Одна крутит по часовой, другая против???

      • Павел Проценко says:

        #include
        // изменить количество шагов для вашего мотора
        #define STEPS 4078
        Stepper_28BYJ stepper(STEPS, 2, 3, 4, 5);
        int but = 0;
        int butl = 8;
        int butr = 9;
        void setup()
        {
        // установим скорость вращения 3 об/мин
        stepper.setSpeed(5);
        pinMode(butl, INPUT);
        pinMode(butr, INPUT);
        }
        void loop()
        {
        if(digitalRead(butl) == HIGH){
        but = 1;
        delay(100);
        }
        if(digitalRead(butr) == HIGH){
        but = 2;
        delay(100);
        }

        switch (but){
        case 1:
        stepper.step(STEPS);
        but = 0;
        break;
        case 2:
        stepper.step(-STEPS);
        but = 0;
        break;
        }
        }

  3. Дмитрий says:

    Чтобы использовать встроеную библиотеку в Arduino IDE и мотор не крутился в одну сторону нужно поменять местами 2 и 3 контакты.

Добавить комментарий