Проблема с сервоприводом

Тема в разделе "Моторы, сервоприводы, робототехника", создана пользователем OOM, 12 мар 2017.

  1. OOM

    OOM Нерд

    Подскажите в чем может быть причина.
    Имеется два сервопривода S3003 установленных на поворотной платформе.
    Один привод (нижний) вращает платформу по горизонтали
    Второй привод (верхний) поворачивает камеру по вертикали
    Поворот серв осуществляется потенциометрами
    Питание серв отдельно от блока питания 12В через понижающий модуль питания до 5В
    Проблема заключается в том, что горизонтальная серва становится в нужное положение и стоит, но гудит, а вертикальная, став в нужное положение начинает судорожно дрожать, т.е дергается в разные стороны.
    Мне нужно, чтобы сервы стали в нужное положение и были зафиксированы.
    Код (C++):

     #include <Servo.h>
    Servo myservo;
    Servo myservo1;
    int potpin = 0; // analog pin 0 pot
    int potpin1 = 1; // analog pin 1 pot
    int val;
    int val1;

    void setup() {
      Serial.begin(9600);
      myservo.attach(9);
      myservo1.attach(10);
    }

    void loop() {

      val = analogRead(potpin);
      val = map(val, 0, 1023, 0, 180);
      myservo.write(val); // выводим ротор сервы в положение в соответствии с полученным масштабированным значением
      //delay(15); // ждем, пока серва обеспечит заданное положение

      val1 = analogRead(potpin1);
      val1 = map(val1, 0, 1023, 0, 180);
      myservo1.write(val1); // выводим ротор сервы в положение в соответствии с полу// servo için 15 milisaniye bakınız detay için datashite bknz.
    delay(15); // ждем, пока серва обеспечит заданное положение
      Serial.print(val);
      Serial.print("\t");
      Serial.print(val1);
      Serial.println("\t");

    }
    Подскажите, как убрать этот дребезг
     
  2. Tomasina

    Tomasina Сушитель лампочек Модератор

    Код (C++):
    #include <Servo.h>
    Servo servoUp;
    Servo servoDown;
    const byte potUpPin = A0; // потенциометр подключен к пину A0
    const byte potDownPin = A1; // потенциометр подключен к пину A1
    const byte servoUpPin = 9;
    const byte servoDownPin = 10;
    unsigned int valueUp;
    unsigned int valueDown;

    void setup()
    {
      Serial.begin(9600);
    }

    void loop()
    {
      static unsigned int lastValueUp = 0;
      static unsigned int lastValueDown = 0;

      valueUp = analogRead(potUpPin);
      valueUp = map(valueUp, 0, 1023, 0, 180);
      if (valueUp != lastValueUp)
      {
        servoUp.attach(servoUpPin);
        servoUp.write(valueUp); // выводим ротор сервы в положение в соответствии с полученным масштабированным значением
        delay(15); // ждем, пока серва обеспечит заданное положение
        lastValueUp = valueUp;
        servoUp.detach();
      }

      valueDown = analogRead(potDownPin);
      valueDown = map(valueDown, 0, 1023, 0, 180);
      if (valueDown != lastValueDown)
      {
        servoDown.attach(servoDownPin);
        servoDown.write(valueDown); // выводим ротор сервы в положение в соответствии с полу
        delay(15); // ждем, пока серва обеспечит заданное положение
        lastValueDown = valueDown;
        servoDown.detach();
      }

      Serial.print(valueUp);
      Serial.print("\t");
      Serial.print(valueDown);
      Serial.println("\t");
    }