Go Down

Topic: Steuerung eines Kamerasliders (Read 5941 times) previous topic - next topic

Fototobi94

Moin Liebes Forum,

ich versuche ja seit geraumer Zeit einen Schrittmotorbetriebenen Kameraslider zu bauen. Wer die anderen Topics gelesen hat, kennt mich als Treiberzerstörer  :smiley-twist: . Nun ist der Slider aber technisch fertig und der Motortreiber brennt mir auch nicht mehr ab; Zeit, sich an die Steuerung zu setzen.

Ich probiere seit einigen Tagen, den Motor mit der Accelstepper Library zum laufen zu bringen, doch ich schaffe es noch nicht so richtig, den Motor eine bestimmte Schrittanzahl zu drehen. Kennt jemand eine deutsche Anleitung zur Accelstepper.h?

Ich möchte hier einmal kurz die Schaltung erklären, wie ich sie mir vorstelle:

Beim Einschalten des Arduino sollen zwei Werte (einen für die Schrittanzahl und einen für das Zeitintervall) über einen Drehencoder abgefragt werden. Der Drehencoder verfügt über einen eingebauten Button. Die eingestellten werte sollen auf dem standard LC-Display aus dem Starterkit angezeigt werden. Das Display schalte ich später über einen einfachen schalter aus.
Für Links- bzw. Rechtslauf drehe ich den Encoder so lange, bis ich im negativen oder positiven Bereich bin.

Nachdem die Werte feststehen kann der Schlitten entweder sofort fahren, oder ich baue noch einen Start- Stopptaster ein; Je nachdem, was besser ist.

Der Schlitten fährt im 'Shoot - Move - Shoot'-Modus; Das bedeutet, dass die Kamera im Stillstand ausgelöst wird (nach einem eingestellten Zeitintervall). Auf der Schiene werden sich später an beiden Enden Reedkontakte (Öffner) befinden. Hat der Schlitten in eine Richtung die Endlage erreicht, soll der Motor sofort anhalten, ansonsten wird der Schlitten beschädigt.  :smiley-red:

Das auslösen der Kamera geschieht ganz einfach über einen digitalen Pin, welcher auf HIGH geschaltet wird. Über ein Reedrelais und ein Klinkenkabel wird dann die Kamera gesteuert.

Ich hoffe ich habe das gut verständlich aufgeschrieben. Jetzt benötige ich Hilfe mit der Umsetzung.

Ich dachte für die eigentliche Motorsteuerung an zwei if- oder while-Schleifen, in denen sich der Motor so lange in die eine Richtung dreht, solange der zugehörige Endschalter noch HIGH ist (ist ja ein Öffner). Wie stelle ich ein, dass die Variablen nur am Anfang abgefragt werden? Und wie kann ich zwei oder mehr variablen mit nur einem Drehencoder eingeben?

An wichtigster Stelle steht aber, dass ich die Accelstepper.h verstehe, dann kann ich schon gut weiterarbeiten.

Ich bedanke mich schon jetzt für Eure Hilfe!

vG, Tobi

Klaus_ww

Ja, sowas wollte ich auch schon mehrfach anfangen ... bei mir scheitert's an der Mechanik  :smiley-confuse:

Die Lib bringt doch sicher Beispiele mit - schonmal reingeschaut?
Freizeit-Programmierer mit moderatem Ehrgeiz besseren Code zu schreiben.

Fototobi94

Zur Technik meines Kamerasliders habe ich dir eine PM geschrieben ;)

Mir geht es vorallem darum, zu verstehen, welche Accelstepper Befehle miteinander zusammenhängen und arbeiten. Die einzelnen Befehle verstehe ich einigermaßen, wenn ich mir die Anleitung angucke. Aber ich weiß nicht, wie ich die zusammen in einen Sketch bringe.

Von den Beispielen verstehe ich nur 2

Klaus_ww

Nimm doch mal die Beispiele aus der IDE, die tun's m.E. für den Slider und sind einfach zu durchschauen.
Umswitchen auf die Accelstepper kannste dann immer noch.
Freizeit-Programmierer mit moderatem Ehrgeiz besseren Code zu schreiben.

Fototobi94

Welche Beispiele meinst du genau?

Klaus_ww

Na die Stepper Beispiele - verwendest Du nicht die arduini IDE?
Freizeit-Programmierer mit moderatem Ehrgeiz besseren Code zu schreiben.

beginner34

Hi, so habe ich das Problem gelöst.
Ich habe mir den Code von Emotimo geholt und mir meine eigene Platine dazu gemacht.
Der Code ist open source und der Rest ergibt sich von selber.
Es kommt dann alles in ein eigenes Gehäuse und nur die Motoranschlüsse kommen raus.
wenn es fertig ist mache ich ein paar Bilder.
Muss die Platine nochmal machen, hatte ein paar sehr wichtige Sachen vergessen. :smiley-confuse:  :smiley-confuse:

MfG  Marco

SkobyMobil

Hallo,
ich würde am Ende der Schiene keine Taster (öffnen) nehmen.
Mit einem Umschalter bist Du dort besser bedient.
Beispiel:
Wenn beide Umschalter geöffnet sind, dann kann der Schlitten nach rechts/links fahren.
Ist der rechte Umschalter geschlossen, dann kann der Schlitten nur nach links rausfahren.
Ist der linke Umschalter geschlossen, dann kann der Schlitten nur nach rechts rausfahren.

Um rauszubekommen, was die "Accelstepper Library" denn macht, kannst Du die genutzten Variablen auf
den seriellen Monitor ausgeben. So kommst Du schnell dahinter, wer denn Deine Schritte zählt.
Gruß und Spaß
Andreas
die zweite Maus bekommt den Speck...

Fototobi94

Sorry, ich hatte gestern leider keine Zeit.

Einen fertigen Sketch möchte ich nicht übernehmen. Zum Üben ist alles okay, aber ich möchte später wissen, was ich programmiert habe und das Programm auch verstehen.

Zu den Endschaltern: Ich wollte nicht beide Endschalter mit einem Pin abfragen, sondern getrennt. Wenn sich der Schlitten nach links bewegt, soll auch nur der linke Endschalter abgefragt werden, damit ein Verfahren nach rechts noch möglich ist.

Ich habe mir nun die Stepper.h angeguckt. Ich bekomme den Motor auch mit einer schnellen Geschwindigkeit zum Laufen, bei langsamen Geschwindigkeiten rattert er sehr laut. Ich finde den Sketch zwar relativ einfach, aber der Motor sollte sich etwas langsamer drehen, ohne so laute Geräusche zu machen. Außerdem brauche ich jetzt  (ohne Microstepping) 800 Schritte für eine Umdrehung. Wie kommt das?

Hier der Code, wie ich ihn benutzt habe:
Code: [Select]
#include <Stepper.h>

const int stepsPerRevolution = 200;  // change this to fit the number of steps per revolution
// for your motor

// initialize the stepper library on pins 8 through 11:
Stepper myStepper(stepsPerRevolution, 3, 2);

void setup() {
  myStepper.setSpeed(600);
}

void loop() {
  // step one revolution  in one direction:
  myStepper.step(800);
  delay(500);
}


P.S.: Gibt es hier im Forum kein Highlighting im Code?

SkobyMobil

Hallo,
wenn mich nicht alles täuscht, dann nutzt Du doch einen gemeinen Schrittmotor.
In dem Datenblatt steht doch, was für eine Auflösung der hat.
Wenn der bei 800 Schritten eine Umdrehung macht, dann hat der eine Auflösung
von ca. 0,45 Grad.
Das alles sollte im Datenblatt stehen.
Die Schrittzahl, die der Motor für eine Umdrehung braucht, muß im Sketch
hinterlegt sein.

Macht er die ratterGeräusche wenn der Motor ausgebaut ist? Dann würde ich
sagen, das er falsch angesteurt wird. Normalerweise ist so ein Motor still.
Summt vielleicht leise vor sich hin, wenn der Schritt gehalten wird.
Gruß und Spaß
Andreas

die zweite Maus bekommt den Speck...

Fototobi94

Der Schrittmotor hat 200 steps/rev.

Der läuft ja leise, wenn ich die Geschwindigkeit erhöhe. Ich denke, wenn die Geschwindigkeit zu langsam ist, dann liegt eine zu große Zeit zwischen den einzelnen Steps (der Motor hält quasi immer kurz an und es entsteht keine flüssige Bewegung).

der motor ist noch eingebaut, es hängt aber nur die Gewindestange dran, welche unbelastet ist.

SkobyMobil

Hallo,
wenn es Motorwelle an Gewindestange ist, dann ist es der "falsche" Motor.
An der Gewindestange hast Du über einen Mitnehmer (der auf der Gewindestange läuft) Deinen Schlitten
verbunden. Dafür nimmt man eigentlich linear Motoren.
Wenn Du es mit einem Schrittmotor machst, dann würde ich Zahnriemen nehmen. Aber egal...

Ich würde die Steuerung nur mit ausgebautem Motor testen. Den mit DoppelKleberband befestigen und auf
die Welle eine "Zeiger" kleben.
So kannst Du prüfen ob alles richtig läuft.
Wenn dem so ist, dann einbauen. Alles was dann noch rattert ist deine Mechanik.
Hilft Dir aber jetzt auch nicht weiter.

Hast Du zufällig das Arduino Kochbuch? Dort wird ab Seite 317 der Umgang mit Schrittmotoren erklärt.
Die Sketche dazu sind völlig "einfach". Auch die ganze Verdrahtung wird sichtbar und man sollte erkenne
können, was passiert.
Die "Accelstepper.h" kennt wohl keiner, und wenn ich mir die "Example" anschaue, dann halte ich das alles
für zu umständlich, nicht einfach zu kapieren...

Wenn Dein Motor echte 200 Schritte für eine Umdrehung braucht, und Du hier:

  // step one revolution  in one direction:
  myStepper.step(800);

800 eingetragen hast, dann vermurkst die Lib etwas.
Wenn Du dort nur 200 einträgst, läuft er dann nur 50 Schritte? Also ein Viertel Umdrehung?
Gruß und Spaß
Andreas

die zweite Maus bekommt den Speck...

Serenifly

#12
Apr 28, 2016, 07:02 pm Last Edit: Apr 28, 2016, 07:06 pm by Serenifly
wenn es Motorwelle an Gewindestange ist, dann ist es der "falsche" Motor.
An der Gewindestange hast Du über einen Mitnehmer (der auf der Gewindestange läuft) Deinen Schlittenverbunden. Dafür nimmt man eigentlich linear Motoren.
Sowas geht super mit Schrittmotoren. Auch über lange Strecken. Jedenfalls solange es nicht sehr schnell sein muss.

Fototobi94

Ich habe den Sketch benutzt, der weiter oben steht. Dort sind 200 steps/rev. angegeben. Ich brauche dort aber 800 Schritte.

Mit einer anderen Lib oder mit meiner einfachen Steuerung über delays ist das nicht so. Muss also an der Stepper.h liegen.

Ich möchte die Steuerung erstmal fertig machen, ob Gewindestange oder Zahnriemen ist dafür erstmal egal. Langfristig werde ich aber wohl auf einen Zahnriemen umrüsten, da der Motor dort weniger Energie für eine Fahrt braucht, und man auch schnellere Kamerafahrten machen könnte.

Kannst du das Buch für Anfänger empfehlen? Ich dachte man lernt heutzutage alles im Internet  :-[

DrDiettrich

Wenn der Stepper-Motor mehr Steps braucht als eigentlich notwendig, dann ist er überlastet. Entweder ist er überhaupt zu schwach, oder das Netzteil, oder er wird zu schnell oder zu hoch beschleunigt. Wie sieht es denn aus, wenn Du die Geschwindigkeit deutlich (4 mal) reduzierst? Erst wenn die Schrittzahl stimmt, kann die Beschleunigung und maximale Steprate optimiert werden.

Go Up