Hallo Zusammen
Für ein Schulprojekt möchte ich mithilfe eines Spielzeug Mähdreschers 6 Shotgläser befüllen.
(Siehe Video im Anhang)
Dazu verwende ich Folgende Bauteile:
| Produkt | Beschreibung | Menge | Artikelnummer | Lieferant |
|---|---|---|---|---|
| Kippschalter | 250 V/AC 10 A | 1 | 1304037 | Conrad.ch |
| Draht Widerstand | 1.5 Ω, 50 W | 1 | 1525115 | Conrad.ch |
| Drucktaster | 250V/AC 5A tastend Grün | 1 | 701312 | Conrad.ch |
| Drucktaster | 250V/AC 5A tastend Blau | 1 | 701310 | Conrad.ch |
| Mähdrescher | John Deere T670i Grün | 1 | 288072 | Galaxus.ch |
| Shotgläser | 0.60 dl | 6 | 6337159 | Galaxus.ch |
| USB-Kabel | USB-C zu USB-A | 1 | 623056 | Brack.ch |
| Gras Matte | 40 cm x 35 cm | 2 | 1239102 | Brack.ch |
| Relais Modul | 1 | 1138692 | Brack.ch | |
| Arduino Uno Rev 3 | 1 | 267897 | Brack.ch | |
| Treiber Board | Single Stepper Control Board | 1 | 420298 | Bastelgarge.ch |
| Schrittmotor Treiber | DRV8825 | 1 | 420396 | Bastelgarge.ch |
| WS2812b | NeoPixel Strip 6 Led | 1 | 420476 | Bastelgarge.ch |
| Schrittmotor | 1.7A 0.7Nm | 1 | 421224 | Bastelgarge.ch |
| Wasserpumpe | 280-600L/h 6-12V | 1 | 421308 | Bastelgarge.ch |
| Netzteil AC/DC Adapter | 12V DC 4A | 1 | 421374 | Bastelgarge.ch |
| Rollenendschalter | 7 | 421472 | Bastelgarge.ch | |
| DC Abwärtswandler | 7-24V auf 5V 4A DC Step Down | 1 | 421675 | Bastelgarge.ch |
Ich weis dass einige Bauteile überdimensioniert sind ( z.B 10 Ampere Kippschalter
)
Da ich eine Ausbildung als Automatiker absolviere, zeichnete ich ein Schema und ein Grafcet.
Als ich alles korrekt verdrahtete, leuchteten die Led's nicht. Zudem bewegte sich der Stepper obwohl dieser im Programm angesteuert wurde kein Stücken. Von Hand konnte ich den Stepper jedoch nicht mehr drehen. Zudem teilten mir die Supportmitarbeiter von Bastelgarage mit, dass ich das Controller Board mit meinem DRV 8825 und dem Nema 17 verwenden kann. Da ich alles korrekt verdrahtete, gehe ich davon aus dass mein Programm fehlerhaft ist.
Da ich nicht weis wo mein Fehler liegt bitte ich euch um Hilfe.
Hier Nun mein Code:
//===============================================
// Fügt Bibliotheken hinzu
//===============================================
#include <AccelStepper.h>
#include <Adafruit_NeoPixel.h>
//===============================================
// Definiert Pins für Accel Stepper Libary
//===============================================
#define dirPin 7
#define stepPin 8
#define motorInterfaceType 1
//===============================================
// Definiert LED Pin und Anzahl der LEDs
//===============================================
#define LED_PIN 12
#define NUM_LEDS 6
//===============================================
// Definiert Namen der Pins
//===============================================
#define Arm_Nullpunkt 0
#define Pin_Glas_1 1
#define Pin_Glas_2 2
#define Pin_Glas_3 3
#define Pin_Glas_4 4
#define Pin_Glas_5 5
#define Pin_Glas_6 6
#define Taster_Ausspuelen 9
#define Taster_Start 10
#define Kippschalter 11
#define Pumpe 13
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, LED_PIN, NEO_GRB + NEO_KHZ800);
AccelStepper stepper = AccelStepper(motorInterfaceType, stepPin, dirPin);
//===============================================
// Enum für Statemashine
//===============================================
enum States
{
Schritt_1,
Schritt_10,
Schritt_20,
Schritt_21,
Schritt_22,
Schritt_23,
Schritt_24,
Schritt_25,
Schritt_26,
Schritt_30,
Schritt_31,
};
States State = Schritt_1;
//===============================================
// Variable für Zeitverzögerung Kippschalter
//===============================================
int Time_Kschalter_Low = 400;
int Time_Kschalter_High = 800;
//===============================================
// Variable für Zeitverzögerung Kippschalter
//===============================================
int Time_Ausspuelen = 8000;
//===============================================
// Funktion für alle Gläser
//===============================================
void Funktion_Glaeser(int Sensor_Glas, int LedNum)
{
if (digitalRead(Sensor_Glas) == LOW)
{
digitalWrite(Pumpe, HIGH);
strip.setPixelColor(LedNum, strip.Color(255, 255, 0));
strip.show();
if (digitalRead(Kippschalter) == LOW)
{
delay(Time_Kschalter_Low);
}
else
{
delay(Time_Kschalter_High);
}
digitalWrite(Pumpe, LOW);
strip.setPixelColor(LedNum, strip.Color(0, 255, 0));
stepper.moveTo(-6);
while (stepper.run())
{
}
}
else
{
stepper.moveTo(-6);
while (stepper.run())
{
// Warten, bis der Schrittmotor seine Position erreicht hat
}
}
}
//===============================================
// Funktion für Ausspülen
//===============================================
void Funktion_Ausspuelen()
{
digitalWrite(Pumpe, HIGH);
delay(Time_Ausspuelen);
digitalWrite(Pumpe, LOW);
}
//===============================================
// Funktion für zum Nullpunkt fahren
//===============================================
void Funktion_Nullpunkt()
{
while ((digitalRead(Arm_Nullpunkt) == HIGH))
{
stepper.moveTo(-200);
stepper.run();
}
}
//===============================================
// Funktion für zu Startposition fahren
//===============================================
void Funktion_Start()
{
if (digitalRead(Taster_Start) == LOW)
{
stepper.moveTo(50);
while (stepper.run())
{
}
}
}
//===============================================
// Funktion für alle Leds auf Rot setzen
//===============================================
void Led_Rot()
{
strip.fill(strip.Color(255, 0, 0));
strip.show();
}
//===============================================
// Funktion für alle Leds auf Blau setzen
//===============================================
void Led_Blau()
{
strip.fill(strip.Color(0, 0, 255));
strip.show();
}
//===============================================
// Funktion anzeige Kippschalter 0 oder 1
//===============================================
void Pinmode_Kippschalter()
{
if (digitalRead(Kippschalter) == LOW)
Serial.println("Kippschalter = 1");
}
//===============================================
// Setup
//===============================================
void setup()
{
//===============================================
// Definiert Pin 0-6 und 9-11 als Input
//===============================================
for (int i = 0; i <= 6; i++)
{
pinMode(i, INPUT_PULLUP);
}
pinMode(9, INPUT_PULLUP);
pinMode(10, INPUT_PULLUP);
pinMode(11, INPUT_PULLUP);
//===============================================
// Definiert Pin 7-13 als Output
//===============================================
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
//===============================================
// Definiert maximale Geschwindigkeit
//===============================================
stepper.setMaxSpeed(2000);
//===============================================
// Definiert Geschwindigkeit des Steppers
//===============================================
stepper.setSpeed(750);
//===============================================
// Initsialisiert Led Strip
//===============================================
strip.begin();
strip.show();
//===============================================
// initsialisiert den Serial Monitor
// Setzt Baud Rate auf 9600
//===============================================
Serial.begin(9600);
}
//===============================================
// Loop
//===============================================
void loop()
{
//===============================================
// Init Case states
//===============================================
switch (State)
{
case Schritt_1:
Led_Rot();
Serial.println("Alle Led auf Rot");
Funktion_Nullpunkt();
Serial.println("Motor an Nullpunkt");
if (digitalRead(Taster_Ausspuelen) == LOW)
{
Serial.println("Programm geht zu Case Ausspuelen");
State = Schritt_10;
}
if (digitalRead(Taster_Start) == LOW)
{
Serial.println("Programm geht zu Case Start");
State = Schritt_20;
}
break;
case Schritt_31:
if (digitalRead(Taster_Ausspuelen) == LOW)
{
Led_Rot();
Serial.println("Case init 2");
Serial.println("Geht zu Case Ausspuelen");
State = Schritt_10;
}
if (digitalRead(Taster_Start) == LOW)
{
Led_Rot();
Serial.println("Case init 2");
Serial.println("Programm geht zu Case Start");
State = Schritt_20;
}
break;
case Schritt_20:
Funktion_Start();
Serial.println("Start wurde aktiviert");
State = Schritt_21;
break;
case Schritt_10:
Led_Blau();
Funktion_Ausspuelen();
Serial.println("Ausspülen Fertig");
Serial.println("Led auf Blau");
State = Schritt_30;
break;
case Schritt_21:
Funktion_Glaeser(Pin_Glas_1, 0);
Serial.println("Glas 1 Fertig");
State = Schritt_22;
break;
case Schritt_22:
Funktion_Glaeser(Pin_Glas_2, 1);
Serial.println("Glas 2 Fertig");
State = Schritt_23;
break;
case Schritt_23:
Funktion_Glaeser(Pin_Glas_3, 2);
Serial.println("Glas 3 Fertig");
State = Schritt_24;
break;
case Schritt_24:
Funktion_Glaeser(Pin_Glas_4, 3);
Serial.println("Glas 4 Fertig");
State = Schritt_25;
break;
case Schritt_25:
Funktion_Glaeser(Pin_Glas_5, 4);
Serial.println("Glas 5 Fertig");
State = Schritt_26;
break;
case Schritt_26:
Funktion_Glaeser(Pin_Glas_6, 5);
Serial.println("Glas 6 Fertig");
State = Schritt_30;
break;
case Schritt_30:
Funktion_Nullpunkt();
Serial.println("Motor an Nullpunkt (Parkposition)");
State = Schritt_31;
break;
default:
Serial.println("Case defaul");
break;
}
}
Anhänge:
Schema
Funktionsbeschrieb zu Grafcet Schritten
Funktionsvideo Shotdrescher
Da ich ein neuer User bin kann ich keine Dateien direkt hier im Post hochladen. ![]()
Deshalb hier der Link zum Dropbox Ordner



