Серводвигатель постоянно пытается опуститься ниже 134 °, что не так? - PullRequest
4 голосов
/ 22 июня 2019

Я пытаюсь заставить плату Arduino Uno управлять захватом, приводимым серводвигателем.Сервопривод пытается опуститься ниже 134 °, что механически невозможно.Что я могу сделать, чтобы это исправить?

Я пытался ограничить двигатель до 180 °, когда он не считывал нужные кнопки, он сохранял бы основное положение (закрыто, 180)

#include <Servo.h>

Servo myservo;

char reading;
int pos;

void setup() {
  // put your setup code here, to run once:
  myservo.attach(9);
  Serial.begin(9600);
}

void loop() {

  if (Serial.available() > 0) {

    reading = Serial.read();
    Serial.print(reading);
    if (reading == 'W' || reading == 'w') {
      pos = 134;
      myservo.write(pos);
      Serial.println("Open");
    }
    else if (reading == 'C' || reading == 'c') {
      pos = 180;
      myservo.write(pos);
      Serial.println("Close");
    }
    else if (reading != 'W' || reading != 'C') {
      myservo.write(180);
    }
  }
}

1 Ответ

2 голосов
/ 22 июня 2019

В вашем коде вы звоните только attach(), передавая пин-код.

Библиотека серво требует, чтобы вы указывали минимальное и максимальное положение серво вала при вызове attach(). Если вы этого не сделаете, вы можете оказаться в ситуации, когда вы вызываете действительные позиции, но сервопривод либо не зайдет достаточно далеко, либо попытается пойти дальше, чем это возможно механически.

Библиотека должна знать минимальную и максимальную ширину импульсного сигнала, чтобы при вызове Servo.write(), проходящем под углом вала, она могла отработать соответствующий рабочий цикл.

...