A
ARDUINO LABGUIDE

Выставка · проект 4

Поворотный стенд / «турникет внимания»

Шаговый мотор 28BYJ-48 через драйвер ULN2003 медленно крутит платформу. HC-SR04 замечает гостя — стенд останавливается или «смотрит» вперёд. LCD (по желанию) пишет режим.

дальше шаговик питание мотора ~3–4 часа + печать

Оглавление

1. Цель

«Умный подиум»: в покое платформа медленно вращается (idle). Гость подошёл ближе порога — вращение останавливается (или делает короткий разворот «к лицу»). На Serial видно расстояние и режим.

Критерий готовности: без гостя диск стабильно крутится в одну сторону; при руке < порога мотор останавливается за <1 с; после ухода руки idle возобновляется. Нет нагрева проводов и нет перезагрузок Uno.

2. Подготовка

Программы

Инструменты

Компоненты

ЧтоКаталогСколько
Arduino Unoarduino-uno-r31
Шаговик 28BYJ-48stepper-28byj481
Драйвер ULN2003uln2003-driver1
HC-SR04hc-sr041
LCD 1602 + I2C (опционально)lcd-1602, i2c-lcd-adapter1
Макетка, проводаbreadboard-mb102, jumper-mm, jumper-mf—
Шаговый мотор 28BYJ-48 Драйвер ULN2003

3. Питание — прочитайте до сборки

Не кормите шаговик «с пина Uno» и не рассчитывайте, что USB потянет всё. Мотор подключается к плате ULN2003. На ULN2003 есть клеммы/+ контакты питания мотора (часто «+» и «−»). Логика Uno — отдельно по USB. Между Uno и ULN2003 обязателен общий GND.

4. Распиновка (Uno → модуль)

Пин UnoКудаПояснение
D8IN1 ULN2003Сигнал шага
D9IN2 ULN2003
D10IN3 ULN2003
D11IN4 ULN2003
GNDGND ULN2003 и минус БП мотораОбщий минус!
—«+» питания ULN2003 ← внешние ~5 VНе с сигнального пина
—Разъём мотора 28BYJ ↔ ULN2003Штекер только в одну сторону
5 V / GNDVCC / GND HC-SR04Датчик с логики Uno
D7Trig
D6Echo
A4 / A5SDA / SCL LCD I2CОпционально

5. Сборка по шагам

Шаг 5.1

Только логика — без питания мотора

Соберите Uno + HC-SR04 + сигналы IN1…IN4. Питание ULN2003 пока не подключайте. Проверьте глазами общий GND (пока можно соединить GND Uno с GND площадки ULN).

✓ Сигнальные 4 провода на D8–D11, датчик на D6/D7
Шаг 5.2

Скетч: Verify

Скомпилируйте код из раздела 6. Ошибок быть не должно. Заливку пока можно отложить.

✓ Done compiling
Шаг 5.3

Согласуйте питание мотора

Назовите источник (например отдельный 5 V ≥1 A), подтвердите общий GND, получите «да» на первое включение. Затем подключите «+»/«−» к ULN2003.

✓ Питание мотора подключено только после согласия; общий GND проверен
Шаг 5.4

Upload по согласию

Залейте скетч. Без гостя — медленное вращение. Рука к датчику — стоп.

✓ Idle spin и остановка по дистанции работают; Uno не перезагружается
Шаг 5.5

Наденьте диск

Лёгкий напечатанный диск/куб на вал. Тяжёлую нагрузку не ставьте — редуктор пластиковый.

✓ Диск не задевает корпус, кабель мотора не накручивается

6. Скетч (полный рабочий, Stepper.h)

У 28BYJ-48 часто считают ~2048 шагов на оборот вала (зависит от режима). Скорость — через setSpeed (об/мин). Если крутит «не туда» или дёргается — поменяйте порядок пинов в конструкторе.

#include <Stepper.h>

const int STEPS_PER_REV = 2048; // типично для 28BYJ-48 в half-step через Stepper
const int PIN_IN1 = 8;
const int PIN_IN2 = 9;
const int PIN_IN3 = 10;
const int PIN_IN4 = 11;
const int PIN_TRIG = 7;
const int PIN_ECHO = 6;

const int VISITOR_CM = 40;  // ближе — «гость»
const int IDLE_RPM = 4;     // медленно для выставки
const int IDLE_CHUNK = 32;  // шагов за один тик loop

Stepper motor(STEPS_PER_REV, PIN_IN1, PIN_IN3, PIN_IN2, PIN_IN4);
// Порядок 1,3,2,4 — частый рабочий для ULN2003+28BYJ; если плохо — попробуйте 8,9,10,11 подряд

long readDistanceCm() {
  digitalWrite(PIN_TRIG, LOW);
  delayMicroseconds(2);
  digitalWrite(PIN_TRIG, HIGH);
  delayMicroseconds(10);
  digitalWrite(PIN_TRIG, LOW);
  unsigned long us = pulseIn(PIN_ECHO, HIGH, 30000UL);
  if (us == 0) return -1;
  return (long)(us * 0.0343 / 2.0);
}

void setup() {
  pinMode(PIN_TRIG, OUTPUT);
  pinMode(PIN_ECHO, INPUT);
  motor.setSpeed(IDLE_RPM);
  Serial.begin(115200);
  Serial.println("turnstile ready");
}

void loop() {
  long cm = readDistanceCm();
  bool visitor = (cm > 0 && cm < VISITOR_CM);

  if (visitor) {
    // Режим «смотрит на гостя»: стоим
    Serial.print("FACE cm=");
    Serial.println(cm);
    delay(50);
  } else {
    motor.step(IDLE_CHUNK);
    Serial.print("IDLE cm=");
    Serial.println(cm);
  }
}

7. Печать на Bambu Lab P2S

Общий курс «с нуля» (Studio, отправка, качество): setup-bambu-p2s.html. Ниже — только детали ЭТОГО проекта.
Печатайте корпус после того, как схема на макетке уже работает.
Шаг 7.1

Какие детали печатаем

  • Диск или куб-подиум с посадкой на вал 28BYJ-48 (часто D-образный — отверстие с лыской).
  • Корпус-стакан, скрывающий ULN2003 и провода.
  • Кронштейн HC-SR04 «в лицо» посетителю.
Диск делайте лёгким: тяжёлый подиум даёт пропуск шагов.
Шаг 7.2

Модель: скачать или нарисовать простое

Путь A. Ищите: 28BYJ-48 coupler, stepper turntable, ULN2003 mount, HC-SR04 bracket.

Путь C (Tinkercad). Цилиндр/диск; в центре отверстие под вал с лыской (измерьте вал + 0,3…0,5 mm). Отдельный стакан-короб вокруг платы драйвера.

Шаг 7.3

Проект в Bambu Studio

Импорт STL → диск плашмя → PLA, 0.2 mm, заполнение 15–20%. Отправка — setup-bambu-p2s.html.

Шаг 7.4

Проверка качества

  • Отверстие вала не заплыло — пробник/вал входит
  • Диск без сильного коробления
  • Стакан не мешает разъёму ULN
Шаг 7.5

Примерка без клея

Наденьте диск на вал, включите idle на малой скорости (после согласия на питание мотора).

✓ Вал сидит без проскальзывания; биение диска <1 mm

8. Скрипт демо

  1. «Это поворотный стенд на шаговом моторе — он крутится точными шагами, не как обычный моторчик.»
  2. «Драйвер ULN2003 усиливает сигналы с Arduino: плата сама мотор не тянет.»
  3. «Подойдите ближе — ультразвук видит гостя, стенд останавливается „смотреть“ на вас.»
  4. «Отойдите — снова медленный idle. Дальше — сейф с кодом на клавиатуре.»

9. Неисправности

СимптомЧто проверить
Мотор гудит, не крутитсяПитание на ULN; общий GND; порядок IN1–IN4
Пропуск шаговСлишком быстро setSpeed; тяжёлый диск; слабый БП
Uno перезагружаетсяМотор сел на USB — вынести питание, общий GND
Не видит гостяTrig/Echo; датчик закрыт корпусом
Крутит назад / рваноПорядок пинов в Stepper(...)

10. Безопасность

11. Что дальше

Интерактив с паролем: Электронный сейф с кодом.

← К списку проектов