Создание 3D-проволочного гнущего станка на Arduino: полное руководство
В этом уроке я покажу, как построил Arduino-станок для 3D-гибки проволоки. Это классическая мехатронная система: механика, электроника, программирование. Отличный проект для студентов и новичков в мехатронике. Смотрите видео или читайте текстовый урок. Проволока проходит через ролики-выпрямители. Шаговый двигатель (подача) точно подаёт проволоку к механизму гибки (второй шаговый + микросерво). Третий шаговый (Z-ось) поворачивает механизм гибки вокруг проволоки, создавая 3D-формы. Мозг — Arduino на кастомной PCB. Программа: функции для фигур (звезда, куб, стойка) и ручной режим через Serial Monitor. Проектировал в CAD. Ссылки на модель на Thangs и STL для печати. Шестерни, подшипниковые опоры, муфты — на 3D-принтере (Creality CR-10, качество отлично). Основа: два листа МДФ 8 мм и 4 столба из фанеры 18 мм (клей + саморезы). Горизонтальные рельсы: алюминиевые трубы 16 мм (2×27 см), вертикальные — 20 мм (3×45 см). В деревянных брусьях фрезой делаем пазы под трубы. Слайдеры: доски 21×21 см, втулки M8, подшипники 22 мм (вертикаль) и 16 мм (горизонталь). Регулировка зазора: расширил пазы, сделал перпендикулярные пробивки, затянул трёщотки для сближения рельс. Z-ось: полая медная труба 15 мм (30 см) через подшипники 6202. Шестерня м=1.5, z=30 на втулках M3. Шаговый Z с 18-зубчатой шестернёй на кронштейне со слотами для центровки. Подача (Feeder): NEMA 17 на верхней пластине. На вал — 3D-муфта с медной трубкой (ролик). Противоположная сторона: рычаг с подшипником, прижимаемый к ролику болтом с T-гайкой для регулировки сцепления. Выпрямитель: 3 ролика с одной стороны, 2 с другой. Ролики — подшипники с 3D-наколенниками (прутковидные канавки). Натяжение гайками. На входе/выходе — проводники из фанеры. Механизм гибки (Bender): на куске МДФ — NEMA 23 (отверстие 38 мм). На валу — шестерня м=2.5, z=18. Сопряжена с большой шестернёй z=30 с интегрированной пластиной под серво MG996R. Серво двигает зубчатую рейку (штырь), выходящий из шестерни — он гнёт проволоку. На рейке медная трубка (контакт), на шестерне — подшипник (эпоксидка). Штырь на рожке серво (2 М3 болта). Крепление биендера к Z-оси: два 3D-хомута на M6 болтах/гайках, затянутые на вал Z. Микро-концевик внизу для хоуминга биендера. Сопло 3 мм на выходе проволоки. 3 шаговых драйвера DRV8825. Питание 12В ≥3А. Серво MG996R — отдельный стабилизатор LM7805 (5В), т.к. стабилизатор Arduino не потянет. Концевик с pull-up на цифровой пин. Кастомная плата в EasyEDA (двуслойная). Распиновка драйверов, выбор микрошага (перемычки), доп. концевик, свободные пины Arduino, клеммники питания. Заказ у JLCPCB (спонсор). Качество отлично. Pin-распайки для всего (легкое подключение/отключение). Малые детали (C, R, LM7805, клеммники) паяем напрямую. Устанавливаем драйверы и Arduino. Подключаем питание, шаговые, серво (D2, питание от LM7805). Выбираем микрошаг 1/16 (перемычки на соответствующих пинах драйверов). Библиотека AccelStepper (Mike McCauley) для шаговых, Servo для серво. Пины: feeder(5,6), zAxis(7,8), bender(9,10), servo(2), концевик(11). В setup(): серво вверх (40°), макс. скорость 2000, хоуминг биендера на концевик → 0 шагов → отъезд 1400 шагов назад → новая нулевая позиция. Loop(): команды из Serial: "manual", "star", "cube", "stand". Цикл 5 раз. Подача 38 мм (×48 шагов/мм). Сгиб 52° (angleConst=18), возврат, снова подача, штырь вниз, новый нулевой угол -42°, штырь вверх, сгиб 105° в другую сторону, -63°, штырь вниз. Счётчик++. Аналогично cube() (3 ребра, поворот Z, 2 ребра, поворот Z, сложная последовательность с штырём) и stand() (стойка). Ручной режим: команды "f<мм>" (подача), "b<угол>" или "b-<угол>" (сгиб), "z<угол>" или "z-<угол>" (Z-ось). Парсинг через substring(). Полный код (star, cube, stand, manual) в конце статьи. Известная проблема: выпрямитель слабо работает — при сильном затягивании теряется сцепление подачи. Решение: более жёсткий материал вместо медной трубки или другой механизм подачи. Надеюсь, проект понравился. Вопросы в комментариях, смотрите коллекцию Arduino-проектов.Принцип работы


3D-модель станка



Сборка механики

















Электрическая схема

Компоненты
Проектирование PCB




Сборка PCB


Arduino-код
#include <AccelStepper.h> #include <Servo.h>
#define limitSwitch 11
AccelStepper feederStepper(1, 5, 6);
AccelStepper zAxisStepper(1, 7, 8);
AccelStepper benderStepper(1, 9, 10);
Servo servo01;
String dataIn = ""; String manualStatus = ""; int count = 0; int dist;
void setup() {
Serial.begin(9600); pinMode(limitSwitch, INPUT_PULLUP);
servo01.attach(2); servo01.write(40);
feederStepper.setMaxSpeed(2000); zAxisStepper.setMaxSpeed(2000); benderStepper.setMaxSpeed(2000);
while (digitalRead(limitSwitch) != 0) { benderStepper.setSpeed(1200); benderStepper.runSpeed(); benderStepper.setCurrentPosition(0); }
delay(40);
while (benderStepper.currentPosition() != -1400) { benderStepper.setSpeed(-1200); benderStepper.run(); }
benderStepper.setCurrentPosition(0);
}void loop() {
String mode = Serial.readString();
if (mode.startsWith("manual")) manual();
if (mode.startsWith("star")) star();
if (mode.startsWith("cube")) cube();
if (mode.startsWith("stand")) stand();
}Функция star() — 5-конечная звезда
void star() {
while (count != 5) {
int feed = 38; int feedDistance = feed * 48;
while (feederStepper.currentPosition() != feedDistance) { feederStepper.setSpeed(1200); feederStepper.run(); }
feederStepper.setCurrentPosition(0); servo01.write(40); delay(200);
int angleConst = 18;
while (benderStepper.currentPosition() != -52 * angleConst) { benderStepper.setSpeed(-700); benderStepper.run(); }
benderStepper.setCurrentPosition(0); delay(100);
while (benderStepper.currentPosition() != 52 * angleConst) { benderStepper.setSpeed(1200); benderStepper.run(); }
benderStepper.setCurrentPosition(0); delay(100);
while (feederStepper.currentPosition() != feedDistance) { feederStepper.setSpeed(1200); feederStepper.run(); }
feederStepper.setCurrentPosition(0); delay(100);
servo01.write(130); delay(200);
while (benderStepper.currentPosition() != -42 * angleConst) { benderStepper.setSpeed(-1200); benderStepper.run(); }
benderStepper.setCurrentPosition(0); delay(200);
servo01.write(40); delay(200);
while (benderStepper.currentPosition() != 105 * angleConst) { benderStepper.setSpeed(700); benderStepper.run(); }
benderStepper.setCurrentPosition(0); delay(50);
while (benderStepper.currentPosition() != -63 * angleConst) { benderStepper.setSpeed(-1200); benderStepper.run(); }
delay(100); servo01.write(130); benderStepper.setCurrentPosition(0); count++;
}
}if (dataIn.startsWith("f")) {
dataInS = dataIn.substring(1); dist = dataInS.toInt(); dist *= 48;
while (feederStepper.currentPosition() != dist) { feederStepper.setSpeed(1200); feederStepper.run(); }
feederStepper.setCurrentPosition(0); delay(100);
}
Производственный процесс
- Эволюция и производство швейных машин: от изобретений XIX века к современной автоматизации
- Колючая проволока: история, конструкция и современное применение
- Премиальный станок для производства шестиугольной плетеной сетки для сельского хозяйства и птицеводства
- Почему станки электроэрозионной резки проволокой обеспечивают точность и экономию затрат
- Станки для гибки листового металла: Типы, процессы и применение
- Проволочная электроэрозия в Тайване: точные инсайты металлообрабатывающей индустрии
- Лучшие станки с проволочной ЭРО: решения точной резки из Тайваня
- Профессиональный станок с ЧПУ для гибки труб: точность и эффективность
- Станки для гибки профильных труб: экспертное руководство
- Продвинутый гидравлический трубогиб для точной работы в мастерской