Проблема с сервомашинкой. При включении дёргается и замирает.
- Войдите на сайт для отправки комментариев
Добрый день! Простите за мой вопрос, я совсем новичко в этом деле, но сейчас пытаюсь учиться управлять 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, думал, что не хватает питания.
Земля ардуино и серво соеденины. Помогите, пожалуйста, не знаю, как решить эту проблему.
Просто поподавайте питание на серву без подключения к ардуине - дергается?
Да, происходит точно тоже самое.
Значит от ардуины данные дерги вообще никак не зависят и ею не исправляются. Так работает сама электроника сервы. И, по-моему, тут писали, что это нормальное поведение для серв данной ценовой ниши.
Я читал, что при включении дёргания в порядке вещей. Проблема в том, что код не исполняется. Дёргается и всё. Мочит, пока не выключишь-включишь в сеть.
Так бы и писали, что не управляется. Вот это должно выставлять на какой-то угол серву. Т.е. понимаете, да - в пин даем 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); }Прошу прошения, что не уточнил суть проблемы. К сожалению, данный скейч выполняется точно также. Немного двигается в направлении упора на шестерне.
Ну, тут что могу посоветовать... вскрыть со стороны электроники, мультиметром потыкать, убедиться, что есть контакт между ардуиной и платой сервы. Кто его знает, что там напаяно нашими трудолюбивыми друзьями.
Не думал, что столкнусь на первых порах с такой проблемой. Спасибо за советы.