Whisky-Cola Mixer: Servo zuckt, Programmbereich identifiziert

Hallo,
ich habe mir eine Whisky-Cola Mixer gebaut. Funktioniert ganz gut bis auf das Zucken vom Servo.
Kurzbeschreibung zum Ablauf:
Glas wird gewogen und tariert.
mit zwei Potis kann die Menge für Whisky bzw. Cola eingestellt werden.
Taste drücken, Whisky wird gepumpt, dann Cola bis gewünschtet Gewicht erreicht ist.
Funktioniert ganz gut, gestern getestet bis 1 Uhr die Nacht :D
Zum Problem:
Servo zuckt in unregelmäßigen abständen. (Servo wird für ein Ventil verwendet, auf, zu. Mehr nicht)
Wenn ich jetzt die Funktion glassleer() deaktiviere, hört das Zucken des Servos auf.
Hat einer ne Idee? Ich komme nicht weiter, ggf. müsste ich eine Andere Bibliothek für die Waage verwenden. Das habe ich noch nicht ausprobiert.

zapfanl_fernnbedienung005.ino (8.95 KB)

Poste den Sketch bitte direkt im Forum in Code-Tags, dann können den auch alle lesen.

Könnte das Zucken evtl. am übermäßigen Genuss von Whisky liegen ? :wink: :wink:

..............kann ich nicht. Hatte es versucht.
Nachrichten sind auf 9000 Stellen begrenzt.

ardu2020:
..............kann ich nicht. Hatte es versucht.
Nachrichten sind auf 9000 Stellen begrenzt.

Dann nimmst du eine txt-Datei und hängst die an.

anbei das Programm als .txt Datei.
Im ersten Post habe ich das Programm als .ino angehangen.

whisky-cola-mixer.txt (8.95 KB)

ardu2020:
anbei das Programm als .txt Datei.
Im ersten Post habe ich das Programm als .ino angehangen.

Ok, danke.

Ich vermute, dein Problem liegt in der jeweiligen "while-Schleife", in der du mehrfach den Servo mit auf oder zu ansprichst.

Warum überhaupt eine while-Schleife ?
Du hast doch mit der loop schon eine Schleife und kannst das doch auch per if-Abfrage machen.

Da dürfte sich die HX711 Lib und die Servo-Lib beissen.
Die verwendete HX711-Lib sperrt die Interrupts, während sie den HX711 ausliest. Die Servo-Lib erzeugt aber die Pulse per Interrupt. Wenn da die Interrupts zu lange gesperrt werden ( und diese HX711-Lib sperrt sie lange, da per Software ausgelesen wird ) werden die Pulse für das Servo verfälscht. Das führt dann zum Zucken.

besten Dank für die Rückmeldung.
was könnte ich jetzt machen?

  1. servo raus, andere Lösung suchen
  2. andere Bibliothek für Waage?
  3. Servo ohne Bibliothek ansteuern?

was würdet ihr machen?

Du könntest versuchen in deinen Funktionen für die Servostellung jeweils die Impulserzeugeung mit attach / detach ein- und auszuschalten. Wenn beim Stillstand des Servo keine Impulse erzeugt werden, können sie auch nicht verfälscht werden. Allerdings muss die Selbsthaltekraft des Servo ausreichen, um das Ventil in Stellung zu halten - wenn es da überhaupt Rückstellkräfte gibt. Ich habe das mit der Servolib so noch nicht gemacht, sollte aber gehen.

Alternativ könntest Du meine MobaTools-Lib verwenden. Die nutzt zwar auch Interrupts zur Erzeugung der Impulse, die kann die Impulse aber automatisch abschalten, wenn das Servo steht. Ausserdem kannst Du die Stellgeschwindigkeit verlangsamen - was für dein Ventil vielleicht auch nicht gar so schlecht ist.

Oder Du suchst eine HX711-Lib, die die Interrupts nicht - zumindest nicht so lange - sperrt. Ich halte das eh für eine sehr schlechte Eigenschaft einer Library. Kurz muss es immer mal sein. Aber während der gesamten Datenübertragung, das ist schon heftig.

Servus,
@Microbahner
danke für den Tipp mit dem detach(); den Befehl hatte ich nicht vor Augen.
Eingepflegt und der Servo zuckt nicht mehr.
(gestern Nacht hatte ich dem Servo den Strom über ein Relais gekappt, gleiche Funktion jedoch ist diese über Software sauberer und schneller und spart mir ein Relais)

Ps: der Mixer funzt richtig gut. Genauigkeit +- 3 Gramm. Dauer für ein Drink ca. 30 Sekunden. incl Glas tarieren

Vielen Dank & Prost :slight_smile:
Schönen Sonntag!

Super, danke für die Rückmeldung - und prost ...