Hey, haben derzeit ein Projekt in der Schule, in welchem wir ein Auto bauen und programmieren sollen. Es soll vorwärts und rückwärts fahren können. Wenn ein Gegenstand vorne im Weg steht soll es rückwärts fahren und vice versa. Es wird mit einer 9V batterie betrieben und die Motoren sind an einer H- Brücke angeschlossen. Der Zeit ist das Problem, dass es "falsche" Messungen gibt und der Motor zu spät oder garnicht aufhört zu rotieren. Würde mich sehr über Verbessurungsvorschläge und Tipps freuen. Hier der Code:
//Ultraschallsensor 1
int trigger1=13;
int echo1=12;
long dauer1=0;
long entfernung1=0;
//Ultraschallsensor 2
int trigger2 = 11;
int echo2 = 4;
long dauer2=0;
long entfernung2=0;
//Ultraschallsensor 3
int trigger3 = 1;
int echo3 = 2;
long dauer3=0;
long entfernung3=0;
// Gleichstrommotor 1
int GSM1 = 10;
int in1 = 9;
int in2 = 8;
// Gleichstrommotor 2
int GSM2 = 5;
int in3 = 7;
int in4 = 6;
void setup()
{
Serial.begin(9600);
pinMode(GSM1, OUTPUT);
pinMode(GSM2, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
pinMode(trigger1, OUTPUT);
pinMode(echo1, INPUT);
pinMode(trigger2, OUTPUT);
pinMode(echo2, INPUT);
pinMode(trigger3, OUTPUT);
pinMode(echo3, INPUT);
}
void loop()
{
messung1();
messung2();
messung3();
vfahren();
ruefahren();
}
void vfahren()
{
if( entfernung1 > 70) {
digitalWrite(in1, LOW); // Motor 1 beginnt zu rotieren
digitalWrite(in2, HIGH);
analogWrite(GSM1, 200); // Motor 1 soll mit der Geschwindigkeit "200" (max. 255) rotieren
digitalWrite(in3, HIGH); // Motor 2 beginnt zu rotieren
digitalWrite(in4, LOW);
analogWrite(GSM2, 210); // Motor 2 soll ebenfalls mit der Geschwindigkeit "200"(max.255) rotieren
delay(1000);
}
else{
digitalWrite(in1, HIGH); // Motor 1 beginnt zu rotieren
digitalWrite(in2, LOW);
analogWrite(GSM1, 200); // Motor 1 soll mit der Geschwindigkeit "200" (max. 255) rotieren
digitalWrite(in3, LOW); // Motor 2 beginnt zu rotieren
digitalWrite(in4, HIGH);
analogWrite(GSM2, 210); // Motor 2 soll ebenfalls mit der Geschwindigkeit "200" (max. 255) rotieren
delay(1000);
}
}
void ruefahren()
{
if (entfernung2 > 70) {
digitalWrite(in1, HIGH); // Motor 1 beginnt zu rotieren
digitalWrite(in2, LOW);
analogWrite(GSM1, 200); // Motor 1 soll mit der Geschwindigkeit "200" (max. 255) rotieren
digitalWrite(in3, LOW); // Motor 2 beginnt zu rotieren
digitalWrite(in4, HIGH);
analogWrite(GSM2, 210); // Motor 2 soll ebenfalls mit der Geschwindigkeit "200" (max. 255) rotieren
delay(1000);
}
else {
digitalWrite(in1, LOW); // Motor 1 beginnt zu rotieren
digitalWrite(in2, HIGH);
analogWrite(GSM1, 200); // Motor 1 soll mit der Geschwindigkeit "200" (max. 255) rotieren
digitalWrite(in3, HIGH); // Motor 2 beginnt zu rotieren
digitalWrite(in4, LOW);
analogWrite(GSM2, 210); // Motor 2 soll ebenfalls mit der Geschwindigkeit "200" (max. 255) rotieren
delay(1000);
}
}
void messung1()
{
//Sender kurz ausschalten um Störungen des Signal zu vermeiden
digitalWrite(trigger1, LOW);
delay(5);
// Signal für 10 Micrsekunden senden, danach wieder ausschalten
digitalWrite(trigger1, HIGH);
delayMicroseconds(10);
digitalWrite(trigger1, LOW);
// pulseIn -> Zeit messen, bis das Signal zurückkommt
dauer1 = pulseIn(echo1, HIGH);
// Entfernung in cm berechnen
// Zeit/2 -> nur eine Strecke
entfernung1 = (dauer1 / 2) * 0.03432;
delay(100);
// nur Entfernungen < 1000 anzeigen
if (entfernung1 < 1000)
{
// Messdaten anzeigen
Serial.print("Vorwärts in cm: ");
Serial.println(entfernung1 );
}
}
void messung2()
{
//Sender kurz ausschalten um Störungen des Signal zu vermeiden
digitalWrite(trigger2, LOW);
delay(5);
// Signal für 10 Micrsekunden senden, danach wieder ausschalten
digitalWrite(trigger2, HIGH);
delayMicroseconds(10);
digitalWrite(trigger2, LOW);
// pulseIn -> Zeit messen, bis das Signal zurückkommt
dauer2 = pulseIn(echo2, HIGH);
// Entfernung in cm berechnen
// Zeit/2 -> nur eine Strecke
entfernung2 = (dauer2 / 2) * 0.03432;
delay(100);
// nur Entfernungen < 1000 anzeigen
if (entfernung2 < 1000)
{
// Messdaten anzeigen
Serial.print("Hinten in cm: ");
Serial.println(entfernung2);
}
}
void messung3()
{
//Sender kurz ausschalten um Störungen des Signal zu vermeiden
digitalWrite(trigger3, LOW);
delay(5);
// Signal für 10 Micrsekunden senden, danach wieder ausschalten
digitalWrite(trigger3, HIGH);
delayMicroseconds(10);
digitalWrite(trigger3, LOW);
// pulseIn -> Zeit messen, bis das Signal zurückkommt
dauer3 = pulseIn(echo3, HIGH);
// Entfernung in cm berechnen
// Zeit/2 -> nur eine Strecke
entfernung3 = (dauer3 / 2) * 0.03432;
delay(10);
// nur Entfernungen < 1000 anzeigen
if (entfernung3 < 1000)
{
// Messdaten anzeigen
Serial.print("Seitlich in cm: ");
Serial.println(entfernung3);
}
}