FlipFlat Dust-Cover mit Flat im Selbstbau und Fragen ...

Status
Es sind keine weiteren Antworten möglich.

linuxer

Aktives Mitglied
Hallo Leute,
ich bin gerade dabei mir einen FlipFlat zu bauen. Geplant hatte ich jeweils einen Endschalter für offen und geschlossen.
Nun bin ich auf die Idee gekommen zu sehen ob es nicht eine Fertige SW für das Ding gib und bin bei GitHub fündig geworden.
Meine Version besitzt einen 28BYJ-48 5Volt Getriebe Motor und wird von einem Arduino Uno gesteuert was passend wäre.
Da ich das Rad nicht neu erfinden will wollte ich die FW von GitHub verwenden.

Ich habe jetzt die FW mal auf den Arduino geflasht und getestet.
Kstars/Ekos erkennt den Arduino, und die Steuerung über ein Terminal funktioniert auch soweit.
Allerdings nicht wie ich es erwartet habe. Statt zu öffnen und zu schließen dreht sich der "Öffner" im Kreis.
Bei dem Befehl öffnen bewegt sich der Öffner um 180° im Uhrzeigersinn und beim anschließenden Befehl zum schließen wieder um 180° im Uhrzeigersinn.
Die PWM Funktion funktioniert. Eine angehängte LED lässt sich per PWM Dimmen.

Hat jemand die FW von GitHub schon mal getestet und Funktioniert die ?
Ich bin jetzt nur ein Gelegenheitsprogrammierer und nicht so der Crack in Arduino-C, allerdings kann ich keinen Fehler im Code und keinen Endschalter finden.
Wie die Steuerung weis, wenn sie gestartet wird, in welcher Postion sich die Klappe befindet ist mir schleierhaft.

Irgendwer ne Idee?

Gruß und CS
Thomas
 
Vorweg, ich hab das Ding nicht, jetzt nur mal in den Code geschaut.

Im Code steht, die Annahme ist, dass pro Umdrehung 2038 Schritte sind.
Der Code zählt bei der Drehung die Schritte. Siehe Code ab Zeile 265 bis Ende.
Einen Endschalter braucht man da nicht.

Man könnte mal mit dem Wert in Zeile 40 spielen (verringern/ halbieren), falls der Motor ggf. eine abweichende Schrittzahl hat.
Es gibt diesen Motor in mehren Varianten. Leider habe ich die Aufstellung dieser Varianten nicht mehr bzw. finde sie nicht mehr.

Ausserdem kann man sich noch den Device Status anschauen:
Get device status:
Request: >SOOO\r
Return : *SidMLC\n
id = deviceId
M = motor status( 0 stopped, 1 running)
L = light status( 0 off, 1 on)
C = Cover Status( 0 moving, 1 closed, 2 open, 3 timed out


Vielleicht hilft das.

Grüße
Hartmut

PS... die 5V Version gibts doch nur in einer Variante; Getriebe ist 1:64 bzw. 5.625° / 64
 
Hallo Hartmut,

Die Rückgabe werte sind in Ordnung nur der Motor dreht immer in eine Richtung.
Eine Sequenz entspricht genau 90° das passt schon.
Die Achse steht bei 0°. Wenn ich dann sage "Schließen" steht die Achse bei 90° wenn ich jetzt wieder sage "Öffnen" dann
steht die Achse bei 180°. Wieder "Schliesen" = 270°, wieder "Öffnen" 360°.

Im Prinzip ist es doch egal wie viele Schritte der Motor macht. Die SW wüsste ja nicht das der nur z.b. 40 Schritte für eine
Vollumdrehung macht.
Nach abarbeiten Ihrer Werte geht sie davon aus der der Motor jetzt 90° hat, gibt ja kein Endschalter.
Sie muss jetzt den Motor nur anders ansteuern das er wieder in die andere Richtung läuft.
Was aber nicht passiert. Das Ding läuft wie ein Uhrwerk, leider !!!

Ich weis nicht wo da der Fehler ist.
Am Treiber kanns nicht liegen und am Motor eigentlich auch nicht, selbst wenn der weniger/mehr Schritte pro Grad hat.

Gruß und CS
Thomas
 
Im Code in Zeile 40 steht, dass die SW annehmen soll, dass er für eine Umdrehung genau 2038 Schritte braucht.
Davon ausgehend weiß die SW also, wann welche Position erreicht ist, denn sie gibt ja vor, wie viele Schritte bis zur jeweiligen Position benötigt werden.
180° = 2038/2 usw...

Was man noch machen könnte, wäre eine Ausgabe von Werten über die serielle Schnittstelle zu integrieren.

Dann sich mal anschauen, was er macht im Code Zeilen 251 bis 263
 
Okay Fehler gefunden.

Der Code gibt in der Verdrahtung des Motors an:
Stepper stepper(STEPS, 8, 10, 9, 11); //adjust to the pin sequence for your motor

Ich bin davon ausgegangen das die Eingänge des Treibers 1 - 4 den Angaben im Code entsprechen.
1 = 8 ,2 = 10, 3 = 9, 4 = 11

Nachdem ich die Verdrahtung geändert habe :
1 = 8, 2 = 9, 3 = 10, 4 = 11
Stepper stepper(STEPS, 8, 9, 10, 11); //adjust to the pin sequence for your motor

Funktioniert es nun :)
Danke für eure Antworten.

Gruß und CS
Thomas
 
Status
Es sind keine weiteren Antworten möglich.
Zurück
Oben