Форум ModelldepO  

Вернуться   Форум ModelldepO > Моделизм > Электрика и DCC > Arduino
Ответ
 
Опции темы Опции просмотра
Старый 05.08.2017, 16:41   #1
Dampflok
Заглянувший
 
Регистрация: 17.06.2013
Адрес: Санкт-Петербург
Сообщений: 227
Сказал(а) 'не согласен(а)'!: 8
Сказали 'не согласен'! 4 раз(а) в 2 сообщениях
Сказал(а) спасибо: 206
Поблагодарили 329 раз(а) в 99 сообщениях
Все 'Спасибо' этого пользователя. :
0 за это сообщение
0 Всего
Репутация: как роза среди колючек (329)
По умолчанию Преодоление рывка аналогового сервомотора при прямом подключении к Ардуино

Цитата:
Сообщение от xu56857 Посмотреть сообщение
Дерганье во время подачи питания - это ерунда
Доброго времени суток!
Я сейчас пытаюсь решить проблему дёргания сервомотора во время включения электропитания ардуины -
- как я понял, именно об этом Вы написали, что это ерунда. Если не секрет, как Вы решили эту проблему?

Я экспериментирую с Arduino MEGA и аналоговым сервомотором.
Так вот:
при включении электропитания ардуины, от которой сервомотор запитан напрямую от 5+,
сервомотор внезапно дерёт ~на 30° в сторону, а затем встаёт в позицию, указанную в скетче.
Потом, при выполнении скетча таких сумасшедших рывков нет. Мотор не жужжит и не дёргается благодаря использованию
attach() и detach().

Означенный 30°ный рывок опасен для механики, подключённой к сервомотору.

Так вот в чём вопрос:
Как излечить рывок сервомотора, который он делает при подаче электропитания на ардуину?
Dampflok вне форума  
Вверх
Старый 05.08.2017, 17:25   #2
shalex
Местный
 
Регистрация: 08.07.2015
Адрес: МО
Сообщений: 2,853
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 3 раз(а) в 2 сообщениях
Сказал(а) спасибо: 4,634
Поблагодарили 3,271 раз(а) в 1,169 сообщениях
Все 'Спасибо' этого пользователя. :
0 за это сообщение
1 Всего
Репутация: репутация неоспорима (3282)
По умолчанию

Цитата:
Сообщение от Dampflok Посмотреть сообщение
Как излечить рывок сервомотора, который он делает при подаче электропитания на ардуину?
Как вариант - сначала подать сигнал, а только потом питание на серву.
Ардуине нужно время, чтобы загрузиться и выставить нужный PWM на выходе.
shalex вне форума  
Вверх
2 пользователя(ей) сказали cпасибо:
Старый 05.08.2017, 20:36   #3
Dampflok
Заглянувший
 
Регистрация: 17.06.2013
Адрес: Санкт-Петербург
Сообщений: 227
Сказал(а) 'не согласен(а)'!: 8
Сказали 'не согласен'! 4 раз(а) в 2 сообщениях
Сказал(а) спасибо: 206
Поблагодарили 329 раз(а) в 99 сообщениях
Все 'Спасибо' этого пользователя. :
0 за это сообщение
0 Всего
Репутация: как роза среди колючек (329)
По умолчанию

Цитата:
Сообщение от shalex Посмотреть сообщение
Как вариант
Как я понял, Вы предлагаете сначала включить электропитание ардуины, а потом
к 5+ подключить сервомотор.
Результат к сожалению отрицательный: произвольный рывок сохраняется.
Кроме того, при таких условиях эксперимента для данного мотора/данных моторов пропускается фаза выполнения void setup,
что может быть при каких-либо обстоятельствах неудобно
Dampflok вне форума  
Вверх
Старый 05.08.2017, 21:40   #4
MadSnake
Пользователь
 
Регистрация: 01.02.2013
Адрес: Санкт-Петербург
Сообщений: 990
Сказал(а) 'не согласен(а)'!: 24
Сказали 'не согласен'! 30 раз(а) в 19 сообщениях
Сказал(а) спасибо: 324
Поблагодарили 1,353 раз(а) в 318 сообщениях
Все 'Спасибо' этого пользователя. :
0 за это сообщение
0 Всего
Репутация: этим человеком можно гордиться (1353)
По умолчанию

Разрешите я тут встряну со своей безграмотностью, есть ли вариант управлять сервой используя локомотивный декодер..... я не силен в сервах, знаю только что она управляется шим сигналом..... но для этого нужен отдельный декодер, а место в нашем деле на вес золота, отсюда и вопрос, как ограничиться только локомотивным декодером!? Подозреваю - ответ ни как! Но все же?
MadSnake вне форума  
Вверх
Старый 05.08.2017, 21:55   #5
Alex_S
Местный
 
Регистрация: 26.05.2008
Адрес: Москва
Сообщений: 4,504
Сказал(а) 'не согласен(а)'!: 24
Сказали 'не согласен'! 10 раз(а) в 10 сообщениях
Сказал(а) спасибо: 708
Поблагодарили 4,609 раз(а) в 2,049 сообщениях
Все 'Спасибо' этого пользователя. :
0 за это сообщение
0 Всего
Репутация: репутация неоспорима (4620)
По умолчанию

Цитата:
Сообщение от MadSnake Посмотреть сообщение
есть ли вариант управлять сервой используя локомотивный декодер
есть, но нужен декодер с такой возможностью. Например Zimo. В зависимости от модели декодера 5-вольтовое питание для сервы делается либо с помощью дополнительной схемы на LM7805 или берется с декодера (у некоторых декодеров есть выход 5 вольт).
Alex_S вне форума  
Вверх
Пользователь сказал cпасибо:
Старый 05.08.2017, 23:29   #6
shalex
Местный
 
Регистрация: 08.07.2015
Адрес: МО
Сообщений: 2,853
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 3 раз(а) в 2 сообщениях
Сказал(а) спасибо: 4,634
Поблагодарили 3,271 раз(а) в 1,169 сообщениях
Все 'Спасибо' этого пользователя. :
0 за это сообщение
1 Всего
Репутация: репутация неоспорима (3282)
По умолчанию

Цитата:
Сообщение от Dampflok Посмотреть сообщение
Как я понял, Вы предлагаете сначала включить электропитание ардуины, а потом
к 5+ подключить сервомотор.
Результат к сожалению отрицательный: произвольный рывок сохраняется.
Примерно так, да. В скетче в setup выставить analogWrite, дождаться его выполнения, а потом подать питание на серву.
Насколько сильный рывок? У меня сервы при включении могут вообще до крайнего положения скакнуть (и скачут).

Цитата:
Сообщение от Dampflok Посмотреть сообщение
Кроме того, при таких условиях эксперимента для данного мотора/данных моторов пропускается фаза выполнения void setup,
что может быть при каких-либо обстоятельствах неудобно
Не понимаю, почему пропускается setup и причем здесь данные моторы? При инициализации выставить нужный PWM, который был при выключении питания сервы.
shalex вне форума  
Вверх
Старый 06.08.2017, 00:55   #7
Dampflok
Заглянувший
 
Регистрация: 17.06.2013
Адрес: Санкт-Петербург
Сообщений: 227
Сказал(а) 'не согласен(а)'!: 8
Сказали 'не согласен'! 4 раз(а) в 2 сообщениях
Сказал(а) спасибо: 206
Поблагодарили 329 раз(а) в 99 сообщениях
Все 'Спасибо' этого пользователя. :
0 за это сообщение
0 Всего
Репутация: как роза среди колючек (329)
По умолчанию

Цитата:
Сообщение от shalex Посмотреть сообщение
В скетче в setup выставить analogWrite
Не понимаю (возможно, я не на столько продвинут, как Вы думаете ),
о каком analogWrite идёт речь, так как обращение к сервомотору произвожу при помощи servo.write().
Цитата:
Сообщение от shalex Посмотреть сообщение
Не понимаю, почему пропускается setup и причем здесь данные моторы?
Потому что под
Цитата:
Сообщение от Dampflok Посмотреть сообщение
а потом к 5+ подключить сервомотор.
я имел в виду ручное подключение контакта к пину 5+V, которое по времени произойдёт наверняка
позже (с учётом естественного быстродействия контроллера) выполнения ардуиной void setup().


Цитата:
Сообщение от shalex Посмотреть сообщение
Насколько сильный рывок? У меня сервы при включении могут вообще до крайнего положения скакнуть (и скачут).
Если перезагрузить скетч или ардуину кнопкой в момент, когда сервомотор
находится в положении, совпадающем с первым положением в скетче (например, если мотор находился
в момент перезагрузки кнопкой или заливки скетча в положении 180°,
а в скетче в void setup указана начальная позиция 180°, то рывка не будет.
Если же сервомотор не находится в таком положении, то рывок гарантирован на изрядные градусы - наблюдаю в среднем 30°,
но было и больше.
Ну и рывок будет в любом случае, если от ардуины отключить питание - вынуть USB-кабель Upd[ и вставить его снова].
Тоже примерно 30° как правило.


Цитата:
Сообщение от shalex Посмотреть сообщение
выставить analogWrite, дождаться его выполнения, а потом подать питание на серву
Под "потом подать питание на серву" Вы имеете в виду вручную или тумблером (например) соединить контакт 5+V к серве
или программно через скетч?

Цитата:
Сообщение от shalex Посмотреть сообщение
При инициализации выставить нужный PWM, который был при выключении питания сервы.
Здесь Вы вероятно имеете в виду записать в прежние/полученные перед отключением электропитания ардуины значения servo.write()/servo.read() в EEPROM?

Последний раз редактировалось Dampflok; 06.08.2017 в 14:43.
Dampflok вне форума  
Вверх
Старый 06.08.2017, 14:29   #8
shalex
Местный
 
Регистрация: 08.07.2015
Адрес: МО
Сообщений: 2,853
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 3 раз(а) в 2 сообщениях
Сказал(а) спасибо: 4,634
Поблагодарили 3,271 раз(а) в 1,169 сообщениях
Все 'Спасибо' этого пользователя. :
0 за это сообщение
1 Всего
Репутация: репутация неоспорима (3282)
По умолчанию

Цитата:
Сообщение от Dampflok Посмотреть сообщение
о каком analogWrite идёт речь, так как обращение к сервомотору произвожу при помощи servo.write().
Цитата:
Это аналогичная servo.write() штука, суть которой - выставить ШИМ/PWM нужной скважности на выходе ардуины.


Цитата:
Сообщение от Dampflok Посмотреть сообщение
Ну и рывок будет в любом случае, если от ардуины отключить питание - вынуть USB-кабель.
Тоже примерно 30° как правило.
Этот рывок наблюдается, даже если предварительно сделать серве detach() ?

Цитата:
Сообщение от Dampflok Посмотреть сообщение
Здесь Вы вероятно имеете в виду записать в прежние/полученные перед отключением электропитания ардуины значения servo.write()/servo.read() в EEPROM?
На самом деле я не знаю, как сделать запись в EEPROM в момент выключения питания. Просто записываю каждый перевод сервы по завершении ее движения.

Цитата:
Сообщение от Dampflok Посмотреть сообщение
Под "потом подать питание на серву" Вы имеете в виду вручную или тумблером (например) соединить контакт 5+V к серве
или программно через скетч?
Можно тумблером, реле и т.д. Думаю главное, чтобы на серве к моменту подачи питания был выставлен именно тот уровень ШИМ, в котором серва находится перед включением (т.е. чтобы текущий угол сервы и угол, задаваемый ШИМ, совпадал).

Пробовал управлять подачей питания на сервы с ардуины, через MOSFET транзистор. Вроде все намана было, если память не изменяет. Нюанс- не использую серву на удержание. Когда надо повернуть серву, сначала идет attach(), после завершения движения - detach(). Еще нюанс - если серв много (несколько десятков), то без такого управления питания сервами наблюдаю перегрузку при включении питания, т.к. сервы при включении дружно дергаются и делают полный оборот на 180 и обратно или только туда (точно уже не помню).

P.s. Кажись надо переносить последние посты про Ардуину в соотв. ветку форума, а то тема про другое
shalex вне форума  
Вверх
Старый 06.08.2017, 15:20   #9
Dampflok
Заглянувший
 
Регистрация: 17.06.2013
Адрес: Санкт-Петербург
Сообщений: 227
Сказал(а) 'не согласен(а)'!: 8
Сказали 'не согласен'! 4 раз(а) в 2 сообщениях
Сказал(а) спасибо: 206
Поблагодарили 329 раз(а) в 99 сообщениях
Все 'Спасибо' этого пользователя. :
0 за это сообщение
0 Всего
Репутация: как роза среди колючек (329)
По умолчанию

Цитата:
Сообщение от shalex Посмотреть сообщение
Это аналогичная servo.write() штука, суть которой - выставить ШИМ/PWM нужной скважности на выходе ардуины.
О чём речь понимаю, но на практике такого ещё не делал.

Цитата:
Сообщение от shalex Посмотреть сообщение
Этот рывок наблюдается, даже если предварительно сделать серве detach() ?
Последовательность событий такова:
USB-кабель подключается к ардуине->рывок 30°->attach()->detach()->нормальная работа мотора по скетчу...->attach()->detach()->отключение кабеля->включение кабеля->рывок ~30° ...
В предыдущем посте выразился неточно и дописал в той строке Upd: то есть рывок не после отключения кабеля USB от ардуины, а после его включения заново.

Цитата:
Сообщение от shalex Посмотреть сообщение
На самом деле я не знаю, как сделать запись в EEPROM в момент выключения питания.
Я предполагаю делать это подачей отдельной ручной команды от пульта перед выключением USB-питания ардуины: типа до отключения "a = servo№.read(); EEPROM.write(адрес, а);" и после отключения в разделе void setup: a=EEPROM.read(адрес); servo№.write(a); .

Собственно, я бы и после каждого переключения сервомотора такую запись делал бы отдельной стандартной функцией, но будучи напуган рассуждениями об ограниченности и исчерпании рабочего ресурса EEPROM'а пока воздерживаюсь от этого.
Может кто просветит меня в том плане, что боятся этого не следует?

Цитата:
Сообщение от shalex Посмотреть сообщение
Пробовал управлять подачей питания на сервы с ардуины, через MOSFET транзистор.
Тут даже не знаю что сказать, так как не разбирался до сих пор с тем, что такое MOSFET-транзистор .

Цитата:
Сообщение от shalex Посмотреть сообщение
P.s. Кажись надо переносить последние посты про Ардуину в соотв. ветку форума, а то тема про другое
Совершеноо согласен с этим!

Здесь на форуме очень много писали про сервомоторы и их использование для переключения разных устройств с ардуино,
но как-то совершенно не оглашали темы рывка сервомотора после включения питания ардуины, тогда как эта
тема должна затронуть каждого, кто использует сервомоторы с ардуиной.
Меня в связи с этим немало удивляет тот факт, что в данной теме сейчас переписываются только два человека - shalex и Dampflok

Последний раз редактировалось Dampflok; 07.08.2017 в 11:56.
Dampflok вне форума  
Вверх
Старый 06.08.2017, 18:03   #10
xu56857
Московский модуль
 
Аватар для xu56857
 
Регистрация: 02.02.2015
Адрес: Москва
Сообщений: 940
Сказал(а) 'не согласен(а)'!: 9
Сказали 'не согласен'! 2 раз(а) в 2 сообщениях
Сказал(а) спасибо: 3,978
Поблагодарили 3,305 раз(а) в 637 сообщениях
Все 'Спасибо' этого пользователя. :
0 за это сообщение
0 Всего
Репутация: репутация неоспорима (3320)
По умолчанию

Цитата:
Сообщение от Dampflok Посмотреть сообщение
Если не секрет, как Вы решили эту проблему?
Эту проблему не решил, дерганье при включении не страшно, плохо когда серва дергается от помех и остряк стрелки оказывается в неизвестном положении.
xu56857 вне форума  
Вверх
Пользователь сказал cпасибо:
Старый 06.08.2017, 18:47   #11
Dampflok
Заглянувший
 
Регистрация: 17.06.2013
Адрес: Санкт-Петербург
Сообщений: 227
Сказал(а) 'не согласен(а)'!: 8
Сказали 'не согласен'! 4 раз(а) в 2 сообщениях
Сказал(а) спасибо: 206
Поблагодарили 329 раз(а) в 99 сообщениях
Все 'Спасибо' этого пользователя. :
0 за это сообщение
0 Всего
Репутация: как роза среди колючек (329)
По умолчанию

Цитата:
Сообщение от xu56857 Посмотреть сообщение
дерганье при включении не страшно,
Как же нестрашно, когда иной рывок может выдернуть с корнем ту механику, которая подключена к мотору?!
Dampflok вне форума  
Вверх
Старый 06.08.2017, 19:03   #12
xu56857
Московский модуль
 
Аватар для xu56857
 
Регистрация: 02.02.2015
Адрес: Москва
Сообщений: 940
Сказал(а) 'не согласен(а)'!: 9
Сказали 'не согласен'! 2 раз(а) в 2 сообщениях
Сказал(а) спасибо: 3,978
Поблагодарили 3,305 раз(а) в 637 сообщениях
Все 'Спасибо' этого пользователя. :
0 за это сообщение
0 Всего
Репутация: репутация неоспорима (3320)
По умолчанию

Цитата:
Сообщение от Dampflok Посмотреть сообщение
выдернуть с корнем ту механику
Механика - через пружинку ( стальную проволоку )
xu56857 вне форума  
Вверх
Старый 06.08.2017, 19:36   #13
Dampflok
Заглянувший
 
Регистрация: 17.06.2013
Адрес: Санкт-Петербург
Сообщений: 227
Сказал(а) 'не согласен(а)'!: 8
Сказали 'не согласен'! 4 раз(а) в 2 сообщениях
Сказал(а) спасибо: 206
Поблагодарили 329 раз(а) в 99 сообщениях
Все 'Спасибо' этого пользователя. :
0 за это сообщение
0 Всего
Репутация: как роза среди колючек (329)
По умолчанию

Цитата:
Сообщение от xu56857 Посмотреть сообщение
через пружинку ( стальную проволоку )
Интересно!
А не покажете ли нам, как у Вас это реализовано? Какую толщину проволоки Вы выбрали?
Я стальную проволоку толщиной 0,4 мм простым V-образным изгибом загибал, но её жёсткость была всё же слишком высока -
- как пружина она практически не срабатывала.
Dampflok вне форума  
Вверх
Старый 06.08.2017, 20:26   #14
Qvan22
Заглянувший
 
Регистрация: 26.01.2013
Адрес: Минск
Сообщений: 204
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 1 раз в 1 сообщении
Сказал(а) спасибо: 456
Поблагодарили 454 раз(а) в 135 сообщениях
Все 'Спасибо' этого пользователя. :
0 за это сообщение
0 Всего
Репутация: - луч света в тёмном царстве (454)
По умолчанию

Цитата:
Сообщение от Dampflok Посмотреть сообщение
Как излечить рывок сервомотора, который он делает при подаче электропитания на ардуину?
Цитата:
Сообщение от shalex Посмотреть сообщение
Цитата:
Как вариант - сначала подать сигнал, а только потом питание на серву.
Добавлю простой пример:



Транзистор - IRF520 mosfet, два резистора на 10ком (необязательны)...
P.S. Схемы рисовал в первый раз, мог где то напутать...
Arduino код:
#include <Servo.h>  
Servo myservo;   
int pos 30//положение сервы
int servo_pin 14// серво
int servo_contr 15;//транзистор    
int btn 2//кнопка
void setup() 

  
pinMode(servo_contrOUTPUT);
  
pinMode(btnINPUT);
  
myservo.attach(servo_pin);  

 
void loop() 

  if(
digitalRead(btn))
  {
    
digitalWrite(servo_contrHIGH);  
    for(
pos 30pos <= 80pos += 1
    {                                 
      
myservo.write(pos);              
      
delay(15);                       
    }     
    for(
pos 80pos>=30pos-=1)     
    {                                
      
myservo.write(pos);              
      
delay(15);                       
    } 
    
digitalWrite(servo_contrLOW);       
  }


Последний раз редактировалось Qvan22; 07.08.2017 в 07:51.
Qvan22 вне форума  
Вверх
6 пользователя(ей) сказали cпасибо:
Старый 30.11.2018, 11:42   #15
laba
Местный
 
Аватар для laba
 
Регистрация: 06.03.2009
Адрес: Питер
Сообщений: 3,693
Сказал(а) 'не согласен(а)'!: 10
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 6,942
Поблагодарили 4,844 раз(а) в 1,822 сообщениях
Все 'Спасибо' этого пользователя. :
0 за это сообщение
0 Всего
Репутация: репутация неоспорима (5127)
По умолчанию

Цитата:
Сообщение от Dampflok Посмотреть сообщение
Как излечить рывок сервомотора, который он делает при подаче электропитания на ардуину?
Прочитал рекомендации, изложенные на сайте OpenDCC.
Один из простых вариантов это соединить управляющий вход сервопривода с + питания, через резистор 4К7. Но это не со всеми сервами работает.
Я у себя попробовал, в принципе стало лучше реально, с обычными китайскими сервами.
__________________
HO, цифра, OpenDCC, S-88N, OpenCar, BiDiB
С приветом из подземки!!!
laba вне форума  
Вверх
3 пользователя(ей) сказали cпасибо:
Старый 02.12.2020, 16:04   #16
nex
Заглянувший
 
Аватар для nex
 
Регистрация: 02.08.2014
Адрес: краснодарский край ст. Полтавская
Сообщений: 243
Сказал(а) 'не согласен(а)'!: 1
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 109
Поблагодарили 91 раз(а) в 58 сообщениях
Все 'Спасибо' этого пользователя. :
0 за это сообщение
1 Всего
Репутация: скоро придёт к известности (101)
По умолчанию

Всем привет, была проблема на шлагбаумах , срывало привода так как ход очень маленький, я полечил для себя простым для других незнаю, в серве один провод с моторчика отпаял от платы и от моторчика, вывел два проводка, естественно один от платы другой от моторчика через таймер на ne555 , после подачи питания через 10 сек. они соединяются. Я доволен на 100 %. Всем удачи.
nex вне форума  
Вверх
Пользователь сказал cпасибо:
Старый 22.09.2023, 16:45   #17
George
увлечённый дедушка
 
Аватар для George
 
Регистрация: 19.10.2020
Адрес: Зеленоград
Сообщений: 77
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 164
Поблагодарили 62 раз(а) в 23 сообщениях
Все 'Спасибо' этого пользователя. :
0 за это сообщение
0 Всего
Репутация: скоро придёт к известности (62)
По умолчанию

Давненько не писали в этой теме…
Скорее всего, уже все нашли для себя оптимальный способ устранения рывка или используют серводекодеры, где эта проблема решена.
Но попробую и я влезть со своими пятью копейками.
У себя использую ардуино нано с шилдом для удобства подключения сервоприводов:
Нажмите на изображение для увеличения
Название: 111.jpg
Просмотров: 20
Размер:	199.3 Кб
ID:	210130
PCA 9685 не осилил, да и смысла в ней для моих 10 стрелок нет…
Стрелки переключаю либо тумблером - в режиме покатушек, либо программно – через свободные пины DCC++
Рывков сервоприводов у себя при включении питания на макете не наблюдаю.
Что делаю:
Перед выключением макета всегда перевожу тумблеры переключения стрелок в исходное положение, соответствующее стартовому положению серв в скетче. Это, впрочем, не обязательно, но если не сделать, то одновременное изменение положения нескольких серв при включении действует на нервы.
Замечу, что это не бесконтрольный рывок, а просто установка серв в положение, заданное тумблером.
Кроме того, перевод тумблеров в исходное состояние (отрыв соответствующего пина ардуины от земли) является необходимым условием для переключения стрелок Рокрейлом или скетчем, залитым в DCC++, поэтому уже вошло в привычку.
Питание ардуины и серв осуществляю от одного источника питания +5В.
Конечно, можно ардуину запитать и от 12В, но тогда надо тянуть отдельный провод, а шина +5В у меня уже идёт по всему макету для питания реле, светофоров и серв.
Ну, ещё input_pullup, attach/detach и обязательно схему подавления помех, рекомендованную коллегой RTF82:

Нажмите на изображение для увеличения
Название: фильтр для серво.jpg
Просмотров: 25
Размер:	90.1 Кб
ID:	210128

Сервы - самые дешёвые, с углом поворота 180 градусов:
Нажмите на изображение для увеличения
Название: 3bc186cab0a01f234d743866d6629225.jpg
Просмотров: 14
Размер:	3.9 Кб
ID:	210131 Нажмите на изображение для увеличения
Название: 4e5012c9e23b434e19d708f0a3b4f24f.jpg
Просмотров: 18
Размер:	4.0 Кб
ID:	210132
В питании дело, или в скетче - не знаю, особенных исследований в этой области не производил. Просто добился на коленке плавного движения серв и забабахал сразу на макет.
Скетч:
Arduino код:
#include <Servo.h>
#include <Bounce2.h>
Bounce debouncer4 Bounce(); //создаём объекты антидребезга
Bounce debouncer5 Bounce();
// таблица с углами отклонения сервоприводов и подключением пинов:
// Важно: (!!!) на макете у сервопривода стартовым может быть как min, так и max угол (!!!)
// номера стрелок:     1   2   3  "4" "5"  6   7   8   9  10    рабочие стрелки - 4 и 5 (остальное - справочно)
int anglesMin[] = {0,  0,  0,  07075,  0,  0,  0,  0,  0}; //минимальный угол сервопривода
int anglesMax[] = {0,  0,  0,  095,100,  0,  0,  0,  0,  0}; //максимальный угол сервопривода
int anglesStart[]={0,  0,  0,  095,100,  0,  0,  0,  0,  0}; // стартовый угол сервопривода
int servosPin[] = {0,  0,  0,  0,  2,  4,  7,  8121314}; //пин сервопривода
int tumblersPin[]={0,  0,  0,  015161718192021}; //пин тумблера
Servo servo4;     // cоздаем объекты типа «сервопривод»
Servo servo5;
int angle4 anglesStart[4]; // определяем начальный угол 4-го привода
int angle5 anglesStart[5]; //                      ...  5-го привода
int periodServo 45;  // интервал времени, мс, через который будет производиться поворот каждой сервы на 1 градус
unsigned long timer4;  // Время до последнего движения 4-го привода, мс, от начала работы программы
unsigned long timer5;  

void setup() { 
servo4.attach(servosPin[4]); // вход 4-й сервы подключён к пину (cм.таблицу выше)
servo5.attach(servosPin[5]); 
pinMode(tumblersPin[4], INPUT_PULLUP); // тумблер 4 стрелки подключён к пину (cм.таблицу выше) c подтяжкой к +U
pinMode(tumblersPin[5], INPUT_PULLUP); 
debouncer4.attach(tumblersPin[4]); // объект антидребезга 4 тумблера
debouncer5.attach(tumblersPin[5]);
debouncer4.interval(100);
debouncer5.interval(100);
timer4=millis();  // Отсчёт времени для движений 4-го привода
timer5=millis();  
servo4.write(angle4); // устанавливаем начальный угол 4-го сервопривода
servo5.write(angle5); 
}

void loop() {
 
debouncer4.update();
 
debouncer5.update();
 
int value4 debouncer4.read();
 
int value5 debouncer5.read();
 
// цикл для сервопривода 4-ой стрелки:
  
servo4.attach(servosPin[4]);
  if ((
millis()-timer4)>= periodServo){
     if (
value4 == LOW && angle4 >= anglesMin[4]){
    
angle4--;     // Изменяем угол на один градус
    
servo4.write(angle4); // Посылаем 4-му приводу команду с новым углом поворота
    
timer4 millis(); // Обновляем счетчик времени
    
}
     if (
value4 == HIGH && angle4 <= anglesMax[4]){
    
angle4++;     // Изменяем угол на один градус
    
servo4.write(angle4);   // Посылаем 4-му приводу команду с новым углом поворота
    
timer4 millis(); // Обновляем счетчик времени
    
}
    
servo4.detach();
  }
// цикл для сервопривода 5-ой стрелки:
   
servo5.attach(servosPin[5]);
   if ((
millis()-timer5)>= periodServo) {
    if (
value5 == LOW && angle5 >= anglesMin[5]) {
     
angle5--;
     
servo5.write(angle5); 
     
timer5 millis(); 
     }
    if (
value5 == HIGH && angle5 <= anglesMax[5]) {
     if  (
angle5 anglesMax[5]){
     
angle5++; 
     
servo5.write(angle5);  
     
timer5 millis(); 
     }
    
servo5.detach();
  }
}

Скетч составлял с букварём для начинающего ардуинщика, поэтому сильно не пинайте,
но всё исправно работает, без рывков, а ведь это главное

Последний раз редактировалось George; 22.09.2023 в 21:13.
George вне форума  
Вверх
5 пользователя(ей) сказали cпасибо:
Старый 22.09.2023, 18:15   #18
Rebel
Местный
 
Аватар для Rebel
 
Регистрация: 22.11.2010
Адрес: Москва
Сообщений: 3,012
Сказал(а) 'не согласен(а)'!: 4
Сказали 'не согласен'! 29 раз(а) в 19 сообщениях
Сказал(а) спасибо: 1,688
Поблагодарили 1,634 раз(а) в 821 сообщениях
Все 'Спасибо' этого пользователя. :
0 за это сообщение
2 Всего
Репутация: обеспечил(а) себе прекрасное будущее (1669)
По умолчанию

Цитата:
Сообщение от George Посмотреть сообщение
Перед выключением макета всегда перевожу тумблеры переключения стрелок в исходное положение, соответствующее стартовому положению серв в скетче.
а так с точки зрения эксплуатации выглдяит не очень, что если вернувшись из отпуска не помнишь что там было в скетче?
не проще было положения сервы или тумблера в память писать? ну и при включении переводить если что не так
__________________
🎉 мой канал в телеграм @aleksandr_ru_blog
Rebel вне форума  
Вверх
Пользователь сказал cпасибо:
Старый 22.09.2023, 19:24   #19
Alexmit
Местный
 
Регистрация: 29.06.2010
Адрес: Москва
Сообщений: 2,827
Сказал(а) 'не согласен(а)'!: 6
Сказали 'не согласен'! 2 раз(а) в 2 сообщениях
Сказал(а) спасибо: 971
Поблагодарили 2,639 раз(а) в 1,561 сообщениях
Все 'Спасибо' этого пользователя. :
0 за это сообщение
1 Всего
Репутация: репутация неоспорима (2665)
По умолчанию

Цитата:
Сообщение от George Посмотреть сообщение
В питании дело, или в скетче - не знаю, особенных исследований в этой области не производил.
Alexmit вне форума  
Вверх
Пользователь сказал cпасибо:
Старый 22.09.2023, 20:02   #20
George
увлечённый дедушка
 
Аватар для George
 
Регистрация: 19.10.2020
Адрес: Зеленоград
Сообщений: 77
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 164
Поблагодарили 62 раз(а) в 23 сообщениях
Все 'Спасибо' этого пользователя. :
0 за это сообщение
0 Всего
Репутация: скоро придёт к известности (62)
По умолчанию

если вернувшись из отпуска не помнишь что там было в скетче?

Каждый тумблер имеет свою метку исходного положения 😊
George вне форума  
Вверх
Старый 22.09.2023, 20:32   #21
xu56857
Московский модуль
 
Аватар для xu56857
 
Регистрация: 02.02.2015
Адрес: Москва
Сообщений: 940
Сказал(а) 'не согласен(а)'!: 9
Сказали 'не согласен'! 2 раз(а) в 2 сообщениях
Сказал(а) спасибо: 3,978
Поблагодарили 3,305 раз(а) в 637 сообщениях
Все 'Спасибо' этого пользователя. :
0 за это сообщение
0 Всего
Репутация: репутация неоспорима (3320)
По умолчанию

Не проще ли в сетапе сделать опрос тумблеров , с задержкой, и установку стрелок согласно положению тумблеров ?
xu56857 вне форума  
Вверх
Пользователь сказал cпасибо:
Старый 23.09.2023, 00:29   #22
George
увлечённый дедушка
 
Аватар для George
 
Регистрация: 19.10.2020
Адрес: Зеленоград
Сообщений: 77
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 164
Поблагодарили 62 раз(а) в 23 сообщениях
Все 'Спасибо' этого пользователя. :
0 за это сообщение
0 Всего
Репутация: скоро придёт к известности (62)
По умолчанию

Да, действительно, очень хороший вариант для переключения стрелок тумблерами.
Но что Вы хотите от чайника? Я рад уже, что у меня получился хоть какой-то рабочий вариант 😊
И потом, я же не только тумблером стрелки переключаю, Рокрейл тоже должен, а если я выходной пин станционной DCC ++ меги тумблером посажу на землю, стрелка зависнет в одном положении.
Вот и приходится входной пин стрелочной нано, вместе с выходным пином станционной меги подтягивать к плюсу питания, т.е. тумблер при работе с Рокрейл д/б строго в конкретном положении...

Последний раз редактировалось George; 23.09.2023 в 13:24.
George вне форума  
Вверх
Старый 26.09.2023, 15:18   #23
nex
Заглянувший
 
Аватар для nex
 
Регистрация: 02.08.2014
Адрес: краснодарский край ст. Полтавская
Сообщений: 243
Сказал(а) 'не согласен(а)'!: 1
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 109
Поблагодарили 91 раз(а) в 58 сообщениях
Все 'Спасибо' этого пользователя. :
0 за это сообщение
1 Всего
Репутация: скоро придёт к известности (101)
По умолчанию

Всём привет, я решил проблему с дерганьем просто, открыл серву, провод который идёт от платы к мотору любой разрываеш и выводиш два наружу, используя проще говоря плату с реле времени которая с небольшой задержкой соединяет их, и всё работает чётко, так у меня работали привода на шлагбаумах переезда, без этой конструкции сломал несколько. Всём удачи.
nex вне форума  
Вверх
Пользователь сказал cпасибо:
Старый 26.09.2023, 16:40   #24
Alexander
Местный
 
Аватар для Alexander
 
Регистрация: 16.05.2013
Адрес: Казахстан, Атырау (Гурьев)
Сообщений: 4,871
Сказал(а) 'не согласен(а)'!: 1
Сказали 'не согласен'! 7 раз(а) в 6 сообщениях
Сказал(а) спасибо: 4,469
Поблагодарили 11,956 раз(а) в 2,988 сообщениях
Все 'Спасибо' этого пользователя. :
0 за это сообщение
0 Всего
Репутация: репутация неоспорима (11964)
По умолчанию

Какое именно реле времени?
Alexander вне форума  
Вверх
Старый 27.09.2023, 16:26   #25
nex
Заглянувший
 
Аватар для nex
 
Регистрация: 02.08.2014
Адрес: краснодарский край ст. Полтавская
Сообщений: 243
Сказал(а) 'не согласен(а)'!: 1
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 109
Поблагодарили 91 раз(а) в 58 сообщениях
Все 'Спасибо' этого пользователя. :
0 за это сообщение
1 Всего
Репутация: скоро придёт к известности (101)
По умолчанию

на таймере ne 555, но именно разрывать любой провод от платки до мотора.
nex вне форума  
Вверх
Пользователь сказал cпасибо:
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Командная станция DCC++ на Ардуино BR95009 Arduino 567 18.12.2023 21:44
Конструктор электроники для макета на базе Ардуино Alexmit Arduino 86 03.05.2023 18:05
Декодер DCC на ардуино для немецкого выходного сигнала BR95009 Arduino 61 26.02.2019 18:20
Декодер для стрелки LGB на Ардуино BR95009 Arduino 42 25.10.2016 16:13
ЭЧшники жгут! В прямом смысле. MSV ЖД техника 13 02.08.2011 09:24


Текущее время: 05:04. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, vBulletin Solutions, Inc. Перевод: zCarot
Copyright © ModelldepO.ru 2006 -