🛒
0 товаров
0 руб.

Интернет-магазин «Неглупый Дом»


🔄 Проект: поворотный стол на шаговом двигателе 28BYJ-48 с энкодером

Энкодер KY-040 и драйвер шагового двигателя 28BYJ-48

Комплект 28BYJ-48 с драйвером ULN2003 точно поворачивает стол на заданный угол, а энкодер KY-040 задаёт этот угол вращением — удобно для фотосъёмки предметов на 360° или демонстрационных подставок.

Как это работает

28BYJ-48 — это редукторный шаговый двигатель: внутри корпуса стоит маленький шаговый мотор и понижающий редуктор, поэтому для полного оборота выходного вала требуется около 2048 шагов (а не несколько сотен, как у "голых" шаговых моторов без редуктора). Драйвер ULN2003 — это просто набор транзисторных ключей, которые по сигналам Arduino включают нужные обмотки в правильной последовательности.

Энкодер KY-040 работает по-другому: это не датчик абсолютного угла, а генератор импульсов при вращении — каждый "щелчок" даёт короткий сигнал на выводах CLK и DT, а их взаимный сдвиг по фазе определяет направление вращения. Код накапливает эти щелчки в переменную `targetSteps`, а затем стол "догоняет" её, шагая до совпадения `currentSteps` с `targetSteps`.

Пошаговая сборка

Так как реализации данного модуля бывают разные, если у вас на плате нет тех контактов, что указаны ниже — сориентируйтесь по названиям контактов на своей плате.

  1. Драйвер ULN2003: IN1-IN4 → D8, D9, D10, D11, питание драйвера — отдельный источник 5V (не от Arduino, двигатель потребляет заметный ток).
  2. KY-040: CLK → D2, DT → D3, + и GND к питанию Arduino.
  3. Закрепите стол на валу редуктора 28BYJ-48 через переходную муфту или 3D-печатный адаптер.
  4. Проверьте направление вращения энкодера — если стол крутится в обратную сторону от ожидаемой, поменяйте местами CLK и DT в коде.

Скетч

// ВНИМАНИЕ: рекомендую отладить код через монитор порта, я языковая
// модель, а не специализированный кодер, могу что-то упустить.

#include <Stepper.h>

const int stepsPerRevolution = 2048;
Stepper myStepper(stepsPerRevolution, 8, 10, 9, 11);
const int clkPin = 2;
const int dtPin = 3;
int lastClk;
long targetSteps = 0;
long currentSteps = 0;

void setup() {
  Serial.begin(9600);
  pinMode(clkPin, INPUT);
  pinMode(dtPin, INPUT);
  lastClk = digitalRead(clkPin);
  myStepper.setSpeed(10);
}

void loop() {
  int clk = digitalRead(clkPin);
  if (clk != lastClk) {
    int stepsPerClick = stepsPerRevolution / 100; // примерно 1% оборота за щелчок
    if (digitalRead(dtPin) != clk) {
      targetSteps += stepsPerClick;
    } else {
      targetSteps -= stepsPerClick;
    }
    Serial.print("Целевой угол (шагов): ");
    Serial.println(targetSteps);
  }
  lastClk = clk;

  long diff = targetSteps - currentSteps;
  if (diff != 0) {
    myStepper.step(diff > 0 ? 1 : -1);
    currentSteps += (diff > 0 ? 1 : -1);
  }
}

`stepsPerRevolution = 2048` — стандартное значение для 28BYJ-48 в полушаговом режиме через библиотеку Stepper. Порядок пинов IN1/IN3/IN2/IN4 в конструкторе важен для правильного направления вращения.

Частые проблемы

Как улучшить проект

Товары по теме

Ещё модули для Arduino: Электронные модули.

← 📊 индикатор уровня воды в баке на LCD1602🪟 автоматические шторы на шаговом двигателе … →

🎁 Купить весь комплект со скидкой 10%

Все 2 товара сразу в корзину: 308 ₽ 277 ₽ (экономия 31 ₽)

Скидка применяется автоматически при оформлении заказа, если в корзине именно этот комплект.

Остались вопросы? Проконсультируйтесь с ИИ-инженером — он уже в курсе темы статьи и сразу ответит, ничего вводить не нужно.

Корзина


Поиск



Пример: понижающий или DC-DC или mini360 или aw-023 или арт. OZ/WB/YA