🛒
0 товар.
0 руб.
Логотип

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

☰
ИИ-консультант Wildberries OZON Яндекс Маркет
Поиск по сайту
Гугл таблица с ассортиментом

🕰️ Проект: механические часы со стрелкой на шаговом двигателе и DS1302

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

DS1302 хранит время, 28BYJ-48 раз в минуту доворачивает физическую стрелку на нужный угол.

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

DS1302 — часы реального времени с батарейкой, продолжающие считать время даже при отключении Arduino от питания. Раз в минуту плата считывает текущее время, переводит его в нужный угол поворота стрелки и вычисляет разницу между текущим и целевым положением вала шагового двигателя, доворачивая его ровно на эту разницу.

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

Разводка модулей у разных производителей отличается — если на вашей плате контакты называются иначе, сориентируйтесь по маркировке.

  1. DS1302: CLK → D5, DAT → D4, RST → D3, VCC → 5V, GND → GND.
  2. Драйвер ULN2003 (идёт в комплекте с 28BYJ-48): IN1-IN4 → D8, D9, D10, D11.
  3. Установите библиотеку "Rtc by Makuna" через Менеджер библиотек — именно она содержит классы ThreeWire и RtcDS1302.
  4. Соберите механическую передачу от вала двигателя к стрелке так, чтобы 2048 шагов соответствовали ровно одному полному обороту на 12 часов.

Скетч

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

#include <ThreeWire.h>
#include <RtcDS1302.h>
#include <Stepper.h>

ThreeWire myWire(4, 5, 3);
RtcDS1302<ThreeWire> Rtc(myWire);
const int stepsPerRevolution = 2048;
Stepper myStepper(stepsPerRevolution, 8, 10, 9, 11);
long currentPosition = 0;

void setup() {
  Serial.begin(9600);
  Rtc.Begin();
  myStepper.setSpeed(10);
}

void loop() {
  RtcDateTime now = Rtc.GetDateTime();
  int minuteOfHalfDay = (now.Hour() % 12) * 60 + now.Minute();
  long targetPosition = map(minuteOfHalfDay, 0, 720, 0, stepsPerRevolution);

  long diff = targetPosition - currentPosition;
  if (diff != 0) {
    Serial.print("Поворот на шагов: ");
    Serial.println(diff);
    myStepper.step(diff);
    currentPosition = targetPosition;
  }
  delay(60000);
}
                

При первом запуске стрелку выставьте вручную на 12:00, часы DS1302 — командой `Rtc.SetDateTime()`.

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

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

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

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

← 🔢 ручной счётчик на энкодере KY-…🔌 умная розетка на ESP8266 с упр… →

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

Все 2 товара сразу: 296 ₽ 266 ₽ (экономия 30 ₽)

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

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

Корзина

Поиск


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