RE: Arduino, Servo ungewollte Bewegung...

#1 von Z-Welt ( gelöscht ) , 26.09.2014 09:51

Hallo Modellbahnfreunde,
wende mich mal an alle die mit Arduino und ATtinys ihre Modellanlage betreiben.
Auf meiner Anlage setze ich zwecks Belebung den Arduino UNO bzw. ATtiny ein. Lichtsteuerung, Kinderschaukel, Hebebühne, Weichen, Türen und Tore. Aber mit einem Sketch liege ich im Klinsch. Wenn die Spannung eingeschaltet wurde und ich einen Taster betätige fährt das Servo immer erst in eine Stellung und dann sofort zurück. Erst jetzt gehorcht das Servo auf jeden Tastendruck. Mit der Zeit hat man sich darauf eingestellt. Aber es ist doch oft nervig. Wer kann den Sketch anpassen, damit diese ungewollte Bewegung entfällt. Siehe Video und Sketch. https://www.youtube.com/watch?v=1FV_v-yeVy4
Das Servo wird mit zwei Tasten angesteuert.
MfG Georg.

//----------------------------------------------------------------------
// Servo Georg
//----------------------------------------------------------------------

// Der Taster muß den Pin auf Ground/Masse/Minus schalten,
/*** Atmega328 Konfiguration hier!!! ***/
/*
int tasterPin1 = 8; //Taster1 an Pin 8 angeschlossen
int tasterPin2 = 9; //Taster2 an Pin 9 angeschlossen
int Servo_Pin = 12; //Servo an Pin 12
*/
/*** Alternative 8-pinnige ATtiny45 Anschlusskonfiguration hier ***/
// von hier...
int tasterPin1 = 8; //Taster1 an IC Pin 2 des Attiny 45
int tasterPin2 = 9; //Taster2 an IC Pin 3 des Attiny 45
int Servo_Pin = 12; //Servo an IC Pin 5 des Attiny 45
// bis hier

int Stellung1 =50; //ServoStellung 1 (Einstellbar zwischen Min 0° bis max.180° Winkel, auf)
int Stellung2 = 165; //ServoStellung 2 (Einstellbar zwischen Min 0° bis max.180° Winkel, zu)
int Stellung_bisher; // Für Vergleich
const int Warten = 19; // 19 MilliSekunden Warten nach Stellschritt. Nicht verändern!
void Servo_move(int servo,int Stellung_Neu);
//-------------------------------------------------------------
void setup()
{
pinMode(tasterPin1, INPUT); //tasterPin1 (Pin wird als INPUT definiert
pinMode(tasterPin2, INPUT); //tasterPin2 (Pin 9) wird als INPUT definiert
digitalWrite(tasterPin1,HIGH); // Interen Pullupwiderstand aktivieren
digitalWrite(tasterPin2,HIGH); // Interen Pullupwiderstand aktivieren
pinMode(Servo_Pin,OUTPUT);

Stellung_bisher=Stellung1; // Ruhestellung
}
//-------------------------------------------------------------
void loop()
{
if (digitalRead(tasterPin1) == LOW)
Servo_move(Servo_Pin, Stellung1);
if (digitalRead(tasterPin2) == LOW)
Servo_move(Servo_Pin, Stellung2);
delay(20);
}
//-------------------------------------------------------------
/*** Ab hier nichts ändern, bestimmt das Timingverhalten!!! ***/
void Servo_move(int servo,int Stellung_neu){
int Schritt;
if (Stellung_neu == Stellung_bisher) return;
Schritt = (Stellung_neu > Stellung_bisher) ? 1 : -1;
while(Stellung_bisher != Stellung_neu){
Stellung_bisher+=Schritt;
// Servo stellen
digitalWrite(servo,HIGH);
delayMicroseconds((Stellung_bisher * 10)+500);
digitalWrite(servo,LOW);
delay(Warten);
}
}


Z-Welt

RE: Arduino, Servo ungewollte Bewegung...

#2 von Dölerich Hirnfiedler , 26.09.2014 12:18

Hallo Georg,

Nach Einschalten des Stroms weiß Dein Arduino ja nicht mehr was er zuletzt gemacht hat und wie die Position beim Ausschalten war. Also fängt er jedesmal bei "null" an. Du solltest das Programm um eine Funktion erweitern, die den letzten Stand nach jeder Bewegung ins EEPROM schreibt und beim einschalten diese Position wieder einliest.

Googeln nach "Arduino EEPROM" bringt zahlreiche Beispiele.

Du solltest nur darauf achten, ausschließlich erreichte Endpositionen ins EEPROM zu schreiben und nicht jede Zwischenlage zu speichern. Die Lebensdauer der EEPROM-Speicherbausteine ist begrenzt. Die vom Hersteller garantierten 100.000 Zyklen reichen zwar bei normaler Anwendung (fast) ewig, bei ungeschickter Programmierung aber eben auch nur ein paar Minuten.

mfg

D.



Aus einem Märklin-Patentantrag von 1975


 
Dölerich Hirnfiedler
ICE-Sprinter
Beiträge: 5.523
Registriert am: 10.05.2005
Gleise VB
Spurweite H0, Z, 0, 00, 1
Stromart AC, DC, Digital, Analog


RE: Arduino, Servo ungewollte Bewegung...

#3 von Bodo , 26.09.2014 12:20

Hallo,

bei der Variablen-Deklaration / Initialisierung von "Stellung_bisher" wird kein Startwert definiert ... versuch´s mal mit
int Stellung1 =50; //ServoStellung 1 (Einstellbar zwischen Min 0° bis max.180° Winkel, auf)
int Stellung2 = 165; //ServoStellung 2 (Einstellbar zwischen Min 0° bis max.180° Winkel, zu)
int Stellung_bisher =165; // Für Vergleich
wenn "zu" die Grundstellung sein soll (sonst eben 50).

Dann muss die Spannung aber auch in "Grundstellung" abgeschaltet werden.

Der von Dölerich vorgeschlagene Weg ist natürlich noch eleganter, aber je nach Anwendung nicht zwingend notwendig.

Viele Grüße, Bodo


Die Freiheit des Menschen liegt nicht darin, dass er tun kann, was er will, sondern dass er nicht tun muss, was er nicht will. (Jean-Jacques Rousseau)

Meine Anlage - Meine Dauerbaustelle
Platinen für Modellbahn- und Arduino-Anwendungen


 
Bodo
InterCityExpress (ICE)
Beiträge: 2.471
Registriert am: 28.04.2005
Homepage: Link
Gleise C-Gleis, Lenz 0
Spurweite H0, 0
Steuerung MS2 & CS2
Stromart Digital


RE: Arduino, Servo ungewollte Bewegung...

#4 von spielbahn ( gelöscht ) , 26.09.2014 12:28

Hallo Georg;

im Setup definierst Du "Stellung_bisher" als "auf" und in der Routine Servo_move springst Du sofort mit return raus, wenn "Stellung_neu" (also "auf") gleich "Stellung_bisher" ist. Da kann Dein Tor beim ersten Tastern nicht aufgehen, da es für den Arduino ja schon auf ist.
Abhilfe könnte sein, dass Du im Setup die "Stellung_bisher" auf einen undefinierten Wert zwischen auf und zu setzt, damit auch der erste Aufbefehl ausgeführt wird.

Habe mir Deinen Sketch nochmal genauer angesehen:
Mit "Stellung_bisher" stellst Du in der Routine Servo_move das Timing für das Servo ein. Wenn dann "Stellung_bisher" von der tatsächlichen Stellung des Servos abweicht, wird das Servo mit maximaler Geschwindigkeit auf den Wert von "Stellung_bisher" fahren. Es wird daher sinnvoll sein, den Startwert von "Stellung_bisher" im Setup möglichst nahe an den Wert zu legen, den das Servo i.a. beim Ausschalten hat. Gibt es da keine bevorzugte Stellung, dann würde ich den Startwert in die Mitte legen, was aber den unschönen Effekt hat, dass beim ersten Betätigen eines Tasters das Servo schnell in Mittelstellung fährt und dann wie gewohnt in die gewünschte Position.
Die Idee von Dölerich Hirnfiedler klingt auf den ersten Blick gut, hat aber Probleme: wie schon angedeutet, kannst Du nicht jeden Zwischenschritt im EEPROM speichern, wenn es etwas länger überleben soll. Also müsstest Du beim (genauer: vor dem) Ausschalten die Stellung speichern - was aber gar nicht so einfach ist, wenn Du beim Ausschalten wie üblich einfach den Strom abschaltest - wie soll der Arduino da noch speichern können? Und wenn Du soetwas wie eine Vor-Ausschaltroutine einbaust, dann kannst Du beim Ausschalten anstatt die Stellung zu speichern auch gleich in eine definierte Grundstellung fahren. Aber: Im Setup sollte dann für "Stellung_bisher" auch die richtige stehen. Bisher geht Dein Setup davon aus, dass die Grundstellung "auf" ist - deshalb reagiert das Programm ja auch nicht auf den ersten "Auf"-Befehl.


spielbahn

RE: Arduino, Servo ungewollte Bewegung...

#5 von spielbahn ( gelöscht ) , 26.09.2014 12:33

Zitat von Bodo
......bei der Variablen-Deklaration / Initialisierung von "Stellung_bisher" wird kein Startwert definiert ....


Das ist auch nicht nötig, da er im Setup diese Zuweisung macht.


spielbahn

RE: Arduino, Servo ungewollte Bewegung...

#6 von Bodo , 26.09.2014 13:32

Zitat von spielbahn

Zitat von Bodo
......bei der Variablen-Deklaration / Initialisierung von "Stellung_bisher" wird kein Startwert definiert ....


Das ist auch nicht nötig, da er im Setup diese Zuweisung macht.



... stimmt - habe ich übersehen, nachdem ansonsten alle Werte vorbelegt waren ... aber dann gibt´s doch auch genau das Problem, dass der Strom in der definierten Grundstellung abgeschaltet werden muss. Er hat "auf" als Vorbelegung, und startet im Video mit "zu".

Das Problem dürfte bei einem undefinierten Zwischenschritt zur Initialisierung auch auftreten, da die tatsächliche Servo-Position auch dann eben nicht mit der Definition übereinstimmt. Also muss man dafür entweder selbst sorgen, oder wie von Dölerich vorgeschlagen den Wert speichern.

Ich bin gerade mit einer Fahrstraßen-Steuerung für eine Bahnhofsausfahrt (4 Formsignale mit Servos, 2 Weichen) beschäftigt und habe ähnliche Probleme. Ich habe mich für eine "Grundstellung" mit allen Signalen auf HP0/SH0 entschieden und werde dann natürlich die Anlage auch in diesem Zustand abschalten müssen.

Viele Grüße, Bodo


Die Freiheit des Menschen liegt nicht darin, dass er tun kann, was er will, sondern dass er nicht tun muss, was er nicht will. (Jean-Jacques Rousseau)

Meine Anlage - Meine Dauerbaustelle
Platinen für Modellbahn- und Arduino-Anwendungen


 
Bodo
InterCityExpress (ICE)
Beiträge: 2.471
Registriert am: 28.04.2005
Homepage: Link
Gleise C-Gleis, Lenz 0
Spurweite H0, 0
Steuerung MS2 & CS2
Stromart Digital


RE: Arduino, Servo ungewollte Bewegung...

#7 von spielbahn ( gelöscht ) , 26.09.2014 13:57

@Bodo: Habe meinen ersten Beitrag überarbeitet...


spielbahn

RE: Arduino, Servo ungewollte Bewegung...

#8 von Dölerich Hirnfiedler , 26.09.2014 14:30

Zitat von spielbahn

Die Idee von Dölerich Hirnfiedler klingt auf den ersten Blick gut, hat aber Probleme: wie schon angedeutet, kannst Du nicht jeden Zwischenschritt im EEPROM speichern, wenn es etwas länger überleben soll. Also müsstest Du beim (genauer: vor dem) Ausschalten die Stellung speichern - was aber gar nicht so einfach ist, wenn Du beim Ausschalten wie üblich einfach den Strom abschaltest - wie soll der Arduino da noch speichern können? Und wenn Du soetwas wie eine Vor-Ausschaltroutine einbaust, dann kannst Du beim Ausschalten anstatt die Stellung zu speichern auch gleich in eine definierte Grundstellung fahren. Aber: Im Setup sollte dann für "Stellung_bisher" auch die richtige stehen. Bisher geht Dein Setup davon aus, dass die Grundstellung "auf" ist - deshalb reagiert das Programm ja auch nicht auf den ersten "Auf"-Befehl.



Hallo,

Das Problem sehe ich nicht als gravierend an: Wenn man bei Druck eines Tasters die Zielposition als "aktuelle Stellung" im EEPROM hinterlegt, so dürfte man +99% der Fälle abgedeckt haben, nämlich all die bei denen das Servo getan hat was es sollte: Die Zielstellung erreichen. Den Fall, das in der Bewegung der Strom abgestellt wird kann man wohl getrost ignorieren. Natürlich kann man den auch noch abfangen (z.B. durch eine Verfizierung die feststellt ob 500ms später der Strom noch da war), aber das halte ich für "overengineered".
Zwei EEPROM- Zugriffe pro Stellvorgang bringen einen auch nicht in den Bereich in denen die maximale Zahl möglicher Schreib-Lesevorgänge irgendwann mal eine Rolle spielt. In der Regel dürfte der Servo vorher aufgegeben haben.

mfg

D.



Aus einem Märklin-Patentantrag von 1975


 
Dölerich Hirnfiedler
ICE-Sprinter
Beiträge: 5.523
Registriert am: 10.05.2005
Gleise VB
Spurweite H0, Z, 0, 00, 1
Stromart AC, DC, Digital, Analog


RE: Arduino, Servo ungewollte Bewegung...

#9 von spielbahn ( gelöscht ) , 26.09.2014 20:46

Hallo Dölerich,

der Hersteller garantiert pro Speicherzelle ca. 100000 Schreibzugriffe (auch danach muss die Zelle nicht defekt sein).
Du hast recht, da müsste man schon exzessiv Tore auf und zu machen (und deren Zustand jeweils abspeichern), um die Lebensdauer zu überschreiten.
Abgesehen davon halte ich es aber auch nicht für so gravierend, wenn die Speicherzelle denn mal defekt wäre: dann hätte man den jetzigen Zustand.


spielbahn

RE: Arduino, Servo ungewollte Bewegung...

#10 von moppe , 30.09.2014 00:04

Zitat von Z-Welt

Stellung_bisher=Stellung1; // Ruhestellung



"Ruhestellung" = "Stellung1"

Zitat von Z-Welt

if (digitalRead(tasterPin1) == LOW)
Servo_move(Servo_Pin, Stellung1);
if (digitalRead(tasterPin2) == LOW)
Servo_move(Servo_Pin, Stellung2);
delay(20);



Wenn sie drücken taster 1 geht der servo bis "Stellung1", aber sie hab oben Stellung_bisher=Stellung1; deklariert, wenn sie dann drücken auf taster1, und ihren prozessor glaub das der servo ist an "Stellung1" bewegt der servo sich nicht.

Ich glaub du solltest:
Stellung_bisher=Stellung2; // Ruhestellung
nutzen (und immer der Toren schliessen wenn sie der power abschalten), dann funktioniert alles.....

Klaus


"Meine" Modellbahn:http://www.modelbaneeuropa.dk
Dänisches Bahnforum: http://www.baneforum.dk
PIKO C4 "Horror Gallery": http://moppe.dk/PIKOC4.html


 
moppe
Trans Europ Express (TEE)
Beiträge: 8.720
Registriert am: 07.08.2011
Homepage: Link
Ort: Norddeusche halbinsel
Gleise Roco, PECO, Märklin/Trix, PIKO,
Spurweite H0, H0e, N, Z
Steuerung Z21, Lenz, MpC Gahler+Ringsmeier, Games on Track/Faller
Stromart AC, DC, Digital, Analog


RE: Arduino, Servo ungewollte Bewegung...

#11 von spielbahn ( gelöscht ) , 30.09.2014 20:34

Hallo Klaus,

liest Du eigentlich die vorherigen Beiträge bevor Du selbst schreibst?
(Wobei man ja auch der Meinung sein kann, dass doppelt gemoppelt besser hält.)


spielbahn

RE: Arduino, Servo ungewollte Bewegung...

#12 von Z-Welt ( gelöscht ) , 30.09.2014 22:23

Hallo Uli,
danke für deine Ausführungen bis hier her.
Klaus (( Moppe )) wollte auch nur helfen, da ich per PN bei ihm nachfragte.
Klaus hat schon mitgelesen......
Es geht hauptsächlich um die Sequenz im Video bei 0:47 - 2:27 bis 0:50 - 2:27
Uli wie du schon anführtest fehlt da etwas im Sketch, ich bin nun nicht der große Programmierer, daher meine Bitte an dich, --
ändere doch den Sketch mal so um das diese ungewollte Bewegung aufhört. Es würden sich bestimmt auch die anderen Forenleser freuen und sich diesen Sketch speichern. Man kann mit diesem Sketch ja auch Weichen und Wasserkräne betreiben.
Mit freundlichem Modellbahner Gruß
Georg


Z-Welt

RE: Arduino, Servo ungewollte Bewegung...

#13 von spielbahn ( gelöscht ) , 30.09.2014 23:09

Hallo Georg,

so klein solltest Du Deine Programmierfähigkeit nicht darstellen, Du steuerst immerhin ein Servo direkt mit eigener Routine an, ohne die Servo_Lib zu verwenden.
Deshalb hier von mir auch nur Hilfe zur Selbsthilfe:

Vor der Definition der Variablen sollte eingefügt werden:
#include <EEPROM.h>

Im Setup steht bei Dir:
Stellung_bisher=Stellung1; // Ruhestellung

Dies sollte ersetzt werden durch:
Stellung_bisher=EEPROM.read(0);
If(Stellung_bisher != Stellung1 && Stellung_bisher != Stellung2) Stellung_bisher=(Stellung1 + Stellung2)/2;

Im Unterprogramm Servo_move sollte eingefügt werden:
(Evtl. in der ersten Zeile.)
EEPROM.write(0,Stellung_neu);

Diese Vorschläge sind nicht getestet sondern "einfach so" geschrieben, aber ich hoffe doch, dass sie zielführend sind.
(Hierbei wird nur der EEPROM-Speicherplatz 0 benutzt, es gibt ausgefeiltere Routinen, die verschiedene EEPROM-Speicherplätze nutzen, um die Lebensdauer zu verlängern - aber wie oben schon erwähnt, dürfte dies kein Problem sein. Und wenn die Speicherzelle 0 irgendwann hinhüber ist, programmierst Du eben auf Zelle 1 um usw., es stehen ja über 1000 Zellen zur Verfügung )


spielbahn

RE: Arduino, Servo ungewollte Bewegung...

#14 von Z-Welt ( gelöscht ) , 01.10.2014 17:15

Hallo Uli,
danke für die Blumen ops: , leider ist der Sketch nicht auf meinen Mist alleine entstanden, hatte schon etwas Hilfe von Auswärts.

Ich habe im Programm mal deine Zeilen eingefügt, leider bekomme ich eine Fehlermeldung---- siehe Bild ----- links der Sketch mit meinen (( deine Zeilen etwas gewandelt )) ohne Fehlermeldung rechts der Sketch mit deine Zeile und Fehlermeldung.
Fazit: wenn ich die Spannung anlege, zuckt der Servo egal ob in Stellung 1 oder Stellung 2. und die ungewollte Bewegung , um der es überhaupt geht , ist nur noch 1/4 von dem was vorher war.
Ich habe durch Zufall eine Variante gefunden. Das regelbare Netzgerät, an dem die Arduinos bzw. die ATtinys hängen, wird eingeschaltet, aber die Spannung ist auf Null gestellt. Die Servos bewegen sich nicht. Drehe ich jetzt die Spannung von 0 Volt (( für den Arduino auf 8Volt )) und für die (( ATtinys auf 5,0 Volt )) ist das einschalt zucken, aber das Tolle , die ungewollte Bewegung tritt auch nicht mehr auf.
Also, muß ich für meine Servos auf der Anlage ein regelbares Netzgerät verwenden. Aber so habe ich wenigstens Ruhe und die Servos können in jeder Stellung nach Spielschluß Spannungsfrei geschaltet werden.
Trotzdem wird jeder weitere Vorschlag angenommen und getestet.


Georg


Z-Welt

RE: Arduino, Servo ungewollte Bewegung...

#15 von spielbahn ( gelöscht ) , 01.10.2014 19:54

Hallo Georg,

so richtig gut lesbar sind Deine Screenshots nicht...
Soweit ich das entziffern konnte, meckert der Compiler, "If" sei nicht deklariert: soll natürlich auch "if" (Kleinbuchstaben) heißen.
Die gelb markierte Zeile hätte man auch weglassen können, sie ist nur für den Fall, dass im EEPROM noch kein Wert steht.
In Deiner Version steht an dieser Stelle im Setup ein Aufruf von Servo_move, was aber ohne Funktion sein sollte, da Stellung_bisher und Stellung_neu an dieser Stelle gleich sein sollten.
Wie gesagt, alles unter dem Vorbehalt, dass ich das richtig lesen konnte....


spielbahn

RE: Arduino, Servo ungewollte Bewegung...

#16 von Z-Welt ( gelöscht ) , 01.10.2014 23:18

Hallo Uli,
stimmt , If hatte ich groß geschrieben, abkopiert aus dem Tread.
Hab es geändert, aber am zucken ungewollte Bewegung ändert sich nichts.
Georg


selbst wenn ich im linken Sketch (( ist der gleiche )) die Zeile im Setup Aufruf von Servo_move,(Servo_Pin, Stellung_bisher) entferne ist das Ergenis nicht anders.


Z-Welt

RE: Arduino, Servo ungewollte Bewegung...

#17 von spielbahn ( gelöscht ) , 01.10.2014 23:43

Hallo Georg,

Du hast von verschiedenen "ungewollten Bewegungen" berichtet:
(1) Taster1 reagiert nach dem Einschalten nicht, wenn das Tor zu ist. Es muss zuerst Taster2 gedrückt werden.
(2) Beim Einschalten zuckt das Servo.
Fehler (1) müsste eigentlich behoben sein.
Zum Einschaltzucken (2) gibt es hier einige Threads (Suchen! Z.B. hier).


spielbahn

RE: Arduino, Servo ungewollte Bewegung...

#18 von Eisenhorn ( gelöscht ) , 04.10.2014 10:18

Moin,

der Fehler wurde ja schon gefunden, du weißt dem ist_Wert im Setup immer die Position 1 zu
Generell finde ich aber deine Servo Ansteuerung etwas Unelegant.
Besser wäre es das Servo Signal über Timer Interupts zuerzeugen, dann ist der ist_wert auch nicht mehr relevant,
Oder da wir ja einen Arduino einfach die Lib verwenden:
http://arduino.cc/en/reference/servo

Gruß Lars


Eisenhorn

RE: Arduino, Servo ungewollte Bewegung...

#19 von spielbahn ( gelöscht ) , 04.10.2014 13:10

Zitat von Eisenhorn
....., dann ist der ist_wert auch nicht mehr relevant,.....


Das stimmt so nicht ganz:
Ganz egal wie das ServoSignal erzeugt wird, wenn das ServoSignal nicht der Stellung des Servo entspricht, springt das Servo mit maximaler Geschwindigkeit auf die vom ServoSignal vorgegebene Stellung - insofern ist es sinnvoll, auch weiterhin die aktuelle Stellung des Servo zu speichern. (Einschaltvorgang!)


spielbahn

RE: Arduino, Servo ungewollte Bewegung...

#20 von Eisenhorn ( gelöscht ) , 04.10.2014 13:28

Zitat von spielbahn

Zitat von Eisenhorn
....., dann ist der ist_wert auch nicht mehr relevant,.....


Das stimmt so nicht ganz:
Ganz egal wie das ServoSignal erzeugt wird, wenn das ServoSignal nicht der Stellung des Servo entspricht, springt das Servo mit maximaler Geschwindigkeit auf die vom ServoSignal vorgegebene Stellung - insofern ist es sinnvoll, auch weiterhin die aktuelle Stellung des Servo zu speichern. (Einschaltvorgang!)




Moin,

Das stimmt Natürlich, aber das ist ja der Sinn eines Servo, die Geschwindigkeit kann man gegebenen falls etwas über die Spannung Regeln.
Eine einfache Lösung wäre auch während des Setup einfach die geplante Position anzufahren.
Den Wert in den Eeprom zu speichern ist meiner Meinung nach etwas aufwendig

Gruß Lars


Eisenhorn

RE: Arduino, Servo ungewollte Bewegung...

#21 von moppe , 04.10.2014 14:13

Zitat von Eisenhorn

Eine einfache Lösung wäre auch während des Setup einfach die geplante Position anzufahren.
Den Wert in den Eeprom zu speichern ist meiner Meinung nach etwas aufwendig



In diese Beispiel händelt es sich um servos für lokschuppentoren.

Bei lokschuppentoren ist speichern der Position notwendig!
Obwohl der "geplante Position" von Setup ist geschlossene Toren, hoffen ich nicht das der Anlage ist ausgeschaltet mit einer Lok halbwegs durch die Türöffnung.........und dann die Anlage wieder einschaltet ist.......


Klaus


"Meine" Modellbahn:http://www.modelbaneeuropa.dk
Dänisches Bahnforum: http://www.baneforum.dk
PIKO C4 "Horror Gallery": http://moppe.dk/PIKOC4.html


 
moppe
Trans Europ Express (TEE)
Beiträge: 8.720
Registriert am: 07.08.2011
Homepage: Link
Ort: Norddeusche halbinsel
Gleise Roco, PECO, Märklin/Trix, PIKO,
Spurweite H0, H0e, N, Z
Steuerung Z21, Lenz, MpC Gahler+Ringsmeier, Games on Track/Faller
Stromart AC, DC, Digital, Analog


RE: Arduino, Servo ungewollte Bewegung...

#22 von Z-Welt ( gelöscht ) , 04.10.2014 15:39

Hallo Klaus,
das ungewollte auf /zu ist dorch EEprom schon viiiiiieeeeel besser geworden.
Die Tore werden erst gesschlossen wenn die LOK im Schuppen ist und die Spannung der Anlage wird extra geschaltet. Schuppentore, Weichen und sonstige Beleuchtung mit Arduino bzw ATtiny haben eigenen Stromkreis.
Georg


Z-Welt

RE: Arduino, Servo ungewollte Bewegung...

#23 von spielbahn ( gelöscht ) , 05.10.2014 10:40

Zitat von Eisenhorn

Zitat von spielbahn

Zitat von Eisenhorn
....., dann ist der ist_wert auch nicht mehr relevant,.....


Das stimmt so nicht ganz:
Ganz egal wie das ServoSignal erzeugt wird, wenn das ServoSignal nicht der Stellung des Servo entspricht, springt das Servo mit maximaler Geschwindigkeit auf die vom ServoSignal vorgegebene Stellung - insofern ist es sinnvoll, auch weiterhin die aktuelle Stellung des Servo zu speichern. (Einschaltvorgang!)




Moin,

Das stimmt Natürlich, aber das ist ja der Sinn eines Servo, die Geschwindigkeit kann man gegebenen falls etwas über die Spannung Regeln.
Eine einfache Lösung wäre auch während des Setup einfach die geplante Position anzufahren.
Den Wert in den Eeprom zu speichern ist meiner Meinung nach etwas aufwendig

Gruß Lars



Der Effekt, dass das Servo beim Einschalten schlagartig die vom ServoSignal vorgegebene Stellung anfährt, ist unabhängig davon, ob das erste ServoSignal im Setup oder erst in der Hauptschleife gesendet wird.
Und ob drei Zeile Code für die EEprom-Speicherung aufwändig sind...... :


spielbahn

RE: Arduino, Servo ungewollte Bewegung...

#24 von Eisenhorn ( gelöscht ) , 05.10.2014 10:57

Moin,

ja mit dem header ist es echt einfacher,
mein Fehler normalerweise Schreibe ich
nur C ohne die Arduino Bibliotheken.

Gruß Lars


Eisenhorn

RE: Arduino, Servo ungewollte Bewegung...

#25 von Z-Welt ( gelöscht ) , 05.10.2014 12:00

Hallo Lars, Uli,
was kann man am Sketch aus eurer Sicht wirklich effektiv verbessern.
Es ist ja schon viel besser geworden. Dieses ungewollte Auf / Zu nach dem Einschalten bei Filmzeit 0:41 - bis 0:53 -. Es hat sich jetzt auf die andere Stellung verlagert. Ist jetzt wenn das Tor offen ist. Betätige ich den Taster für Tor zu, bewegt sich das Tor noch weiter auf (( ca, 3Grad )) und geht dann aber langsam , wie es soll, in Stellung Zu. Wie gesagt, es ist nur noch minimal. Das das Servo beim einschalten <zuckt> wird man wohl nicht beheben können. Ich hab oben ja schon geschrieben, wenn das Servo in seine Stellug gefahren ist und wenn ich nach dem Aus- Abschalten, den Attiny wieder mit Spannung versorge, stelle ich die Spannung auf Null Volt und regele dann langsam auf 5 Volt hoch, dann gibt es kein zucken und das Tor zickt auch nicht. Erstelle mir jetzt ein kleines regelbares Netzteil mit einen LM 317 von Null auf 6 Volt.. Eine Änderung am Sketch könnt ihr hier ruhig einstellen wenn ihr eine Idee habt.
MfG Georg


Z-Welt

   


  • Ähnliche Themen
    Antworten
    Zugriffe
    Letzter Beitrag
Xobor Einfach ein eigenes Forum erstellen
Datenschutz