1. Поворот на градуси
Один крок — 1,8°, тож 90° = 50 кроків. Функція rotateDegrees() рахує це сама. Кнопка на схемі знадобиться в наступному кроці.
- Відкрий новий проєкт 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− |
| Uno D7 | Кнопка, правий верхній контакт |
| Кнопка, правий нижній контакт | Uno GND |
Файли для 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 = 3000;
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 rotateDegrees(long degrees) {
turnSteps(degrees * STEPS_PER_REV / 360); // 360° — повний оберт
}
void setup() {
pinMode(STEP_PIN, OUTPUT);
pinMode(DIR_PIN, OUTPUT);
Serial.begin(115200);
}
void loop() {
for (byte i = 0; i < 4; i++) {
Serial.println("+90");
rotateDegrees(90);
delay(700);
}
Serial.println("-360");
rotateDegrees(-360);
delay(2000);
}
Очікуваний результат
Чотири повороти по 90°: 90, 180, 270, 0. Потім повний оберт назад.
Перевір себе
Кут 90° = 90 × 200 / 360 = 50 кроків.
Що можна змінити
rotateDegrees(45): вісім рухів на повний оберт.
Якщо не працює
Кут не кратний 90° — перевір STEPS_PER_REV = 200.
2. Кнопка «+90°»
Кнопка з’єднує D7 із GND. Скетч реагує лише на момент натискання: утримання не крутить двигун безкінечно.
- Заміни код скетчем кроку 2.
- Запусти симуляцію.
- Натисни кнопку один раз.
- Натисни й утримуй кнопку.
Підключення
| Контакт | Куди з’єднати |
|---|
| 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− |
| Uno D7 | Кнопка, правий верхній контакт |
| Кнопка, правий нижній контакт | Uno GND |
Файли для 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 = 3000;
const byte BUTTON_PIN = 7; // Кнопка між D7 і GND
const int TURN_DEGREES = 90;
bool wasPressed = false;
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 rotateDegrees(long degrees) {
turnSteps(degrees * STEPS_PER_REV / 360); // 360° — повний оберт
}
void setup() {
pinMode(STEP_PIN, OUTPUT);
pinMode(DIR_PIN, OUTPUT);
pinMode(BUTTON_PIN, INPUT_PULLUP); // Не натиснута — HIGH, натиснута — LOW
Serial.begin(115200);
}
void loop() {
bool pressed = digitalRead(BUTTON_PIN) == LOW;
if (pressed && !wasPressed) {
Serial.println("Button: +90");
rotateDegrees(TURN_DEGREES);
}
wasPressed = pressed;
delay(20); // Пауза від брязкоту контактів
}
Очікуваний результат
Кожне натискання — поворот рівно на 90°. Утримання дає лише один поворот.
Перевір себе
Чотири натискання — стрілка знову на 0°.
Що можна змінити
TURN_DEGREES = 30 — дванадцять натискань на оберт.
Якщо не працює
Двигун не реагує — кнопка має бути між D7 і GND, а в setup() — INPUT_PULLUP.
3. Кут з монітора порту
Скетч пам’ятає, де вал зараз (position), і їде лише на різницю до нового кута.
- Заміни код скетчем кроку 3.
- Запусти симуляцію.
- У полі монітора введи 90 і натисни Enter.
- Введи 45, потім 0.
Підключення
| Контакт | Куди з’єднати |
|---|
| 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− |
| Uno D7 | Кнопка, правий верхній контакт |
| Кнопка, правий нижній контакт | Uno GND |
Файли для 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 = 3000;
long position = 0; // Де вал зараз, у кроках від старту
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 goToAngle(long angle) {
long target = angle * STEPS_PER_REV / 360;
turnSteps(target - position); // Їдемо лише на різницю
position = target;
}
void setup() {
pinMode(STEP_PIN, OUTPUT);
pinMode(DIR_PIN, OUTPUT);
Serial.begin(115200);
}
void loop() {
if (Serial.available() > 0) {
String line = Serial.readStringUntil('\n');
line.trim();
if (line.length() > 0) {
long angle = line.toInt();
Serial.print("Go to angle ");
Serial.println(angle);
goToAngle(angle);
}
}
}
Очікуваний результат
Стрілка стає на 90°, потім повертається назад на 45°, потім на 0°. У моніторі Go to angle.
Перевір себе
Введи 90 двічі: другий раз двигун стоїть — він уже там.
Що можна змінити
Введи 720: два повні оберти.
Якщо не працює
Нічого не відбувається — введи число в нижнє поле монітора порту і натисни Enter.
4. Точний кут на справжньому двигуні
Справжній двигун тримає кут, поки на драйвер подано 12 В. Прапорець на валу покаже точність.
- Блок 12 В вимкнений із мережі.
- Додай кнопку за таблицею.
- Завантаж скетч кроку 3.
- Увімкни блок 12 В.
- Введи в моніторі 90, 180, 0.
- Завантаж скетч кроку 2 і понатискай кнопку.
- Вимкни блок 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− | Не підключаємо — драйвер увімкнений |
| Uno D7 | Кнопка, один контакт |
| Кнопка, другий контакт | Uno GND |
Скетч для справжньої плати
Це той самий код, що й у попередньому кроці. Відкрий його в 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 = 3000;
long position = 0; // Де вал зараз, у кроках від старту
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 goToAngle(long angle) {
long target = angle * STEPS_PER_REV / 360;
turnSteps(target - position); // Їдемо лише на різницю
position = target;
}
void setup() {
pinMode(STEP_PIN, OUTPUT);
pinMode(DIR_PIN, OUTPUT);
Serial.begin(115200);
}
void loop() {
if (Serial.available() > 0) {
String line = Serial.readStringUntil('\n');
line.trim();
if (line.length() > 0) {
long angle = line.toInt();
Serial.print("Go to angle ");
Serial.println(angle);
goToAngle(angle);
}
}
}
Очікуваний результат
Прапорець стає на задані кути й повертається на 0 у те саме місце.
Перевір себе
Після десяти натискань «+90°» прапорець на тому самому місці, що й після двох.
Що можна змінити
Мікрокрок 1/8 на DIP і STEPS_PER_REV = 1600: рух тихіший і плавніший, кут той самий.
Якщо не працює
Кут поступово «з’їжджає» — двигун губить кроки: збільш STEP_US або перевір струм на DIP.