ArduinoNano/Spektrum DX8/AR8000 - переключение между ручным и автоматическим управлением сервами.

trypel
trypel аватар
Offline
Зарегистрирован: 22.08.2012

О, все заработало! Интересное решение - я бы не догадался :)

Ну вроде все, все мои желания осуществлены, спасибо :)

Теперь буду смотреть почему когда питание не от USB, а от аккумулятора, то сервы начинают дергаться в ручном режиме - я так понимаю если уж от USB работает, то дело не в софте.

trypel
trypel аватар
Offline
Зарегистрирован: 22.08.2012

Заменил ардуину с dx.com на оригинальную (надеюсь, потому что стоит в 2 раза больше:)) dfrduino купленную в одном из наших онлайн магазах - дерганий стало на порядок меньше, но все же есть

Отснял видео работы сервы наклона в ручном режиме с разными дуинами и с разным питанием, видео ускорено в 10 раз (снимал 10 минут)

https://vimeo.com/53663565

Когда серво сильно отклоняется это похоже начинает срабатывать автоматический цикл - т.е теряется связь с передатчиком, потом восстанавливается и серва опять переходит в ручное управление. Видно, что при питании от USB серва стоит как влитая - подозреваю что дело в том что там шнур питания экранированный, поэтому наводки не проходят... хотя от ардуины дальше идут обычные провода к тому же приемнику. Никаких видеопередатчиков, раций и прочей аппаратуры рядом нет %)

 

 

maksim
Offline
Зарегистрирован: 12.02.2012

Если бы терялась связь и программа переходила в автоматический цикл, то он отрабатывался бы полностью, так как у вас в автоматическом цикле нет проверки time. Попробуйте сами, если переключиться в автоматический режим и обратно, то в ручной режим переключится только после завершения всего автоматического цикла, если конечно вы не убрали delay(2000) в setup().

Попробуйте сделать следующее: возьмите провод и подключите одним концом к GND дуины, а другим к корпусу системного блока и проверьте будет ли дергаться.

trypel
trypel аватар
Offline
Зарегистрирован: 22.08.2012

Нет, я же добавил добавил проверку time в автоматический цикл - гляньте последний код :)

Сейчас проверю заземление

maksim
Offline
Зарегистрирован: 12.02.2012

Ну так и что? У вас же нет проверки в самом cycle() и он будет отрабатываться полностью.

И еще, у вас этот cycle() будет повторяться до бесконечности или пока не переключите тумблер, а не 9 раз и никогда не будет сфотографирован надир и зенит(а точнее где-то 1 к 1000000000 что вы переключите тумблер в определенный момент и надир с зенитом будут).

trypel
trypel аватар
Offline
Зарегистрирован: 22.08.2012

Когда тумблер возвращаю в 1900 - переходит в ручное, а насчет надира вы правы - спасибо :))

maksim
Offline
Зарегистрирован: 12.02.2012

Прям мгновенно переходит? У вас cycle() длится 3,6 секунды так что если вы туда-сюда щелкните тумблером, то в ручной режим перейдет на раньше чем через 3 секунды.

trypel
trypel аватар
Offline
Зарегистрирован: 22.08.2012

Задержка сейчас в конце сетапа

Да, не мгновенно - так что срабатывание автоматического режима отпадает, вы опять правы :))

Подключил заземление на корпус пк, наблюдаю - раз в несколько минут всеже есть оооочень незначительные рывки, но работает практически как от USB.

 

maksim
Offline
Зарегистрирован: 12.02.2012

А если чем другим (еще сервы, двигатели, подключенные к этому же аккумулятору) поуправлять изменения есть?

trypel
trypel аватар
Offline
Зарегистрирован: 22.08.2012

сейчас на приемник повесил еще одну серву - подергивания увеличились

trypel
trypel аватар
Offline
Зарегистрирован: 22.08.2012

а сейчас уже как 5 мин работает идеально %)

maksim
Offline
Зарегистрирован: 12.02.2012

А схему что куда подключаете нарисовать можете?

И кстати, если хотите прерывать автоматический цикл, то можно сделать так

void cycle()    //панорамный цикл
{   
  if(time > 1700) return;
  servo_gor.write(posr);
  servo_vert.write(posv2);
  delay(800);
  if(time > 1700) return;
  shutter(); 
  delay(800);
  if(time > 1700) return;
  servo_vert.write(posv1);
  delay(800);
  if(time > 1700) return;
  shutter(); 
  delay(800);
  if(time > 1700) return;
  ServoGor(HIGH);
  delay(400);
  ServoGor(LOW);
}

void auto_loop() //полный цикл автоматического управления
{ 

  for (int i=0;i<9;i++)
    cycle();
  servo_vert.write(posv3); //съемка надира
  delay(800);
  if(time > 1700) return;
  shutter(); 
  delay(800);

}

задержка при этом составит не более 1 секунды.

trypel
trypel аватар
Offline
Зарегистрирован: 22.08.2012

Схему попробую сейчас нарисовать.

И кстати, если хотите прерывать автоматический цикл, то можно сделать так

Ого! Вот оно как оказывается

trypel
trypel аватар
Offline
Зарегистрирован: 22.08.2012

Рисовать буду 3 часа, лучше по фото объясню, на красный контроллер не обращайте внимание - питание через ubec идет на приемник. От приемника идет дальше на дуину, сервы и ИК-диод. Собственно и все.

 

maksim
Offline
Зарегистрирован: 12.02.2012

В первую очередь мне надо знать как и куда у вас подключено питание. Мультиметр имеется?

trypel
trypel аватар
Offline
Зарегистрирован: 22.08.2012

Хорошо, тогда подробную схему нарисую сегодня вечерком, сейчас к сожалению уже не успеваю

Да, мультиметр есть

trypel
trypel аватар
Offline
Зарегистрирован: 22.08.2012

Прошу прощения что пропал, обстоятельства :)

Так, по схеме питания - переткнул GRN как сейчас показано на схеме, вроде все пучком - колебания совсем не значительные, а дерганий таких сильных нет. Раньше GRN был воткнут в тот который через пин от +5

Нарисовал как сумел, извиняйте :)

 

maksim
Offline
Зарегистрирован: 12.02.2012

Скорее всего помехи возникают в питании. Сделайте так - отключите питание от 5V дуины и напрямую с аккума подключите 7.4В к VIN дуины.

тогда UBEC 2S можно было бы и 6V поставить, если конечно такие существуют и приемник от 6 вольт работает, тогда и сервы пошустрее и помощнее крутили.

trypel
trypel аватар
Offline
Зарегистрирован: 22.08.2012

Подрубил - вообще пропали все колебания\дерганья :)

Как раз покупаю ubec с возможностью переключения 5v\6v - приедет, попробую.

ivanumass
ivanumass аватар
Offline
Зарегистрирован: 04.09.2011

Небуду клонов плодить, ибо вопрос из той же группы что и у топик-стартера. Значит так же есть Spektrum AR8k и Freeduino Nano v5. Управляется это все с DX7s. Мне управление сервами не нужно, нужно банально определить нажата ли кнопка на пульте (раньше это был двухпозиционный тумблер). НО, подключаю все как на пике

заливаю туда вот такой код 

void setup(){
  pinMode(23, INPUT); 
  Serial.begin(9600);
}
void loop(){
  int pwmIn = pulseIn(23, HIGH, 25000);
  Serial.println(pwmIn);
  delay (100);
}

А оно мне в порт только нули посылает. пробовал разные пины на ардуине, разные каналы на пульте, пробовал питать приемник отдельно от ардуины, пробовал от самой ардуины и тд, а все равн нули. ЧЯДНТ?

maksim
Offline
Зарегистрирован: 12.02.2012

Так может там и сигнала то никакого нет. Вы серву подключать ко всему этому делу как оно сейчас у вас есть пробовали?

Может частота сигнала много ниже чем вы ее ограничили и инвертирован long pwmIn = pulseIn(3, HIGH);

И не надо пробовать на всех выводах пробуйте на D3.

ivanumass
ivanumass аватар
Offline
Зарегистрирован: 04.09.2011

Who's awesome? You're awesome! Может мне просто надо было выспаться наверное, но вы оказались правы и касательно пина и касательно сигнала с пульта. Третий пин я тоже пробовал, но все это свелось к тому, что отвалился бинд пульта и приемника. Сначала подключаю к третьей ноге, вроде дрыгается, но на пульт не отвечает, потом думаю "В чем затык?" подключил серву, а она не дергается вообще, и тут осенило, я же после резета забыл пульт забиндить опять. Вам плюс и спасиба, Максим!

Probelzaelo
Offline
Зарегистрирован: 15.04.2011

ivanumass пишет:
ибо вопрос из той же группы что и у топик-стартера. Значит так же есть Spektrum AR8k и Freeduino Nano v5. Управляется это все с DX7s. Мне управление сервами не нужно, нужно банально определить нажата ли кнопка на пульте (раньше это был двухпозиционный тумблер). НО, подключаю все как н

Готовый скетч rc_pwm-111213a.zip‎, вводятся сразу 4 канала от приемника, можно и боле при желании, с полученными значениями делай что хочешь...  для определения же положения тумблера достаточно сравнивать результат со средним положением - 1520мс, если больше - включен, меньше - выключен...