Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

DIY моторизированный камерный слайдер с панорамированием и наклоном — управление Arduino

Обзор

Полностью самодельный камерный слайдер с головкой pan/tilt. Основа — МДФ и фанера, три шаговых двигателя NEMA 17, управление Arduino через джойстик и кнопки на самодельной плате. Результат: плавные кинематографические движения, установка на штатив под любым углом благодаря опорной руке.

DIY моторизированный камерный слайдер с панорамированием и наклоном — управление Arduino

Механическая часть

Рейки и база

Рейки — медные трубы 22 мм, длина 1 м. Очищены пастой (зубная) от окислов. База — два листа фанеры 21 мм, склеенные, с креплением под штатив (копия плиты штатива). Рейки закреплены на шпильках М8, просверленными в трубах (джиг для точных отверстий с двух сторон).

DIY моторизированный камерный слайдер с панорамированием и наклоном — управление Arduino
DIY моторизированный камерный слайдер с панорамированием и наклоном — управление Arduino

Подвижная платформа

МДФ 8 мм, подшипники 608Z (вн. диаметр 22 мм) — две пары сверху и снизу для устойчивости на наклоне. Привод: шаговый двигатель + ремень GT2, натяжён на ролик с другой стороны.

DIY моторизированный камерный слайдер с панорамированием и наклоном — управление Arduino

Опорная рука

Для стабилизации на лёгком штативе: зажим на ногу штатива + рука со шлицем (сверлены ряд отверстий 6 мм, вышлифованы рашпилем). Позволяет устанавливать слайдер под любым углом.

DIY моторизированный камерный слайдер с панорамированием и наклоном — управление Arduino

Голова Pan/Tilt

Сборка по 3D-модели (файл на Thangs). Панорама и тильт — шаговые двигатели с редукцией 5:1 (3D-печатные шкивы 80 зубьев на 16-зубевые на валу). Ремни замкнуты в кольца цианакрилатом + скотч. Натяжение ремня тильта — подшипник на болте двигателя.

DIY моторизированный камерный слайдер с панорамированием и наклоном — управление Arduino
DIY моторизированный камерный слайдер с панорамированием и наклоном — управление Arduino

Электроника: схема и PCB

Три драйвера A4988 управляют двигателями. Управление: потенциометр (слайдер), джойстик (pan/tilt), потенциометр скорости авто-движения, кнопка Set (запись точек In/Out), лимитный выключатель (парковка слайдера), два индикатора In/Out, питание 9–12 В.

DIY моторизированный камерный слайдер с панорамированием и наклоном — управление Arduino

Печатная плата

Разработана в EasyEDA (двухслойная), заказ в JLCPCB. Паяем pin headers для модулей, джамперы к компонентам на лицевой панели.

DIY моторизированный камерный слайдер с панорамированием и наклоном — управление Arduino
DIY моторизированный камерный слайдер с панорамированием и наклоном — управление Arduino

Корпус контроллера

Прозрачный акрил 4 мм — видна начинка. Фронтальная панель на болтах/гайках. Внутрь: Arduino, три A4988, кнопки, потенциометры, джойстик, джек питания. Выводы к двигателям и лимитке — через боковую стенку с термоусадкой.

DIY моторизированный камерный слайдер с панорамированием и наклоном — управление Arduino
DIY моторизированный камерный слайдер с панорамированием и наклоном — управление Arduino

Программа (библиотека AccelStepper)

Код разбит на логические блоки. Полный листинг в конце.

Инициализация и парковка

#include <AccelStepper.h>
#include <MultiStepper.h>

#define JoyX A0
#define JoyY A1
#define slider A2
#define inOutPot A3
#define JoySwitch 10
#define InOutSet 12
#define limitSwitch 11
#define inLED 8
#define outLED 9

AccelStepper stepper1(1, 7, 6); // slider
AccelStepper stepper2(1, 5, 4); // pan
AccelStepper stepper3(1, 3, 2); // tilt
MultiStepper StepperControl;

long gotoposition[3];
int currentSpeed = 100;
int XInPoint=0, YInPoint=0, ZInPoint=0;
int XOutPoint=0, YOutPoint=0, ZOutPoint=0;
int InandOut = 0;

void setup() {
  stepper1.setMaxSpeed(3000); stepper1.setSpeed(200);
  stepper2.setMaxSpeed(3000); stepper2.setSpeed(200);
  stepper3.setMaxSpeed(3000); stepper3.setSpeed(200);
  pinMode(JoySwitch, INPUT_PULLUP);
  pinMode(InOutSet, INPUT_PULLUP);
  pinMode(limitSwitch, INPUT_PULLUP);
  pinMode(inLED, OUTPUT); pinMode(outLED, OUTPUT);

  StepperControl.addStepper(stepper1);
  StepperControl.addStepper(stepper2);
  StepperControl.addStepper(stepper3);

  // Homing: едем к лимитке, ставим 0, отъезжаем 200 шагов
  while (digitalRead(limitSwitch) != 0) {
    stepper1.setSpeed(3000); stepper1.runSpeed();
    stepper1.setCurrentPosition(0);
  }
  delay(20);
  while (stepper1.currentPosition() != -200) {
    stepper1.setSpeed(-3000); stepper1.run();
  }
}

Основной цикл: ограничение хода, скорость pan/tilt, запись точек, авто-движение

void loop() {
  // Ограничение: лимитка или 80 см (64800 шагов) в другую сторону
  while (digitalRead(limitSwitch) == 0 || stepper1.currentPosition() < -64800) {}

  // Нажатие джойстика — увеличиваем скорость pan/tilt
  if (digitalRead(JoySwitch) == 0) { currentSpeed += 50; delay(200); }

  // Кнопка Set — машина состояний InandOut
  if (digitalRead(InOutSet) == 0) {
    delay(500); // долгое нажатие >0.5с — сброс
    if (digitalRead(InOutSet) == 0) { InandOut = 4; }

    switch (InandOut) {
      case 0: // Записать IN
        InandOut = 1;
        XInPoint = stepper1.currentPosition();
        YInPoint = stepper2.currentPosition();
        ZInPoint = stepper3.currentPosition();
        digitalWrite(inLED, HIGH);
        break;
      case 1: // Записать OUT
        InandOut = 2;
        XOutPoint = stepper1.currentPosition();
        YOutPoint = stepper2.currentPosition();
        ZOutPoint = stepper3.currentPosition();
        digitalWrite(outLED, HIGH);
        break;
      case 2: // Движение к IN
        InandOut = 3;
        inOutSpeed = analogRead(inOutPot);
        gotoposition[0] = XInPoint; gotoposition[1] = YInPoint; gotoposition[2] = ZInPoint;
        stepper1.setMaxSpeed(inOutSpeed); stepper2.setMaxSpeed(inOutSpeed); stepper3.setMaxSpeed(inOutSpeed);
        StepperControl.moveTo(gotoposition);
        StepperControl.runSpeedToPosition(); // Блокирующий вызов
        delay(200);
        break;
      case 3: // Движение к OUT
        InandOut = 2;
        inOutSpeed = analogRead(inOutPot);
        gotoposition[0] = XOutPoint; gotoposition[1] = YOutPoint; gotoposition[2] = ZOutPoint;
        stepper1.setMaxSpeed(inOutSpeed); stepper2.setMaxSpeed(inOutSpeed); stepper3.setMaxSpeed(inOutSpeed);
        StepperControl.moveTo(gotoposition);
        StepperControl.runSpeedToPosition();
        delay(200);
        break;
      case 4: // Сброс
        InandOut = 0; digitalWrite(inLED, LOW); digitalWrite(outLED, LOW); delay(1000);
        break;
    }
  }

  // Джойстик X — Pan
  int JoyXPos = analogRead(JoyX);
  if (JoyXPos > 600) stepper2.setSpeed(currentSpeed);
  else if (JoyXPos < 400) stepper2.setSpeed(-currentSpeed);
  else stepper2.setSpeed(0);

  // Джойстик Y — Tilt
  int JoyYPos = analogRead(JoyY);
  if (JoyYPos > 600) stepper3.setSpeed(currentSpeed);
  else if (JoyYPos < 400) stepper3.setSpeed(-currentSpeed);
  else stepper3.setSpeed(0);

  // Потенциометр слайдера — переменная скорость
  int sliderPos = analogRead(slider);
  if (sliderPos > 600) {
    sliderPos = map(sliderPos, 600, 1024, 0, 3000);
    stepper1.setSpeed(sliderPos);
  } else if (sliderPos < 400) {
    sliderPos = map(sliderPos, 400, 0, 0, 3000);
    stepper1.setSpeed(-sliderPos);
  } else stepper1.setSpeed(0);

  // Запуск двигателей
  stepper1.runSpeed();
  stepper2.runSpeed();
  stepper3.runSpeed();
}

Полный код

/* DIY Camera Slider with Pan and Tilt Head
   by Dejan Nedelkovski, www.HowToMechatronics.com
   Library: AccelStepper by Mike McCauley */
// ... (полный листинг как выше, без комментариев к частям)

Заключение

Слайдер получился плавным, универсальным (ручное/авто управление, любой угол установки) и недорогим. Все чертежи, 3D-модели, Gerber-файлы и код доступны в описании проекта.

Производственный процесс

  1. Bluetooth-контролируемый моторизированный камерный слайдер на Arduino для плавных кинематографических кадров
  2. Создание потрясающей системы Ambilight для монитора на Arduino
  3. Надежная система учета рабочего времени на Arduino с RFID и Python
  4. Умный вольтметр на Arduino и смартфоне — простое DIY-проект
  5. Сборка вольтметра на Arduino с дисплеем Nokia 5110 — Пошаговое руководство
  6. Клеточный автомат «Жизнь» Конвея на Arduino Nano с OLED 128x64
  7. Высокоскоростной тахометр на Arduino: новый алгоритм измерения RPM до 2 знаков после запятой
  8. Сборка компактного FM-радио на Arduino Nano и RDA5807M
  9. Система учёта рабочего времени на RFID, Arduino и Google Таблицах
  10. Генерация музыкальных тонов на Arduino: полный спектр 88 клавиш пианино