Ich verwende Arduino Programmierung als "Entspannung" und versuche mich in diversesten technischen Themen - alles für einen HIFI-Schrank ... aber das ist ein seeehr langes Thema.
Ich steuere meine Schrittmotoren (insgesamt werden es acht - aber derzeit wird nur der eine angesteuert) mit den Moba-Tools. Diese Bibliothek ist mir die liebste, weil einfach zu verwenden und hat genau die Funktionen, die ich gut verwenden kann.
Ach ja: Es kommt ein Arduino Mega 2560 mit einer CNC-Schrittmotorsteuerkarte "huckepack" und einer CNC-Schrittmotorsteuerkarte extern verdrahtet zum Einsatz.
Mein Problem:
Aktuelle kämpfe ich mit der Logik einer "Schiebetürautomatik":
Ein Schrittmotor treibt über einen Treibriemen (Standard 8mm) eine Spindel mit mit ca 45 cm Länge an. Einen Standard Messing Läufer habe ich auf der Drehbank zu einer 5mm starken Scheibe abgedreht und seitlich ein M2.5 Gewinde geschnitten, in welches ich einen Standard Messing Abstandshalter eingeschraubt habe. Dreht sich der Motor, dann wandert der Läufer mit dem Abstandshalter die 45 cm hin- und her und soll so (in ferner Zukunft ) eine Türe verschieben. Die wird gelagert und benötigt somit nicht wirklich viel Kraft. Als Endeerkennung befindet sich auf den jeweiligen Enden IR-Detektoren (die Standard Dinger um wenige Euro). Es ist wirklich eine Geduldssache, die Reaktion dieser IR-Elemente so genau einzustellen, dass sie kurz vor dem jeweiligen Ende der Spindel anschlagen - aber ich hab es geschafft (mehr Abstand vom Messingläufer!)
Siehe ein Foto dieses mechanischen Aufbaus.
Jetzt habe ich ein "logisches" Problem... vielleicht auch mehr ...
Für die Steuerung dieser Mechanik ist genau ein Taster (Sensorknopf) vorgesehen.
Die Logik:
Damit ich weiß, wo sich der Läufer gerade befindet, setze ich eine Referenzfahrt (langsamfahrt) bis zum Anschlag-IR-Sensor und setze mit myStepper.setZero() den Nullpunkt. Von dort kann ich mir dann ausrechnen (eher ausprobieren), wieviele Schritte bis zum vollständigen Öffnen notwendig sind. So kann ich mit myStepper.doSteps(long stepcount) gezielt hin und herfahren.
Türe offen (IR-Sensor für offen schlägt an) --> Türe soll geschlossen werden
Türe geschlossen (IR-Sensor für geschlossen schlägt an) --> Türe soll geöffnet werden
bis jetzt ist es einfach.
Türe befindet sich irgendwo .....
bewegt sich die Türe gerade (myStepper.moving() = 0 ) --> Türe stop
steht die Türe irgendwo (myStepper.moving > 0) --> setze die Bewegung in die Gegenrichtung der letzten Bewegung fort - Meine Steuerung des Einfahrtstores macht es genauso.
gibt es schon eine effiziente Logik dafür?
danke euch
Anbei auch zwei Fotos der Mechanik zur Veranschaulichung
Christian