Слайдер для камери на 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

Прикриті файли:

Top