1. Один оберт
Драйвер сам перемикає обмотки. Arduino лише дає імпульси на STEP: один імпульс — один крок 1,8°. 200 імпульсів — повний оберт.
- Відкрий новий проєкт Arduino Uno у Wokwi.
- Заміни diagram.json файлом кроку.
- Заміни sketch.ino скетчем кроку.
- Натисни ▶.
- Дивись на стрілку двигуна й кут під нею.
Підключення
| Контакт | Куди з’єднати |
|---|
| Uno D4 | A4988 STEP |
| Uno D3 | A4988 DIR |
| A4988 RESET | A4988 SLEEP |
| A4988 VDD | Uno 5V |
| A4988 GND | Uno GND |
| A4988 2B і 2A | Двигун A− і A+ |
| A4988 1A і 1B | Двигун B+ і B− |
Файли для Wokwi
Відкрий новий Arduino Uno. Заміни sketch.ino і diagram.json файлами кроку. Бібліотеки не потрібні. Натисни ▶.

Повний код цього кроку
#include <Arduino.h>
const byte STEP_PIN = 4; // PUL+ на TB6600, STEP на A4988 у Wokwi
const byte DIR_PIN = 3; // DIR+ на TB6600
const int STEPS_PER_REV = 200; // Повний крок: 1,8° на крок
const unsigned int STEP_US = 5000; // 200 кроків × 5 мс = 1 оберт за секунду
void stepOnce(unsigned int pauseUs) {
digitalWrite(STEP_PIN, HIGH); // Короткий імпульс — один крок
delayMicroseconds(10);
digitalWrite(STEP_PIN, LOW);
delayMicroseconds(pauseUs);
}
void setup() {
pinMode(STEP_PIN, OUTPUT);
pinMode(DIR_PIN, OUTPUT);
Serial.begin(115200);
}
void loop() {
Serial.println("One turn");
for (int i = 0; i < STEPS_PER_REV; i++) {
stepOnce(STEP_US);
}
Serial.println("Pause");
delay(1000);
}
Очікуваний результат
Стрілка робить повний оберт приблизно за секунду, потім стоїть 1 с. У моніторі One turn і Pause.
Перевір себе
200 кроків × 5 мс = 1 с на оберт.
Що можна змінити
STEP_US: 10000 — оберт за 2 с.
Якщо не працює
Стрілка не рухається — перевір, що RESET з’єднаний із SLEEP і STEP іде на D4.
2. Напрямок
Пін DIR не рухає двигун, а лише задає напрямок наступних кроків: HIGH — в один бік, LOW — в інший.
- Заміни код скетчем кроку 2.
- Запусти симуляцію.
- Порівняй рух стрілки з DIR HIGH і DIR LOW.
Підключення
| Контакт | Куди з’єднати |
|---|
| Uno D4 | A4988 STEP |
| Uno D3 | A4988 DIR |
| A4988 RESET | A4988 SLEEP |
| A4988 VDD | Uno 5V |
| A4988 GND | Uno GND |
| A4988 2B і 2A | Двигун A− і A+ |
| A4988 1A і 1B | Двигун B+ і B− |
Файли для Wokwi
Відкрий новий Arduino Uno. Заміни sketch.ino і diagram.json файлами кроку. Бібліотеки не потрібні. Натисни ▶.

Повний код цього кроку
#include <Arduino.h>
const byte STEP_PIN = 4; // PUL+ на TB6600, STEP на A4988 у Wokwi
const byte DIR_PIN = 3; // DIR+ на TB6600
const int STEPS_PER_REV = 200; // Повний крок: 1,8° на крок
const unsigned int STEP_US = 5000;
void stepOnce(unsigned int pauseUs) {
digitalWrite(STEP_PIN, HIGH); // Короткий імпульс — один крок
delayMicroseconds(10);
digitalWrite(STEP_PIN, LOW);
delayMicroseconds(pauseUs);
}
void setup() {
pinMode(STEP_PIN, OUTPUT);
pinMode(DIR_PIN, OUTPUT);
Serial.begin(115200);
}
void loop() {
digitalWrite(DIR_PIN, HIGH);
Serial.println("DIR HIGH");
for (int i = 0; i < STEPS_PER_REV; i++) {
stepOnce(STEP_US);
}
delay(1000);
digitalWrite(DIR_PIN, LOW); // Інший рівень DIR — інший напрямок
Serial.println("DIR LOW");
for (int i = 0; i < STEPS_PER_REV; i++) {
stepOnce(STEP_US);
}
delay(1000);
}
Очікуваний результат
DIR HIGH — стрілка робить оберт за годинниковою стрілкою, DIR LOW — оберт назад.
Перевір себе
Після двох обертів стрілка на тому самому місці.
Що можна змінити
Зроби в одному напрямку 400 кроків, а в іншому 200.
Якщо не працює
Двигун крутиться лише в один бік — перевір дріт DIR на D3.
3. Частина оберту
Функція turnSteps() приймає кількість кроків зі знаком: плюс — DIR HIGH, мінус — DIR LOW. 50 кроків — чверть оберту, 100 — половина.
- Заміни код скетчем кроку 3.
- Запусти симуляцію.
- Перевір кут під стрілкою після кожного руху.
Підключення
| Контакт | Куди з’єднати |
|---|
| Uno D4 | A4988 STEP |
| Uno D3 | A4988 DIR |
| A4988 RESET | A4988 SLEEP |
| A4988 VDD | Uno 5V |
| A4988 GND | Uno GND |
| A4988 2B і 2A | Двигун A− і A+ |
| A4988 1A і 1B | Двигун B+ і B− |
Файли для Wokwi
Відкрий новий Arduino Uno. Заміни sketch.ino і diagram.json файлами кроку. Бібліотеки не потрібні. Натисни ▶.

Повний код цього кроку
#include <Arduino.h>
const byte STEP_PIN = 4; // PUL+ на TB6600, STEP на A4988 у Wokwi
const byte DIR_PIN = 3; // DIR+ на TB6600
const int STEPS_PER_REV = 200; // Повний крок: 1,8° на крок
const unsigned int STEP_US = 5000;
void stepOnce(unsigned int pauseUs) {
digitalWrite(STEP_PIN, HIGH); // Короткий імпульс — один крок
delayMicroseconds(10);
digitalWrite(STEP_PIN, LOW);
delayMicroseconds(pauseUs);
}
void turnSteps(long steps) {
digitalWrite(DIR_PIN, steps > 0 ? HIGH : LOW); // Знак — напрямок
for (long i = 0; i < abs(steps); i++) {
stepOnce(STEP_US);
}
}
void setup() {
pinMode(STEP_PIN, OUTPUT);
pinMode(DIR_PIN, OUTPUT);
Serial.begin(115200);
}
void loop() {
Serial.println("Quarter: 50 steps");
turnSteps(50);
delay(1000);
Serial.println("Half: 100 steps");
turnSteps(100);
delay(1000);
Serial.println("Back: -150 steps");
turnSteps(-150);
delay(2000);
}
Очікуваний результат
Кут 90°, потім 270°, потім знову 0°. У моніторі Quarter, Half, Back.
Перевір себе
50 + 100 − 150 = 0: двигун повертається на старт.
Що можна змінити
turnSteps(25) — поворот на 45°.
Якщо не працює
Кут не 90° — перевір STEPS_PER_REV = 200 і повний крок.
4. Справжній NEMA17
TB6600 отримує ті самі сигнали через оптрони: PUL+ — від D4, DIR+ — від D3, «мінуси» — на GND Uno. Двигун живиться від блоку 12 В.
- Блок 12 В вимкнений із мережі.
- Двигун і 12 В підключені за уроком 18.2.
- З’єднай Uno і TB6600 за таблицею.
- Наклей на вал прапорець зі скотчу.
- Підключи Uno до комп’ютера й завантаж скетч.
- Увімкни блок 12 В.
- Перевір кути: чверть, половина, назад.
- Вимкни блок 12 В.
Підключення
| Контакт | Куди з’єднати |
|---|
| Блок 12 В «+» | TB6600 +V (VCC) |
| Блок 12 В «−» | TB6600 GND |
| Перша обмотка двигуна | TB6600 A+ і A− |
| Друга обмотка двигуна | TB6600 B+ і B− |
| Uno D4 | TB6600 PUL+ |
| Uno D3 | TB6600 DIR+ |
| TB6600 PUL− і DIR− | Uno GND |
| TB6600 ENA+ і ENA− | Не підключаємо — драйвер увімкнений |
Скетч для справжньої плати
Це той самий код, що й у попередньому кроці. Відкрий його в Arduino IDE, вибери плату Arduino Uno і завантаж.
Повний код цього кроку
#include <Arduino.h>
const byte STEP_PIN = 4; // PUL+ на TB6600, STEP на A4988 у Wokwi
const byte DIR_PIN = 3; // DIR+ на TB6600
const int STEPS_PER_REV = 200; // Повний крок: 1,8° на крок
const unsigned int STEP_US = 5000;
void stepOnce(unsigned int pauseUs) {
digitalWrite(STEP_PIN, HIGH); // Короткий імпульс — один крок
delayMicroseconds(10);
digitalWrite(STEP_PIN, LOW);
delayMicroseconds(pauseUs);
}
void turnSteps(long steps) {
digitalWrite(DIR_PIN, steps > 0 ? HIGH : LOW); // Знак — напрямок
for (long i = 0; i < abs(steps); i++) {
stepOnce(STEP_US);
}
}
void setup() {
pinMode(STEP_PIN, OUTPUT);
pinMode(DIR_PIN, OUTPUT);
Serial.begin(115200);
}
void loop() {
Serial.println("Quarter: 50 steps");
turnSteps(50);
delay(1000);
Serial.println("Half: 100 steps");
turnSteps(100);
delay(1000);
Serial.println("Back: -150 steps");
turnSteps(-150);
delay(2000);
}
Очікуваний результат
Прапорець повертається на чверть, ще на половину й назад на старт.
Перевір себе
Після кількох циклів прапорець не зміщується: кроки не губляться.
Що можна змінити
Поміняй місцями дроти A+ і A− (при вимкненому живленні): напрямок зміниться.
Якщо не працює
Двигун гуде й смикається на місці — перевір пари обмоток. Нічого не відбувається — перевір PUL− і DIR− на GND Uno та ENA не підключений.