Автор Тема: ARDUINO надо или нет  (Прочитано 13569 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Alexandro

  • Ветеран
  • *****
  • Сообщений: 531
  • Репутация: +21/-3
  • zené vonat
  • Откуда: SPb
  • Имя: Alexander
Re: ARDUINO надо или нет
« Ответ #15 : 06 Марта 2017, 00:35:34 »
там такое ощущение, что она на градус в обратку откатывает сначала. заметить можно только если серву в руках держишь.
дебаг выдает все четко, сразу крутит в правильное направление. может этот отскок против часовой стрелки при подаче сигнала идет (после достижения заданного угла сигнал снимается, чтобы джигинга не было). при повороте от большего к меньшему его не заметно, так как серва и так против часовой стрелки крутится.

 вы программно не делали снятие питания с сервы после завершения действия ( перевода в др. положение )?
DR/DB/FS/MAV

Оффлайн Кёф

  • Ветеран
  • *****
  • Сообщений: 2197
  • Репутация: +115/-1
    • Блог Александра a.k.a. Кёф
  • Откуда: Балашиха
  • Имя: Александр/Кёф
Re: ARDUINO надо или нет
« Ответ #16 : 06 Марта 2017, 00:39:17 »
Цитата: Кёф от 05 Марта 2017, 23:22:51
Только при включении
при включении так и должно быть. я специально показал момент,когда серву свернули, а при включении питания она вернулось в исходное, в которое ее ставили перед выключением питания.ну там собственно все сервы ставятся в положение "перед отключением питания", даже если они в этом положении и так стоят. Отсюда джигинг.

Это я понял. Увидел запись в EEPROM. Сам не использовал пока.
Я про правую серву. Она при включении тоже дёргается. Ядобился, чтобы такого не было после того, как запитал серву отдельно от Arduino.

Тут видимо зима сказывается...  :D
Дело в том, что я ровно года назад над этой темой думал и родил свой первый скетч:
http://circuits.io/circuits/1645754-servo-angle-setter-1  (там немного тормозит движок, но в целом, симулирует всё).

Так как я купил Digispark  - а там мало входов-выходов, то думал, что на один дигиспарк буду вешать одну серву. Потому код у меня проще. Баловство.

Цитата: Кёф от 05 Марта 2017, 23:22:51
не видно криминала
там такое ощущение, что она на градус в обратку откатывает сначала. заметить можно только если серву в руках держишь.
дебаг выдает все четко, сразу крутит в правильное направление. может этот отскок против часовой стрелки при подаче сигнала идет (после достижения заданного угла сигнал снимается, чтобы джигинга не было). при повороте от большего к меньшему его не заметно, так как серва и так против часовой стрелки крутится.

Может быть эта тема тоже из-за питания.
Ведь все "расчёты" ведутся между "землёй" и "плюсом" - малейшие просадки и АЦП дают пересчёт.

Я тогда себе такой "пепелац" замутил со страху из того, что было - две вторичные обмотки - два моста - два электролита...


Там ещё потом H-bridge гонял - тоже много интересного...


Оффлайн Кёф

  • Ветеран
  • *****
  • Сообщений: 2197
  • Репутация: +115/-1
    • Блог Александра a.k.a. Кёф
  • Откуда: Балашиха
  • Имя: Александр/Кёф
Re: ARDUINO надо или нет
« Ответ #17 : 06 Марта 2017, 12:20:07 »
Servo.h не использует встроенный ШИМ, как оказалось. Я думаю, что это происходит именно в момент servo.attach()
Да, да, как раз хотел сказать, что может даже другая версия (старее/новее) servo.h будет лучше работать.

Оффлайн Alexandro

  • Ветеран
  • *****
  • Сообщений: 531
  • Репутация: +21/-3
  • zené vonat
  • Откуда: SPb
  • Имя: Alexander
Re: ARDUINO надо или нет
« Ответ #18 : 06 Марта 2017, 23:36:27 »
да нет, это скорее проблема дешевой сервы, то что при появлении сигнала на сигнальном выводе она дергается.
я заметил такой момент - у меня все 4 щаз подключены через удлинители по 300мм ,и похоже сервы на наводки реагируют,тк дребезг менялся в зависимости от положения проводов.
DR/DB/FS/MAV

Оффлайн Alexandro

  • Ветеран
  • *****
  • Сообщений: 531
  • Репутация: +21/-3
  • zené vonat
  • Откуда: SPb
  • Имя: Alexander
Re: ARDUINO надо или нет
« Ответ #19 : 07 Апреля 2017, 00:10:54 »
с кнопками все понятно стало,в итоге правда реализовал на тумблерах ( стрелки переводятся в соответствии с маршрутом ).
на данный момент актуальна проблема отключения серв от питания после каждого перевода ( что бы не дребезжали и не грелись соотв. )
DR/DB/FS/MAV

Оффлайн qvan22

  • Постоялец
  • ***
  • Сообщений: 174
  • Репутация: +41/-0
  • Откуда: Минск
  • Имя: Владимир
Re: ARDUINO надо или нет
« Ответ #20 : 07 Апреля 2017, 07:35:03 »
с кнопками все понятно стало,в итоге правда реализовал на тумблерах ( стрелки переводятся в соответствии с маршрутом ).
на данный момент актуальна проблема отключения серв от питания после каждого перевода ( что бы не дребезжали и не грелись соотв. )
Есть два варианта:
- Подключить питание сервы через транзистор. Открываем транзистор, переводим стрелку, чуть чуть подождали и отключили серву от питания.
Спойлер (кликните для показа/скрытия)
- Второй вариант, перед переводом делать myservo.attach(servo_pin), перевести стрелку, немного подождать и отключать управляющий сигнал сервы myservo.detach().

Оффлайн Zuzzuk

  • Ветеран
  • *****
  • Сообщений: 1034
  • Репутация: +59/-0
    • Ж/Д-модельная вики
  • Откуда: Петербург и Прага
  • Имя: Константин
Re: ARDUINO надо или нет
« Ответ #21 : 07 Апреля 2017, 10:20:10 »
А если снимать питание с сервы, а потом перед переводом стрелки её снова включать, то не будут ли сервы реагировать на это включение "дёрганьем", чтобы проинициализировать своё состояние в ноль? Кстати, серва без нагрузки не так и трещит. Если ей приходится постоянно отжимать пружину (поводок, переводящий стрелку), то да - трещать будет. Но я так полагаю, что можно её настроить, чтобы останавливалась она в том месте, где стрелка уже перевелась, а поводок ещё не изогнулся настолько, чтобы давить на серву в обратном направлении. А при случайном смещении остряков на доли милиметра серва вернёт их на место, а при выключенном питании - не вернёт.
С уважением, Константин
---
// per aspera ad astra
Собираю, что глазу мило; дружу с DCC; T-Trak нам в руку!

Оффлайн ailcat

  • Ветеран
  • *****
  • Сообщений: 1554
  • Репутация: +60/-3
  • Незлобный гоблин
  • Откуда: Москва
  • Имя: Алексей
Re: ARDUINO надо или нет
« Ответ #22 : 07 Апреля 2017, 11:09:00 »
А если снимать питание с сервы, а потом перед переводом стрелки её снова включать, то не будут ли сервы реагировать на это включение "дёрганьем",
Зависит от сервы. Аналоговые. скорее всего, дёрнут. Цифровые - зависит от подхода.
Засада в том, что "спящий" режим инициируется снятием управляющего сигнала, а не питания. Если серву не "будить" после восстановления питания хотя бы несколько "циклов" - она не дёрнется (цифра) или дёрнется минимально (аналог). А вот если питание включать непосредственно перед подачей управляющего импулься (или вместе с ним), или снимать питание сразу после окончания управляющего импулься - то "держи, фашист, гранату" - цифра может уйти в крайнее положение запросто. А может и не уйти - причем не уйти и в заданное положение, а не толко в крайнее. (попадалась цифровая Futaba, которая после подачи питания секунды 3-4 тупо фиксировала текущее положение, игнорируя управляющие импульсы)
Наш паровоз в тупик летит - в овраге остановка...

Оффлайн Alexandro

  • Ветеран
  • *****
  • Сообщений: 531
  • Репутация: +21/-3
  • zené vonat
  • Откуда: SPb
  • Имя: Alexander
Re: ARDUINO надо или нет
« Ответ #23 : 07 Апреля 2017, 12:29:13 »
- Второй вариант, перед переводом делать myservo.attach(servo_pin), перевести стрелку, немного подождать и отключать управляющий сигнал сервы myservo.detach().
можете вариант скетча приложить ? мои опыты с командами  attach / detach эффекта не дали ( я вставлял в луп, где выполняется условие перевода в сервы в то или иное положение в зависимости от уровня на входе )
DR/DB/FS/MAV

Оффлайн qvan22

  • Постоялец
  • ***
  • Сообщений: 174
  • Репутация: +41/-0
  • Откуда: Минск
  • Имя: Владимир
Re: ARDUINO надо или нет
« Ответ #24 : 07 Апреля 2017, 19:29:17 »
- Второй вариант, перед переводом делать myservo.attach(servo_pin), перевести стрелку, немного подождать и отключать управляющий сигнал сервы myservo.detach().
можете вариант скетча приложить ? мои опыты с командами  attach / detach эффекта не дали ( я вставлял в луп, где выполняется условие перевода в сервы в то или иное положение в зависимости от уровня на входе )

Может случайно, вы постоянно обрабатываете состояние логического уровня на входе и ваша серва всегда в работе?
Правильнее было бы что-то делать лишь когда он меняется на противоположный...

Использую обычно такой шаблон, с "плавным" переводом стрелки.
В него добавил обработку состояния уровня на 8м входе, в зависимости от которого будет переводится стрелка. 
И не забудьте добавить сопротивление 10Ком между пином и землей. :selfmade:

  #include <Servo.h> 
  Servo myservo1;
  unsigned long currentMillis = 0;
  unsigned long previousMillis = 0;
  const int servo_pause = 80;//интервал между перемещениями для сервы в милисекундах
   
  bool servo_flag1 = 1;// флаг работы
  bool servo_direction1 = 1;//флаг направления переключения
  int pos1_a = 30; //левая позиция
  int pos1_b = 90; // правая позиция сервы
  int pos1 = pos1_a; // актуальная позиция
  int servo_pin = 9; //пин сервы

  int switch_pin = 8;// пин для вашего тумблера
  bool last_pin_state = 0; //прошлое состояние пина
   
void setup()
{   
  pinMode(switch_pin, INPUT);
}

void loop() {
   currentMillis = millis(); 

   if(digitalRead(switch_pin) != last_pin_state) //обработчик события вашей кнопки
   {
       servo_flag1 = 1; // вызываем работу сервы
       last_pin_state ^= 1; // изменяем прошлое состояние пина
       servo_direction1 = last_pin_state; //указываем новое направление     
    }
   
   if(servo_flag1)// если сработал флаг переключения
   {
      if((currentMillis - previousMillis) >= servo_pause)
       {
         previousMillis = currentMillis;
         rail_switch1(); //функция перевода стрелки
       }     
    }

}

void rail_switch1()//функция перевода стрелки
{         
    myservo1.attach(servo_pin);//включаем серву 
     
    if(servo_direction1){myservo1.write(pos1++);}//добавляем или отнимаем градус для сервы
    else{myservo1.write(pos1--);}

    if((pos1 < pos1_a) & (servo_direction1 == 0))//сравниваем градус сервы с левой позицией 
    {servo_flag1 = 0;myservo1.detach();}
     
    if((pos1 > pos1_b) & (servo_direction1 == 1))//проверяем правый градус сервы с правой позицией 
    {servo_flag1 = 0;myservo1.detach();}
}



Оффлайн Alexandro

  • Ветеран
  • *****
  • Сообщений: 531
  • Репутация: +21/-3
  • zené vonat
  • Откуда: SPb
  • Имя: Alexander
Re: ARDUINO надо или нет
« Ответ #25 : 07 Апреля 2017, 22:28:12 »
Нужно detach делать. Я уже писал про это.
про detach понятно кроме того момента куда его вставлять в программе,мои опыты с этим не увенчались успехом )
Цитата: qvan22 link=topic=3562.msg99524#msg99524

date=1491582557
И не забудьте добавить сопротивление 10Ком между пином и землей.
стоят ) спасибо за скетч! как его размножить на 4 сервы ? пришлось кое-где 0/1 на HIGH/LOW заменить,то работает то нет

кстати, почему PWM выход SS и MOSI  может не работать ? ( arduino pro mini в моем случае, выводы 10-11 )
и нет ли у кого-нибудь опыта адаптации механики семафоров  Fleischmann 9205 под серву ?
« Последнее редактирование: 08 Апреля 2017, 15:24:07 от Alexandro »
DR/DB/FS/MAV

Оффлайн Alexandro

  • Ветеран
  • *****
  • Сообщений: 531
  • Репутация: +21/-3
  • zené vonat
  • Откуда: SPb
  • Имя: Alexander
Re: ARDUINO надо или нет
« Ответ #26 : 08 Апреля 2017, 13:51:46 »
тут все есть, смотрите внимательно
это да,но программа сама имхо сложная,с массивами и тд ) и на  Pro Mini не пошла - ошибка компиляции для платы
я с таким вариантом вожусь пока
#include <Servo.h>

int servoPin1 = 3;            // порт подключения сервы
int servoPin2 = 5;            // порт подключения сервы
int servoPin3 = 6;            // порт подключения сервы
int servoPin4 = 9;            // порт подключения сервы


int buttonPin1 = 2;
int buttonPin2 = 4;
int buttonPin3 = 7;
int buttonPin4 = 8;


int led = 13;


Servo myservo1;
Servo myservo2;
Servo myservo3;
Servo myservo4;


 
void setup() {

  pinMode(led, OUTPUT);
  pinMode(buttonPin1, INPUT);
  pinMode(buttonPin2, INPUT);
  pinMode(buttonPin3, INPUT);
  pinMode(buttonPin4, INPUT);
 
  Serial.begin(9600);   

  myservo1.attach(servoPin1);
  myservo2.attach(servoPin2);
  myservo3.attach(servoPin3);
  myservo4.attach(servoPin4);
 
 
  myservo1.write(165);
  myservo2.write(180);
  myservo3.write(180);
  myservo4.write(180);
 
}

void loop(){

       myservo2.attach(servoPin2);
       myservo3.attach(servoPin3);
       myservo4.attach(servoPin4);
 

       
       
       if (digitalRead(buttonPin1) == HIGH)
       { myservo1.attach(servoPin1);delay(100);myservo1.write(165);delay(500);myservo1.detach() ;
}         
       else
        { myservo1.attach(servoPin1);delay(100);myservo1.write(100);delay(500);myservo1.detach() ;
}         
       if (digitalRead(buttonPin1) == LOW)
       { myservo1.attach(servoPin1);delay(100);myservo1.write(100);delay(500);myservo1.detach() ;
}         
       else
        { myservo1.attach(servoPin1);delay(100);myservo1.write(165);delay(500);myservo1.detach() ;
}     
   
       if (digitalRead(buttonPin2) == HIGH)
       { myservo2.write(110);delay(50);myservo2.detach() ;
}         
       else
        {myservo2.write(180);delay(50);myservo2.detach() ;
}

       if (digitalRead(buttonPin3) == HIGH)
       { myservo3.write(110);delay(50);myservo3.detach() ; 
}         
       else
       { myservo3.write(180);delay(50);myservo3.detach() ;
}

        if (digitalRead(buttonPin4) == HIGH)
       { myservo4.write(120);delay(50);myservo4.detach() ;
}         
       else
       { myservo4.write(150);delay(10);myservo4.detach() ;
}


     

     



}
« Последнее редактирование: 08 Апреля 2017, 15:23:41 от Alexandro »
DR/DB/FS/MAV

Оффлайн Alexandro

  • Ветеран
  • *****
  • Сообщений: 531
  • Репутация: +21/-3
  • zené vonat
  • Откуда: SPb
  • Имя: Alexander
Re: ARDUINO надо или нет
« Ответ #27 : 18 Мая 2017, 01:39:59 »
вопрос защиты от кз остается открытым или есть панацея ?
я в черне испытал вариант  с оптопарой на выходе моста, не зависимо от полярности, если светодиод не горит в оптопаре - замыкается на ноль контакт ативности двигателя.
есть возможность реализовать через считвание через аналоговые входы ардуино ,не не факт что достаточно быстро будет происходить что бы выходной мост нем вылетел.
DR/DB/FS/MAV

Оффлайн Alexandro

  • Ветеран
  • *****
  • Сообщений: 531
  • Репутация: +21/-3
  • zené vonat
  • Откуда: SPb
  • Имя: Alexander
Re: ARDUINO надо или нет
« Ответ #28 : 18 Мая 2017, 11:43:48 »
моторшилда.
контроль тока у  V3 как происходит?
DR/DB/FS/MAV

Оффлайн Alexandro

  • Ветеран
  • *****
  • Сообщений: 531
  • Репутация: +21/-3
  • zené vonat
  • Откуда: SPb
  • Имя: Alexander
Re: ARDUINO надо или нет
« Ответ #29 : 18 Мая 2017, 13:24:07 »
DR/DB/FS/MAV