Микроконтроллеры и их сложные алгоритмы работы хороши лишь в тех случаях, когда они не только виртуально выполняют поставленные перед ними задачи, но и в состоянии управлять какими-то физическими процессами. Ведь сами посудите, какой смысл в пустых вычислениях, разве что жечь электричество и греть комнату. Но это больше похоже на действия криптовалютчиков и безумцев, нас же интересует исключительно прагматический подход. Так вот, в сегодняшней статье мы поговорим о том, как сигналы с Ардуино преобразовать в управляющие сигналы для шагового двигателя. То есть, проще говоря, как подключить шаговый двигатель к Ардуино. Начнем!

 Для того чтобы все работала необходимо подключить Ардуино физически к двигателю, - это раз. И второе, это прошить Ардуино, чтобы все работала так, как нам надо, то есть как раз выполнялись те самые алгоритмы, про которые мы начинали наш разговор. Начнем с подключений.

Аппаратное подключение шагового двигателя к Ардуино

 Собственно подключение будет впоследствии еще определяться и программно, так что скажем так… На необходимо обеспечить питание для Ардуино и определиться с выходами для шагового двигателя. Так как в нашем шаговом двигателе 28byj-48 всего 4 обмотки, то и выхода будет 4. То есть мы будем по определенному плану, а еще вернее точнее в сторону вращения вала,  питать обмотки одна за другой и тем самым двигатель будет вращаться. Для того чтобы наш Ардуино не сгорел с шаговым двигателем обычно используется микросхема UNL 2003APG, блок - ключей на транзисторах Дарлингтона. По идее это блок, который позволяет работать с высокими токами обмотки не на прямую, а через транзисторы. Что сможет сберечь нашу Ардуинку от возможных поломок, то есть простого сгорания, от высоких и индукционных токов. Однако некоторые умельцы умудряются подключить шаговый двигатель к Ардуино и напрямую. Что не рекомендуем, но это работает. Итак, в итоге взгляните на схему, на первый вариант.

 

Здесь X113647 и есть та самая плата, где установлен блок - ключей.

Заметьте, что питание обеспечивается именно для блока ключей мощным и отдельным источником.  Само собой еще есть питание и для Ардуино, но не через Ардуино. То есть с Ардуино идут лишь управляющие сигналы на x113647, а силовые исполнительные сигналы формируются уже от платы x113647, которая запитана от источника питания.
 Иногда питают плату x113647 сразу от Ардуино. В этом случае получается задействован штатный ардуиновский стабилизатор. Вроде как ничего страшного, но до поры до времени. Если двигатель работает урывками и если он не мощный. В общем, вторая схема тоже имеет право на жизнь, но так скажем в случае периодического подключения двигателя, а не его постоянной работы. Смотрим.


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


 
Сколько это все проработает известно одному богу, но так лучше не делайте!
 Впрочем, теперь зато можно с полной уверенностью сказать, что мы до вас довели все варианты возможных подключений. Теперь переходим к скетчам под шаговый двигатель для Ардуино.

Программное обеспечение для подключения шагового двигателя к Ардуино

 Здесь как и с подключением возможно несколько вариантов того, как же можно оживить наш шаговый двигатель через Ардуинку.  Самое простое это выбрать любые 4 ножки и на них подавать сигналы. То есть сделать все максимально просто, без привлечения библиотек и всего такого. Будет вот такой код.

int in1 = 2;
int in2 = 3;
int in3 = 4;
int in4 = 5;
const int dl = 1000;

void setup() {
  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);
  pinMode(in3, OUTPUT);
  pinMode(in4, OUTPUT);
}

void loop() {
  digitalWrite( in1, LOW );
  digitalWrite( in2, LOW );
  digitalWrite( in3, HIGH );
  digitalWrite( in4, HIGH );
  delay(dl);

  digitalWrite( in1, LOW );
  digitalWrite( in2, LOW );
  digitalWrite( in3, HIGH );
  digitalWrite( in4, LOW );
  delay(dl);

  digitalWrite( in1, LOW );
  digitalWrite( in2, HIGH );
  digitalWrite( in3, HIGH );
  digitalWrite( in4, LOW );
  delay(dl);

  digitalWrite( in1, HIGH );
  digitalWrite( in2, HIGH );
  digitalWrite( in3, LOW );
  digitalWrite( in4, LOW );
  delay(dl);

  digitalWrite( in1, HIGH );
  digitalWrite( in2, LOW );
  digitalWrite( in3, LOW );
  digitalWrite( in4, LOW );
  delay(dl);

  digitalWrite( in1, HIGH );
  digitalWrite( in2, LOW );
  digitalWrite( in3, LOW );
  digitalWrite( in4, HIGH );
  delay(dl);

  digitalWrite( in1, LOW );
  digitalWrite( in2, LOW );
  digitalWrite( in3, LOW );
  digitalWrite( in4, HIGH );
  delay(dl);
}


Собственно его описывать то особо нечего. По порядку подается напряжение на выбранные ножки (2,3,4,5), при этом для dl можно задать другое время от 1 и выше, в этом случае изменить скорость вращения.
 Второй же вариант с программами подразумевает использование библиотеки. Библиотека эта не та, куда мы привыкли ходить за книжками, а можно сказать некое программное облако, которое содержит в себе определенные режимы работы для определенных устройств. В частности для нашего шагового двигателя. Так вот, чтобы менять режимы работа оперативно, то есть скажем скорость вращения или направление, здесь достаточно будет поменять 1 строчку или цифру, а не переписывать  почти все, как в первом примере. Но здесь эту библиотеку еще надо будет установить. Фактически вы просто скачиваете папку у нас ЗДЕСЬ (архив) для шагового двигателя, разархивируете его и скинете на ваш компьютер где у вас стоит программа Arduino. В моем случае это -   C:\Program Files (x86)\Arduino\libraries\Stepper
Собственно все, у вас появиться теперь возможность перейти в примеры, потом в stepper и вы можете выбрать готовый скетч. Мы даже приводить скетч не будем, так как он все равно не будет работать без библиотеки, а при ее установке все примеры у вас появятся сами собой.

Собственно всю эту информацию можно считать полной. И если вы все выполните, то ваш шаговый двигатель оживет.

Возможные проблемы при подключении шагового двигателя к Ардуино

1 Проблема.
Если при заливке скетча выскочет ошибка типа Неверная библиотека найдена в C:\Program Files (x86)\Arduino\libraries\biblioteka-i-primery-stepper_28byj-stepper_28byj: C:\Program Files (x86)\Arduino\libraries\biblioteka-i-primery-stepper_28byj-stepper_28byj То у вас значит не установлена библиотека.
2 Проблема
Микросхема UNL 2003APG вполне может накрыться, если вы перепутаете полярность при питании. Если она накроется, то светодиоды на плате x113647 перестанут мигать в определенной последовательности и двигатель может немного подергиваться, но не будет вращаться.

Придется менять микросхему, не зря она установлена (как правило) в съемные колодки. Видимо у нее это бывает часто.

Видео о том, как подключить шаговый двигатель к Ардуино