Тел. (495) 972-27-12

Панорамная головка на Arduino

Обсуждаем Arduino, Raspberry Pi и другие электронные компоненты и проекты DIY

Re: Панорамная головка на Arduino

Сообщение adil » 10 фев 2015, 17:02

мы можем в личке по общаться? Можете вашу почту
adil
 
Сообщения: 3
Зарегистрирован: 08 фев 2015, 15:54

Re: Панорамная головка на Arduino

Сообщение arthurilyuts » 31 май 2016, 23:58

Приветствую Вас Mr.Kubikus !!!

Спустя долгое время, снова нуждаюсь в Вашем совете.
А именно, пытаюсь немного переделать скетч-код из данной ветки. К стати говоря, о данных изменениях, Вас уже спрашивали и другие, но судя по последним "коментам", до практики это так и не дошло наверное.

Итак, нужда в следуйшем:
1 - Сделать джойстик чуствительным к нажатию. То есть, чем больше жмешь, тем больше скорость мотора. (Вы уже кому то советовали в строчке "stpMotor1.setSpeed(nMotor1MV);" , значение "nMotor1MV" поменять на "nMotor1SP" , однако желаемого результата это не дало. Вернее сказать, результат получился не совсем тот, что нужно.
Во первых, максимальная скорость мотора в целом упала где-то, на 50% и во вторых, даже при центральном положении джойстика, моторы начали медленно шагать, как секундная стрелка часов. Думая, что проблема с зоной нечувствительности, пробовал изменять значение "if (nMotor1SP > 100)" от 5 до 500, однако данные изменения никакой разницы не дало.)

2 - Сохранить функцию переменного резистора, для выставления порога максимальной скорости мотора.

3 - Добавить еще один переменный резистор, для выставления порога плавного старта и торможения мотора, так называемый RAMP. (Читал, что Вы советовали кому-то посмотреть в самой библиотеке, однако уровень моего знания (незнания), да и многих других читателей данной ветки, вынуждает просить Вас помочь и в этом тоже, тем более, что эту функцию еще и нужно привязать к потенциометру.)

Ну и несколько вопросов так, из любопытства:
- В строке "#define MOTOR2_SPR 200" Пробовал менять значение 200, даже "0" ставил, а разницы не заметил. Почему?
- Какое максимальное значение можно ставить в строчке "#define MOTOR1_MAX_SPEED 5000.0"? или как ускорить шаговики?
- "#define MOTOR1_INIT_SPEED 100.0" Что это значение обозначает?
- "stpMotor1.setAcceleration(10.0);" Что это значение обозначает?

Да, к стати, из скетч-кода удалил все, что было связано с концевыми кнопками. Они не нужны.

Code: [Выделить всё] [Expand/Collapse]
  1. #include <AccelStepper.h>
  2.  
  3. #define MOTOR1_DIR_PIN  8
  4. #define MOTOR2_DIR_PIN  11
  5.  
  6. #define MOTOR1_STEP_PIN 9
  7. #define MOTOR2_STEP_PIN 10
  8.  
  9.  
  10. #define MOTOR1_SPR 200  // Кол-во шагов на 1 оборот вала двигателя
  11. #define MOTOR2_SPR 200  // Пробовал менять данное значение, даже "0" ставил, а разницы не заметил
  12.  
  13. #define MOTOR1_MAX_SPEED 5000.0
  14. #define MOTOR2_MAX_SPEED 5000.0
  15.  
  16. #define MOTOR1_INIT_SPEED 100.0 // что это значение обозначает?
  17. #define MOTOR2_INIT_SPEED 100.0
  18.  
  19. #define MOTOR1_JOY_IN 0 // Ось Y джойстика
  20. #define MOTOR2_JOY_IN 1 // Ось X джойстика
  21. #define SPEED_KNOB_IN 2 // Задатчик скорости - переменный резистор 1К
  22.  
  23. AccelStepper stpMotor1(AccelStepper::DRIVER, MOTOR1_STEP_PIN, MOTOR1_DIR_PIN);
  24. AccelStepper stpMotor2(AccelStepper::DRIVER, MOTOR2_STEP_PIN, MOTOR2_DIR_PIN);
  25.  
  26. int nMotor1SP, nMotor2SP;            // Задание направления от джойстика
  27. int nSpeedSP;                        // Задание скорости от задачика
  28. int nMotor1MV, nMotor2MV;            // Задание скорости после ограничителя
  29.  
  30.  
  31. void setup() {                
  32.   phInit();
  33. }
  34.  
  35. void loop() {
  36.   phGetCommand();
  37.   phMotorRun();
  38. }
  39.  
  40.  
  41. void phInit()
  42. {
  43.   pinMode(MOTOR1_DIR_PIN, OUTPUT);
  44.   pinMode(MOTOR2_DIR_PIN, OUTPUT);
  45.   pinMode(MOTOR1_STEP_PIN, OUTPUT);
  46.   pinMode(MOTOR2_STEP_PIN, OUTPUT);
  47.  
  48.  
  49.   nMotor1MV = 0;
  50.   nMotor2MV = 0;
  51.   stpMotor1.setMaxSpeed(MOTOR1_MAX_SPEED);
  52.   stpMotor2.setMaxSpeed(MOTOR2_MAX_SPEED);
  53.   stpMotor1.setAcceleration(10.0); // что это значение обозначает?
  54.   stpMotor2.setAcceleration(10.0);
  55.   stpMotor1.setSpeed(0);
  56.   stpMotor2.setSpeed(0);
  57.  
  58.  
  59.  
  60.  
  61.   return;
  62. }
  63.  
  64. void phGetCommand()
  65. {
  66.   nMotor1SP = analogRead(MOTOR1_JOY_IN) - 512;
  67.   nMotor2SP = analogRead(MOTOR2_JOY_IN) - 512;
  68.   nSpeedSP = 1023 - analogRead(SPEED_KNOB_IN);
  69.  
  70.  
  71. /////////////////////////////////////////////////
  72. // Этот код обеспечивает зону нечувствительности - мотор не реагирует на малые отклонения джойстика от нейтрального положения:
  73.   if (nMotor1SP > 100) {
  74.     nMotor1MV = nSpeedSP;
  75.   } else if (nMotor1SP < -100) {
  76.     nMotor1MV = -nSpeedSP;
  77.   } else {
  78.     nMotor1MV = 0;
  79.   }
  80.  
  81.   nMotor1MV = nMotor1MV; // Стояло: nMotor1MV = nMotor1MV / 5; Зачем в конце стоит "/ 5" ?
  82.   if (nMotor2SP > 100) {
  83.      nMotor2MV = nSpeedSP;
  84.      }
  85.   else if (nMotor2SP < -100) {
  86.  
  87. nMotor2MV = -nSpeedSP;
  88.   } else {
  89.     nMotor2MV = 0;
  90. }
  91.  nMotor2MV = nMotor2MV; // Стояло: nMotor2MV = nMotor2MV * -1; Зачем в конце стоит "* -1" ?
  92. }
  93. /////////////////////////////////////////////////
  94. /////////////////////////////////////////////////
  95. void phMotorRun()
  96.  
  97. {
  98.   stpMotor1.setSpeed(nMotor1MV); // для регултровки скорости от джойстика, "nMotor1MV" менял на "nMotor1SP". Результат, максимальная скорость упала на +-50%, а так же моторы начали тикать как секундная стрелка часов.
  99.   stpMotor2.setSpeed(nMotor2MV);
  100.   stpMotor1.runSpeed();
  101.   stpMotor2.runSpeed();  
  102. }
  103.  
GeSHi © Codebox Plus


Спасибо Вам!!!
arthurilyuts
 
Сообщения: 30
Зарегистрирован: 07 дек 2014, 22:57

Re: Панорамная головка на Arduino

Сообщение Mr.Kubikus » 01 июн 2016, 00:10

Привет!

Макроопределения MOTOR1_SPR и MOTOR2_SPR в строках 10 и 11 нигде в коде не используются. Их можно смело выкинуть. Видимо остались от предыдущего проекта.

С MOTOR1_INIT_SPEED и MOTOR2_INIT_SPEED аналогично - не используются.
С уважением, Григорий
GitHub FB ВК TW
Аватара пользователя
Mr.Kubikus
Сотрудник ПАКПАК
 
Сообщения: 875
Изображения: 49
Зарегистрирован: 22 окт 2010, 23:57
Откуда: Москва

Re: Панорамная головка на Arduino

Сообщение arthurilyuts » 02 июн 2016, 01:27

И сново здравствуйте!
На англо-язычных просторах Интернета нашел готовый пример скетч-кода с так называемым RAMP-ом или по ихнему S-Curve.
Попробовал, это то что надо!!!! Мотор плавно стартует, некоторое время вращается на заданной скорости и потом медленно тормозит!
Одним словом, МЕЧТА всех пользователей кино-оператоскими головками, кранами, слайдерами и т.д. и т.п.
Вот только теперь вопрос, как внедрить этот "S-Curve" скетч-код в Ваш скетч "Панорамная головка на Arduino"?
Mr.Kubikus, помогите ПЛИЗЗЗЗ!!! Нужно привязать данный скетч на джойстик.

Знаю, что уже писал это ранее, все же хочу повторится.
- При нажатии на джойстик, мотор плавно стартует.
- Чем больше отклонение джойстика, тем выше скорость мотора.
- Порог максимальной скорости, хочется задавать отдельным потенциометром.
- При отпускании джойстика в исходное положение, мотор плавно тормозит.
- Время плавного СТАРТа и СТОПа хочется задавать отдельным потенциометром.

За ранее СПАСИБО!!!

Code: [Выделить всё] [Expand/Collapse]
  1. /*
  2. =============================================================
  3. =       Project: S curve
  4. =      Language: Arduiino r12
  5. =          Date: January 2008
  6. =        Author: C. Eckert
  7. =============================================================
  8. */
  9.  
  10. // Givens
  11. long ta = 3e6;     // acceleration time (microsec)
  12. long td = 3e6;     // decelleration time (microsec)
  13. long Vm = 3200;    // steady state velocity (pulse/sec)
  14. long Pt = 12800;    // total number of pulses for move (1600 steps per rev)
  15.  
  16. // Other variables
  17. long dly;           // stepper pulse delay (microsec)
  18. long t = td/9;      // current time (microsec)  -  You need to seed the initial time with something > 0
  19.                    //                             so you don't calculate to long of a delay
  20. long t12;           // time during constant velocity (microsec)
  21.  
  22. int count = 0;      // count the number of pulses
  23. int Perr = 0;       // error in position
  24.  
  25. // Arduino pins
  26. #define dirPin 3
  27. #define stepPin 12
  28.  
  29. void setup() {
  30. Serial.begin(9600);
  31. pinMode(dirPin, OUTPUT);
  32. pinMode(stepPin, OUTPUT);
  33.  
  34. // Calculate the time at constant velocity
  35. t12 = (Pt/(Vm/1e6))-0.5*(ta+td);
  36. Serial.println(); Serial.println();
  37.  
  38. Serial.println("Setup Done");
  39. }
  40. void loop()
  41. {
  42. digitalWrite(dirPin, LOW);  // Set the stepper direction
  43.  
  44. // Decide which part of the velocity curve your at
  45. if (t<ta) {                                       // Acceleration
  46.    //Serial.println ("Acceleration Curve");
  47.    dly = (ta)/(2*(Vm/1e6)*t);
  48. }
  49. else if (t>=ta && t<(ta+t12)){                    // Constant velocity
  50.    //Serial.println ("Constant Velocity");
  51.    dly = 1/(2*(Vm/1e6));
  52. }
  53. else if (t>=(ta+t12) && t<(ta+t12+td)){          // Deceleration
  54.    //Serial.println ("Deceleration Curve");
  55.    dly = 1/(2*((Vm/1e6)-(Vm/(1e6*td))*(t-ta-t12)));
  56. }
  57.  
  58. t = t+2*dly; // update the current time
  59. //Serial.print("dly: "); Serial.print (dly); Serial.println(" microsec");
  60. //Serial.print ("Current time: "); Serial.print(t); Serial.println(" microsec");
  61.  
  62. // Move stepper one pulse using delay just calculated
  63. digitalWrite(stepPin, HIGH);
  64. delayMicroseconds(dly);
  65. digitalWrite(stepPin, LOW);
  66. delayMicroseconds(dly);
  67. count ++;
  68.    
  69. // The move is finished
  70. if (t>(ta+t12+td)){
  71.    Serial.println ("Move Complete");
  72.    Serial.print ("Total steps indexed: "); Serial.println (count);
  73.    
  74.    // Correct for any position error due to rounding
  75.    Perr = Pt-count;
  76.    if (Perr < 0) {
  77.      digitalWrite(dirPin, 1^digitalRead(dirPin));  // reverse the stepper direction
  78.      delay(50);
  79.      Perr = -1*Perr;
  80.    }
  81.    for (;Perr>0;){
  82.      digitalWrite(stepPin, HIGH);
  83.      delayMicroseconds(dly);
  84.      digitalWrite(stepPin, LOW);
  85.      delayMicroseconds(dly);
  86.      Perr--;
  87.    }
  88.    
  89.    count=0;
  90.    t=td/9;
  91.    
  92.    delay (1000);
  93. }
  94.  
  95. }
  96.  
GeSHi © Codebox Plus
arthurilyuts
 
Сообщения: 30
Зарегистрирован: 07 дек 2014, 22:57

Re: Панорамная головка на Arduino

Сообщение arthurilyuts » 06 июн 2016, 14:21

Неужели ни кто не в состоянии помочь?
Люди, вы же добрые внутри!
arthurilyuts
 
Сообщения: 30
Зарегистрирован: 07 дек 2014, 22:57

Re: Панорамная головка на Arduino

Сообщение LGii » 08 авг 2016, 18:50

ребята , а кто то доработал этот скетч ??? если да поделитесь плиз
LGii
 
Сообщения: 1
Зарегистрирован: 07 авг 2016, 21:54

Пред.

Вернуться в Arduino и Ко. ♥♥♥



Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex[bot] и гости: 1

cron