Implementierung und Programmierung des passiven Summers
Damit wir den gemessenen Abstand nicht nur optisch anhand des 7- Segment Displays erkennen können, bauen wir einen sog. passiven Summer ein, der eine hörbare Frequenz von sich abgibt, sobald sich ein Objekt in der Nähe befindet.
Jedoch müssen wir zunächst klären wie überhaupt ein passiver Summer funktioniert.
Ein passiver Summer ist nichts anderes als ein Lautsprecher. Er besitzt jedoch im Gegensatz zum aktiven Summer keine interne Elektronik wie bspw. ein Oszillator, der eine eigene hörbare Frequenz erzeugt. Die Frequenz bzw. der Ton geht beim passiven Summer vom Ausgang, also vom Mikrocontroller aus. Dadurch können vom passiven Summer mehrere Töne und auch ganze Melodien erzeugt werden. Der aktive Summer kann im Gegensatz zum passiven Summer nur eine bestimmte hörbare Frequenz von sich abgeben. Des Weiteren besitzt der aktive Summer optisch gesehen unterschiedliche Ausgänge (eine kurze und eine lange Seite). Beim passiven Summer ist dies nicht der Fall. Aufgrund dessen, dass sich der aktive und passive Summer stark ähneln, müsst ihr dringend auf die Anschlüsse achten!
Abbildung: Vorderseite vom aktiven Summer (links) und passiven Summer (rechts)
Quelle: BBS2 Wolfsburg
Abbildung: Rückseite vom aktiven Summer (links) und passiven Summer (rechts)
Quelle: BBS2 Wolfsburg
Bevor wir mit dem Programmieren anfangen können müssen wir den passiven Summer auch mit dem richtigen PIN anschließen, damit er die Informationen vom ESP32 aufnehmen und die gewünschte hörbare Frequenz in einer bestimmten Sequenz von sich gibt.
Die folgenden Abbildungen zeigen wie der passive Summer richtig an den Mikrocontroller angeschlossen wird:
Anschlüsse:
Lila - GND
Braun - PIN 27
Abbildung: Fritzing-Anordnung Ultraschallsensor mit 7-Segemnt Display und passivem Summer
Quelle: BBS2 Wolfsburg
Diese Abbildung zeigt den Schaltplan für das Anschließen des passiven Summers:
Abbildung: Fritzing-Schaltplan Ultraschallsensor mit 7-Segemnt Display und passivem Summer
Quelle: BBS2 Wolfsburg
Wenn wir den passiven Summer richtig an den Microcontroller angeschlossen haben, können wir uns mit dem Programmcode beschäftigen.
Source Code:
#include <TM1637Display.h> // Bibliothek für die 7- Segment Anzeige
#define echo 25 //Anschluss ECHO vom HC-SR04 wurde für PIN 25 festgelegt
#define trig 33 //Anschluss TRIG vom HC-SR04 wurde für PIN 33 festgelegt
#define display_clk 16 //Anschluss CLK von der 7- Segment Anzeige wurde für PIN 16 festgelegt
#define display_dio 13 //Anschluss DIO von der 7- Segment Anzeige wurde für PIN 13 festgelegt
#define passiver_buzzer 27 //Der PIN für den passiven Summer wurde auf 27 festgelegt
//Entfernung als globale Variable anlegen
int entfernung = 0;
//Funktion zur Messung der Entfernung über den Ultraschallsensor HC-SR04 (mit Echo und Trigger), Einheit: cm
int getEntfernung()
{
long entfernung = 1;
long zeitx = 0;
digitalWrite (trig, LOW); //setzt den Zustand von trig auf LOW
delayMicroseconds(3); //setzt eine Pause/Unterbrechung von 3 Mikrosekunden
noInterrupts();
digitalWrite(trig, HIGH); //setzt den Zustand von trig auf HIGH
delayMicroseconds(10); //setzt eine Pause/Unterbrechung von 10 Mikrosekunden
digitalWrite(trig, LOW);
zeitx = pulseIn(echo, HIGH);
interrupts(); //unterbricht den Vorgang
zeitx = (zeitx / 2); //teilt die Zeit durch 2
entfernung = zeitx / 29.1; //teilt die Restzeit durch die Geschwindigkeit des Schalls
return (entfernung); //gibt die berechnete Entfernung zurück
}
// Funktion zur Tonsteuerung ---> mit geringer werdendem Abstand soll sich die Tonfrequenz höher werden
void sound(int entfernung)
{
// die Entfernungsabstände können beliebig angepasst werden
if ((entfernung <= 50) && (entfernung >= 25))
{
ledcWriteTone(1, 300);
delay(10);
}
else if ((entfernung <= 24) && (entfernung >= 15))
{
ledcWriteTone(1, 800);
delay(5);
}
else if ((entfernung <= 14) && (entfernung >= 6))
{
ledcWriteTone(1, 1300);
delay(2);
}
else if (entfernung <= 5)
{
ledcWriteTone(1, 1700);
delay(1);
}
else
{
ledcWriteTone(1, 0);
delay(1);
}
}
TM1637Display display(display_clk, display_dio);
void setup()
{
pinMode(trig, OUTPUT); //
pinMode(echo, INPUT); //Legt den Eingangstyp des angegebenen PINs fest
pinMode(passiver_buzzer, OUTPUT); //
}
void loop()
{
entfernung = getEntfernung();
sound(entfernung); //Aufruf der Funktion zum Ansteuern des passiven Buzzers
//Einstellungen für die 7 Segment Anzeige
display.setBrightness(7);
display.showNumberDec(entfernung);
delay(20);
}