Go Down

Topic: Arduino Nano - Stellmotor  (Read 88 times) previous topic - next topic

Fuusel

Oct 23, 2019, 04:37 pm Last Edit: Oct 23, 2019, 05:43 pm by Fuusel
Hey Leute,

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

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 :)

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


Code: [Select]
#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

Tommy56

#1
Oct 23, 2019, 04:47 pm Last Edit: Oct 23, 2019, 04:50 pm by Tommy56
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
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

MicroBahner

#2
Oct 23, 2019, 06:54 pm Last Edit: Oct 23, 2019, 06:55 pm by MicroBahner
Code: [Select]

  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 ;) ).

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.
Gruß, Franz-Peter

postmaster-ino

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
anscheinend ist Es nicht erwünscht, einen Foren-internen Link als 'Homepage' einzubinden, damit JEDER nur einen Klick von combie's Liste zum Thema State-Maschine entfernt ist.
... dann eben nicht ...

uwefed

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

uxomm

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:
https://github.com/MicroBahner/MobaTools/
Always decouple electronic circuitry.

MicroBahner

Installierbar ist die Lib einfach über den Bibliotheksverwalter ;)
Gruß, Franz-Peter

Go Up