Servo steuern mit Uno - Servo fährt immer in Mittelstellung

Hallo,

ich versuche einen Servo mit dem Ardiuno Uno zu steuern.

Aufbau:

USB an PC,
Netzteil mit 5 V an den Pins V in und GND,
vom GLEICHEN Netzteil auch Plus (roter Anschluss am Servo) und Minus (brauner Anschluss am Servo) anschlossen
Pin 4 am Arduino auf die Signalleitung vom Servo.
Servo ist der “modelcraft 4519”

Sketch:

#include <Servo.h>

Servo myservo;

void setup()
{
  myservo.attach(4);
}

void loop()
{
myservo.write(180);
  delay(1000);
 myservo.write(90);
  delay(1000);
  myservo.write(0);
  delay(1000);
  
}

wenn ich das ganze einschalte, fährt der Servo in die Mittelstellung und dann nichts mehr.

Wenn ich ihn von Hand in eine Richtung drehe, dauert es (wahrscheinlich) die 1000millisekunden, und er fährt wieder in die Mittelstellung und dann nichts mehr.

Hat jemand eine Idee, woran das liegt bzw wo mein Fehler ist?

Vielen Dank im Voraus.

Manuel

Hm, weiss nicht genau, was die Bücherei macht aber vielleicht probierst mal, den Pin im Setup auch als Ausgang zu definieren? Dass die Lib. funktioniert, weiss ich, hab sie selber schon mal benutzt. Achja: nen PWM-ausgang ist die 4 beim Uno schon oder? Ich hab nur Megas..

Rabenauge:
Achja: nen PWM-ausgang ist die 4 beim Uno schon oder?
Ich hab nur Megas…

Nein, ist kein PWM Ausgang und das wohl das Problem :wink: Versuche es mal mit
PWM: 3, 5, 6, 9, 10, oder 11

Hallo,

ich habe jetzt mal den Pin 3 genommen, aber er macht genau das gleiche. Also er fährt in die Mitte und das wars :frowning:

Viele Grüße

Manuel

// Sweep
// by BARRAGAN <http://barraganstudio.com> 
// This example code is in the public domain.


#include <Servo.h> 
 
Servo myservo;  // create servo object to control a servo 
                // a maximum of eight servo objects can be created 
 
int pos = 0;    // variable to store the servo position 
 
void setup() 
{ 
  myservo.attach(3);  // attaches the servo on pin 3 to the servo object 
} 
 
 
void loop() 
{ 
  for(pos = 0; pos < 180; pos += 1)  // goes from 0 degrees to 180 degrees 
  {                                  // in steps of 1 degree 
    myservo.write(pos);              // tell servo to go to position in variable 'pos' 
    delay(15);                       // waits 15ms for the servo to reach the position 
  } 
  for(pos = 180; pos>=1; pos-=1)     // goes from 180 degrees to 0 degrees 
  {                                
    myservo.write(pos);              // tell servo to go to position in variable 'pos' 
    delay(15);                       // waits 15ms for the servo to reach the position 
  } 
}

Was macht er bei diesem Sketch?

Hallo,

damit fährt er :)

dann probier ich jetzt mit diesem Sketch mal etwas weiter :)

vielen Dank schon mal.

Gruß

Manuel

mannik: dann probier ich jetzt mit diesem Sketch mal etwas weiter :)

In Deinem Sketch fährst Du außer der Mittelstellung nur die Extremwerte 0 und 180 Grad an.

Die Impulsdauerdauer für die Mittelstellung liegt zwar wohl bei allen Servos bei 1500 us. Aber die Impulsdauer für 0° und 180° kann je nach Servohersteller variieren.

Falls nun die Default-Impulsdauer für 0° und 180° in der Library außerhalb von Stellbereich+Toleranzen Deines Servos liegt, dürfte der Servo die angesteuerten Werte ignorieren.

Probieren ggf. aus, die Impulsdauer für 0° und 180° mit in das Setup bei der Initialisierung zu schreiben, z.B.:

  myservo.attach(4,1000,2000);

Und dann mußt Du ggf. ausprobieren, welches die Impulsdauer-Werte für 0° und 180° bei Deinem Servo sind. Die meisten Servos sollten ihre 0 und 180 Grad Position einhalten bei Initialisierungen zwischen 600 und 1000 beim unteren Wert und 2000 bis 2400 beim oberen Wert.

Es ist ja irgendwie nicht besonders sinnvoll den Servo mit Steuerwerten anzusteuern, auf die er gar nicht reagiert.

sschultewolter:

Rabenauge: Achja: nen PWM-ausgang ist die 4 beim Uno schon oder? Ich hab nur Megas..

Nein, ist kein PWM Ausgang und das wohl das Problem ;) Versuche es mal mit PWM: 3, 5, 6, 9, 10, oder 11

Die servo.h braucht keine PWM-Ausgänge. Darum kann der Arduino UNO 12 und der MEGA 48 Servos ansteuern. Die servo.h Bibliothek benutzt einen Timer und darum können 2 PWM-Pins nicht benutzt werden / funktionieren (welche weiß ich nicht auswendig).

Grüße Uwe