Elektroakustischer Schalter

Bei diesem Projekt handelt es sich um einen Klatschschalter, der über einen Sound (Klatschen), der in einem gewissen Zeitraum zweimal hintereinander von einem Mikrofon aufgenommen wird, einen elektronischen Schalter betätigt. Dieser Zeitraum wird in der Programmierung festgelegt und kann beliebig geändert werden, je größer allerdings dieser Zeitraum ist desto größer ist die Wahrscheinlichkeit. dass der Schalter durch Geräusche in der Umgebung ausgelöst wird. Dies will man natürlich vermeiden.

Der Effektivradius liegt bei ca. 2-3m. Er ist abhängig von der Umgebungslautstärke und der Einstellung des Potentiometers an der Verstärkerschaltung des Mikrofons.

In der nachfolgenden Arbeit werden nun die einzelnen Komponenten näher beleuchtet und am Schluss der Aufbau erläutert.

Soundsensor         

Der Soundsensor ist ein fertiges Bauteil, das aus mehreren Komponenten besteht: ein Mikrofon, ein Potentiometer zur Empfindlichkeitseinstellung und einem IC LM393 (Dual Differential Comparator).

Mikrofon
Ein Kondensatormikrofon ist ein elektroakustischer Wandler, der Schall in ein entsprechendes elektrisches Signal wandelt.
Das Mikrofon nutzt die durch Abstandsänderungen zwischen der (beweglichen) Membran und der Gegenelektrode hervorgerufenen Kapazitätsänderungen, um je nach Ausführung Schalldruck oder Schallschnelle in ein elektrisches Signal umzuwandeln.

LM393 Dual Differential Comparator

Der LM393 ist ein sehr häufig verwendeter OP und wird vielfach eingesetzt, wenn es darum geht, analoge Spannungen zu vergleichen und Schaltvorgänge auszulösen.
Der Baustein kann mit einfacher und doppelter (+/-) Spannungsversorgung betrieben werden. In den folgenden Schaltungen wird der LM393 mit einer einfachen Spannungsversorgung von +5V betrieben.

Da der LM393 einen Open-Collector-Ausgang besitzt, hat er eine etwas andere Außenbeschaltung. Der Ausgang muss mit einem Pull-up-Widerstand (R3 mit 3...10kOhm) auf +VCC gezogen werden.

Die Grundschaltung ist ein nicht invertierender Komparator (ohne Hysterese) und ohne Last am Ausgang. Der Komparator vergleicht zwei Eingangsspannungen (Vin und Vref) miteinander. Vref ist die Referenzspannung, welche z.B. mit einem Spannungsteiler frei gewählt werden kann.

In dem Moment, wo die Eingangsspannung Vin die Referenzspannung Vref übersteigt, kippt der Ausgang auf das positive Maximum VCC. Wird die Referenzspannung wieder unterschritten, kippt der Ausgang auf sein negatives Maximum, in diesem Fall 0V zurück.

Wird ein Lastwiderstand am Ausgang angeschlossen, wird die Höhe der Ausgangsspannung durch das Verhältnis R3 / RLast bestimmt. Ist der Lastwiderstand z.B. gleich groß wie der Pull-up-Widerstand R3, so halbiert sich die Ausgangsspannung. Um eine möglichst hohe Ausgangsspannung nahe +VCC zu erhalten, muss der Lastwiderstand hochohmig gegenüber dem Wert von R3 gewählt werden.

Programmierung und Funktion

[code]

int soundSensor = 4;                                                                      //Digitaleingang Sensor zu Arduino
int relay = 5;                                                                                   //Digitalausgang Steuerung des Relays
int claps = 0;                                                                                   //definierung des Startpunktes
long detectionSpanInitial = 0;                                                        //Einspeicherung eines Wertes
long detectionSpan = 0;
boolean lightState = false;                                                             //definierung eines Zustands
 
void setup() {
  pinMode(soundSensor, INPUT);
  pinMode(relay, OUTPUT);
 
}
 
void loop() {
  int sensorState = digitalRead(soundSensor);
  if (sensorState == 0)                                                                     //if, was wenn
  {
    if (claps == 0)                                                                              //Startpunkt Klatschen= 0
    {
      detectionSpanInitial = detectionSpan = millis();  
//millis, zählen der Zeit ab wann das board läuft
     
 claps++;
    }
    else if (claps > 0 && millis()-detectionSpan >= 50)                
//wenn Klatschen > o dann warten bis Zeitspanne zu ende
  
 {
      detectionSpan = millis();
      claps++;                                                                                   //+1 Klatschen
    }
  }
 
  if (millis()-detectionSpanInitial >= 400)                                        // wenn innerhalb Zeitspanne
  {
    if (claps == 2)                                                                            //Klatschen= 2
    {
      if (!lightState)                                                                          //prüfen ob relay High or Low
        {                                                                                            //(Licht an oder aus)
          lightState = true;                   
          digitalWrite(relay, HIGH);                                                    //Änderung des Zustandes
        }                                     
        else if (lightState)                                                      //wenn klatschen nict=2 innerhalb Zeitspanne
        {
          lightState = false;                                                   //keine änderung des Zustandes
          digitalWrite(relay, LOW);
        }
    }
    claps = 0;                                                                     //zurücksetzen auf KLatschen = 0
  }
}
[/code]