Schrittmotor per Taste einmal vor und zurück

Hallo liebe Gemeinde

Mein Name ist Richard und bin neu in dem Bereich.

Wir möchten einen Schrittmotor per Tastendruck einmal in eine Richtung um 180 Grad bewegen und
beim zweiten Tastendruck in die andere Richtung zurück.

Hier der Sketch...

#include <Stepper.h>

int pinPWM_A = 3;
int pinPWM_B = 11;
int pinDir_A = 12;
int pinDir_B = 13;

// Taster Pin
int tasterPin1 = 5;
int tasterPin2 = 6;


// Motorschritte
const int stepsPerRevolution = 400;

Stepper motor(stepsPerRevolution, pinDir_A, pinDir_B);


void setup()
{
 motor.setSpeed(100); // Motor Geschwindigkeit
 digitalWrite(pinPWM_A, HIGH);
 digitalWrite(pinPWM_B, HIGH);
 pinMode(tasterPin1, INPUT); //tasterPin1 wird als INPUT definiert
 pinMode(tasterPin2, INPUT); //tasterPin2 wird als INPUT definiert
 digitalWrite(tasterPin1, HIGH); // Interen Pullupwiderstand aktivieren
 digitalWrite(tasterPin2, HIGH); // Interen Pullupwiderstand aktivieren
 }

void loop()
{
  if (digitalRead(tasterPin1) == LOW)
  motor.step(stepsPerRevolution * 1);
  delay(20);
  if (digitalRead(tasterPin2) == LOW)
  motor.step(-stepsPerRevolution * 1);
  delay(20);

Soweit Funktioniert das ganze auch.

Wir möchten aber gern das, wenn der Motor bei 180 Grad steht und man den Taster1 ein weiteres mal Drück, nichts passiert.
Jetzt fährt der Motor noch weiter in die selbe Richtung.

Hat jemand eine Idee wie man dies Lösen könnte?

Vielen Dank

Gruss
Richard

Hallo Richard, willkommen im Forum!

Probiere mal dies (ungetestet):

void loop()
{
   if (digitalRead(tasterPin1) == LOW)
   motor.step(stepsPerRevolution * 1);
   if (digitalRead(tasterPin1) == LOW)
   while(1);  // "... nichts passiert"
   delay(20);
   if (digitalRead(tasterPin2) == LOW)
   motor.step(-stepsPerRevolution * 1);
   delay(20);
}

Danke dir agmue

Nein, leider ändert sich nichts.

Bei Tastendruck dreht der Motor und beim erneuten Drücken dreht er weiter um 180 Grad.

Könnte man die Schritte zählen und Abgleichen lassen?

Welche Hardware verwendest Du?

Ich versuche es mal mit Flags...

hinzufügen:

boolean FlagPos;
boolean FlagNeg;

void loop()
{
   if ((digitalRead(tasterPin1) == LOW)&&(FlagPos==0))
{ motor.step(stepsPerRevolution * 1);
  FlagPos =1;
  FlagNeg =0;
   delay(20);}

   if ((digitalRead(tasterPin2) == LOW)&&(FlagNeg==0))
{ motor.step(-stepsPerRevolution * 1);
FlagNeg =1;
FlagPos=0;
   delay(20); }
}

Aber nicht, dass es an der Hardware hängt ?

Stefan

Mal ne blöde Frage... Warum dreht sich der Motor "nur"
um 180 ° ? bei nem "üblichen Stepper" mit 1.8° Schrittweite
müsste er 2 Umdrehungen machen .?

Es gibt auch 400 Step/U Motore.

@Grinder Versuch mal
https://www.arduino.cc/en/tutorial/switch

Grüße Uwe

uwefed:
Es gibt auch 400 Step/U Motore.

@Grinder Versuch mal
https://www.arduino.cc/en/tutorial/switch

Grüße Uwe

Dann wäre es immer noch mehr als 180° ?
Stefan

StefanBoth:
Dann wäre es immer noch mehr als 180° ?
Stefan

Ja.

Vielen Dank Stefan!

Jetzt funktioniert es!:wink:

Grinder:
Vielen Dank Stefan!
Jetzt funktioniert es!:wink:

Echt ? ? ? :slight_smile:
Juhu ich konnte mit meinem Anfänger wissen
jetzt schon helfen !!!
Danke für das Feedback

Stefan

Du weißt auf jeden Fall schon mehr wie ich als Anfänger vom Anfänger :wink:
Könnte man das auch auf eine Taste legen?

Ja :smiley:

Stefan

Aber wie Stefan?
Bin da leider noch überhaupt net fit...:frowning:

Statt
((digitalRead(tasterPin2) == LOW)&&(FlagNeg==0))
einfach
((digitalRead(tasterPin1) == LOW)&&(FlagNeg==0))

Du "verriegelst" ja die beiden Zustände bereits gegenseitig durch FlagNeg und FlagPos...

Allerdings solltest Du den Taster dann nur Abfragen, wenn der gerade aktive Job vorbei ist. Also nicht
während der Motor dreht.
Kann sein, dass die Funktion motor.step() das schon regelt... Probier es einfach mal.

Stefan

Mal nebenher gefragt, hast du denn mit einem Einsteigerset angefangen, oder eine Idee gehabt und dir die benötigten Teile gekauft?
Stefan

Danke erstmal Stefan für deine Hilfe!

Nein, hab mir letztes Jahr eine kleine Portalfräse gegönnt mit einem 3D Taster.
Diesen hat man nur zum antasten in die Spindel geschraubt aber, die Wiederholgenaugikeit war nicht gegeben... von 0,05-0,8mm war alles dabei:-(
Dann hab ich mir gedacht ich mach einen, an einer festen Position zum einschwenken...:wink:
Wenn ich am lepi bin stell ich mal ein Bild ein!:wink:

Die Idee ist wirklich nicht schlecht.
Wir haben seit zwei Jahren eine in der Firma
um mal eben Prototypen machen zu können.
Kein fettes Bearbeitungszentrum sondern eher
eine günstigere für den semiprofessionellen Bereich.
Auch hier war der Taster das eigentliche Problem
mit der Wiederholgenauigkeit.

Wenn denn wirklich alle Stricke reißen,
nimm eine Gabellichtschranke als Taster.
Die gibt es mit 50mm Schenkel Abstand das sollte
reichen für eine kleine Portalfräse.
Ich bin nicht mehr auf dem Laufenden,
was die Lichtschranken kosten.
Sie liegen aber im unteren dreistelligen
Bereich.

Stefan

Hallo Stefan

Anbei Bilder vom Projekt...:wink:

Leider gehen keine Videos...:frowning: