Arduino Nano - Stellmotor

Hey Leute,

beim letzen mal wurde mir hier super geholfen. Deswegen hoffe ich, dass mir jetzt auch jemand helfen kann. :slight_smile:

Also ich benutze einen Arduino Nano und den Stellmotor HYX-SG90 mit Stellarm. Der Stellarm soll sich auf Knopfdruck (Taster ist schon programmiert) von seiner Ausgangslage (90°) in einer bestimmten Geschwindigkeit zu 0° bewegen und dort für ein paar Sekunden stehen bleiben. Dann soll er von 0° auf 180 ° fahren in einer bestimmten Geschwindigkeit und auch dort kurz stehen bleiben. Zuletzt soll er wieder auf 90° zurückfahren und den Vorgang wiederholen.

Mein Problem ist, dass ich entweder den Stellarm auf 0°/180°/90° gefahren bekomme und er stehen bleibt, wo ich auch die Zeit mit delay einstellen kann, er aber unfassbar schnell diesen Vorgang ausführt und ich es nicht steuern kann, ODER ich kann die Intervallzeit bis zu den einzelnen Position über einen ,,for" Befehl einstellen aber er bleibt dann nicht bei den Gradzahlen stehen. Muss ich die beiden Befehle kombinieren bzw. beide in die If schleife schreiben?

So wäre meine Idee aber das funktioniert leider nicht. Würde mich über Unterstützung sehr freuen :slight_smile:

Link zum Motor: http://www.ee.ic.ac.uk/pcheung/teaching/DE1_EE/stores/sg90_datasheet.pdf

#include <Servo.h>
Servo myservo;                                        

int pos = 0;                                          
int tasterPin = 6;                                     
int tasterStatus; 

void setup() {

  myservo.attach(9);                                 

  pinMode(tasterPin, INPUT);
  Serial.begin(9600);
}

void loop() {
  tasterStatus = digitalRead(tasterPin);
  Serial.println(tasterStatus);
  if (tasterStatus == HIGH) {                            
   
    
  }
  myservo.write(0);
  delay(4000);
  for (pos = 90; pos <= 0 += 1) {
    myservo.write(pos)
    delay(100); 
    }
  myservo.write(180);
  delay(4000);
  for (pos = 0; pos >= 180; pos -= 1){
    myservo.write(pos);
    delay(200);}
   
  }
  else                                                  
  myservo.write(90);                                
  delay(3000);
  }

Beste Grüße

Setze Deinen Code bitte in Codetags (</>-Button oben links im Forumseditor oder [code] davor und [/code] dahinter ohne *).
So ist er auch auf portablen Geräten lesbar. Das kannst Du auch noch nachträglich ändern.

Einen Link zum Motor könntest Du uns auch geben.

Gruß Tommy

Fuusel:

  if (tasterStatus == HIGH) {                            

}

Das ist vollkommen nutzlos, denn nur Anweisungen, die innerhalb der geschweiften Klammern stehen werden auch abhängig von der Abfrage ausgeführt. Da da nichts steht, bewirkt die if-Bedingung auch nichts.
(N.B. es gibt keine if Schleifen :wink: ).

Dein Sketch enthält noch weitere Fehler, weshalb er nicht fehlerfrei kompiliert. Stelle einen deiner Versuche ein, der auch kompilierbar ist. Die for-schleifen können auch nicht funktionieren, da die Endebedingung nicht zur 'Laufrichtung' deiner Variable passt.

Hi

Laaaangsaaam drehende Servos sollte mit der Lib vom MicroBahner (MoBaTools) möglich sein.
Dann möchtest Du Dich auch von delay() verabschieden - weil während delay(), macht der Arduino nicht mehr sonderlich viel - zumindest nicht mit Deinem Sketch.

MfG

Dieser Motor ist ein Modellbauservo.
Damit er nicht schnellstmöglich von einer zur nächsten Position rauscht, mußt Du einfach langsam (kleine) Zwischenschritte ansteuern.

Grüße Uwe

Hier noch der Link zu dem in #3 erwähnten wunderbaren Tool, das Servos (aber nicht nur die), in gewünschter Geschwindigkeit (also auch richtig langsam) und blockierungsfrei von A nach B fahren lässt:

Installierbar ist die Lib einfach über den Bibliotheksverwalter :wink: