ich versuche für meinen Sohn ein kleines Projekt umzusetzen
Wir möchten einen 24V Schrittmotor (Nema 23) mit einem Fußschalter bedienen können. Der Fußschalter hat folgende Anschlüsse NO / NC / COM.
Wir haben noch ein Arduino UNO, sowie einen Digitalen Stepper Driver DM542T.
Die Funktion soll am Ende wie folgt sein: Fußschalter betätigen und halten = Motor dreht z.b. links herum,
beim loslassen des Schalter dreht der Motor rechts herum. Endlagenschalter werden erstmal nicht benötigt.
Eigentlich ganz simple, für uns aber nicht umsetzbar Hoffentlich könnt ihr uns helfen
Erstmal stellt sich die Frage, ob der Treiber zum Motor paßt. "Nema23" gibt nur die mechanische Größe an, für den Treiber sind aber die elektrischen Werte von Interesse. Wenn Du einen Produkt- oder Datenblattlink hast, dann her damit.
NO / NC / COM ist normal open / normal close / gemeinsamer Anschluß
COM an GND und NO an einen digitalen Eingang, NC unbeschaltet. Den Eingang im Programm auf INPUT_PULLUP setzen, dann wird er vom internen PullUp-Widerstand auf HIGH gezogen, bei Betätigung auf LOW.
Das Beispiel DigitalInputPullup findest Du in der IDE.
Interrupts benötigst Du nicht. Die Bibliothek MobaTools unterstützt Dein Vorhaben, kannst Du mit dem Bibliotheksmanager installieren.
linda89: @agmue: Danke auch dir für deine Hilfe, ich schaue mir heute Abend das Beispiel DigitalInputPullup an und melde mich bei Fragen nochmal bei dir ok?
Natürlich ok. Sollte ich draußen nach Sternschnuppen Ausschau halten, wird Dir ein anderer Aktiver helfen.
Ich fange halt immer bei grundlegenden Dingen wie Spannugsversorgung und dergleichen an, weil nicht wenige Probleme aus dieser Ecke stammen.
Üblicherweise verbindet man bei diesen Schaltern den COM ( =gemeinsam ) Anschluss an das feste Potential - hier Gnd - und kann dann durch Auswahl von NC oder NO den Ruhe- oder den Arbeitskontakt auswählen und mit dem Arduinopin verbinden.
Du solltest auf jeden Fall noch den Interrupt komplett rausschmeißen - das brauchst Du nicht. Und dann musst Du hier:
if (reverseSwitch) setdir=0; else setdir=1;
den Eingangspin auch lesen. Also
if ( digtalRead(reverseSwitch) ) setdir=0; else setdir=1;
Guten Abend zusammen und danke für eure Unterstützung.
Ich habe jetzt die zusätzlichen Anmerkungen zum Quellcode von Peter und Franz-Peter eingefügt.
Auch habe Ich den fußschalter angeschlossen.
COM an GND und NO an PIN2 und PUL+.
Der Quellcode zeigt keine Fehler, das hochladen auf das arduino ohne Probleme.
Der Motor läuft. Aber nur in eine Richtung. Bei Betätigung des fußschalter passiert nichts.
Habe auch mal den Anschluss vom fußschalter gewechselt, also COM an PIN 2 und NO an GND aber den Richtungswechsel macht der Motor beim betätigen vom fußschalter nicht.
Hier habe ich nun nochmal den aktuellen Quellcode. Ich habe etwas interessantes und eventuell für euch nützliches ausprobiert: wenn ich den Fußschalter gar nicht anschließe und PIN2 und GND nicht ansteuer, läuft der Motor trotzdem. So als wenn der Fußschalter gar nichts ausrichtet - egal ob angeschlossen oder nicht... Das hat mich verwundert.
// Defin pins
int reverseSwitch = 2; // Push button for reverse
int driverPUL = 7; // PUL- pin
int driverDIR = 6; // DIR- pin
int spd = A0; // Potentiometer
// Variables
int pd = 500; // Pulse Delay period
boolean setdir = LOW; // Set Direction
// Interrupt Handler
void revmotor (){
setdir = !setdir;
}
void setup() {
pinMode (driverPUL, OUTPUT);
pinMode (driverDIR, OUTPUT);
pinMode (reverseSwitch, INPUT_PULLUP);
}
void loop() {
pd = map((analogRead(spd)),0,1023,2000,50);
if (reverseSwitch) setdir=0; else setdir=1;
if (digitalRead(reverseSwitch)) setdir=0; else setdir=1;
digitalWrite(driverDIR,setdir);
digitalWrite(driverPUL,HIGH);
delayMicroseconds(pd);
digitalWrite(driverPUL,LOW);
delayMicroseconds(pd);
}