Re: Schiebetür mit 2XPIR

Hallo Guccini,

ich bin neu hier auf der Plattform und ein Arduino Einsteiger und noch dazu sind meine C-Programmierkenntnisse über die Jahre ziemlich eingestaubt :-)!
Dennoch möchte ein Schiebetürprojekt, vergleichbar mit deinem, realisieren und die komplette Hardware ist auch schon fertig (Arduino uno, Alu-Geze-Schiebtür-Schiene mit Nema17 Schrittmotor sowie Zahnriemenrädern und Zahnriemen).

Ziel ist eine automatisierte Fliegengitterschiebetür (leichtes Alu-Modell, das der Motor ohne Getriebe hoffentlich bewegen kann) an einer doppelten Terrassentür.

Das Ganze soll mit 2 PIR-Sensoren ausgelöst werden und wie bei dir bis in die jeweilige Endlage fahren. Nachdem die Tür im Offenzustand ist, soll sie nach 5 Sekunden wieder automatisch schließen. Selbstverständlich muss die Tür beim Schließvorgang reversieren, wenn ein erneutes Signal von einem PIR-Sensor kommt. Abrunden möchte ich das Ganze, indem die Tür sowohl beim Öffnen, als auch beim Schließen langsam anläuft und dann beschleunigt und kurz vor dem Endpunkt wieder langsam fährt.

Wenn möglich, möchte ich den Aufbau nur mit einem Endlageschalter (Schließer) realisieren, der primär für die Positionsbestimmung des Systems (am Anfang) genutzt werden soll. Danach sollen alle Positionen über die Schrittanzahlen angefahren werden (hängt natürlich von der Länge meiner Laufschiene ab).

Hast du deinen damaligen Post und Sketch eigentlich irgendwo als Gesamtlösung eingestellt? Ich habe leider diesbezüglich nichts gefunden.

Ich würde mich riesig freuen, wenn du mir mit deiner Umsetzung auf die Sprünge helfen könntest.
Herzlichen Dank!

Neuen Post abgespaltet.
Grüße Uwe

christo73:
… und noch dazu sind meine C-Programmierkenntnisse über die Jahre ziemlich eingestaubt :-)!

Dann ist Dir prozedural näher als OOP?

Welche elektrischen Kennwerte hat der Moror? Welchen Motortreiber verwendest Du? Welches Netzteil verwendest Du?

Einsteigerfreundlich sind die MobaTools zur Schrittmotoransteuerung, die Du mittels IDE installieren kannst. Auch wenn der Programmierer an Modellbahnen gedacht hat, kann man die üblichen Schrittmotoren ansteuern.

Eine Schrittkette (=endlicher Automat =finite state machine) sollte Dir geläufig sein!? Und loop ist sowas wie while(1){…}, eine ständige Schleife.

Aus meiner Grabbelbox:

#include <MobaTools.h>
#define TUERBEWEGUNG 150
const uint32_t OEFFNUNGSZEIT = 5000;  // in Millisekunden
const int STEPS_UMDREHUNG = 200; //Stepper einrichten ( 200 Schritte / Umdrehung )
MoToStepper tuer( STEPS_UMDREHUNG, STEPDIR );
const byte dirPin = 8;
const byte stepPin = 9;
const byte refPin = 2;          // Input für Referenzpunktschalter
const byte pirPin = 3;          // Input für PIR

void setup() {
  Serial.begin(115200); while (!Serial);
  tuer.attach( stepPin, dirPin );
  tuer.setSpeedSteps( 1500 );
  tuer.setRampLen( 20 );           // Rampenlänge 100 Steps bei 20U/min
  tuer.setZero( -TUERBEWEGUNG );   // Nullpunkt bei geöffneter Tür
  pinMode(LED_BUILTIN, OUTPUT);
  pinMode(refPin, INPUT_PULLUP );
  pinMode(pirPin, INPUT_PULLUP );
}

void loop() {
  uint32_t jetzt = millis();
  static uint32_t vorhin = jetzt;
  enum {WARTEN, OEFFNEN, OFFEN, SCHLIESSEN};
  static byte schritt = WARTEN;
  digitalWrite( LED_BUILTIN, digitalRead( pirPin ) );
  switch ( schritt ) {
    case WARTEN:
      if (digitalRead(pirPin)) {
        tuer.writeSteps(0);
        schritt = OEFFNEN;
      }
      break;
    case OEFFNEN:
      if (!tuer.moving()) {
        vorhin = jetzt;
        schritt = OFFEN;
      }
      break;
    case OFFEN:
      if (digitalRead(pirPin)) {
        vorhin = jetzt;
      }
      if (jetzt - vorhin >= OEFFNUNGSZEIT) {
        tuer.writeSteps(TUERBEWEGUNG);
        schritt = SCHLIESSEN;
      }
      break;
    case SCHLIESSEN:
      if (digitalRead(pirPin)) {
        tuer.writeSteps(0);
        schritt = OEFFNEN;
      }
      if (!tuer.moving()) {
        schritt = WARTEN;
      }
      break;
  }
}

TODO: Zweiter PIR; Referenzfahrt.

Super und vielen Dank!
Das für den Anfang deutlich mehr, als ich erwartet habe.

Der Motor ist ein ACT Motor (17HS4415-04) mit 1.8° und 1,5A(U).

Da ich bisher nur einen PIR-Sensor (HC-SR501) habe und noch einen zweiten bestellen muss, werde ich mich auch gleich um den richtigen Motortreiber kümmern müssen, denn leider habe ich aktuell nur den ULN2003 vorliegen und der scheint völlig ungeeignet. Ich dachte an den A4988, da dieser schön kompakt ist. Der müsste doch passen, oder?

Als Netzteil habe ich ein Steckernetzteil bei dem man verschieden Spannungen einstellen kann. Da das aber nur 800mA leistet, werde ich da wohl auch eins mit größerer Stromstärke benötigen. Mit etwas Glück habe ich noch sowas im Keller...

Mit den von Dir genannten Begriffen, kann ich im Wesentlichen etwas anfangen und ich habe mir auch schon eine ganze Reihe an Tutorials und Sketches angesehen, die in etwa in die Richtung gehen, wo ich hin möchte.

Von daher wird meine erste Aufgabe nun sein, den Sketch aus Deiner Grabbelbox mal zu analysieren und zu verstehen. Im Moment steh ich noch wie der Ochs vor dem Berg und es wäre extrem hilfreich, wenn die Zeilen etwas mehr kommentiert wären, dann hätte ich eine Plan, was das passiert! Die Rampe dürfte für die Beschleunigung des Motors von langsam nach schnell sein, oder?

Für die Referenzfahrt muss ich zunächst den Endlagenschalter definieren und dem Motor sagen, dass er solange drehen soll, bis der Schlitten den Schalter betätigt. Das wäre dann quasi mein "Nullpunkt". Von dort aus hätte ich jedoch versucht die Gesamtumdrehungen bis zum Offenzustand über die Anzahl der Schritte zu definieren. In Deinem Beispiel schein es irgendwie über die Öffnungszeit geregelt zu sein!?

Na ich versuche mich mal dahinter zu klemmen und learning by doing zu betreiben.

Mit den Moba Tools habe ich leider noch nicht gearbeitet...aber dazu müsste man im Netz ja so einiges finden.

Bis dahin!

christo73:
Der Motor ist ein ACT Motor (17HS4415-04) mit 1.8° und 1,5A(U).

Ich dachte an den A4988, …

Besser passend DRV8825. Das ist ein Stromtreiber, der den Strom regelt und dafür mehr Spannung benötigt! Jeder Strang möchte 1,5 A, aber nicht gleichzeitig, daher brauchst Du ein Netzteil beispielsweise 24 V mit mehr als 2,5 A.

Mit einem StepDown von 24 V auf 5 V für den Nano oder ProMini, der ist viel kleiner als ein UNO.

christo73:
In Deinem Beispiel schein es irgendwie über die Öffnungszeit geregelt zu sein!?

Nö, Bewegungen über Schritte, nur die Öffnungszeit als Zeit.

christo73:
Die Rampe dürfte für die Beschleunigung des Motors von langsam nach schnell sein, oder?

Ja.

christo73:
Im Moment steh ich noch wie der Ochs vor dem Berg und es wäre extrem hilfreich, wenn die Zeilen etwas mehr kommentiert wären, dann hätte ich eine Plan, was das passiert!

Ich kommentiere, was ich eventuell in einem halben Jahr nicht mehr auf Anhieb verstehe. Den Rest “sieht man doch”. Nicht falsch verstehen, ist aber schwierig. Jetzt mit ein paar mehr Kommentaren:

#include <MobaTools.h>
const uint32_t TUERBEWEGUNG = 150;     // Anzahl Schritte fuer Tuerbewegung
const uint32_t OEFFNUNGSZEIT = 5000;   // in Millisekunden
const int STEPS_UMDREHUNG = 200;       //Stepper einrichten ( 200 Schritte / Umdrehung )
MoToStepper tuer( STEPS_UMDREHUNG, STEPDIR );
const byte dirPin = 8;                 // DRV8825
const byte stepPin = 9;                // DRV8825
const byte refPin = 2;                 // Input für Referenzpunktschalter
const byte pir1Pin = 3;                // Input für PIR
const byte pir2Pin = 4;                // Input für PIR

void setup() {
  Serial.begin(115200); while (!Serial);
  tuer.attach( stepPin, dirPin );
  tuer.setSpeedSteps( 1500 );
  tuer.setRampLen( 20 );               // Rampenlänge 100 Steps bei 20U/min
  pinMode(LED_BUILTIN, OUTPUT);
  pinMode(refPin, INPUT_PULLUP );
  pinMode(pir1Pin, INPUT_PULLUP );
  pinMode(pir2Pin, INPUT_PULLUP );
  tuer.doSteps(-TUERBEWEGUNG - 100);   // Referenzfahrt; relative Bewegung etwas über Türbreite
}

void loop() {
  uint32_t jetzt = millis();                                   // aktuelle Zeit
  static uint32_t vorhin = jetzt;                              // gemerkte Zeit
  bool pir = digitalRead( pir1Pin ) || digitalRead( pir2Pin ); // Zustand der PIRs
  digitalWrite( LED_BUILTIN, pir );
  enum {REFERENZ, GESCHLOSSEN, OEFFNEN, OFFEN, SCHLIESSEN};
  static byte schritt = REFERENZ;
  switch ( schritt ) {
    case REFERENZ:
      if (!digitalRead(refPin)) {
        tuer.setZero( 0 );   // Nullpunkt bei geöffneter Tür
        tuer.writeSteps(TUERBEWEGUNG);
        schritt = GESCHLOSSEN;
      }
      break;
    case GESCHLOSSEN:
      if (pir) {
        tuer.writeSteps(0);								// öffnen
        schritt = OEFFNEN;
      }
      break;
    case OEFFNEN:
      if (!tuer.moving()) {								// Bewegung abgeschlossen
        vorhin = jetzt;
        schritt = OFFEN;
      }
      break;
    case OFFEN:
      if (pir) {
        vorhin = jetzt;									// Zeit verlängern
      }
      if (jetzt - vorhin >= OEFFNUNGSZEIT) {
        tuer.writeSteps(TUERBEWEGUNG);
        schritt = SCHLIESSEN;
      }
      break;
    case SCHLIESSEN:
      if (pir) {
        tuer.writeSteps(0);								// erneut öffnen
        schritt = OEFFNEN;
      }
      if (!tuer.moving()) {								// Bewegung abgeschlossen
        schritt = GESCHLOSSEN;
      }
      break;
  }
}

Der ULN2003 ist in der Tat vollkommen ungeeignet. Leider finde ich keine genauen Daten zu deinem Motor - nur zu einem 1,7A Motor. Hast Du da einen Link? Aber das ist sicherlich ein Motor für Stromsteuerung. Grundsätzlich geht das mit dem A4988 schon, aber der von agmue vorgeschlagene DRV8825 ist der neuere und etwas leisungsfähigere Chip.

agmue:
Jeder Strang möchte 1,5 A, aber nicht gleichzeitig, daher brauchst Du ein Netzteil beispielsweise 24 V mit mehr als 2,5 A.

Je nach Einstellung am Treiber und der Position des Motors kann das schon gleichzeitig sein. Im Fullstep sind z.B. immer beide Spulen bestromt. Allerdings funktioniert der DRV8825 ähnlich wie ein Step-Down Schaltregler, daher muss dass Netzteil diesen Strom nicht vollständig liefern können. Wichtiger ist, dass die Leistung des Netzteiles ausreichend ist und ein ordentlicher Pufferkondensator am Treiber verbaut ist.

christo73:
Die Rampe dürfte für die Beschleunigung des Motors von langsam nach schnell sein, oder?

Die Rampe gilt für beide Richtungen: Anfahren und Bremsen.

Ob ein Stepper so ideal für deine Anwendung ist, ist eine andere Frage. Ein Stepper zieht auch im Stillstand seinen Nennstrom. Deine Tür wird aber in aller Regel wohl stillstehen. Da musst Du dann den Motor gegebenenfalls ganz abschalten, damit nicht unnötig Strom verbraten wird.
Was ist der 'normale' Zustand der Tür? Ich vermute mal dass sie die meiste Zeit geschlossen ist. Dann solltest Du den Referenzschalter auch dorthin machen, dann steht sie beim Einschalten üblicherweise schon dort, und es ist keine großartige Referenzfahrt notwendig.

Hallo,

ich sehe das ebenso wie Franz-Peter, der Schritt Motor zieht ständig Strom, und eigendlich gibt es nur zwei Positionen. auf /zu . Da wo sich ein Endschalter anbringen lässt kann man meist auch einen zweiten anbauen. Und dann ist ein DC Getriebemotor genau das Richtige.

Wenn es sein muss kann der auch noch einen Encoder drauf haben dann könnte man auch auf Position fahren und auf den zweiten Endshalter verzichten. Indutrielle Schiebetüren laufen auch mit Endschalter. Mach halt einfach die Kufe etwas länger. Und benutze die Flanke für eine Rampe. Mit kleiner Geschwindigkeit könnte der Motor eventuell auch noch für kurze Zeit gegen mech. Ende fahren bevor er ausgeschaltete wird.

Heinz

Hallo zusammen,

na das hilft mir zunächst mal sehr weiter. Von daher Danke an agmue für die Kommentierung und Erläuterungen. In der Tat ist es so, dass der Endschalter auf der Seite der Laufschiene montiert werden soll, der den Geschlossen-Zustand der Tür darstellt.

Die Idee war nur, dass ich im Winter die Tür evtl. (elektrisch) deaktiviere, da es dann ja keine Fliegen / Mücken gibt :slight_smile: , dann aber grundsätzlich die Möglichkeit besteht die Tür händisch zu schieben (vsl. besser mit ausgehängtem Zahnriemen am Laufschlitten. Oder verträgt es der Stepper, wenn er stromlos ab und zu mal bewegt wird? - Achtung es sind auch Kinder im Spiel!

Das war übrigens auch einer der Gründe warum ich keinen DC-Motor mit Getriebe verbauen wollte, da ich diesen dann definitiv nicht stromlos über das Zahnriemenrad drehen kann. Dennoch sind eure Argumente bzgl. dauerhaftem Stromverbrauch natürlich nachvollziehbar und mir in dieser Form nicht bewusst. Gäbe es denn eine Möglichkeit den Stromverbrauch über den Endlageschalter zu unterbrechen? Kann ich mir nicht vorstellen, da der (dann stromlose) Motor bei Bewegungserkennung ja schließlich aus der Position mit dem gedrückten Endlageschalter wieder anlaufen soll....das kann wohl kaum funktionieren!

Blöderweise ist die ganze Hardware mit Motorhalter für den Nema17 auch schon fertig und wenn möglich wollte ich das Ganze nicht mehr auf einen alternativen DC-Motor umrüsten. Das Problem ist ohnehin, dass ich für die Laufschiene mit Motor nur 4,5 cm Bauraumbreite zwischen Türrahmen und Rollladenschiene habe. Das passt derzeit perfekt und hat den Vorteil, dass die Fliegengittertür z.B. bei Sturm durch den Rollladen geschützt ist.

Wenn ihr es für sinnvoll / zweckmäßig erachtet, soll es aber am zweiten Endlageschalter nicht scheitern.
Den DRV8825 habe ich aktuell noch nicht aber der lässt sich natürlich für kleines Geld kurzfristig bestellen.

Ich werde jetzt mal in Klausur gehen und versuchen vollends durch den Sketch durchzusteigen und natürlich ein wenig rumzuspielen. Ich werde aber ganz sicher mit weiteren Fragen auf euch zukommen und würde mich über einen weiterhin regen Austausch freuen.

Gruß
Christoph

Ps: Übrigens habe ich auch einen Nano Zuhause und habe im Netz jemanden gefunden, der eine Platine hat anfertigen lassen, die auf extrem kleinem Raum den Nano und den Motortreiber miteinander kombiniert. Der Charme ist die extrem kompakte Bauweise. Mit meinem zusätzlichen ProtoShield ließe sich das Ganze zwar auch mit Uno umsetzen aber ist natürlich ungleich größer...
Macht es Sinn mit einem StepDown auf 5V Basis zu arbeiten?

christo73:
Oder verträgt es der Stepper, wenn er stromlos ab und zu mal bewegt wird? - Achtung es sind auch Kinder im Spiel!

Wenn der Stepper stromlos ist, kannst Du ihn leicht drehen. Das sollte kein Problem sein.

christo73:
Gäbe es denn eine Möglichkeit den Stromverbrauch über den Endlageschalter zu unterbrechen? Kann ich mir nicht vorstellen, da der (dann stromlose) Motor bei Bewegungserkennung ja schließlich aus der Position mit dem gedrückten Endlageschalter wieder anlaufen soll....das kann wohl kaum funktionieren!

Das stromlos machen solltes Du dem DRV8825 überlassen. Der hat einen 'enable' Eingang, über den man die Endstufen abschalten kann. Die MobaTools bieten auch die Möglichkeit, diesen enable-Eingang automatisch ein bzw. auszuschalten. Allerdings kannst Du dann nicht mehr sicher sein, dass die Refrenzposition gehalten wird, da der Motor im stromlosen Zustand ja leicht verdreht werden kann.
Das Programm sollte dann so aufgebaut sein, dass der Referenzpunkt über den Endschalter bei jeder Bewegung aus der 'Zu' Stellung neu gesetzt wird. Evtl. wäre dann doch aus Sicherheitsgründen auch ein Endschalter am anderen Ende notwendig, falls die Tür im stromlosen Zustand bewegt wurde.

christo73:
Blöderweise ist die ganze Hardware mit Motorhalter für den Nema17 auch schon fertig …

Das ist mutig bis leichtsinnig :slight_smile:

Aber auch einen Schrittmotor kann man von der Programmlogik wie einen DC-Motor ansehen. Das setzt nur Endschalter auf beiden Seiten voraus. Die Bewegung wird angehalten, wenn der jeweilige Endschalter betätigt wird. Das ergänzt dann das tuer.moving().

christo73:
Macht es Sinn mit einem StepDown auf 5V Basis zu arbeiten?

Der Längsregler des Nano heizt unnötig, also ja. Eventuell eine Steckbrücke vorsehen, damit sich 5 V von USB und StepDown nicht beißen.

christo73:
… Kinder …

Da möchte ich den SilentStepStick TMC2209 V2 ins Spiel bringen, die leisere Alternative, zusätzlich mit “Automatic standby current reduction”. Kühlkörper nicht vergessen!

Praktische Erfahrungen habe ich leider keine.

agmue:
Das ist mutig bis leichtsinnig :slight_smile:

Stimmt, besser wäre wenn man sich vorher informiert :confused:
Aber jetzt mache ich das Beste daraus und schließlich ist es mein erstes Projekt und ich will mich ja steigern...

agmue:
...Das setzt nur Endschalter auf beiden Seiten voraus. Die Bewegung wird angehalten, wenn der jeweilige Endschalter betätigt wird. Das ergänzt dann das tuer.moving().

O.k. das mit den zwei Endschaltern ist - wie gesagt - kein Problem, ich muss nur noch verstehen wie das mit dem enable Eingang des Motortreibers funktioniert! Vom Prinzip her dürfte es klar sein, dass bei Betätigung des Endschalters die Endstufen abgeschaltet werden...bloß kenne ich die Befehle hierzu noch nicht und mit MobaTools habe ich ja leider auch noch nicht gearbeitet! Wenn ich diesen Weg also wähle, müsste ich mir sinngemäß die Position danach wieder über eine Referenzfahrt zu einem der beiden Endschalter definieren, oder?

Bloß wie funktioniert das in der Praxis? Angenommen ich schalte die Endstufen mittels enable ab und man verschiebt die Tür händisch, sodass die Position unbestimmt ist, was würde die erste Referenzfahrt auslösen? Wenn der PIR ein Signal ausgibt, soll ja schließlich nicht erst eine Referenzfahrt stattfinden, oder? Bzw. wäre das schon denkbar, sofern man als Referenzfahrt die Offen-Position wählt.

Aber in diesem Fall wäre es doch unlogisch, wenn der Motor während der Referenzfahrt mit unterschiedlichen Geschwindigkeiten (langsame Anfahrt + langsame Endfahrt und dazwischen schneller). Schließlich weiß das System ja nicht wo es sich befindet??? Oder verstehe ich hier etwas völlig falsch? Noch dazu möchte ich natürlich vermeiden, dass die Tür nach jeder Fahrt erneut eine Referenzfahrt benötigt...

Sorry, Fragen über Fragen... :o

agmue:
...Da möchte ich den SilentStepStick TMC2209 V2 ins Spiel bringen, die leisere Alternative, zusätzlich mit "Automatic standby current reduction". Kühlkörper nicht vergessen!

Der sagt mir natürlich auch noch nichts aber ich werde versuchen mich im Netz mal damit zu befassen.

Das Ganze kann allerdings ein paar Tage dauern, da ich mich ab Morgen mal für drei Tage in die österreichische Bergwelt verdrücke und in dieser Zeit natürlich offline sein werde. Ich möchte aber unbedingt an dem Thema dran bleiben und bin für konstruktive Vorschläge und Tipps natürlich dankbar.

Na dann bis in ein paar Tagen!!!

Gruß
Christoph

christo73:
Wenn ich diesen Weg also wähle, müsste ich mir sinngemäß die Position danach wieder über eine Referenzfahrt zu einem der beiden Endschalter definieren, oder?

Da muß man mal in das Datenblatt des Treibers, den Du verwendest, schauen, aber nach meinem Verständnis behält der Treiber die zur mechanischen Stellung des Motors passende Schaltung der Ausgänge. Die Position merkt sich Dein Programm.

christo73:
Bloß wie funktioniert das in der Praxis? Angenommen ich schalte die Endstufen mittels enable ab und man verschiebt die Tür händisch, sodass die Position unbestimmt ist, was würde die erste Referenzfahrt auslösen? Wenn der PIR ein Signal ausgibt, soll ja schließlich nicht erst eine Referenzfahrt stattfinden, oder? Bzw. wäre das schon denkbar, sofern man als Referenzfahrt die Offen-Position wählt.

Ich würde eine DC-Motor-Logik ohne Referenzfahrt verwenden. Bei einem PIR-Signal wird die Tür geöffnet, bis der Endschalter die Bewegung anhält. Das mußt Du mechanisch so geschickt lösen, daß es nicht knallt.

Wenn die normale Tür geschlossen ist, sollte die Bewegung der Insektentür z. B. mit einem Reedkontakt ausgeschaltet sein. Sonst spielt die Katze nachts mit der Türbewegung.

Manche Dinge muß man auch ausprobieren, beispielsweise schneller auf als zu, wer raus will hat es eilig.

christo73:
... für drei Tage in die österreichische Bergwelt verdrücke und in dieser Zeit natürlich offline sein werde.

Kein WLAN auf der Wanderhütte? Aber vernünftiges Essen gibt es hoffentlich?

Viel Spaß, gute Erholung und bleibe den gefährlichen Ecken fern!

christo73:
Sorry, Fragen über Fragen... :o

Ja, einige grundsätzliche Fragen wie die ganze Türsteuerung und Bedienung ablaufen soll, sollte man sich schon vorher machen.
Das ist auch eine Frage der Mechanilk. Wenn man die Tür von Hand bewegen kann, helfen ja keine Endschalter. Da muss der Endanschlag das einfach aushalten, wenn die Kiddies die Tür mal mit Schwung auf- oder zumachen. Und wieviel Widerstand setzt die Mechanik von Zahnriemen und leerlaufendem Schrittmotor der 'schwungvollen' Bedienung entgegen? Das hat dann erstmal noch gar nichts mit Elektrik und Programmierung zu tun.
Nächste Frage: Wie kräftig ist dein Schrittmotor im Verhältnis zum mechanischen Endanschlag. Kann der da was beschädigen, oder bleibt der einfach hängen und schafft keine weitere Bewegung ( was mMn am Besten wäre )? Das hängt auch wieder alles vom genauen mechanischen Aufbau ab.
Dann sollte der Endschalter den Schrittmotor nicht stromlos machen, sondern als Signal für den Prozessor dienen. Der sollte dann auch überfahrbar sein, und nicht den eigentlichen Endanschlag bedeuten. Hängt aber alles stark von der mechanischen Auslegung ab. Muss die geschlossene Tür an einem Anschlag stehen, oder ist da noch Luft für etwas zusätzliche Bewegung?

Wenn Du das geschickt auslegst, kann der Prozessor bei jedem Schließen der Tür den Referenzpunkt prüfen, und gegebenenfalls neu setzen.

agmue:
Jeder Strang möchte 1,5 A, aber nicht gleichzeitig, daher brauchst Du ein Netzteil beispielsweise 24 V mit mehr als 2,5 A.

MicroBahner:
Wichtiger ist, dass die Leistung des Netzteiles ausreichend ist …

Deine Darlegungen zu Stepper-Stromregelung mit A4988&Co habe ich mit großem Interesse gelesen, allerdings handelt es sich nicht gerade um leicht verdaulichen Stoff. Die Quintessenz für das eigene Projekt ist daher nicht so leicht zu ermitteln.

In solchen Bastelprojekten fehlen dann auch noch verläßliche mechanische Kenngrößen, weshalb die Berechnung der mechanischen Leistung kaum möglich ist.

Dann hat der TO auch noch einen Motor ausgewählt, für den ich kein Datenblatt finden kann. Die Homepage der chinesischen Firma ist derzeit nicht erreichbar.

Da lehne ich mich dann schon sehr weit aus dem Fenster, wenn ich dennoch einen konkreten Wert angebe ;D

Mit einer Berechnung von Watterott möchte ich meinen Schätzwert überprüfen. Dazu verwende ich das Datenblatt eines ähnlichen Motors.

Widerstand pro Phase: 2,55 Ω/Phase
Nennstrom pro Phase: 1,5A
Drehmoment: 0,18 Nm min bei 1000 /min aus dem Datenblatt
Netzteil: 24 V

Pmot = 2 Wicklungen * R * I2 = 2 * 2,55 Ω * (1,5 A)2 = 11,5 W

Pmech = 0,18 * 2 * pi * 1000 / 60 W = 19 W

Igesamt = (11,5 + 19) W / 24 V = 1,3 A

Auch dieser Wert beruht auf ungenauen Annahmen.

Wäre es mein Projekt, so würde ich mein Labornetzteil anschließen, den Strom messen und einschließlich Sicherheitsaufschlag nach einem passenden Netzteil auf dem Markt suchen. Möglicherweise würde ich bei einem preisgünstigen mit 2,5 A landen :grin:

MicroBahner:
Das ist auch eine Frage der Mechanilk. Wenn man die Tür von Hand bewegen kann, helfen ja keine Endschalter.

Da stimme ich Dir gänzlich zu!

Die mechanische Begrenzung sollte durch Gummipuffer oder Federn erfolgen. Endschalter sind eigentlich als Taster, die die Endlage signalisieren, auszuführen. Mechanisch wird dabei alleine die Tasterzunge betätigt, wenn sich die Tür am Taster vorbeibewegt. Die Tür sollte den Endtaster um die Länge der Rampe überfahren können, bis sie auf den Puffer trifft.

Bis die Familie einschließlich der intuitiv agierenden Kinder das Projekt als Gewinn akzeptiert, dürfte noch einige Feinarbeit notwendig sein.

Die SilentStepStick Treiber habe ich selbst noch nicht in den Fingern gehabt, sondern nur hier im Forum Positives gelesen. Im Wohnumfeld dürfte ein knurrender Schrittmotor schon lästig sein, daher mein Hinweis.

Hallo Zusammen, ich bin aus der österreichischen Diaspora zurück und muss mich erst wieder an Internet und Handyempfang gewöhnen :slight_smile:

Ich bin ganz happy, dass ihr mein Projekt eifrig weiterdiskutiert habt und ich nun an diesem Austausch teilhaben kann.

Ich schaue mal, ob ich die exakten Motordaten nicht irgendwo auftreiben kann...und teile sie euch natürlich dann mit! Die Geschichte mit der passenden Stromstärke für das Netzteil behalte ich natürlich im Auge!

Übrigens hat mir der Vorschlag den Endlagenschalter gar nicht als solchen zu verwenden, sondern eher als "Überfahrschalter" zu nutzen, um bei Betätigung mittels Rampe die Restfahrstrecke mit niedriger Geschwindigkeit zu fahren, gut gefallen. Gleichzeitig kann man ja durch die exakte Position des Überfahrschalters die Restfahrstrecke über die Schrittzahlen bis zu jeweiligen Endposition so definieren, dass der Motor erst gar nicht gegen einen Anschlagpuffer fahren muss, oder wie sehr ihr das?

Damit sollte es doch auch mit dem Thema Referenzfahrt erledigt sein, da der Antrieb zwischen den beiden Überfahrschaltern mit "hoher Geschwindigkeit" fährt und die jeweilige Reststrecke bis zur Offen- bzw. Geschlossenposition mit "niedriger Geschwindigkeit" fährt. Damit dürfte es doch auch dann keine Probleme geben, wenn z.B. die Kinder die Tür händisch verschieben und die Steuerung damit ihre Position verliert. Diese würde doch dann spätestens bei der Überfahrt des ersten Tasters wieder eingelernt werden, oder? Das sollte doch steuerungsmäßig umsetzbar sein...nur wie???

Noch eine Frage am Rande:
Wenn der Sketch eines Tages hoffentlich mal steht, möchte ich die Hardware natürlich möglichst kompakt in einem (kleinen) Gehäuse unterbringen. Könnt ihr mir ein Erweiterungsboard empfehlen, das man auf den Arduino steckt und auf dem man wiederum den Motortreiber (DRV8825) steckt. Ich habe sowas mal in einem Arduino Video gesehen und fand die Idee recht charmant.

Euch einen schönen Abend und bis bald!
Gruß
Christoph

christo73:
Hallo Zusammen, ich bin aus der österreichischen Diaspora zurück und muss mich erst wieder an Internet und Handyempfang gewöhnen :slight_smile:

Hilft nix, da mußt Du jetzt durch :slight_smile:

christo73:
Übrigens hat mir der Vorschlag den Endlagenschalter gar nicht als solchen zu verwenden, sondern eher als "Überfahrschalter" zu nutzen, um bei Betätigung mittels Rampe die Restfahrstrecke mit niedriger Geschwindigkeit zu fahren, gut gefallen. Gleichzeitig kann man ja durch die exakte Position des Überfahrschalters die Restfahrstrecke über die Schrittzahlen bis zu jeweiligen Endposition so definieren, dass der Motor erst gar nicht gegen einen Anschlagpuffer fahren muss, oder wie sehr ihr das?

Das war es, was ich meinte, die Steuerlogik wie bei einem DC-Motor zu konzipieren. Da benötigt man eine Bremszone.

Wichtig: Die "Überfahrschalter" müssen innerhalb der Bremszonen betätigt bleiben.

christo73:
Damit sollte es doch auch mit dem Thema Referenzfahrt erledigt sein, da der Antrieb zwischen den beiden Überfahrschaltern mit "hoher Geschwindigkeit" fährt und die jeweilige Reststrecke bis zur Offen- bzw. Geschlossenposition mit "niedriger Geschwindigkeit" fährt. Damit dürfte es doch auch dann keine Probleme geben, wenn z.B. die Kinder die Tür händisch verschieben und die Steuerung damit ihre Position verliert. Diese würde doch dann spätestens bei der Überfahrt des ersten Tasters wieder eingelernt werden, oder? Das sollte doch steuerungsmäßig umsetzbar sein...nur wie???

Ja, ja und ja. Eine Vorlage hast Du von mir, die kann man entsprechend erweitern.

Danksportaufgabe: Wie kann man die Tür händisch verschieben, wenn man sich im Bereich der PIRs befindet?

Berücksichtigen muß man es anstelle der Referenzfahrt auf jeden Fall.

agmue:
"Hilft nix, da mußt Du jetzt durch :)"

Stimmt, aber ich werd's überstehen... :slight_smile:

agmue:
"Wichtig: Die "Überfahrschalter" müssen innerhalb der Bremszonen betätigt bleiben."

Kannst Du mir bitte kurz erläutern warum? Nach meinem Verständnis muss ich den Taster abfragen und z.B. die Abfrage High (=gedrückt) führt dazu, dass der Motor mit definierter Schrittzahl bis zum Endpunkt langsamer dreht. Wenn die Steuerung nun während der Langsamfahrt das Signal Low bekommen würde, müsste sie den Motor ja wieder beschleunigen, richtig?

agmue:
"Danksportaufgabe: Wie kann man die Tür händisch verschieben, wenn man sich im Bereich der PIRs befindet?"

Da hast Du natürlich Recht und an diesen Grundsatz habe ich auch schon gedacht, sodass der Fall eigentlich nicht eintreten sollte. Wenn man die Sache jetzt aber mal weiterspinnt...z.B. wenn mich die vielen Katzen unserer lieben Nachbarn derart nerven, dass ich die Steuerung temporär lahmlege, dann wäre ein händischer Verschub mehr als wahrscheinlich. Wenn ich die Steuerung dann wieder aktiviere, sollte sie aber nach meinem Verständnis aus meinem letzten Chat ohne Probleme wieder funktionieren. Das selbe Thema habe ich u.U. bei Schneeverwehungen (sind bei und gar nicht mal so selten), da würde ich den Antrieb sicherheitshalber ebenfalls deaktivieren. Schmilzt der Schnee (u.U. schon ein / zwei Tage später) könnte man die Steuerung wieder aktivieren...klingt vielleicht alles etwas konstruiert aber halte ich für relativ real!

Ich werde versuchen mich die Tage mal intensiv mit deiner Vorlage zu beschäftigen und hoffe damit weiterzukommen. Ich halte dich auf dem Laufenden, wie es mir damit geht. Noch ist leider mein DRV8825 nicht eingetroffen. Macht es denn deiner Meinung nach mit der Überfahrschalterlösung immer noch Sinn die enable-Funktion des Treibers zu nutzen? Denn das ist mir leider noch nicht klar!

Danke und Gruß
Christoph

Hallo Christoph,

christo73:
Kannst Du mir bitte kurz erläutern warum? Nach meinem Verständnis muss ich den Taster abfragen und z.B. die Abfrage High (=gedrückt) führt dazu, dass der Motor mit definierter Schrittzahl bis zum Endpunkt langsamer dreht. Wenn die Steuerung nun während der Langsamfahrt das Signal Low bekommen würde, müsste sie den Motor ja wieder beschleunigen, richtig?

Das muss Du dann im Sketch eben richtig gestalten. D.h. das Bremsen startet wenn der Schalter betätigt wird, danach interessiert in die Schalterstellung erstmal nicht mehr. Eine erneute Bewegung wird vom PIR ausgelöst ( oder über eine Zeit, wenn die offene Tür ohne PIR-Signal nach einer definierten Zeit wieder schließen soll ), nicht vom Endschalter 'Low'
Wenn der Schalter aber nach dem Überfahren wieder zurückschaltet hast Du ein großes Problem bei der manuellen Türbewegung: Wenn die Tür manuell über den Endschalter hinaus bewegt wurde, und dann der Arduino startet, weist Du nicht, ob die Tür zwischen den beiden Endschaltern steht, oder hinter einem von beiden. Das musst Du aber wissen, damit Du die Tür nicht in die falsche Richtung und dann gegebenenfalls gegen den Puffer fährst ( ohne da jemals eine Rückmeldung zu bekommen ).