Макрорельсы для макросъемки .
- Войдите на сайт для отправки комментариев
Доброго дня . Наконец то нашел время для хобби .
Давным давно собрал макрорельсы для макросьёмки . Устроены просто , стоит мультивибратор и пара РПС .
Но примитивность дает о себе знать . По механике всё хорошо стоит мощный редуктор и маленький электродвигатель . Также есть и полностью ручное управление для макрорельс . Все расположилось в маленьком алюминевом кейсе .
3 Дать команду на сьемку ( выдать команду на реле управления камерой )
4 Ждать 5 секунд пока камера отработает .
5 Включить электромотор и переместить каретку на заданное растояние .
и так по этому алгоритму заданное количество раз .
В прошлом году мне помогли с поворотным столом спасибо всем кто принял участие в этом проекте .
На основе того проекта можно выполнить и этот . Пока ничего не менял выложил как есть .
Нужно только придумать как менять время работы двигателя непосредственно на ардуине , согласитесь что каждый раз перепограмировать ардуину это геморойно .
Вместо принт S выход на реле . Конечно можно через ИК порт но это лишнее .
Еще нужно придумать как менять количество циклов .
И самое страшное на последок . КАК ВСЁ ЭТО ВЕРНУТЬ В ИСХОДНУЮ ТОЧКУ .
Сообразить как сделать ну ни как не получается . Помогите ПОЖАЙЛУСТА .
1) Перейти на шаговый двигатель;
2) Принимать команды на перемещение через COM-порт.
Я же Вам писал вчера - вставьте код правильно - с номерами строк! Даже говорил, где написано как вставлять правильно. А Вы опять вставили как попало. Издеваетесь?
Пардон вечером исправлю.
В связке с компьютером получается очень громоздко и не удобно . Насекомые они гады на природе живут . Тащить в поле тяжело .
Нужно все сделать автономно .
Шаговый двигатель это здорово но очень много переделывать . Стоит редуктор примерно 1 на 700 даже если управлять по времени как сейчас получается довольно точно позиционировать .
Давно не был на Вашем замечательном сайте .
Что поменялось , не могу фото вставить .
Если "по времени", то непонятна проблема. Крутанул на 3 сек, щёлкнул, зареверсировал двигатель, крутанул на 3 сек. Все. "Время работы" одним энкодером меняешь, "количество циклов" - другим. Или кнопками. Четырьмя.
Примерно так . Но как это встроить в скеч ?
В программирование полный 0 . Если есть возможность и желание помогите пожалуйста .
блин... когда я своим таким займусь...
всё не правильно.
1. нужен шаговик
2. нужно задавать приделы, где камера должна начать и кончить снимать... повалюкали камерой на рельсах, задали приделы где начинается\заканчивается резкость, ардуинка посчитала количество шагов движка, поделила их на количество кадров, стала в начало и начала дергать затвор после того, как шаговик отработает.
3. избавится от бытовых лед светильников, они дико зеленят, только импульсный свет.
Конечно LED зло но как фон получается очень не плохо . Только надо использовать без драйверов , иначе на всех кадрах будет разный цвет .
Глубину прохода камеры и количество снимков можно и вручную выставить .
И конечно только вспышка .
Хотя при использование led драйверов при сборке кадра получаются интересные эффекты 3 д .
Ну да, сжечь светодиоды — это тоже решение, так сказать.
фон получается?!??!???
фон значит, в макро, понятно....
Без драйверов ЭТО через резистор . Иначе мерцание которые мы невидим глазом камера фиксирует .
Для начала нужны концевики в крайних положениях механизма, чтобы от этих нулей отсчитывать расстояния. Это 2 кнопки в программе.
При стабильном токе и напряжении, условно считайте, что расстояние == время работы двигателя.
Время работы двигателя, между срабатыванием концевиков, делите на число - "оптимальная точность позиционирования"
И у вас есть координатная линейка.
Сейчас и стоят два концевика которые и ограничивают перемещение коретки . Жалко фото не загрузились . Регулируя расстояние между ними задаю расстояние перемещения . Дойдя до концевика РПС переключается и возвращает коретку на исходную точку заданную вторым концевиком .
Стоит мультивибратор с помощью которого и выдаются команды на движение , съёмку , движение . Время работы на перемещение задаётся переменным резистором . Все просто до безобразия .
Без драйверов ЭТО через резистор
Без драйверов это с драйвером
Если вам угодно называть токогосящий резистор драйвером то пожалуйста .
Лучше подскажите как ввести регулировку в скетч .
Рад бы переделать но к сожалению нет ссылки изменить . И подскажите пожалуйста как правильно вставлять фото . С ,, радикала ,, не работает отказ сервера . Может Яндекс .
Не обязательно внешний сервет, картинки можно грузить в свой профиль. В профиле находите "File browser". в нем - загрузить.
Когда вставляете картинку в сообщение - используйте кнопку "выбор на сервере" рядом с полем ввода ссылки
К моему сожалению фото с Радикала не открылись ну и ладно .
Сьемка . Крышка используется как фон .
Всё умещается в маленький чемоданчик . При подключение АКБ 12 вольт можно и в поле .
Не исправитесь - первое сообщение топика не редактируется.
А жаль , админ может его удалить ? Портит весь вид . Нашел интересный проект как специально написанный под мои нужды photopizza . Меняем градусы на мм и вперёд .
Еще бы обойти шаговый двигатель и оставить электромотор .
Весь проект изложен по ссылке https://cxem.net/arduino/arduino156.php
Проект открытый так что можно и переделать под свои нужды . Тем более что эта ветка молчит .
Столкнулся с проблемой при подключении клавиатуры на 12 кнопок . В мониторе порта вместо чисел 4, 5, и тд . Пишет В52 , В54 и т далее . После некоторых В57 вставляет IR коды для пульта . При подключение другого блока кнопок результат тот же . При загрузке проверочного скеча из примеров все работает . Подскажите куда копать .
// клавиатура #include <Keypad.h> const byte ROWS = 3; //four rows const byte COLS = 3; //four columns char keys[ROWS][COLS] = { {'4','5','6'},{'7','8','9'},{'*','0','#'}}; byte rowPins[ROWS] = {14,15,16}; //connect to the row pinouts of the keypad byte colPins[COLS] = {17,18,19}; //connect to the column pinouts of the keypad Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); char key=' ';Там подключено 5 библиотек . По ссылке можно скачать полностью . Как здесь вставить не знаю .
[code] // Моя версия скетча для поворотной платформы #include "defines.h" // библиотека IR #include <IRremote.h> //вход ИК приемника int RECV_PIN = 2; IRrecv irrecv(RECV_PIN); IRsend irsend; decode_results results; unsigned long ir_dt, old_ir; long ir_kod; unsigned long ir_time1, ir_time2; // клавиатура #include <Keypad.h> const byte ROWS = 3; //four rows const byte COLS = 3; //four columns char keys[ROWS][COLS] = { {'4','5','6'},{'7','8','9'},{'*','0','#'}}; byte rowPins[ROWS] = {14,15,16}; //connect to the row pinouts of the keypad byte colPins[COLS] = {17,18,19}; //connect to the column pinouts of the keypad Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); char key=' '; ////////// Stepper #include <AccelStepper.h> AccelStepper stepper1(2,9,10); // #include <LiquidCrystal.h> LiquidCrystal lcd(12,11,7,6,5,4); // #include <EEPROM.h> // состояние дисплея struct VIEW { int count_prg; // кол-во программ int tek_prg; // текущая программа int pos_prg; // позиция в программе int val[10]; // значение позиции }; VIEW VIEW1={0,0,0,{0,0,0,0,0,0,0,0,0,0}}; // шаговый двигатель struct RUN // структура { int tekrunprg; long steps; // long step; // int countstep; int speed; // int circles; int tekcircle; int dtekcircle; int direction; int tekdirection; int photo; int stopphoto; int photopause; int pause; int statuspause; unsigned long millispause; }; RUN RUN1={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; // min,max,step для настроек unsigned long minvalue[9]={0,0,0,0,0,0,0,0,0}; unsigned long maxvalue[9]={370,370,3100,4,100,2,2,100,9000}; unsigned long stepvalue[9]={5,5,50,1,1,1,1,1,500}; int mode; unsigned long milliskey=0; unsigned long milliscalib=0; long pos1=0; long pos2=0; int K1=100; void setup() { // последовательный порт Serial.begin(9600); // дисплей lcd.begin(16,2); lcd.clear(); lcd.setCursor(0,0); lcd.print("photopizza v0.06"); lcd.setCursor(0,1); lcd.print("+79034461752"); // инициализация настроек из EEPROM if(EEPROM.read(0)==255) { clear_eeprom(); ini_eeprom(1); } // инициализация настроек из EEPROM get_param_prg_eeprom(0); // delay(2000); mode = VIEW_MODE; lcd_str1(mode); lcd_str2ve(); // stepper1.setSpeed(500); //stepper1.setAcceleration(100.0); // включить приемник irrecv.enableIRIn(); // прерывания для ИК ir_time1=0;ir_time2=0; attachInterrupt(0, get_ir_kod, FALLING); } void loop() { // обработка кода нажатия if(ir_kod>0) { Serial.print("ir_kod=");Serial.println(ir_kod,HEX); lcd_get_key(2);milliskey=millis(); key=ir_to_key(ir_kod); ir_kod=0; do_for_key(mode,key); } key = keypad.getKey(); if(key){ Serial.print("key=");Serial.println((int)key); lcd_get_key(1);milliskey=millis(); do_for_key(mode,key); } // if(millis()-milliskey>1000) lcd_get_key(0); if(mode==CALIB_MODE) { stepper1.runSpeed(); if(millis()-milliscalib>1000) {lcd_str2calib(stepper1.currentPosition()); milliscalib=millis(); Serial.println(stepper1.currentPosition()); } } if (stepper1.distanceToGo() == 0 && RUN1.tekrunprg>0) { RUN1.countstep=RUN1.countstep+1; if(RUN1.steps>RUN1.step*RUN1.countstep) // 1 цикл несколько шагов { Serial.print("current=");Serial.println(stepper1.currentPosition()); Serial.print("countstep=");Serial.println(RUN1.countstep); if(mode==RUN_MODE) lcd_str2run(); if(RUN1.stopphoto>0) delay(RUN1.pause); pos1=min(RUN1.steps,RUN1.step*(RUN1.countstep+1)); pos2=pos1*K1*kdirs[RUN1.tekdirection]; Serial.print("pos1=");Serial.println(pos1); Serial.print("pos2=");Serial.println(pos2); stepper1.moveTo(pos2); } else // закончился круг { Serial.print("current=");Serial.println(stepper1.currentPosition()); Serial.print("countstep=");Serial.println(RUN1.countstep); if(mode==RUN_MODE) lcd_str2run(); RUN1.tekcircle=RUN1.tekcircle+RUN1.dtekcircle; if(RUN1.circles>RUN1.tekcircle || RUN1.circles==0) { stepper1.setCurrentPosition(0); RUN1.countstep=0; stepper1.setSpeed(0); stepper1.setCurrentPosition(0); if(RUN1.stopphoto>0) { if(RUN1.photo>0) { detachInterrupt(0); delay(100); for (int i = 0; i < 5; i++) {irsend.sendSony(0x8CBC0,20);delay(100);} delay(RUN1.pause); attachInterrupt(0, get_ir_kod, FALLING); irrecv.enableIRIn(); } else delay(RUN1.pause); } if(RUN1.tekdirection>1) RUN1.tekdirection=RUN1.tekdirection+kdirs[RUN1.tekdirection]; Serial.print("current=");Serial.println(stepper1.currentPosition()); Serial.print("countstep=");Serial.println(RUN1.countstep); if(mode==RUN_MODE) lcd_str2run(); stepper1.setSpeed(RUN1.speed*kdirs[RUN1.tekdirection]); stepper1.moveTo(min(RUN1.steps,RUN1.step)*K1*kdirs[RUN1.tekdirection]); } else { stepper1.setSpeed(0); stepper1.setCurrentPosition(0); mode=VIEW_MODE;RUN1.tekrunprg=0; lcd_str1(mode);lcd_str2ve(); } Serial.print("currentPos=");Serial.println(stepper1.currentPosition()); } } else if(RUN1.tekrunprg>0) stepper1.runSpeed(); else ; } [/code]Я Вас просил
Я хочу его (код) запустить сам и посмотреть в чём там проблема.
У Вас проблема с клавиатурой, так чего Вы мне пихаете аксельстеппер, ликвидкристалл и др. Сократите код до минимума так, чтобы проблема оставалась видимой, всё остальное выбросьте и тогда выкладывайте. Я (или кто другой) сможет его запустить и посмотреть в чём там беда.
Напрасно паниковал . При подключении 1602 все команды проходят корректно . Немного запутано но буду ,,, ковырять,,, дальше .
а у вас хобби снимать или в программках ковыряться ?
похоже что ковыряться.
вы уже столько времени на хрень, в которой не разбираетесь, потратили, что давно, и за не дорого, можно было заказать проект и наслаждаться съёмкой жучков и цветочков.
Спасибо за совет . Но по ковыряться хочется . Хобби такое . Потихоньку по ходу учусь и если не понятно спрашиваю грамотных людей . Целиком сам не напишу но подправить под свои нужды программу попробую .