Слайдер для камеры на Arduino

Слайдер — инструмент для видеосъёмки, позволяющий камере плавно передвигаться в пространстве,

Проект был создан на основе проекта слайдера с открытым исходным кодом — 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