Слайдер — инструмент для видеосъёмки, позволяющий камере плавно передвигаться в пространстве,
Проект был создан на основе проекта слайдера с открытым исходным кодом — https://www.jjrobots.com/camera-slider-tracking-system-3d-printed/. Проект интересный, но электронная часть использует собственные платы разработчика, которые не хотелось приобретать. Решено было использовать то, что было в наличие — плату Arduino Mega и RAMPS, шаговые двигатели NEMA 17,драйверы А4988, оптический концевой выключатель и дисплей MKS Mini 12864 v1.0 с энкодером.
Были напечатаны детали на 3d-принтере (скачать можно на сайте проекта) , куплен профиль 20 на 20 V-slot. Сборку слайдера делал по инструкции https://www.jjrobots.com/camera-slider-kit-2-0-assembly-guide/
Дополнительно На 3d-принтере напечатал 2 корпуса:
MKS_Mini12864_V2.0_LCD_Box
Case_for_Arduino_Mega_R3_and_RAMPS_1.4
Схема подключения для электроники простая — плата RAMPS ставится на Arduino Mega, устанавливаются на плату Ramps два драйвера A4988 (оси x и y). К контактам осей x и y подключаются шаговые двигатели NEMA17.
Дисплей MKS_Mini12864_V1.0 подключается к плате RAMPS через переходник. Возникла проблема с подключением дисплея MKS Mini 12864 v1.0 к плате RAMPS. Дисплей подключается к плате RAMPS с помощью адаптера, но шлейф необходимо перевернуть на 180 градусов, надо стачивать, чтобы входило в разъем.
Программу пишем в среде Arduino IDE. Используем библиотеки
U8g2lib — для дисплея https://github.com/olikraus/u8g2/wiki/setup_tutorial
RotaryEncoder — библиотека энкодера
Для сохранения настроек встроенная EEPROM
В скетче реализовано 2 режима
Режим 1
— Задается скорость перемещения каретки вдоль оси X
— Задается расстояние до которого каретка доедет, и начнет движение обратно до 0 и обратно до того
момента пока не нажмем стоп
— Задается скорость вращения второго двигателя
— задается расстояние с которого начнется вращаться второй двигатель
— Задается угол на который будет вращаться второй двигатель с заданной скоростью
— Есть возможность ВКЛ и ВЫКЛ функции: если она включена, то второй двигатель, когда начнет вращаться и
достигнит заданного угла, то он остановится и вращаться не будет. А если функция выключена, то после того
как второй двигатель достигнет своего заданного угла, то он начнет вращаться в обратную сторону до своего
прежнего состояния и так далее до того момента пока не нажмем кнопку Стоп
Режим 2 (Направление на объект)
— Задаются координаты объекта x и y относительно нулевой точки слайдера
— Задается расстояние до которого каретка доедет, и начнет движение обратно до 0 и обратно до того
момента пока не нажмем стоп
— Задается скорость перемещения каретки вдоль оси X
— При движении камера постоянно направлена на объект (на точку с координатами x, y)
Пункт меню < Камера > вращение камеры энкодером для установки в начальное положение
Меню двухуровневое. Навигация по пунктам меню вращением энкодера, выбор пункта меню — кнопка энкодера, изменение параметра — вращением энкодера, подтверждение выбора параметра — кнопкой энкодера. Для каждого режима свой набор параметров.
const char *level0Names[12]={ "Стоп", "Старт", "< Камера >", "Режим", "X ", "Y ", "V1 ", "L1 мм ", "V2 ", "L2 мм ", "Angle ", "Цикл ", }; int arrpos0[]={1,2,3,6,7,8,9,10,11}; int countpos0=9; int paramvalue[12]={0, 0, 5, 1, 1000, 1000, 100, 900, 5, 240, 50, 1}; int minvalue[12]= {0, 0, 0, 1, 5, 100, 50, 100, 1, 20, 0, 0}; int maxvalue[12]= {10,10, 10, 2, 2000, 5000, 400,2000, 50,1500, 180, 1}; int stepvalue[12]= {1, 1, 1, 1, 50, 100, 5, 20, 1, 20, 1, 1}; int kvalue[12] = {1, 1, 1, 1, 1, 1, 10, 1, 10, 1, 1, 1};
Запуск из пункта меню Старт, которое сразу превращается в Стоп. Останов программы нажатие кнопки энкодера в пункте Стоп.
Список радиоэлементов
Обозначение | Тип | Номинал | Количество | Примечание | Магазин | Мой блокнот |
---|---|---|---|---|---|---|
Плата Arduino | Arduino Mega | 1 | ||||
Плата | RAMPS 1.4 | 1 | ||||
LCD-дисплей | MKS Mini 12864 v1.0 | 1 | ||||
Адаптер для | LCD2004 и LCD12864 | 1 | ||||
Драйвер | A4988 | 2 | ||||
Шаговый двигатель | NEMA17 | 1 | ||||