Проблема с сервомашинкой. При включении дёргается и замирает.

Orlox
Offline
Зарегистрирован: 26.05.2018

Добрый день! Простите за мой вопрос, я совсем новичко в этом деле, но сейчас пытаюсь учиться управлять arduino с помощью Youtube. Возникла проблема, ничего не нашёл по этому поводу в интернете.

При включении в сеть сервопривод MG995 дёрается в сторону ограничителя на большой шестерне выходного вала и замирает. 
Сначала использовал эту прошивку: 
 

#include <Servo.h>
 
Servo servo; 
void setup() {
  servo.attach(9); 
  servo.write(0);  
  }
 
void loop() {
  servo.write(90);
  delay(1000);        
  servo.write(1800);
  delay(100);        
  servo.write(90);
  delay(1000);
  servo.write(0);
  delay(1000);        
}

Думал, что дело в прошивке, посмотрел, что можено прописывать импульсами (думал, что начальное положение шестерни не было правильным, или как ещё можно сказать)ю
Нашёл такую прошивку: 
 

#include <Servo.h> 
// для дальнейшей работы назовем 9 пин как servoPin
#define servoPin 9
// 544 это эталонная длина импульса при которо мсервопривод должен принять положение 0°
#define servoMinImp 544 
// 2400 это эталонная длина импульса при котором сервопривод должен принять положение 180°
#define servoMaxImp 2400 
Servo myServo;
void setup()
{
myServo.attach(servoPin, servoMinImp, servoMaxImp);
// устанавливаем пин как вывод управления сервоприводом,
// а также для работы сервопривода непосредственно в диапазоне углов от 0 до 180° задаем мин и макс значения импульсов.
// импульсы с большей или меньшей длиной восприниматься не будут.
// для сервоприводов даже одной партии значения длин импульсов могут отличаться, может быть даже и 584-2440.
// поэкспериментируйте и найдите идеальные длины импульсов конкретно для вашего сервопривода.
}
void loop()
{
  // устанавливаем качалку сервопривода в положение 0°(т.к.импульс равен 544мкс)
  myServo.writeMicroseconds(servoMinImp);
  delay(2000);
  // в данной функции можно задавать длины импульсов непосредственно числами.
  // 90°(т.к.vимпульс равен 1520мкс)
  myServo.writeMicroseconds(1520);
  delay(2000);
  // 180°(т.к. импульс равен 2400мкс)
  myServo.writeMicroseconds(servoMaxImp);
  delay(2000);
}

Обе выдают одинакувую картину. Подключал к БП с 5v 350mAh и 500mAh, думал, что не хватает питания.
Земля ардуино и серво соеденины. Помогите, пожалуйста, не знаю, как решить эту проблему.

sadman41
Offline
Зарегистрирован: 19.10.2016

Просто поподавайте питание на серву без подключения к ардуине  - дергается?

Orlox
Offline
Зарегистрирован: 26.05.2018

Да, происходит точно тоже самое. 

sadman41
Offline
Зарегистрирован: 19.10.2016

Значит от ардуины данные дерги вообще никак не зависят и ею не исправляются. Так работает сама электроника сервы. И, по-моему, тут писали, что это нормальное поведение для серв данной ценовой ниши.

Orlox
Offline
Зарегистрирован: 26.05.2018

Я читал, что при включении дёргания в порядке вещей. Проблема в том, что код не исполняется. Дёргается и всё. Мочит, пока не выключишь-включишь в сеть.

sadman41
Offline
Зарегистрирован: 19.10.2016

Так бы и писали, что не управляется. Вот это должно выставлять на какой-то угол серву. Т.е. понимаете, да - в пин даем HIGH на определенное кол-во микросекунд. Если серва не дохлая и соединение правильное (к заданному пиру), то она повернется.

#define SERVO_PIN         9
#define PULSE_DURATION  1500

void setup() {
  pinMode(SERVO_PIN, OUTPUT);  
 }
 
void loop() {
  digitalWrite(SERVO_PIN, HIGH);
  delayMicroseconds(PULSE_DURATION);
  digitalWrite(SERVO_PIN, LOW);
  delay(20);
}

 

Orlox
Offline
Зарегистрирован: 26.05.2018

Прошу прошения, что не уточнил суть проблемы. К сожалению, данный скейч выполняется точно также. Немного двигается в направлении упора на шестерне. 

sadman41
Offline
Зарегистрирован: 19.10.2016

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

Orlox
Offline
Зарегистрирован: 26.05.2018

Не думал, что столкнусь на первых порах с такой проблемой. Спасибо за советы.