Фото 360, поворотный столик

Система поворотного столика для фото 360градусов.

Ответить
Аватара пользователя
magbiser
Рядовой
Сообщения: 30
Зарегистрирован: 04.02.2016{, 03:31}
Репутация: 0
Откуда: Подольск

Фото 360, поворотный столик

#1

Сообщение magbiser » 25.07.2020{, 15:39}

Народ! Помогите, а то я "нимагу"...

Есть схема и прошивка к ардуино для поворотного стола от 12 летней девочки Алены с ютуб канала (на всякий случай, вдруг кто еще захочет посмотреть для себя чего там интересного - https://www.youtube.com/channel/UCneBQZ ... Y4A/videos ).

Вот схема компоновки:
Изображение

Вроде ничего сложного... Ардуино, блютуз модуль, ИК передатчик и плата почти что драйвера для шаговика.

Основная задача - передалть на драйвер 4988, вместо ик передатчика (с удалением библиотеки камер и упоминания на них) - подключить реле (чтобы камера подключалась по проводу) в принципе и все...

Вот сама прошивка (файл со всем набором выложу отдельно, может кому пригодится)...
СпойлерПоказать

#define Pin0 8 //пины входы драйвера ULN2003A
#define Pin1 10 //пины входы драйвера ULN2003A
#define Pin2 11 //пины входы драйвера ULN2003A
#define Pin3 12 //пины входы драйвера ULN2003A
#define Pin9 9 //пин управления ИК светодиода

#include <multiCameraIrControl.h> //библиотека для управления фотокамерами

int _step = 0;
int count = 0;
boolean dir = true;// направление вращения стола true - по часовой, false - против
int A = 0;// градус начального положения стола. Меняется от 0 до 360 градусов.
int B; // новое положения стола.
int C; // коррекция в градусах которою нужно алгебраически прибавить A чтобы получить B.
int Serial_bluetooth_int = -1; //цифра - сигнал управления, принемаемый по bluetooth
int count_photo = 0; // количество фото на оборот
int stay_photo; // счетчик оставшихся фото
float deegres_to_frame;// градусы на каждый кадр при повороте на 360 градусов

Canon canon(Pin9); //создаем объекта для пульта ИК
Nikon nikon(Pin9); //создаем объекта для пульта ИК
boolean case_of_photo = true ; // тип фотоаппарата: true - Nikon, false - Canon

void setup(){
Serial1.begin(9600); //стартуем блютуз, скорость общения по Bluetooth 9600, для Ардуино UNO будет Serial.begin(9600); и далее везде где Serial1 pзаменить на Serial
Serial1.setTimeout(5); //устанавливаем время ожидания всей посылки от пульта (максимум 3 цифры), для Ардуино UNO будет Serial.setTimeout(5);
pinMode(Pin0, OUTPUT);
pinMode(Pin1, OUTPUT);
pinMode(Pin2, OUTPUT);
pinMode(Pin3, OUTPUT);
}
void loop() {
if(Serial1.available()>0){
Serial_bluetooth_int = Serial1.parseInt(); //считываем целочисленное число из последовательного порта
}
if (0<=Serial_bluetooth_int && Serial_bluetooth_int<=360){
B = Serial_bluetooth_int;
//-------------------------блок управления поворотом стола без фото -------------------------------
// A - существующее положение стола; В - требуемое положение; С - нужная коррекция в градусах, для занятия
//требуемого положения из начального кратчайшим путём; dir = true - вращаем по часовой стрелке, false - против часовой
if(0 <= A && A <= 180){ //если А в 1 и во 2 квадранте
if(A <= B && B <= A+180){ // если В между А и А+180
dir = false;
C = B - A; // А крутится против часовой на место В
}
else if(A+180 < B && B <= 360){ // если В между А+180 и 360( 0 )
dir = true;
C = A+(360-B); //А крутится по часовой на место В
}
else if(0 <= B && B <= A){ // если В между 0 и А
dir = true;
C = A - B; // А крутится по часовой на место В
}
}
else if(180 < A && A <= 270){ //если А в 3 квадранте
if(A < B && B <= 360){ // если В между А и 360
dir = false;
C = B - A; // А крутится против часовой на место В
}
else if(A-180 < B && B <= A){ // если В между А-180 и A
dir = true;
C = A - B; //А крутится по часовой на место В
}
else if(0 <= B && B <= A-180){ // если В между 0 и А-180
dir = false;
C = B+(360-A); // А крутится по часовой на место В
}
}
else if(270 < A && A <= 360){ //если А в 4 квадранте
if(A < B && B <= 360){ // если В между А и 360
dir = false;
C = B - A; // А крутится против часовой на место В
}
else if(A-180 < B && B <= A){ // если В между А-180 и A
dir = true;
C = A - B; //А крутится по часовой на место В
}
else if(0 <= B && B <= A-180){ // если В между 0 и А-180
dir = false;
C = B+(360-A); // А крутится по часовой на место В
}
}
//-------------------------конец блока управления поворотом стола без фото -------------------------------
A = B; // теперь это новое начальное положение
C= map(C,0,360,0,4096);//преобразуем значение С из диапазона 360 градусов стола в 4096 шагов двигателя
Step8(dir, C);//перемещаем стол
Serial_bluetooth_int=-1;
} // end if (<Serial_bluetooth_int && Serial_bluetooth_int<=360)

if (400<Serial_bluetooth_int && Serial_bluetooth_int<=760){ // принимаем код количества зададанных фото на оборот, реально их на 400 меньше
count_photo = Serial_bluetooth_int - 400;
deegres_to_frame = 360/count_photo;
deegres_to_frame = map(deegres_to_frame,0,360,0,4096);
for(int i = 1; i <= count_photo; i++){
SutterNow();//фотографируем
stay_photo = count_photo-i;
Serial1.print(stay_photo);
delay(1500); //задержка после фото
Step8(true, deegres_to_frame); //крутим мотор по часовой стрелке на угол deegres_to_frame
delay(2500);//задержка после поворота

if(Serial1.available()>0){
Serial_bluetooth_int = Serial1.parseInt(); //считываем целочисленное число для контроля паузы или сброса
}
switch(Serial_bluetooth_int){
case 999://пауза
Serial_bluetooth_int=0;
while (Serial_bluetooth_int!=999){
if(Serial1.available()>0){
Serial_bluetooth_int = Serial1.parseInt(); //считываем целочисленное число для контроля паузы
}
}
break;

case 990://сброс
(deegres_to_frame*i) < count_photo/2 ? Step8(true, (deegres_to_frame*(count_photo - i))) : Step8(false, (deegres_to_frame*i)) ; //выкручиваем стол в начальную позицию
Serial_bluetooth_int=-1;
Serial1.print ("0"); //обнуляем счётчик на пульте
goto reset_label;
break;
}

}//end for
Serial_bluetooth_int = -1;
}
reset_label:

switch(Serial_bluetooth_int){
case 931:
case_of_photo = false; // тип фотоаппарата Canon
Serial_bluetooth_int = -1;
break;

case 930:
case_of_photo = true; // тип фотоаппарата Nikon
Serial_bluetooth_int = -1;
break;

case 995:
SutterNow ();
Serial_bluetooth_int = -1;
break;
}//end switch

}//end loop

void SutterNow (void){ //фотографирование в зависимости от камеры
case_of_photo ? nikon.shutterNow(): canon.shutterNow();//выбираеи никон или кэнон
}

void Step8(boolean direct, int c){// "с" шагов мотора в направлении direct по 8 последовательных шагов
count=0;
while(count <= c){
switch(_step){
case 0:
digitalWrite(Pin0, 0);
digitalWrite(Pin1, 0);
digitalWrite(Pin2, 0);
digitalWrite(Pin3, 1);
break;
case 1:
digitalWrite(Pin0, 0);
digitalWrite(Pin1, 0);
digitalWrite(Pin2, 1);
digitalWrite(Pin3, 1);
break;
case 2:
digitalWrite(Pin0, 0);
digitalWrite(Pin1, 0);
digitalWrite(Pin2, 1);
digitalWrite(Pin3, 0);
break;
case 3:
digitalWrite(Pin0, 0);
digitalWrite(Pin1, 1);
digitalWrite(Pin2, 1);
digitalWrite(Pin3, 0);
break;
case 4:
digitalWrite(Pin0, 0);
digitalWrite(Pin1, 1);
digitalWrite(Pin2, 0);
digitalWrite(Pin3, 0);
break;
case 5:
digitalWrite(Pin0, 1);
digitalWrite(Pin1, 1);
digitalWrite(Pin2, 0);
digitalWrite(Pin3, 0);
break;
case 6:
digitalWrite(Pin0, 1);
digitalWrite(Pin1, 0);
digitalWrite(Pin2, 0);
digitalWrite(Pin3, 0);
break;
case 7:
digitalWrite(Pin0, 1);
digitalWrite(Pin1, 0);
digitalWrite(Pin2, 0);
digitalWrite(Pin3, 1);
break;
default:
digitalWrite(Pin0, 0);
digitalWrite(Pin1, 0);
digitalWrite(Pin2, 0);
digitalWrite(Pin3, 0);
break;
}//end switch(_step)
if(direct){
_step++;
count++;
}
else{
_step--;
count++;
}
if(_step>7){
_step=0;
}
if(_step<0){
_step=7;
}
delay(1);//пауза между шагами, даёт возможность воздействовать на обмотки мотора
}
}

Отправлено спустя 2 минуты 38 секунд:
Вот файл с полной прошивкой (вместе с файлами камер) - https://yadi.sk/d/pSlLRWAw-0rqnQ

Anydy

Фото 360, поворотный столик

#2

Сообщение Anydy » 26.07.2020{, 02:42}

magbiser писал(а):
25.07.2020{, 15:42}
Есть схема и прошивка к ардуино для поворотного стола от 12 летней девочки Алены
Какая умничка....нам бы в детстве такое)))
По теме - драйвер А4988 - правильный выбор, но лучше Drv8825
Про управление ИК и блютуз - ерунда.....у вас какая камера? Не вебка же? Нормальная камера управляется по кабелю!
Соответственно шаговый двигатель + драйвер + ардуино = Time-Lapse
Пример

Аватара пользователя
magbiser
Рядовой
Сообщения: 30
Зарегистрирован: 04.02.2016{, 03:31}
Репутация: 0
Откуда: Подольск

Фото 360, поворотный столик

#3

Сообщение magbiser » 04.08.2020{, 03:52}

Anydy писал(а):
26.07.2020{, 02:42}
magbiser писал(а):
25.07.2020{, 15:42}
Есть схема и прошивка к ардуино для поворотного стола от 12 летней девочки Алены
Какая умничка....нам бы в детстве такое)))
По теме - драйвер А4988 - правильный выбор, но лучше Drv8825
Про управление ИК и блютуз - ерунда.....у вас какая камера? Не вебка же? Нормальная камера управляется по кабелю!
Соответственно шаговый двигатель + драйвер + ардуино = Time-Lapse
Пример
Time-Lapse конечно хорошо, но задачи у этого столика другие... Хотя, тоже самое, но под определенным углом :smile38: Камера у меня как раз - Canon и для управления ею и нужно из кода удалить управление по ИК, а добавить вместо него простое реле (чтобы когда происходит остановка, срабатывало реле). Блютуз в коде нужен для управления всем этим процессом (выставления количества снимков и угла поворота столика).

По драйверам согласен, но написал тот, который есть на данный момент...

Аватара пользователя
vacz
Лейтенант
Сообщения: 485
Зарегистрирован: 17.10.2016{, 05:56}
Репутация: 52
Имя: Владимир

Фото 360, поворотный столик

#4

Сообщение vacz » 04.08.2020{, 16:36}

Два года назад (2018), по просьбе, делал проект фото стола в FLProg 4-2-4 на Nano 328, дисплей LCD1602 с I2C.

1. Два режима работы: фотосъемка и видеосъемка. Режим фотосъемки: поворот, пауза, поворот, пауза и т.д. Во время паузы происходит срабатывание затвора фотоаппарата через реле или ИК светодиод. Выбор количества кадров от 1 до 50, на один оборот стола 360°, устанавливается в меню.
Режим фотосъемки: оборот стола на 360 градусов без остановок с включением камеры в начале и с выключением в конце. При установке количества кадров в 1, автоматически включается режим видео - «V1». При установке количества кадров больше 1, автоматически включается режим фото - «F2-50».
2. Три режима скорости вращения стола: 1- быстро, 2- средне, 3-медленно. Выбор скорости в меню.
Драйвер двигателя включен в режиме дробления шага 1/16.
3. Выбор направления вращения стола , устанавливается в меню.
4. Пауза от 1 до 5 секунд, после остановки двигателя, для стабилизации вибраций стола.
Устанавливается в меню.
5. Выбор количества шагов двигателя на один оборот стола. Устанавливается в меню.
6. Два выхода для управления камерой: через реле и через ИК диод, на выбор. Оба включаются и отключаются в меню независимо.
7. Выход управления лазера. Лазер устанавливается на камере и служит для визуальной настройки, центровки камеры на объект. Выбор вкл/выкл устанавливается в меню. При включении, лазер горит постоянно. Выключается
автоматически перед съемкой и включается после окончания съемки.
8. Меню. Выбор режима; выбор количества кадров; выбор скорости; выбор направления вращения стола; выбор длительности паузы; выбор количества шагов на один оборот стола; включение/отключение выходов реле и ИК диода;
включение/отключение выхода лазера;
9. Выход для подключения выносной кнопки пуск или педали.
10. Запуск осуществляется кратковременным нажатием на кнопку pusk (или выносную
педаль/кнопку).
При удержание кнопки более 2 секунд, будет переход в режим выбора меню. Переключение в меню – кнопкой энкодера; выбор значений – поворот(вправо/влево) ручкой энкодера. Выход из меню - удержание кнопки более 2 секунд.
FS-M4.jpg
Попробуй, может подойдет.
Фотостол.rar
(305.93 КБ) 55 скачиваний
Будь проще к людям. Хочешь быть мудрей - не делай больно мудростью своей. "Омар Хайям"

Ingwar
Полковник
Сообщения: 1929
Зарегистрирован: 28.10.2015{, 22:47}
Репутация: 223
Откуда: Ленобласть
Имя: Игорь

Фото 360, поворотный столик

#5

Сообщение Ingwar » 04.08.2020{, 18:37}

Люди в своем большинстве живо интересуются всем на свете, за исключением того, что действительно стоит знать.

Аватара пользователя
magbiser
Рядовой
Сообщения: 30
Зарегистрирован: 04.02.2016{, 03:31}
Репутация: 0
Откуда: Подольск

Фото 360, поворотный столик

#6

Сообщение magbiser » 09.08.2020{, 18:40}

Огроменное спасибо!!! Попробую повторить...

Отправлено спустя 19 секунд:
Ingwar писал(а):
04.08.2020{, 18:37}
До кучи https://www.thingiverse.com/thing:3958326
Спасибо большое!!!

Аватара пользователя
magbiser
Рядовой
Сообщения: 30
Зарегистрирован: 04.02.2016{, 03:31}
Репутация: 0
Откуда: Подольск

Фото 360, поворотный столик

#7

Сообщение magbiser » 13.08.2020{, 16:33}

vacz, здравствуйте! Поможете немного модернизировать Ваш проект? Задумал на переднее меню вывести счетчик оставшихся кадров, а вот реализовать пока не могу... Понимаю, что есть переменная HAG и от нее нужно каждый цикл онимать единицу, а вот как на блоках собрать - не могу сообразить. Получается что только один раз отнимает, а потом возвращается снова изначальная цифра...

Аватара пользователя
vacz
Лейтенант
Сообщения: 485
Зарегистрирован: 17.10.2016{, 05:56}
Репутация: 52
Имя: Владимир

Фото 360, поворотный столик

#8

Сообщение vacz » 13.08.2020{, 20:55}

Попробуй так:
1.PNG
Будь проще к людям. Хочешь быть мудрей - не делай больно мудростью своей. "Омар Хайям"

Аватара пользователя
magbiser
Рядовой
Сообщения: 30
Зарегистрирован: 04.02.2016{, 03:31}
Репутация: 0
Откуда: Подольск

Фото 360, поворотный столик

#9

Сообщение magbiser » 14.08.2020{, 11:19}

vacz писал(а):
13.08.2020{, 20:55}
Попробуй так:
1.PNG
К сожалению не получилось. Все так же - шаги остаются без изменений. Уже эксперементировал и добавлением переменных - rele, puk, pusk (на мой не профессиональный взгляд не хватает запускающего элемента, поскольку переменная HAG не участвует в цикле)... Пробовал и конверторы и компараторы добавлять - не получается, в лучшем случае уменьшается на одно значение...

Аватара пользователя
vacz
Лейтенант
Сообщения: 485
Зарегистрирован: 17.10.2016{, 05:56}
Репутация: 52
Имя: Владимир

Фото 360, поворотный столик

#10

Сообщение vacz » 14.08.2020{, 16:38}

Попробуйте создать свою переменную и используйте ее.
11.PNG
11.PNG (3.75 КБ) 309 просмотров
Будь проще к людям. Хочешь быть мудрей - не делай больно мудростью своей. "Омар Хайям"

Ответить

Вернуться в «Помогите, а то я "нимагу"»