Hi Leute,
Zurzeit müssen wir in der Schule ein Projekt erstellen, indem wir ein autonomes Auto bauen, welches nur nach vorne und hinten fahren soll. Zur Verfügung steht mir dabei:
- 1x Ultraschallsensor (man kann auch 2 benutzen)
- 1x Piezo
- 1x oder auch mehrere LEDs
- 1x Gleichstrommotor (12V)
- und optional kann man auch noch weitere Dinge benutzen.
Mein Problem lautet jetzt, dass der Piezo am Anfang kurz einen Ton von sich gibt und sich der Gleichstrommotor kurz nach hinten dreht, obwohl das eigentlich gar nicht passieren soll. Dies dauert nicht lange an, geschätzt 0,5 Sekunden, dennoch stört es mich und das soll nicht beim Starten des Autos passieren.
Ebenfalls soll das Auto, wenn es vor sich eine Wand oder sonstiges erkennt, nach hinten fahren. Dieses "nach hinten fahren", soll dann konstant bleiben und nicht, wenn der Sensor wieder einen größeren Abstand zur Wand erkennt, wieder nach vorne fahren. In dem Fall ist es egal ob das Auto hinten gegen eine Wand oder sonstiges knallt/stößt.
Nebenbei soll das Auto beim Fahren nach hinten eine Art Piepston von sich geben. Dies hat aber in meinem Fall sehr gut mit dem Piezo geklappt.
Vielen vielen Dank schonmal im Voraus. Ich hoffe jemand kann mir weiterhelfen.
Mit freundlichen Grüßen
int trigger = 7; //erstellt eine Variable mit dem Namen "trigger", welcher den Wert 7 erhält (= 7 steht für den Pin an dem der Trigger des Ultraschallsensors angeschlossen wird)
int echo = 6; //erstellt eine Variable mit dem Namen "echo", welcher den Wert 6 erhält (= 6 steht für den Pin an dem das Echo des Ultraschallsensors angeschlossen wird)
long dauer = 0; //erstellt eine Ganzzahlkonstant-Variable mit dem Namen "dauer" und dem Anfangswert 0
long entfernung = 0; //erstellt eine Ganzzahlkonstant-Variable mit dem Namen "entfernung" und dem Anfangswert 0
int piezo = 5; //erstellt eine Variable mit dem Namen "piezo", welcher den Wert 5 erhält (= 5 steht für den Pin an dem der Piezo angeschlossen wird)
int led = 4; //erstellt eine Variable mit dem Namen "led", welcher den Wert 4 erhält (= 4 steht für den Pin an dem die LED angeschlossen wird)
int motorPin1 = 10; //erstellt eine Variable mit dem Namen "motorPin1", welcher den Wert 10 erhält (= 10 steht für den Pin an dem der Minuspol des Motors angeschlossen wird)
int motorPin2 = 11; //erstellt eine Variable mit dem Namen "motorPin2", welcher den Wert 11 erhält (= 11 steht für den Pin an dem der Pluspol des Motors angeschlossen wird)
int geschwindigkeit1 = 175; //erstellt eine Variable mit dem Namen "geschwindigkeit1", welcher den Wert 175 erhält (= 175 steht für die Geschwindkeit mit dem der Motor nach vorne läuft)
int geschwindigkeit2 = 140; //erstellt eine Variable mit dem Namen "geschwindigkeit2", welcher den Wert 140 erhält (= 140 steht für die Geschwindkeit mit dem der Motor nach hinten läuft)
void piepen() { //mithilfe eines weiteren void-Befehls wird ein neuer Befehl mit dem Namen "piepsen" erstellt
tone(piezo, 988); //der Piezo soll den Ton h'' (988 = h'') abspielen
delay(400); //dieser Ton soll 0,4 Sekunden abgespielt werden
noTone(piezo); //nach der Verzögerung soll der Piezo keinen Ton ausgeben
delay(800); //es soll für 0,8 Sekunden kein Ton mehr ausgegeben werden
}
void setup() {
pinMode(trigger, OUTPUT);
pinMode(echo, INPUT);
pinMode(piezo, OUTPUT);
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
pinMode(led, OUTPUT);
digitalWrite(led, HIGH);
Serial.begin(9600);
}
void loop() {
digitalWrite(trigger, LOW);
delayMicroseconds(10);
digitalWrite(trigger, HIGH);
delayMicroseconds(10);
digitalWrite(trigger, LOW);
dauer = pulseIn(echo, HIGH);
entfernung = (dauer / 2) * 0.03432;
Serial.println(entfernung);
if (entfernung >= 15) {
analogWrite(motorPin1, 0);
analogWrite(motorPin2, geschwindigkeit1);
}
if (entfernung <= 15) {
analogWrite(motorPin1, geschwindigkeit2);
analogWrite(motorPin2, 0);
piepen();
}
}