Слайдер для Gopro.
- Войдите на сайт для отправки комментариев
Ср, 17/09/2014 - 12:01
Здравствуйте! Давно мучала мысль сделать слайдер ( устройство для медленного передвижения go pro или любой другой камеры), на этой неделе собрал, купил arduino leonardo, lcd дисплей, драйвер двигателя на l293 и шаговый.
все собрал, запрограммировал. Но! Контреллер не может вести обратный отсчет и сразу же крутить мотор. Действия производятся последовательно. Пробывал ф-ию millis не работает. Кто знает, как можно сделать так, чтобы мотор крутился и таймер не зависал и работал? Заранее спасибо!
Еще в таких случаях пишут "перерыл весь Интернет, ничего не нашел". Это не форум гадалок, покажите же, что собрали, как запрограммировали.
Ну и как управляете двигателем - кнопками или потенциометром
Двигатель управляется по следующей схеме: Ардуино, драйвер двигателя, двигатель. Управляющик 4 пина (6,7,8,9). Вот код:
#include <Stepper.h> const int stepsPerRevolution = 200; Stepper myStepper(stepsPerRevolution, 6,7,8,9); void setup() { myStepper.setSpeed(1); Serial.begin(9600); } void loop() { Serial.println("clockwise"); myStepper.step(stepsPerRevolution); }Так же, есть код вывода таймера на дисплей:
#include <LiquidCrystal.h> LiquidCrystal lcd(12,11,10,5,4,3,2); int runTimer = 1; int runFor = 60; void setup() { lcd.begin(16, 2); } void loop() { if(runTimer == 1){ lcd.clear(); lcd.print("TIMER="); //Start timer timer(); } else { } runTimer = 0; lcd.noDisplay(); delay(250); for(int duration = 0; duration < 100; duration ++){ } lcd.display(); delay(250); } void timer() { for(int timer = runFor;timer > 0; --timer){ if(timer >= 10) { lcd.setCursor(6,0); } else { lcd.setCursor(6,0); lcd.print("0"); lcd.setCursor(7,0); } lcd.print(timer); lcd.print(" SECOND!"); delay(1000); } lcd.setCursor(0,0); lcd.clear(); lcd.print(" TIMER ALERT!"); }Суть в том, что таймер ведет отсчет и двигатель работает. Как только время вышло, выводится сообщение на дисплей и двигатель останавливается. Нужно как-то два этих кода соединить так, что бы они работали параллельно.
Прогамма запускается автоматически.
Выкинуть библиотеку и написать прямое управление двигателем.
Сделать шаг меньше. Что секкнды успевали счелкать.
Хм, меньше нельзя, по рпсчетам 200 шагов = 1 оборот, 1 шаг равен 0,4 см, Можно больше. А можете пожалуйста, написать код, буду очень благодарен. Потомучто если я выкидываю библиотеку выдается ошибка.
О как. Я щас спрошу простой детский вопрос но вам будет всему сразу обидно.
- Дяденька, вы дурак?
Хах, Нет конечно. Просто с++ Вообще не знаю, беру все готовое и пробую с этим работать. Что-то меняю в коде что-то оставляю. Ардуино на руках только 3 день.
Вы предлогаете использовать вот такой код без библиотеки:
void unStepMotor(int pin_1, int pin_2,int pin_3,int pin_4,int speedMotor){ digitalWrite(pin_1,HIGH); digitalWrite(pin_2,LOW); digitalWrite(pin_3,LOW); digitalWrite(pin_4,LOW); delay(speedMotor + 1); // digitalWrite(pin_1,HIGH); digitalWrite(pin_2,HIGH); digitalWrite(pin_3,LOW); digitalWrite(pin_4,LOW); delay(speedMotor + 1); // digitalWrite(pin_1,LOW); digitalWrite(pin_2,HIGH); digitalWrite(pin_3,LOW); digitalWrite(pin_4,LOW); delay(speedMotor + 1); // digitalWrite(pin_1,LOW); digitalWrite(pin_2,HIGH); digitalWrite(pin_3,HIGH); digitalWrite(pin_4,LOW); delay(speedMotor + 1); // digitalWrite(pin_1,LOW); digitalWrite(pin_2,LOW); digitalWrite(pin_3,HIGH); digitalWrite(pin_4,LOW); delay(speedMotor + 1); // digitalWrite(pin_1,LOW); digitalWrite(pin_2,LOW); digitalWrite(pin_3,HIGH); digitalWrite(pin_4,HIGH); delay(speedMotor + 1); // digitalWrite(pin_1,LOW); digitalWrite(pin_2,LOW); digitalWrite(pin_3,LOW); digitalWrite(pin_4,HIGH); delay(speedMotor + 1); // digitalWrite(pin_1,HIGH); digitalWrite(pin_2,LOW); digitalWrite(pin_3,LOW); digitalWrite(pin_4,HIGH); delay(speedMotor + 1); // } void setup(){ pinMode(8,OUTPUT); pinMode(7,OUTPUT); pinMode(4,OUTPUT); pinMode(2,OUTPUT); } // void loop(){ for(int i=0; i<=60; i++) unStepMotor(8,7,4,2,0); for(int j=0; j<=60; j++) unStepMotor(2,4,7,8,0); }внутренный счетчик никогда не останавливается (ну если только питания вырубить)
что точно надо? по шагам. например сделали 10 шагов отправили время (или включили рэле неважно)и так далее
или крутить шаговик в течении 3 секунд например а потом что то сделать
Я предлагаю делать один шаг , считаем таймер , делаем шаг ,считаем таймер и тд
Суть в том, что шаговик вращает шпильку. Есть рельсы и карета. На карете, внизу, есть гайка в которой таки и есть данная шпилька. Гайка тянет каретку и камера на ней плавно едет в течении 3 часов. Если сделать как Вы предлагаете, то плавность исчезнет.
Так можно, но опять таки, я боюсь что камера будет идти рывками. Хотя промежуток маленький и незаметный. Об этом я давно думал. Гугл помощи не дал. Оставил эту мысль в гробу. Я не пойму как сделать так: шаг, -1 сек. таймер, шаг, и.т.д.
Мда а попробовать, религия не позволяет?
это слишком просто
а помучатся?
отбил все желание у человека велосипеды изобретать
это ведь не шаговый двигатель который шагает и стоит
это ведь реактивная турбина которую останоить нельзя
и как вот тысячи камер видонаблюдения наезжают отьезжают крутя обьективы?
а тут шаговый мотор
я еще понимаю движок постоянного тока
#include <LiquidCrystal.h> LiquidCrystal lcd(12,11,10,5,4,3,2); int runTimer = 1; int runFor = 60; // time in seconds void unStepMotor(int pin_1, int pin_2,int pin_3,int pin_4,int speedMotor){ digitalWrite(pin_1,HIGH); digitalWrite(pin_2,LOW); digitalWrite(pin_3,LOW); digitalWrite(pin_4,LOW); delay(speedMotor + 1); // digitalWrite(pin_1,HIGH); digitalWrite(pin_2,HIGH); digitalWrite(pin_3,LOW); digitalWrite(pin_4,LOW); delay(speedMotor + 1); // digitalWrite(pin_1,LOW); digitalWrite(pin_2,HIGH); digitalWrite(pin_3,LOW); digitalWrite(pin_4,LOW); delay(speedMotor + 1); // digitalWrite(pin_1,LOW); digitalWrite(pin_2,HIGH); digitalWrite(pin_3,HIGH); digitalWrite(pin_4,LOW); delay(speedMotor + 1); // digitalWrite(pin_1,LOW); digitalWrite(pin_2,LOW); digitalWrite(pin_3,HIGH); digitalWrite(pin_4,LOW); delay(speedMotor + 1); // digitalWrite(pin_1,LOW); digitalWrite(pin_2,LOW); digitalWrite(pin_3,HIGH); digitalWrite(pin_4,HIGH); delay(speedMotor + 1); // digitalWrite(pin_1,LOW); digitalWrite(pin_2,LOW); digitalWrite(pin_3,LOW); digitalWrite(pin_4,HIGH); delay(speedMotor + 1); // digitalWrite(pin_1,HIGH); digitalWrite(pin_2,LOW); digitalWrite(pin_3,LOW); digitalWrite(pin_4,HIGH); delay(speedMotor + 1); // } void setup(){ lcd.begin(16, 2); pinMode(6,OUTPUT); pinMode(7,OUTPUT); pinMode(8,OUTPUT); pinMode(9,OUTPUT); } // void loop(){ if(runTimer == 1){ lcd.clear(); lcd.print("\xA8p\xB8\xB3""e\xBF"); //Start timer timer(); } else { } runTimer = 0; lcd.noDisplay(); delay(250); for(int duration = 0; duration < 100; duration ++){ } lcd.display(); delay(250); } void timer() { for(int timer = runFor;timer > 0; --timer){ if(timer >= 10) { lcd.setCursor(6,0); } else { lcd.setCursor(6,0); lcd.print("0"); lcd.setCursor(7,0); } lcd.print(timer); lcd.print(" SECOND!"); for(int i=0; i<=200; i++) unStepMotor(6,7,8,9,0); } lcd.setCursor(0,0); lcd.clear(); lcd.print(" TIMER ALERT!"); }Переделал код. Щас попробую.
Суть в том, что шаговик вращает шпильку. Есть рельсы и карета. На карете, внизу, есть гайка в которой таки и есть данная шпилька. Гайка тянет каретку и камера на ней плавно едет в течении 3 часов. Если сделать как Вы предлагаете, то плавность исчезнет.
я не телепат
что там за шпилька
музыкальная? https://yadi.sk/i/HtXBk6nebK38u
может механика кривая?
Еще раз мдааааа. А че так мало делеев? Пихай их больше.
много букв а толком как должно работать непонятно. шаг -1сек таймер. как это понять???
Шпилька - это длинный болт. На одном конце шаговый, на другом подшипник. На карете (которая на рельсах) внизу есть гаечка, в ней этот самы болт. Болт вращается, и по резьбе гайка едет вместе с коретой.
Шаг двигателя, -1 секунда от заданного времени на таймере. 1 шаг равен 1 секунде.
много букв а толком как должно работать непонятно. шаг -1сек таймер. как это понять???
Ну видимо 3 часа = 10800 шагов. Там же рельсы Москва-Владивосток
и у него не получилось так сделать? 1 шаг + отнять переменную + вывести в uart или на дисплей меньше секунды надо. еще ждать придется))
Говорю еще раз, язык программирования для меня темный лес. Длинна рельс уже 4 метра и расчитанно все так что реально потребуется 10800 секунд. Но шагов чуть меньше)
и у него не получилось так сделать? 1 шаг + отнять переменную + вывести в uart или на дисплей меньше секунды надо. еще ждать придется))
А че гы? Он на этот шаг ставит скорость меньше чем у улитки. А библиотека ему не отдает руль, пока не доделает задачу. А сделать шаг меньше 200 ему религия не позволяет.
не понял снова. 1 шаг это не шаг шагового двигателя, а какая то другая еденица или что? шаг в чем измеряется в сантиметрах или попугаях может
не понял снова. 1 шаг это не шаг шагового двигателя, а какая то другая еденица или что? шаг в чем измеряется в сантиметрах или попугаях может
В удавах намотаных на 4 метровый шток.
4 метра двигать камеру - думаю это что-то для панарамных сьемок
если я правильно понял
я вижу к чему вы прийдете
насколько я понял интерес в том чтоб не бустро от угла до угла добежать а несколько дней "тянучки" на фото тянуть
насколько я понял вы прийдете к двум решениеям сразу или одному из них
это микрошаговый драверочек за 5$ или пара понижающих шестеренок
просвятите меня как чайника что такое
слайдер?
Что это по-английски, и я не нужно переводить.
у вас же есть фотоаппарат
где фото?
на те вам рабочего кода из моего каталога stepmotors
// art100 написать 20140523 тест шаговые двигатели pololulu A4988 // пен--------------------------------------- // джойстик -------------------------- int joypinx = A0; //джойстик pin int joypiny = A1; //джойстик pin int joypinf = A2; //джойстик pin // лазеров, светодиодов ---------------- int led3 = A4;//3; // // шаговые двигатели ------------ int dir_Pin1 = 4;// int stepPin1 = 3;// #define microstep16pin A5// #define sleeppin 2// // константы для джойстика ------------------------------------------- int sp1table = 120;// a4988 1000;//медленный int sp2table = 10;// a4988 10000;//скорость a3987 int joyx = 0; //джойстик int joyy = 0; //джойстик int joyf = 0; //джойстик int stepxcor =10;// для коррекции >0< int stepycor =10;// для коррекции >0< // usb------------------------------ int commandusb = 0; // //--------------------------- // шаговый двигатель 1 pololulu A4988 ------------------------------- void stepA4988(boolean dir1,int steps1,int msec1){ digitalWrite(dir_Pin1,dir1); // направление for(int i=0;i<steps1;i++){ digitalWrite(stepPin1,HIGH); delayMicroseconds(msec1); digitalWrite(stepPin1, LOW); delayMicroseconds(msec1); } } //-------------------------------------------------------------------------------------- void setup(){ pinMode(joypinx, INPUT); //джойстик X pinMode(joypiny, INPUT); //джойстик Y pinMode(joypinf, INPUT_PULLUP); //джойстик fire pin pinMode (сд3), OUTPUT); //лазерная digitalWrite(сд3), HIGH); // pinMode(dir_Pin1, OUTPUT);//Таблица pinMode(stepPin1, OUTPUT);//Таблица pinMode(microstep16pin, OUTPUT); digitalWrite(microstep16pin, HIGH); //высокий для 16microstepping, низким не microstepping pinMode(sleeppin, OUTPUT); Serial.begin(9600); } //====================================================================== void loop(){ // джойстик ---------------------------------------------------------- joyx = analogRead(joypinx)>>7; // 3 кнопки 0/4/7 0.1.2.3.4.5.6.7 sanks for speed реестра shift Flexi joyy = analogRead(joypiny)>>7; // 3 кнопки 0/4/7 0.1.2.3.4.5.6.7 sanks for speed реестра shift Flexi // Serial.print('X');Serial.print(joyx);Serial.print(';'); Serial.print('Y');Serial.print(joyy);Serial.println(';'); //тест если(joyx==0){stepA4988(false,stepxcor,sp1table);}//скорость если(joyx==7){stepA4988(правда ,stepxcor,sp1table);}//скорость если(joyy==0){stepA4988(false,stepxcor,sp2table);}//скорость если(joyy==7){stepA4988(правда ,stepxcor,sp2table);}//скорость // led -------------------------------------------------------- if(digitalRead(joypinf)==LOW) { digitalWrite(сд3), LOW); } // лазерная работать else { digitalWrite(сд3), HIGH); } // лазерная работать Serial.print("joyx joyy sp1table sp2table: "); Serial.print(joyx);Serial.print(joyy);Serial.println(";");//Serial.print(sp1table);Serial.print(sp2table);Serial.println(";");// // джойстик ---------------------------------------------------------- // usb ---------------------------------------------------------------- if (Serial.available() > 0) { commandusb = Serial.read(); если (commandusb==76 ) {digitalWrite(сд3), HIGH);} // лазера на L если (commandusb==108) {digitalWrite(сд3), LOW);} // laser off l если (commandusb==45 ) {stepA4988(правда, stepycor,sp1table);} // вниз+ если (commandusb==43 ) {stepA4988(false,stepycor,sp1table);} // Serial.print("commanda usb received: "); Serial.println(commandusb); } // usb ---------------------------------------------------------------- } // digitalWrite(STEP_PIN_0, высокий); // digitalWrite(STEP_PIN_1, высокий); // delay(1); // digitalWrite(STEP_PIN_0, низкий); // digitalWrite(STEP_PIN_1, низкий); // delay(1); //======================================================================== // шаговый двигатель 1 Таблица для A3987 easydriver 2 булавки------------------------------------ //void step1(boolean dir1,int steps1,int msec1){ // digitalWrite(dir_Pin1,dir1); // направление // for(int i=0;i<steps1;i++){ // digitalWrite(stepPin1,высокий); delayMicroseconds(msec1); // digitalWrite(stepPin1, LOW); delayMicroseconds(msec1); // } //} // шаговый двигатель 2 лазерная для A3987 easydriver 2 булавки------------------------------------ //void step2(boolean dir2,int steps2,int msec2){ // digitalWrite(dir_Pin2,dir2); // направление // for(int i=0;i<steps2;i++){ // digitalWrite(stepPin2,HIGH); delayMicroseconds(msec2); // digitalWrite(stepPin2, LOW); delayMicroseconds(msec2); // } //} // для L298 4 контакта-------------------------- //// для (o=0; o<stepsmotor1; o++) { // 360 градус Таблица // for (m=0; m<step1Laser/8; m++) { // 200step/8=25step 25step*1.8gradus/step = 45 градус сканирование с низким // digitalWrite(сд3), HIGH); //лазер и вниз // //myStepper2.step(+1); // step2(правда, steptable,speetable); //// delay(100); //для компьютера tormoz 0,01 sek // delay(500); //для компьютера tormoz 0,01 sek //// delay(1000); //для компьютера tormoz 1 sek // } // //возвращение на старт // for (m=0; m<step1Laser/8; m++) { // 200step/8=25step 25step*1.8gradus/step = 45 градус вернуть // digitalWrite(сд3), низкий); // //myStepper2.step(-1); // до лазера // //myStepper1.step(+1); // Таблица 45 градус // step2(false,steptable,speetable); // step1(правда, steptable,speetable); // } // delay(1000); //для компьютера tormoz 1 5 sek //------------------------------------------ //DEC, Char D Ch D Ch Ch D //0 null 32 64 sp @ 96 ` //1 33 ! 65 97 //2 34", 66 б 98 б //3 35 # 67 C 99 c //4 36 $ 68 D 100 d //5 37 % 69 E e 101 //6 38 & 70 F f 102 //7 39 ' 71 г 103 г //8 40 ( 72 ч 104 ч //9 вкладка 41 ) 73 I 105 i //10 строка 42 * 74 J j 106 //11 43 + 75 K k 107 //12 44 , 76 л 108 л //13 retur 45 - 77 м 109 м //14 46 . 78 N 110 n //15 47 / 79 111 O O //16 48 0 80 стр, 112 стр //17 49 1 81 Q q 113 //18 50 2 82 R r 114 //19 51 3 83 S 115 s //20 52 4 84 T t 116 //21 53 5 85 U u 117 //22 54 6 86 V v 118 //23 55 7 87 W 119 Вт //24 56 8 88 X 120 x //9 25 57 89 Y y 121 //26 58 : 90 Z z 122 //27 59 ; 91 [ 123 { //28 60 < 92 \ 124 | //29 61 = 93 ] 125 } //30 62 > 94 ^ 126 ~ //31 63 ? 95 _ 127 //----------------------------------------http://yadi.sk/d/sydH7XAzR5NQQ
https://yadi.sk/i/zJIaQXHjbXCLY
https://yadi.sk/d/kUpxUCqobXCRX
суть в том что ваш 1.8 градуса поделить еще на 16
короче видео смотрите
Арт100 как обычно на своей спирто содержащей волне. Интересно он вообще читает обсуждения?
не успеваю
а че уже нафлудили и можно страницу обновлять?
Dimo3000, ты таймлапсы снимать собираешься?
Вот фото макета проверочного:
Испльзовать планирую для медленной сьемки облаков, машин, людей. В Самаре много места для этого. Проверил, все работает. Решил заказать токарю запчасти, в скором времени будут ножки, платформы, каретка и многое другое. Всем спасибо за помощь. Скоро будут фото и ведео отчеты. Ну и новый слайдер в заводской красоте =)