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);
}
Last modified: Monday, 7 December 2020, 9:51 AM