Hallo Leute ich hoffe ihr könnt mir helfen,
ich tüftle an einem Mähroboter den ich selbst gebaut und mit diversen Teilen dimensioniert habe.
Jetzt bin ich gerade dabei das Programm zu schreiben und merke, das das gar nicht so einfach ist wie ich mir das dachte:
Ich habe 2 Sicherheitsendlagenschalter eingebaut, die den Mähmotor ausschalten sollen (Motortreiber L298N), sobald er angehoben wird. (Endlagenschalter sind über interne Pullup Widerstande im Arduino angeschlossen siehe Programm).
Desweiteren sind 2 Endlagen mit einer Stoßstange vorne montiert, damit erkannt werden kann, von welcher Seite der Roboter anstößt. Jenachdem soll der Motortreiber (L298N) die jeweiligen Motoren ansteuern und zurückfahren und dabei in einer bestimmten Zeit drehen. Danach soll er weiter fahren bis er zum nächsten Hinderniss kommt (Wie ein einfacher Staubsaugerroboter eben)
Der Arduino und die 3 Motoren werden über eine 12V Gleichspannung (Bleiakku) angetrieben und die gesamte Anlage kann mit einem Schalter Ein/Aus geschaltet werden.
Später soll er weiter ausgebaut und verfeinert werden.
Hier mein derzeitiger Programmcode:
(code tags please!)
int w = 50; //Vereinfachung Sicherheitsschalter S1
int x = 51; //Vereinfachung Sicherheitsschalter S2
int y = 52; //Endschalter Links
int z = 53; //Endschalter Rechts
void setup()
{
Serial.begin(9600); //Starte mit Baudenrate 9600
pinMode(50, INPUT); //Sicherheitsschalter S1
digitalWrite(50, HIGH); //schaltet den Pullup Widerstand ein
pinMode(51, INPUT); //Sicherheitsschalter S2
digitalWrite(51, HIGH); //schaltet den Pullup Widerstand ein
pinMode(52, INPUT); //Endschalter Links
digitalWrite(52, HIGH); //schaltet den Pullup Widerstand ein
pinMode(53, INPUT); //Endschalter Rechts
digitalWrite(53, HIGH); //schaltet den Pullup Widerstand ein
pinMode(24, OUTPUT); //Ansteuerung 1 Mähmotor
pinMode(26, OUTPUT); //Ansteuerung 2 Mähmotor
pinMode(44, OUTPUT); //Ansteuerung 1 Motor Rechts
pinMode(46, OUTPUT); //Ansteuerung 2 Motor Rechts
pinMode(6, OUTPUT); //PWM Signal Motor Rechts
pinMode(34, OUTPUT); //Ansteuerung 1 Motor Links
pinMode(36, OUTPUT); //Ansteuerung 2 Motor Links
pinMode(2, OUTPUT); //PWM Signal Motor Links
}
void loop()
{
if ( w==x, LOW) //Wenn S1 und S2 nicht Low sind, dann
{
digitalWrite (24, LOW);
digitalWrite(26, LOW); //Mähmotor stoppt (Vollbremsung)
}
else //Wenn S1 und S2 High sind, dann
{
digitalWrite(24, HIGH);
digitalWrite(26, LOW); //Mähmotor startet
}
delay (5000); //Warte 5 Sekunden für nächsten Befehl
if ( y==z, HIGH) //Wenn S3 und S4 betätigt sind, dann
{
digitalWrite(44, HIGH);
digitalWrite(46, LOW); //Motor Rechts fährt vorwärts
analogWrite(6, 255); //Motor Rechts hat maximale Leistung
digitalWrite(34, HIGH);
digitalWrite(36, LOW); //Motor Links fährt vorwärts
analogWrite(10, 255); //Motor Links hat maximale Leistung
}
else if (y!=z, LOW) //Wenn S3 betätigt und S4 nicht, dann
{
digitalWrite(44, LOW);
digitalWrite(46, LOW); //Motor Rechts bremst (Vollbremsung)
analogWrite(6, 0); //Motor Rechts hat minimale Leistung
digitalWrite(34, LOW);
digitalWrite(36, LOW); //Motor Links bremst (Vollbremsung)
analogWrite(10, 0); //Motor Links hat minimale Leistung
delay (5000); //Warte 5 Sekunden
digitalWrite(44, LOW);
digitalWrite(46, HIGH); //Motor Rechts fährt rückwärts
analogWrite(6, 255); //Motor Rechts hat maximale Leistung
delay (3000); //Warte 3 Sekunden
}
else (z!=y, LOW); //Wenn S4 betätigt und S3 nicht, dann
{
digitalWrite(44, LOW);
digitalWrite(46, LOW); //Motor Rechts bremst Vollbremsung
analogWrite(6, 0); //Motor Rechts hat minimale Leistung
digitalWrite(34, LOW);
digitalWrite(36, LOW); //Motor Links bremst (Vollbremsung)
analogWrite(10, 0); //Motor Links hat minimale Leistung
delay (5000); //Warte 5 Sekunden
digitalWrite(34, LOW);
digitalWrite(36, HIGH); //Motor Links fährt rückwärts
analogWrite(6, 255); //Motor Links hat maximale Leistung
delay (3000); //Warte 3 Sekunden
}
}
Mein Problem ist, das der Arduino immer das void loop abspielt. Was dazu führt, das der Mähroboter trotz ausgeschalteten Mähmotor losfährt, ob er garnicht mäht. Hat da jemand eine gute Idee oder einen anderen Ansatz, da ich zur Zeit nicht mehr weiter komme. Die delay Zeiten sind für mich damit ich ihn ruhe schauen kann ob er alles macht, später nehme ich sie raus oder kürze sie.
Der Programmcode müsste fehlerfrei sein, zumindestens kann ich ihn ohne Probleme übertragen.
Ich hoffe und bedanke mich schonmal fürs durchlesen. Vll findet sich einer der mir Helfen kann.
Mit Freundlichen Grüßen
aus Leipzig


