Hallo Leute,
ich bin mittlerweile mit meinem Schulprojekt fertig und es ist relativ gut gelaufen. Dafür danke ich euch vielmals für eure Hilfe. Zu Hause bin ich aber noch sehr an dem Projekt interessiert.
(Wer es nicht mitbekommen hat, wir mussten ein Schulprojekt erstellen, in dem ein Auto nach vorne fährt und, wenn es, mithilfe eines Ultraschallsensors, einen gewissen Abstand zur Wand erkennt, soll es nach hinten fahren können.)
Zu Hause möchte ich das Projekt für mich selber weiterentwickeln. Das heißt ich möchte zwei Ultraschallsensoren benutzen und einen Piezo der einen Piepston von sich gibt, wenn er nach hinten fährt. Ich habe es hinbekommen, dass die beiden Ultraschallsensoren "gleichzeitig" einen Wert ausgeben und dieser im Seriellen Monitor angezeigt wird.
Mein Problem liegt jetzt daran, dass der 12V Gleichstrommotor sich nicht nach hinten drehen will, wenn der vordere Sensor einen kleineren Abstand als 15cm erkennt; genauso andersherum. Ebenfalls habe ich es nicht geschafft, dass der Piezo während dem nach hinten Fahren einen Piepston von sich gibt. Bzw. weiß ich nicht wie ich mit dem Code anfangen soll, welchen ich auch jetzt im unteren eingeblendeten Code nicht mit reingeschrieben habe.
Es wäre sehr nett, wenn Ihr mir weiterhelfen könntet und ich hätte sehr Lust dieses private Projekt umzusetzten. Ich danke euch schonmal vielmals im Voraus.
(Falls dieses Thema im englisch-sprachigen Bereich gelandet sein sollte, tut es mir sehr leid. Ich weiß noch nicht wie das alles hier funktioniert, da ich relativ neu hier bin. Sowas ähnliches kam nämlich schonmal bei mir vor, wobei sich Leute beschwert haben. Also Entschuldigung schon im Voraus, falls dies der Fall sein sollte.)
(PS: Ich hab die Kommentare bzw die Erklärungen noch nicht an diesem neuen Code angepasst, also bitte nicht wundern )
Mit freundlichen Grüßen
Code:
|
|
|
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 trigger2 = 8;
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)
int echo2 = 9;
unsigned long entfernung = 0; //erstellt eine Ganzzahl-Variable mit dem Namen "entfernung" und dem Anfangswert 0
unsigned long entfernung2 = 0;
unsigned long dauer = 0; //erstellt eine Ganzzahl-Variable mit dem Namen "dauer" und dem Anfangswert 0
unsigned long dauer2 = 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)
const byte geschwindigkeit1 = 175; //erstellt eine Konstante (= der Wert kann nicht mehr innerhalb des Codes verändert werden) mit dem Namen "geschwindigkeit1", welcher den Wert 175 erhält (= 175 steht für die Geschwindkeit mit dem der Motor nach vorne läuft)
const byte geschwindigkeit2 = 140; //erstellt eine Konstante (= der Wert kann nicht mehr innerhalb des Codes verändert werden) 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 "piepen" 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 mehr ausgeben
delay(800); //es soll für 0,8 Sekunden kein Ton mehr ausgegeben werden
}
void motorStop(){ //mithilfe eines weiteren void-Befehls wird ein neuer Befehl mit dem Namen "motorStop" erstellt: ↓
analogWrite(motorPin1, 0); //dabei soll der "motorPin1" stoppen und nicht weiterlaufen
analogWrite(motorPin2, 0); //ebenfalls soll der "motorPin2" stoppen und nicht weiterlaufen
}
void ultra1(){
digitalWrite(trigger, LOW); //Der pin "trigger" wird Low geschaltet (= gibt kein Signal von sich aus)
delayMicroseconds(10); //Danach gibt es eine Verzögerung von 10 Millisekunden
digitalWrite(trigger, HIGH); //Der Pin "trigger" wird auf High geschaltet (= gibt ein Signal von sich aus)
delayMicroseconds(10); //Danach gibt es eine Verzögerung von 10 Millisekunden
digitalWrite(trigger, LOW); //Der pin "trigger" wird Low geschaltet (= gibt kein Signal von sich aus)
dauer = pulseIn(echo, HIGH); //Der Ganzzahl-Variable "dauer" wird festgelegt, was sie "tun" soll. Sie misst die Zeit am Pin "echo" seit Start des Codes, da dieser lediglich die Zeit zwischen dem Aussenden und der Rückkehr der Schallwelle des Ultraschallsensors misst
entfernung = (dauer/2) * 0.03432; //Der Ganzzahl-Variable "entfernung" wird festgelegt, was sie "tun" soll. Die "dauer" soll durch zwei geteilt werden, da man nur einer der zurückgelegten Strecken herausfinden möchte, und multipliziert sie mit der Geschwindigkeit des Schalls (= 343,2 m/s)
Serial.print(entfernung); //Im Seriellen-Monitor soll dann die "entfernung" ausgegeben werden
Serial.println("cm Sensor 1");
}
void ultra2(){
digitalWrite(trigger2, LOW); //Der pin "trigger" wird Low geschaltet (= gibt kein Signal von sich aus)
delayMicroseconds(10); //Danach gibt es eine Verzögerung von 10 Millisekunden
digitalWrite(trigger2, HIGH); //Der Pin "trigger" wird auf High geschaltet (= gibt ein Signal von sich aus)
delayMicroseconds(10); //Danach gibt es eine Verzögerung von 10 Millisekunden
digitalWrite(trigger2, LOW); //Der pin "trigger" wird Low geschaltet (= gibt kein Signal von sich aus)
dauer2 = pulseIn(echo2, HIGH); //Der Ganzzahl-Variable "dauer" wird festgelegt, was sie "tun" soll. Sie misst die Zeit am Pin "echo" seit Start des Codes, da dieser lediglich die Zeit zwischen dem Aussenden und der Rückkehr der Schallwelle des Ultraschallsensors misst
entfernung2 = (dauer2/2) * 0.03432; //Der Ganzzahl-Variable "entfernung" wird festgelegt, was sie "tun" soll. Die "dauer" soll durch zwei geteilt werden, da man nur einer der zurückgelegten Strecken herausfinden möchte, und multipliziert sie mit der Geschwindigkeit des Schalls (= 343,2 m/s)
Serial.print(entfernung2); //Im Seriellen-Monitor soll dann die "entfernung" ausgegeben werden
Serial.println("cm Sensor 2");
}
void setup() { //Das "void setup()" verläuft im ganzen Code nur einmal am Anfang
pinMode(trigger, OUTPUT); //Der Pin "trigger" (der Pin wurde beim Erstellen der Variablen angegeben) soll ein Output (= gibt elektrische Signale aus) von sich geben
pinMode(trigger2, OUTPUT);
pinMode(echo, INPUT); //Der Pin "echo" (der Pin wurde beim Erstellen der Variablen angegeben) interagiert hier als Input (= nimmt elektrische Signale auf)
pinMode(echo2, INPUT);
pinMode(piezo, OUTPUT); //Der Pin "piezo" (der Pin wurde beim Erstellen der Variablen angegeben) soll ein Output (= gibt elektrische Signale aus) von sich geben
pinMode(motorPin1, OUTPUT); //Der Pin "motorPin1" (der Pin wurde beim Erstellen der Variablen angegeben) soll ein Output (= gibt elektrische Signale aus) von sich geben
pinMode(motorPin2, OUTPUT); //Der Pin "motorPin2" (der Pin wurde beim Erstellen der Variablen angegeben) soll ein Output (= gibt elektrische Signale aus) von sich geben
pinMode(led, OUTPUT); //Der Pin "led" (der Pin wurde beim Erstellen der Variablen angegeben) soll ein Output (= gibt elektrische Signale aus) von sich geben
digitalWrite(led, HIGH); //Die LED soll ganz Anfang des Codes auf High geschaltet werden. Somit leuchtet die LED, solange der Programmcode aktiv ist
Serial.begin(9600); //Der Serielle-Monitor wird angesteuert
}
void loop() { //Der Code im "void loop()" wird ständig wiederholt, solange alle Befehle durchlaufen sind
ultra1();
ultra2();
if (entfernung <= 15) { //falls die "entfernung" größer als 50cm ist, soll das passieren: ↓
analogWrite(motorPin1, geschwindigkeit2); //Der Pin "motorpin1" wird auf Low geschaltet (= gibt kein elektrisches Signal von sich aus)
analogWrite(motorPin2, 0); //Der Pin "motorPin2" soll mit der Signalstärke "geschwndigkeit1" (= 175) laufen
} //Der Schulbus fährt nach vorne
if (entfernung <= 15) { //falls die "entfernung" größer als 50cm ist, soll das passieren: ↓
analogWrite(motorPin1, 0); //Der Pin "motorpin1" wird auf Low geschaltet (= gibt kein elektrisches Signal von sich aus)
analogWrite(motorPin2, geschwindigkeit1); //Der Pin "motorPin2" soll mit der Signalstärke "geschwndigkeit1" (= 175) laufen
}
}