Выставка · проект 4
Поворотный стенд / «турникет внимания»
Шаговый мотор 28BYJ-48 через драйвер ULN2003 медленно крутит платформу. HC-SR04 замечает гостя — стенд останавливается или «смотрит» вперёд. LCD (по желанию) пишет режим.
Оглавление
1. Цель
«Умный подиум»: в покое платформа медленно вращается (idle). Гость подошёл ближе порога — вращение останавливается (или делает короткий разворот «к лицу»). На Serial видно расстояние и режим.
2. Подготовка
Программы
- Подготовка Arduino IDE
- Встроенная Stepper.h (Examples → Stepper) — отдельно ставить не нужно
- Опционально LCD: LiquidCrystal_I2C
- Bambu Studio + setup-bambu-p2s.html — диск/куб на вал
Инструменты
- Макетка, провода
- Источник 5 V с запасом тока для шаговика (согласовать до первого включения)
- Мультиметр — проверить общий GND
Компоненты
| Что | Каталог | Сколько |
|---|---|---|
| Arduino Uno | arduino-uno-r3 | 1 |
| Шаговик 28BYJ-48 | stepper-28byj48 | 1 |
| Драйвер ULN2003 | uln2003-driver | 1 |
| HC-SR04 | hc-sr04 | 1 |
| LCD 1602 + I2C (опционально) | lcd-1602, i2c-lcd-adapter | 1 |
| Макетка, провода | breadboard-mb102, jumper-mm, jumper-mf | — |
3. Питание — прочитайте до сборки
- Сигналы IN1…IN4 — с цифровых пинов Uno (мало тока).
- Питание обмоток — на разъём питания ULN2003 (~5 V, согласованный источник).
- Минус этого источника соединить с GND Uno.
- Первая подача питания на мотор — стоп и ваше «да» (ворота лаборатории).
4. Распиновка (Uno → модуль)
| Пин Uno | Куда | Пояснение |
|---|---|---|
| D8 | IN1 ULN2003 | Сигнал шага |
| D9 | IN2 ULN2003 | |
| D10 | IN3 ULN2003 | |
| D11 | IN4 ULN2003 | |
| GND | GND ULN2003 и минус БП мотора | Общий минус! |
| — | «+» питания ULN2003 ← внешние ~5 V | Не с сигнального пина |
| — | Разъём мотора 28BYJ ↔ ULN2003 | Штекер только в одну сторону |
| 5 V / GND | VCC / GND HC-SR04 | Датчик с логики Uno |
| D7 | Trig | |
| D6 | Echo | |
| A4 / A5 | SDA / SCL LCD I2C | Опционально |
5. Сборка по шагам
Только логика — без питания мотора
Соберите Uno + HC-SR04 + сигналы IN1…IN4. Питание ULN2003 пока не подключайте. Проверьте глазами общий GND (пока можно соединить GND Uno с GND площадки ULN).
Скетч: Verify
Скомпилируйте код из раздела 6. Ошибок быть не должно. Заливку пока можно отложить.
Согласуйте питание мотора
Назовите источник (например отдельный 5 V ≥1 A), подтвердите общий GND, получите «да» на первое включение. Затем подключите «+»/«−» к ULN2003.
Upload по согласию
Залейте скетч. Без гостя — медленное вращение. Рука к датчику — стоп.
Наденьте диск
Лёгкий напечатанный диск/куб на вал. Тяжёлую нагрузку не ставьте — редуктор пластиковый.
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
Какие детали печатаем
- Диск или куб-подиум с посадкой на вал 28BYJ-48 (часто D-образный — отверстие с лыской).
- Корпус-стакан, скрывающий ULN2003 и провода.
- Кронштейн HC-SR04 «в лицо» посетителю.
Модель: скачать или нарисовать простое
Путь A. Ищите: 28BYJ-48 coupler, stepper turntable, ULN2003 mount, HC-SR04 bracket.
Путь C (Tinkercad). Цилиндр/диск; в центре отверстие под вал с лыской (измерьте вал + 0,3…0,5 mm). Отдельный стакан-короб вокруг платы драйвера.
Проект в Bambu Studio
Импорт STL → диск плашмя → PLA, 0.2 mm, заполнение 15–20%. Отправка — setup-bambu-p2s.html.
Проверка качества
- Отверстие вала не заплыло — пробник/вал входит
- Диск без сильного коробления
- Стакан не мешает разъёму ULN
Примерка без клея
Наденьте диск на вал, включите idle на малой скорости (после согласия на питание мотора).
8. Скрипт демо
- «Это поворотный стенд на шаговом моторе — он крутится точными шагами, не как обычный моторчик.»
- «Драйвер ULN2003 усиливает сигналы с Arduino: плата сама мотор не тянет.»
- «Подойдите ближе — ультразвук видит гостя, стенд останавливается „смотреть“ на вас.»
- «Отойдите — снова медленный idle. Дальше — сейф с кодом на клавиатуре.»
9. Неисправности
| Симптом | Что проверить |
|---|---|
| Мотор гудит, не крутится | Питание на ULN; общий GND; порядок IN1–IN4 |
| Пропуск шагов | Слишком быстро setSpeed; тяжёлый диск; слабый БП |
| Uno перезагружается | Мотор сел на USB — вынести питание, общий GND |
| Не видит гостя | Trig/Echo; датчик закрыт корпусом |
| Крутит назад / рвано | Порядок пинов в Stepper(...) |
10. Безопасность
- Отдельное питание мотора через ULN2003 + общий GND с Uno.
- Не подавайте ток мотора через макетные «тонкие» случайные перемычки на 5 V пине Uno как на единственный источник.
- Upload и первая подача БП на мотор — только после вашего согласия.
11. Что дальше
Интерактив с паролем: Электронный сейф с кодом.