Phase 2 2021/22
Abschlussbedingungen
In diesem Buch sind die Teamergebnisse der FST21 in Phase 2 dokumentiert.
Der Ultraschallsensor verwendet Sonar, um die Entfernung zu einem Objekt zu bestimmen. Folgendes passiert:
Der „Trig“ - Pin wird für 10 Millisekunden mit einem HIGH-Signal beschaltet, eine Messung wird initiiert. Aus dem Transmitter wird ein Ultraschallton entsendet. Der Ultraschall trifft auf ein Objekt und wird in den Receiver reflektiert. Bei Empfang durch den Receiver wird der Echo-Pin mit einem HIGH-Signal beschaltet. Die verstrichene Zeit von Senden zu empfangen wird im ESP32 erfasst und im Anschluss verarbeitet, um einen Abstand zum Objekt zu bestimmen.
Hier (Datei "Vorlage_Ultraschallsensor.ino") ist ein Programmbeispiel für die Ausführung dieser Aufgabe:
#define echo 15 //Anschluss ECHO vom HC-SR04 wurde für PIN 15 festgelegt
#define trig 16 //Anschluss TRIG vom HC-SR04 wurde für PIN 16 festgelegt
int distanz1 = 0; //Entfernung als globale Variable anlegen
//Funktion zur Messung der Entfernung über den Ultraschallsensor HC-SR04 (mit Echo und Trigger), Ausgabe in mm
int EntfernungsMessung1 (){
long distanz1 = 0; //Deklaration der Variablen "distanz1"
long zeitx1 = 0; //Deklaration der Variablen "zeitx"
digitalWrite (trig, LOW); //setzt den Zustand von trig auf LOW
delayMicroseconds(3); //setzt eine Pause/Unterbrechung von 3 Mikrosekunden
noInterrupts(); //verhindert eine Unterbrechung des Vorgangs
digitalWrite(trig, HIGH); //setzt den Zustand von trig auf HIGH
delayMicroseconds(10); //setzt eine Pause/Unterbrechung von 10 Mikrosekunden
digitalWrite(trig, LOW); //setzt den Zustand von trig auf LOW
zeitx1 = pulseIn(echo, HIGH);
interrupts(); //lässt Vorgangsunterbrechungen erneut zu
zeitx1 = (((zeitx1 * 344)/1000)/2); //vererrechnet den Wert der Zeit mit der Schallgeschwindigkeit nach der Raumtemperaur,
//dem Faktor für die Kommastelle und halbiert diesen wegen der doppelten strecke (hin+zurück)
distanz1 = zeitx1;
Serial.print("distanz1 Wert01:"); //Ausgabe des Wertetyps in den seriellen Monitor
Serial.print(distanz1); //Ausgabe des Wertes in den serieleln Monitor
Serial.println("");
delay (200); //Verzögerung zur nächsten Messung
return (distanz1); //Ausgabe des Wertes für die Entfernung
}
void setup()
{
pinMode(trig, OUTPUT); //Legt den Eingangstyp des angegebenen PINs fest
pinMode(echo, INPUT); //Legt den Eingangstyp des angegebenen PINs fest
}
void loop()
{
EntfernungsMessung1 ();
}
#define trig 16 //Anschluss TRIG vom HC-SR04 wurde für PIN 16 festgelegt
int distanz1 = 0; //Entfernung als globale Variable anlegen
//Funktion zur Messung der Entfernung über den Ultraschallsensor HC-SR04 (mit Echo und Trigger), Ausgabe in mm
int EntfernungsMessung1 (){
long distanz1 = 0; //Deklaration der Variablen "distanz1"
long zeitx1 = 0; //Deklaration der Variablen "zeitx"
digitalWrite (trig, LOW); //setzt den Zustand von trig auf LOW
delayMicroseconds(3); //setzt eine Pause/Unterbrechung von 3 Mikrosekunden
noInterrupts(); //verhindert eine Unterbrechung des Vorgangs
digitalWrite(trig, HIGH); //setzt den Zustand von trig auf HIGH
delayMicroseconds(10); //setzt eine Pause/Unterbrechung von 10 Mikrosekunden
digitalWrite(trig, LOW); //setzt den Zustand von trig auf LOW
zeitx1 = pulseIn(echo, HIGH);
interrupts(); //lässt Vorgangsunterbrechungen erneut zu
zeitx1 = (((zeitx1 * 344)/1000)/2); //vererrechnet den Wert der Zeit mit der Schallgeschwindigkeit nach der Raumtemperaur,
//dem Faktor für die Kommastelle und halbiert diesen wegen der doppelten strecke (hin+zurück)
distanz1 = zeitx1;
Serial.print("distanz1 Wert01:"); //Ausgabe des Wertetyps in den seriellen Monitor
Serial.print(distanz1); //Ausgabe des Wertes in den serieleln Monitor
Serial.println("");
delay (200); //Verzögerung zur nächsten Messung
return (distanz1); //Ausgabe des Wertes für die Entfernung
}
void setup()
{
pinMode(trig, OUTPUT); //Legt den Eingangstyp des angegebenen PINs fest
pinMode(echo, INPUT); //Legt den Eingangstyp des angegebenen PINs fest
}
void loop()
{
EntfernungsMessung1 ();
}