Hallo liebe Arduino Community,
wir haben für ein Schulprojekt einen automatischen Getränke Einschänker gebaut.
Dieser läuft über 2 Nema 17 Motoren. Im Grunde genommen funktioniert alles, allerdings möchten wir nun das Programm über einen Schalter aktivieren. Dafür haben wir uns überlegt, jeweils einen Endschalter unten an den Gewindespindeln anzubringen, sodass die Motoren dann stoppen, soweit der Mitnehmer unten angekommen ist, damit wir immer aus der gleichen Position starten können. Die LEDs sollen ebenfalls angesteuert werden. Die Gelben sollen während des Vorgangs blinken anschließend sollen die grünen LEDs blinken, wenn der Vorgang beendet ist.
So die Theorie...
Die Endschalter sind nun eingebaut und wir haben versucht den Code dementsprechend abzuändern. Wenn die Endschalter gedrückt werden, zeigen sie dies durch eine intigrierte LED, allerdings stoppen daraufhin die Motoren nicht.
An der Hardware kann es eigentlich nicht liegen. Das habe ich mehrmals gecheckt. Trotzdem hier noch einmal ein Bild vom Arduino:
Den aktuellen Code den wir benutzen ist dieser:
#define directionPin1 5
#define stepPin1 4
#define directionPin2 2
#define stepPin2 3
#define endSwitchPin1 6
#define endSwitchPin2 7
// Entprellungsfunktion für Endschalter
bool debounce(int pin) {
int reading = digitalRead(pin);
static int previousState = HIGH; // Statischer Wert für den vorherigen Zustand
static unsigned long lastDebounceTime = 0;
unsigned long debounceDelay = 50; // Anpassen, je nach Bedarf
if (reading != previousState) {
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay) {
if (reading != previousState) {
previousState = reading;
return reading == LOW;
}
}
return false;
}
void setup() {
pinMode(directionPin1, OUTPUT);
pinMode(stepPin1, OUTPUT);
pinMode(directionPin2, OUTPUT);
pinMode(stepPin2, OUTPUT);
pinMode(endSwitchPin1, INPUT_PULLUP); // Mit INPUT_PULLUP aktiviert der Endschalter den Pin, wenn er betätigt wird
pinMode(endSwitchPin2, INPUT_PULLUP);
// Andere Initialisierungen
}
void loop() {
bool endSwitch1 = debounce(endSwitchPin1);
bool endSwitch2 = debounce(endSwitchPin2);
if (endSwitch1) {
// Wenn Endschalter 1 aktiviert wird, stoppen Sie Motor 1 und fahren Sie für 2 Sekunden nach oben
digitalWrite(directionPin1, LOW);
digitalWrite(stepPin1, LOW);
digitalWrite(directionPin2, HIGH); // Motor 2 fährt 2 Sekunden nach oben
unsigned long stopTime = millis() + 2000; // Aktuelle Zeit + 2 Sekunden
while (millis() < stopTime) {
digitalWrite(stepPin2, HIGH);
delayMicroseconds(15);
digitalWrite(stepPin2, LOW);
delayMicroseconds(15);
}
}
if (endSwitch2) {
// Wenn Endschalter 2 aktiviert wird, stoppen Sie Motor 2 und fahren Sie für 2 Sekunden nach oben
digitalWrite(directionPin2, LOW);
digitalWrite(stepPin2, LOW);
digitalWrite(directionPin1, HIGH); // Motor 1 fährt 2 Sekunden nach oben
unsigned long stopTime = millis() + 2000; // Aktuelle Zeit + 2 Sekunden
while (millis() < stopTime) {
digitalWrite(stepPin1, HIGH);
delayMicroseconds(15);
digitalWrite(stepPin1, LOW);
delayMicroseconds(15);
}
}
// Arbeitsabschnitt 1: Motor 2 läuft 30 Sekunden lang nach oben
digitalWrite(directionPin2, HIGH);
unsigned long startTime = millis();
while (millis() - startTime < 30000) { // 30 Sekunden warten
digitalWrite(stepPin2, HIGH);
delayMicroseconds(15);
digitalWrite(stepPin2, LOW);
delayMicroseconds(15);
}
// Arbeitsabschnitt 2: Motor 2 und Motor 1 parallel für 30 Sekunden nach oben
digitalWrite(directionPin2, LOW);
digitalWrite(directionPin1, HIGH);
startTime = millis();
while (millis() - startTime < 30000) {
digitalWrite(stepPin1, HIGH);
digitalWrite(stepPin2, HIGH);
delayMicroseconds(10);
digitalWrite(stepPin1, LOW);
digitalWrite(stepPin2, LOW);
delayMicroseconds(20);
}
// Arbeitsabschnitt 3: Motor 1 läuft endlos nach unten
digitalWrite(directionPin1, LOW);
while (true) { // Endlos
digitalWrite(stepPin1, HIGH);
delayMicroseconds(15);
digitalWrite(stepPin1, LOW);
delayMicroseconds(15);
}
}
Ich habe euch mal auf Youtube das Video hochgeladen, dass wir an unseren Lehrer geschickt haben, wo wir unseren Zwischenstand präsentieren sollten: https://youtu.be/xUmr4goPGu0?si=K3TnULo2gh92X1OE
Nur zur Info, hier wurde das Programm nicht über den Schalter aktiviert, sondern über den Computer und zusätzlich haben wir die LEDs an eine Batterie angeschlossen, um die Wirkung zu erzeugen, dass diese eine Funktion haben ![]()
Ich würde mich sehr über eure Ratschläge freuen, da dies mein erstes Arduino Projekt ist und ich gewisse Grundkenntnisse habe, diese allerdings nicht mehr ausreichen dafür.
Liebe Grüße,
Justus





