Ruckeln und zuckeln beim einschalten von Servos

Hallo,

Mit Servos kann man auf der Modelleisenbahn viele Bewegungsabläufe optimal nachahmen. Was mich jedoch jedes Mal stört, ist das ruckeln und zuckeln beim Einschalten. Ich verwende die Bibliothek <Servo.h>, dadurch ist das Schreiben der Sketche einfacher.
Was kann ich machen, das sich der Sketch merkt, wo das Servo zum Schluss gestanden ist und bei Neustart dort weiter macht, oder bei beenden des Sketch an eine Stelle hinfährt und sich die Stelle merkt.

Gruß BJS

Servo öffnen, Kabel an den Mittelkontakt des Potis anlöten, 0° und 180° Spannung kalibrieren. Beim Einschalten Spannung messen und daraus Position berechnen.

BJS-1952: Was kann ich machen, das sich der Sketch merkt, wo das Servo zum Schluss gestanden ist und bei Neustart dort weiter macht, oder bei beenden des Sketch an eine Stelle hinfährt und sich die Stelle merkt.

Ich würde probieren, beim Anfahren einer Position diese auch im EEPROM zu speichern. Den zuletzt gespeicherten Wert kannst Du dann bei einem Neustart auslesen und entsprechend weitermachen.

Zur Verwendung des EEPROMS habe ich vor einigen Monaten das hier ins Netz gekippt. Vielleicht hilft das.

Gruß

Gregor

Hallo

Habe über Weihnachten etwas Zeit, und habe mich mal wieder mit uno und Co beschäftigt.

Den Sketch habe ich so geschrieben dass alle Servos in der Mittelstellung beim einschalten anfangen.

Um dies zu erreichen habe ich am Ende des „ loop „ einen Taster „ Stop „ in einer If – else Abfage eingebaut. Wenn der Taster Low hat soll der Sketch bei loop – Anfang weiter machen. Wenn Taster High hat soll der Sketch stoppen und ich kann die Versorgungsspannung abschalten.

Was mir jetzt noch fehlt ist ein Befehl mit dem ich den Sketch im loop anhalten kann.

Wäre dankbar wenn mir jemand helfen kann.

Wünsche allen hier in Forum frohe Weihnachten Gruß BJS

BJS-1952:
Was mir jetzt noch fehlt ist ein Befehl mit dem ich den Sketch im loop anhalten kann.

Da meine Phantasie nicht ausreicht, mir Deinen Sketch im Kopf zusammenzubasteln, wäre es hilfreich, wenn Du ihn mit dem Button </> hier zeigst.

void halt(void)
{
  noInterrupts();
  for(;;);
}

Schalte doch die Stromversorgung der Servos mit einem p-Kanal-Mosfet ein, wenn du den letzten Wert aus dem EEprom auf die Signalleitung gegeben hast.

Hallo

Die letzten Wert in dem EEPROM speichern, bei Start auslesen und auf die Signalleitung gegeben ist bestimmt

die elegantere Lösung. Habe mich intensiv damit befasst. Die Seiten die Georg „ ins Netz gekippt „ hat haben

mich ein Stück weiter gebracht, aber nicht so weit das ich ein brauchbares Ergebnis zustande brachte.

Komme nicht so schnell aus meinem Anfängerstatus heraus.

Ich habe mich deshalb für den nachfolgenden Weg entschieden der in dem Sketch Steht. Was mir jetzt noch

fehlt ist ein Befehl mit dem ich den Sketch im loop anhalten kann, und danach die Versorgungsspannung

abschalten kann.

Der Sketch ist nur ein Beispiel. Später werden einmal 5 Tore des Lokschuppen auf und zu gemacht.

Dazu brauche ich 10 Servos.

Gruß BJS

#include <Servo.h>

Servo servo1;
Servo servo2;
int tasterStop = 7;
int tasterstatusStop = 0;

void setup()
{
  servo1.attach(5);
  servo2.attach(6);
  pinMode(tasterStop, INPUT);
}
void loop()
{
  servo1.write(1);
  delay(3000);
  servo1.write(60);
  delay(3000);
  servo1.write(120);
  delay(3000);

  servo2.write(1);
  delay(3000);
  servo2.write(60);
  delay(3000);
  servo2.write(120);
  delay(3000);

  tasterstatusStop = digitalRead(tasterStop);
  if (tasterstatusStop == HIGH)
  {
    servo1.write(1);
    delay(100);
    servo2.write(1);
    delay(100);

    // Hier soll ein Befehl stehen bei dem der Sketch nicht mehr weiter
    // macht und stehen bleibt so das ich die Spannung anschalten kann

  }
}
    // Hier soll ein Befehl stehen bei dem der Sketch nicht mehr weiter
    // macht und stehen bleibt so das ich die Spannung anschalten kann
    while(1);  // Wartet endlos

Was mir jetzt noch fehlt ist ein Befehl mit dem ich den Sketch im loop anhalten kann, und danach die Versorgungsspannung abschalten kann.

Was gefällt dir an meinem halt() nicht?

Hallo combie,

Danke für deine Bemühungen.

Ich habe versucht deine Zeilen in meinem Sketch einzubauen was mir nicht gelungen ist. Es sind lauter

Fehlermeldungen gekommen.

Wenn Du mir zeigst wo und wie ich deine Zeilen einbauen kann, wäre ich Dir dankbar.

Gruß BJS

Immer folgende Regeln beachten:

  1. Fehlermeldungen wollen geheim gehalten werden. IMMER!
  2. Niemals darf man seinen fehlerhaften Code zeigen!

Grund: Denn sonst könnte einem ja geholfen werden. Und wenn einem geholfen wird, kann man nicht mehr jammern.

void halt(void)
{
  noInterrupts();
  for(;;);
}
void loop()
{
   halt();
}

Tipp: Vergiss meinen Code. Ist sowieso nur ein unnötiger Flicken für eine komische Idee. Keine Mensch braucht sowas. Zumindest habe ich noch nie vorher davon gehört.

combie:
Vergiss meinen Code.

… und schon steigt mein Vorschlag aus #8 an Wert. Die Stelle, wo es hingehört, ist angegeben :slight_smile: