Hallo Vangola,
Du postest hier halt auch nur halbe Wahrheiten und nicht deinen Ganzen Code!
Ich habe gerade gesehen, dass da mal cm und cm3 als Variable zu sehen ist ......
MfG Peter(TOO)
Hallo Vangola,
Du postest hier halt auch nur halbe Wahrheiten und nicht deinen Ganzen Code!
Ich habe gerade gesehen, dass da mal cm und cm3 als Variable zu sehen ist ......
MfG Peter(TOO)
Manchmal frage ich mich, wieso meine Generation Geräte ohne Simulation entwickeln konnte?
Ich habe für jeden Sensor eigene Abstandsvariable angelegt. (Ist es etwa falsch?)
Code:// Sensor Links long laengelinks; long cm2; // Sensor Vorne long laengevorne; long cm; // Sensor Rechts long laengerechts; long cm3; // Motor Rechts const int Motor1Pin1 = 1; const int Motor1Pin2 = 0; //Motor Links const int Motor2Pin1 = 2; const int Motor2Pin2 = 3; //int Abstand = 10; void setup() { // Sensor PINS // Serial.begin (9600); pinMode(11,OUTPUT); pinMode(10,INPUT); pinMode(12,OUTPUT); pinMode(8,OUTPUT); pinMode(9,INPUT); pinMode(7,OUTPUT); pinMode(5,OUTPUT); pinMode(6,INPUT); pinMode(4,OUTPUT); // Motor PINS pinMode(Motor1Pin1, OUTPUT); pinMode(Motor1Pin2, OUTPUT); pinMode(Motor2Pin1, OUTPUT); pinMode(Motor2Pin2, OUTPUT); // pinMode(13,OUTPUT); } void loop() { scanvorne(); if (cm >= 20) { GoForward(); delay(300); } else { Stop(); scanlinks(); if (cm >= 20) { GoLeft(); delay(250); } else { Stop(); scanrechts(); if (cm3 >= 20) { GoRight(); delay(250); } else { Stop(); } } } } // Sensor Steuerung void scanvorne() { digitalWrite(12,HIGH); digitalWrite(11,HIGH); delayMicroseconds(1000); digitalWrite(11,LOW); laengevorne = pulseIn(10,HIGH); cm = (laengevorne/2)/29.1; Serial.print(cm); Serial.println("cm1"); } void scanlinks() { digitalWrite(7,HIGH); digitalWrite(8,HIGH); delayMicroseconds(1000); digitalWrite(8,LOW); laengelinks = pulseIn(9,HIGH); cm2 = (laengelinks/2)/29.1; Serial.print(cm2); Serial.println("cm2"); } void scanrechts() { digitalWrite(4,HIGH); digitalWrite(5,HIGH); delayMicroseconds(1000); digitalWrite(5,LOW); laengerechts = pulseIn(6,HIGH); cm3 = (laengerechts/2)/29.1; Serial.print(cm3); Serial.println("cm3"); } //Motoren Steuerung void GoForward(){ digitalWrite(Motor1Pin1, HIGH); digitalWrite(Motor2Pin1, HIGH); digitalWrite(Motor2Pin2, LOW); digitalWrite(Motor1Pin2, LOW); } void GoBackward(){ digitalWrite(Motor1Pin1, LOW); digitalWrite(Motor1Pin2, HIGH); digitalWrite(Motor2Pin1, LOW); digitalWrite(Motor2Pin2, HIGH); } void GoLeft(){ digitalWrite(Motor1Pin1, HIGH); digitalWrite(Motor1Pin2, LOW); digitalWrite(Motor2Pin1, LOW); digitalWrite(Motor2Pin2, LOW); } void GoRight(){ digitalWrite(Motor2Pin2, LOW); digitalWrite(Motor2Pin1, HIGH); digitalWrite(Motor1Pin1, LOW); digitalWrite(Motor1Pin2, LOW); } void Stop(){ digitalWrite(Motor1Pin2, LOW); digitalWrite(Motor1Pin1, LOW); digitalWrite(Motor2Pin1, LOW); digitalWrite(Motor2Pin2, LOW); }
Hallo,
ja das hab ich auch eben gesehen und korrigiert, danke dir.
Das fährt jetzt einwandfrei, aber wie du es auch gemeint hast, hat es einen Linksdrall.
Ich überlege gerade wie man es macht damit es den Weg mit dem größten Abstand nimmt.
MfG Vangola
Code:if ( (cm2 >= 10) && (cm2 >= 10) ) // links und rechts min. 10cm frei { If (cm2 > cm3) Links(); else Rechts(); }
Manchmal frage ich mich, wieso meine Generation Geräte ohne Simulation entwickeln konnte?
So richtig wird das mit deinem Aufbau nicht funktionieren, denn die Sensoren haben nicht genug Öffnungswinkel (grob zwischen 15 und 25 Grad).
Das heisst, du hast Bereiche (schräg nach vorn) die gar nicht erfasst werden.
Besser wärs, zwei Sensoren schräg nach vorn zu richten, und zwar so, dass sich beide in der Mitte "überlappen", dann kannst du feststellen ob genau vor dem Roboter alles frei ist (sogar ziemlich genau, da du beide Sensoren auswerten kannst) und auch, in welche Richtung mehr Platz ist.
Der Haken dabei ist dann: das braucht Zeit, da du die Sensoren nacheinander permanent abfragen musst. Da kann man noch bisschen tricksen: bei Gradeausfahrt nur einen benutzen, und _wenn_ der nen Ping bekommt, den anderen fragen, ob er auch was sieht.
Wenn man das gut justiert (so dass sich die Erfassungsbereiche grad um die Breite des Roboters überlappen) dürfte man ziemlich gut auch schmale Lücken noch "vermessen" können. Man muss ja nicht die komplette Reichweite benutzen (die Dinger reagieren auf bis zu 5m).
Grüssle, Sly
..dem Inschenör ist nix zu schwör..
Danke dir Rebenauge für deinen Beitrag, aber für die Schule reicht es erstmal auch so. Und zudem habe ich tricksen müssen und deswegen sind alle digitalen Pins des Arduinos belegt, da ich auch Pins benutzt habe, um die Sensoren mit Strom zu versorgen und nicht mit Stromumwandler und solchem kram arbeiten zu müssen.
Lesezeichen