Полностью автоматизированный 3D-принтируемый бесколлекторный Nerf-бластер на Arduino
Компоненты и материалы
| Arduino Nano Every | 1 |
| Линейный соленоид 12В (ход 35мм) | 1 |
| Бесколлекторные моторы (Outrunner, для 3S LiPo) | 2 |
| Бесколлекторные регуляторы оборотов (ESC) по 1 на мотор | 2 |
| LiPo аккумулятор 3S 11.1-12.6В 1300мАч 25C | 1 |
| Микровыключатели (миниатюрные) | 2 |
| MOSFET N-канал логического уровня (>20В, >15А при 5В) | 1 |
| Резистор 10 кОм (подтяжка гейта MOSFET) | 1 |
| Резистор 4.7 кОм (подтяжка MS2) | 1 |
| Резистор 150 Ом (для LED) | 1 |
| Резистор 220 Ом (ограничение тока гейта MOSFET) | 1 |
| Диод 1N4007 (флайбэк для соленоида + защита питания Arduino) | 2 |
| Конденсатор 100 мкФ (сглаживание питания Arduino) | 1 |
| Конденсатор 100 нФ (фильтр помех питания Arduino) | 1 |
Необходимые инструменты
- 3D-принтер (автор использует Evnovo/Artillery X1 — 300x300x400мм)
О проекте
Я всегда любил строить и создавать вещи, поэтому решил делать реквизит и реплики из фильмов и видеоигр. Перенос виртуальных объектов в реальность и обмен техниками с единомышленниками.
Моя последняя и самая амбициозная работа — Kang Tao, «умный пистолет» из предстоящей игры Cyberpunk 2077. Для создания такого сложного объекта использовался 3D-принтер для достижения эстетики и механической точности деталей.
Статический объект — слишком просто, хотел вызова. Поэтому я спроектировал его как функциональный Nerf-бластер.
Для реализации функциональности нужно было управлять соленоидом и ESC для бесколлекторных моторов. Реле и задержки по времени были бы громоздкими, поэтому Arduino стал практичным решением.
Это руководство фокусируется на Arduino и электрической схеме (так как это Arduino-сайт). Я пометил сложность как «легкую», так как Arduino-часть довольно проста. Механический дизайн и 3D-печать — продвинутый уровень. Если вы хотите управлять бесколлекторными ESC, моторами и соленоидом с Arduino для Nerf-бластеров — это руководство для вас!
CAD-дизайн, 3D-печать и т.д. описаны здесь:
NerfHaven
Reddit
Видео-туториалы: YouTube-канал
Схема (см. раздел Schematics) показывает все соединения. Используется Arduino Nano из-за компактности, но будет работать и с Uno и другими.
Обратитесь к схеме для терминов MS1, C2 и т.д.
Обратитесь к разделу Code за объяснением работы кода.
Управление курками, флайвилами и соленоидом
Код работает так: когда зажат MS2 (вторичный микровыключатель-курок), бесколлекторные моторы разгоняются.
Когда нажат или зажат MS1 (первичный курок), на гейт MOSFET подается сигнал для повторного срабатывания соленоида (S). Соленоид выталкивает дротик из магазина во флайвилы (M1 & M2), которые разгоняют его из ствола.
Однако MS1 срабатывает только пока зажат MS2. Это предотвращает заезды дротиков в непрокрученные флайвилы. В коде это реализовано через оператор &&.
Питание моторов и соленоида НЕ идет через микровыключатели — не нужны высокотоковые выключатели.
Бесколлекторные моторы
Существуют инраннеры (внутренний ротор) и аутраннеры (внешний ротор). Нужен аутраннер — они плоские, не вылезают боками, и вращающийся внешний колпак позволяет легко напечатать флайвилы прямо на мотор.
Ищите моторы с задними крепежными отверстиями.
Напряжение: минимум 12.6В (3S LiPo).
Ток не должен превышать номинал ESC.
Мощность >60Вт. В проекте: 12.6В × 7А ≈ 80Вт каждый.
RPM ~25к, определяется kV × напряжение. Используются 2600kV @ 12.6В = ~32,760 RPM. На полугазе дротики летят 25м / 82фут!
Бесколлекторные ESC
- Управляют питанием бесколлекторных моторов.
- Кистевые ESC не подходят — только бесколлекторные.
- Один ESC на мотор. Подключение двух моторов к одному ESC нарушит тайминг и убьет ESC/моторы.
- Ток ESC выше тока мотора (7А) — рекомендую 20А+.
- Напряжение ESC минимум 12.6В (3S LiPo).
- BEC не обязателен. Можно использовать OPTO ESC. Если ESC с BEC — соедините только землю и сигнал с Arduino. Красный провод 5В ESC ни к чему не подключайте!
Аккумулятор
Один аккумулятор на всё. Рекомендую разъем XT60.
12.6В 3S LiPo.
Ёмкость минимум 1300мАч.
Ток разряда должен покрывать потребление всех нагрузок (~25А в проекте).
Макс. разряд = C-рейтинг × ёмкость в Ач. 25C × 1.3Ач = 32А макс. Проверяйте по спекам батареи.
MOSFET
Прямое питание 12В/8А соленоида от Arduino — магический дым (Arduino сгорит). Решение — MOSFET.
MOSFET работает как ключ для соленоида, разрывая землю. Это N-канальный MOSFET. Нужен именно N-канальный.
Arduino выдает 5В на гейт — MOSFET должен полностью открываться при 5В. Нужен Logic Level MOSFET.
Ток соленоида 8А — MOSFET с запасом (в проекте 30А макс).
Напряжение 12.6В — MOSFET на 60В с большим запасом.
Температура MOSFET <35°C (благодаря запасу по току и импульсному режиму). Радиатор не нужен.
Соленоид
Толкает дротик во флайвилы. Нужен 12В соленоид с ходом 35мм. Меньший ход не протолкнет стандартные дротики Nerf.
Рекомендую улучшить пружину: проволока 0.9мм, внешний диаметр 14мм, длина 40мм — предотвращает заезды.
Соленоид греется до ~40°C (импульсный режим), охлаждение не требуется.
Дешевые и доступны на eBay, AliExpress.
Предохранитель (Safety Switch)
SW — двухпозиционный тумблер. 3 контакта, используются 2. В положении «предохранитель» питание Arduino отключается, предотвращая случайный запуск флайвилов и соленоида.
Защитная цепь
Как не сжечь электронику!
- C1 33мкФ (рекомендую 100мкФ) и C2 100нФ (0.1мкФ) — сглаживают питание Arduino. Внимание: C1 полярный, полоса = минус, иначе взорвется!
- D1 — защита от обратного напряжения на VIN Arduino. Соблюдайте полярность.
- D2 — флайбэк-диод. Защищает MOSFET от обратного ЭДС соленоида. Соблюдайте полярность.
- R1 & R2 4.7кОм — подтяжка для MS1 и MS2 (предотвращают плавающий потенциал).
- R3 10кОм — подтяжка к земле гейта MOSFET.
- R4 150кОм — для опциональных LED. У меня 2 LED последовательно по 2.4В/50мА каждый. Ваше значение может отличаться. LED мигают в такте соленоиду, имитируя дульный пламень!
Видео с объяснением и тестовыми стрельбами есть в оригинале.
Файлы для 3D-печати
ОБНОВЛЕНИЕ: Ссылка на Thingiverse: https://www.thingiverse.com/thing:3984125
Код
Nerf Blaster Brushless Motor & Solenoid Arduino Code
const int buttonPinF = 2; // MS2 - флайвилы
const int buttonPinS = 5; // MS1 - соленоид
int buttonStateF = 0;
int buttonStateS = 0;
int solenoidPin = 4; // гейт MOSFET
#include <Servo.h>
Servo throttle;
int pos = 0;
int pin = 3; // сигнальный пин ESC
void setup() {
pinMode(buttonPinF, INPUT);
pinMode(buttonPinS, INPUT);
throttle.attach(pin);
pinMode(solenoidPin, OUTPUT);
// ESC Arming Sequence
for (pos = 90; pos <= 91; pos += 1) {
throttle.write(pos);
delay(3700); // ожидание выхода ESC из безопасного режима
// увеличьте до 10000 (10с) если ваш ESC дольше армится
}
}
void loop() {
buttonStateF = digitalRead(buttonPinF);
if (buttonStateF == HIGH) {
throttle.write(92); // холостой ход (зависит от мотора/ESC)
} else {
throttle.write(97); // рабочий газ (зависит от мотора/ESC)
}
buttonStateS = digitalRead(buttonPinS);
if (buttonStateF == LOW && buttonStateS == LOW) {
digitalWrite(solenoidPin, HIGH);
delay(90); // длительность импульса
digitalWrite(solenoidPin, LOW);
delay(100); // пауза между выстрелами
} else {
digitalWrite(solenoidPin, LOW);
}
}
Пояснения к коду:
- При включении через предохранитель запускается арминг ESC. Мои ESC армятся 3.7с (3700 в коде). Возможно, нужно увеличить до 10000 (10с).
- Зажим MS2 — разгон флайвилов. Нажатие MS1 (при зажатом MS2) — стрельба.
throttle.write(92)— холостой ход / выключение моторов.throttle.write(97)— максимальный газ. Значения зависят от мотора/ESC.delay(90)иdelay(100)— частота стрельбы соленоидом.- При отпускании микровыключателей сигналы на ESC и MOSFET прекращаются.
- При выключении предохранителя (Arduino обесточивается) ESC теряют сигнал и уходят в безопасный режим.
Схемы
Полная схема подключения с указанием полярностей диодов и конденсаторов. Нарисована в AutoCAD. См. раздел Schematics оригинального проекта.
Производственный процесс
- Сборка домашней машины для написания домашних заданий (плоттер-писатель)
- Создание потрясающей системы Ambilight для монитора на Arduino
- Управление потолочным вентилятором через Alexa: пошаговое руководство
- Универсальный Android-пульт на Arduino, 1Sheeld и ИК-управлении
- Умная копилка: управление монетоприёмником на Arduino Nano
- Arduino Power Control Center: N-FET, P-FET, реле и RTC
- Управление светодиодом по Bluetooth с Arduino: простой DIY-гид
- Сборка функционального 3D-печатного манипулятора на Arduino: пошаговое руководство
- DIY-контроллер увлажнителя на Arduino с реле: безопасная работа с высоким напряжением
- Управление двумя шаговыми двигателями через джойстик на Arduino Nano — простой урок (Visuino)