- Erforderliche Materialien
- Sound Sensor funktioniert
- Messung der Audiofrequenz am Oszilloskop
- Pfeifendetektor Arduino Schaltplan
- Frequenzmessung mit Arduino
- Programmieren Sie Ihr Arduino zur Erkennung von Pfeifen
- Arduino Whistle Detector funktioniert
Als Kind war ich fasziniert von einem Spielzeugauto, das ausgelöst wird, wenn Sie in die Hände klatschen, und als ich groß war, fragte ich mich, ob wir damit auch Lichter und Ventilatoren in unserem Haus umschalten können. Es wäre cool, einfach meine Lüfter und Lichter einzuschalten, indem ich einfach in die Hände klatsche, anstatt mein faules Ich zur Schalttafel zu führen. Aber oft kommt es zu Fehlfunktionen, da diese Schaltung auf laute Umgebungsgeräusche wie ein lautes Radio oder den Rasenmäher meines Nachbarn reagiert. Obwohl das Bauen eines Klatschschalters auch ein lustiges Projekt ist.
Es war dann, als ich auf diese Pfeifenerkennungsmethode stieß, bei der die Schaltung nach Pfeifen erkennt. Eine Pfeife hat im Gegensatz zu anderen Tönen für eine bestimmte Dauer eine einheitliche Frequenz und kann daher von Sprache oder Musik unterschieden werden. In diesem Tutorial lernen wir, wie man Pfeifgeräusche erkennt, indem man den Schallsensor mit Arduino verbindet. Wenn eine Pfeife erkannt wird, schalten wir eine Wechselstromlampe über ein Relais um. Unterwegs lernen wir auch, wie Tonsignale vom Mikrofon empfangen werden und wie die Frequenz mit Arduino gemessen wird. Klingt interessant, also fangen wir mit dem Arduino-basierten Home Automation Project an.
Erforderliche Materialien
- Arduino UNO
- Schallsensormodul
- Relaismodul
- AC Lampe
- Kabel anschließen
- Steckbrett
Sound Sensor funktioniert
Bevor wir uns mit der Hardwareverbindung und dem Code für dieses Hausautomationsprojekt befassen, werfen wir einen Blick auf den Geräuschsensor. Der in diesem Modul verwendete Schallsensor ist unten dargestellt. Das Funktionsprinzip der meisten auf dem Markt erhältlichen Schallsensoren ist ähnlich, obwohl sich das Erscheinungsbild möglicherweise etwas ändert.
Wie wir wissen, ist die primitive Komponente in einem Schallsensor das Mikrofon. Ein Mikrofon ist eine Art Wandler, der Schallwellen (akustische Energie) in elektrische Energie umwandelt. Grundsätzlich vibriert die Membran im Mikrofon zu den Schallwellen in der Atmosphäre, die an ihrem Ausgangsstift ein elektrisches Signal erzeugen. Diese Signale haben jedoch eine sehr geringe Größe (mV) und können daher nicht direkt von einem Mikrocontroller wie Arduino verarbeitet werden. Standardmäßig sind Tonsignale analoger Natur, daher ist die Ausgabe des Mikrofons eine Sinuswelle mit variabler Frequenz. Mikrocontroller sind jedoch digitale Geräte und arbeiten daher besser mit Rechteckwellen.
Um diese Sinuswellen mit niedrigem Signal zu verstärken und sie in Rechteckwellen umzuwandeln, verwendet das Modul das integrierte LM393-Komparatormodul wie oben gezeigt. Der Niederspannungs-Audioausgang des Mikrofons wird über einen Verstärkertransistor an einen Pin des Komparators geliefert, während am anderen Pin eine Referenzspannung unter Verwendung einer Spannungsteilerschaltung mit einem Potentiometer eingestellt wird. Wenn die Audioausgangsspannung vom Mikrofon die voreingestellte Spannung überschreitet, geht der Komparator mit 5 V (Betriebsspannung) hoch, andernfalls bleibt der Komparator bei 0 V niedrig. Auf diese Weise kann eine Sinuswelle mit niedrigem Signal in eine Rechteckwelle mit hoher Spannung (5 V) umgewandelt werden. Der folgende Oszilloskop-Schnappschuss zeigt dasselbe, wobei die gelbe Welle die Sinuswelle mit niedrigem Signal und die blaue die Rechteckwelle ist. DasDie Empfindlichkeit kann durch Variieren des Potentiometers am Modul gesteuert werden.
Messung der Audiofrequenz am Oszilloskop
Dieses Schallsensormodul wandelt die Schallwellen in der Atmosphäre in Rechteckwellen um, deren Frequenz der Frequenz der Schallwellen entspricht. Durch Messen der Frequenz der Rechteckwelle können wir also die Frequenz der Schallsignale in der Atmosphäre ermitteln. Um sicherzustellen, dass die Dinge so funktionieren, wie sie sollen, habe ich den Schallsensor an mein Zielfernrohr angeschlossen, um sein Ausgangssignal zu prüfen, wie im folgenden Video gezeigt.
Ich habe den Messmodus meines Oszilloskops aktiviert, um die Frequenz zu messen, und eine Android-Anwendung (Frequency Sound Generator) aus dem Play Store verwendet, um Tonsignale mit bekannter Frequenz zu generieren. Wie Sie im obigen GID sehen können, konnte das Oszilloskop Tonsignale mit einer recht anständigen Genauigkeit messen. Der im Oszilloskop angezeigte Frequenzwert liegt sehr nahe an dem auf meinem Telefon angezeigten Wert. Nachdem wir nun wissen, dass das Modul funktioniert, können Sie den Soundsensor mit Arduino verbinden.
Pfeifendetektor Arduino Schaltplan
Das vollständige Schaltbild für die Schaltung des Arduino Whistle Detector Switch mit Sound Sensor ist unten dargestellt. Die Schaltung wurde mit der Fritzing-Software gezeichnet.
Der Soundsensor und das Relaismodul werden über den 5-V-Pin des Arduino mit Strom versorgt. Der Ausgangspin des Soundsensors ist mit dem digitalen Pin 8 des Arduino verbunden. Dies liegt an der Timer-Eigenschaft dieses Pins. Weitere Informationen hierzu finden Sie im Programmierabschnitt. Das Relaismodul wird über Pin 13 ausgelöst, der auch mit der eingebauten LED auf der UNO-Karte verbunden ist.
Auf der AC-Versorgungsseite ist das Neutralleiterkabel direkt mit dem Common (C) -Pin des Relaismoduls verbunden, während die Phase über die AC-Last (Glühbirne) mit dem Normal Open (NO) -Pin des Relais verbunden ist. Auf diese Weise wird beim Auslösen des Relais der NO-Pin mit dem C-Pin verbunden und somit leuchtet die Glühbirne. Andernfalls bleibt der Blub ausgeschaltet. Sobald die Verbindungen hergestellt waren, sah meine Hardware ungefähr so aus.
Warnung: Das Arbeiten mit Wechselstromkreisen kann gefährlich werden. Seien Sie vorsichtig beim Umgang mit stromführenden Kabeln und vermeiden Sie Kurzschlüsse. Für Personen, die keine Erfahrung mit Elektronik haben, wird ein Leistungsschalter oder eine Aufsicht durch Erwachsene empfohlen. Du wurdest gewarnt!!
Frequenzmessung mit Arduino
Ähnlich wie in unserem Bereich, in dem die Frequenz der eingehenden Rechteckwellen gelesen wird, müssen wir Arduino programmieren, um die Frequenz zu berechnen. Wie das geht, haben wir bereits in unserem Tutorial zum Frequenzzähler mit der Puls-in-Funktion gelernt. In diesem Tutorial verwenden wir jedoch die Freqmeasure-Bibliothek, um die Häufigkeit zu messen und genaue Ergebnisse zu erhalten. Diese Bibliothek verwendet den internen Timer-Interrupt an Pin 8, um zu messen, wie lange ein Impuls eingeschaltet bleibt. Sobald die Zeit gemessen ist, können wir die Frequenz mit den Formeln F = 1 / T berechnen. Da wir die Bibliothek jedoch direkt verwenden, müssen wir uns nicht mit den Registerdetails und der Berechnung der Frequenzmessung befassen. Die Bibliothek kann über den folgenden Link heruntergeladen werden:
- Frequenzmessbibliothek von pjrc
Über den obigen Link wird eine Zip-Datei heruntergeladen. Sie können diese Zip-Datei dann zu Ihrer Arduino IDE hinzufügen, indem Sie dem Pfad Skizze -> Bibliothek einschließen ->.ZIP-Bibliothek hinzufügen folgen.
Hinweis: Durch die Verwendung der Bibliothek wird die analogWrite- Funktionalität an Pin 9 und 10 an UNOdeaktiviert,da der Timer von dieser Bibliothek belegt wird. Auch diese Stifte ändern sich, wenn andere Platinen verwendet werden.
Programmieren Sie Ihr Arduino zur Erkennung von Pfeifen
Das vollständige Programm mit einem Demonstrationsvideo finden Sie unten auf dieser Seite. In dieser Überschrift werde ich das Programm erklären, indem ich es in kleine Schnipsel zerlege.
Wie immer beginnen wir das Programm, indem wir die erforderlichen Bibliotheken einbeziehen und die erforderlichen Variablen deklarieren. Stellen Sie sicher, dass Sie die FreqMeasure.h- Bibliothek bereits hinzugefügt haben, wie in der obigen Überschrift erläutert. Der variable Zustand stellt den Zustand der LED dar und die Variablen Frequenz und Kontinuität werden verwendet, um die gemessene Frequenz bzw. ihre Kontinuität auszugeben.
#einschließen
Innerhalb der Void-Setup- Funktion starten wir den seriellen Monitor mit einer Baudrate von 9600 zum Debuggen. Verwenden Sie dann die Funktion FreqMeasure.begin () , um den Pin 8 zum Messen der Frequenz zu initialisieren. Wir erklären auch, dass Pin 13 (LED_BUILTIN) ausgegeben wird.
void setup () { Serial.begin (9600); FreqMeasure.begin (); // Misst standardmäßig an Pin 8 pinMode (LED_BUILTIN, OUTPUT); }}
Innerhalb der Endlosschleife hören wir weiterhin Pin 8 mit der Funktion FreqMeasure.available (). Wenn ein Signal eingeht, messen wir die Frequenz mit FreqMeasure.read (). Um Fehler aufgrund von Rauschen zu vermeiden, messen wir 100 Proben und nehmen einen Durchschnitt davon. Der Code, um dasselbe zu tun, ist unten gezeigt.
if (FreqMeasure.available ()) { // mehrere Lesevorgänge zusammen summieren sum = sum + FreqMeasure.read (); count = count + 1; if (Anzahl> 100) { Frequenz = FreqMeasure.countToFrequency (Summe / Anzahl); Serial.println (Frequenz); Summe = 0; count = 0; } }
Mit der Funktion Serial.println () können Sie hier den Wert der Frequenz für Ihre Pfeife überprüfen. In meinem Fall lag der empfangene Wert zwischen 1800 Hz und 2000 Hz. Die Pfeiffrequenz der meisten Menschen wird in diesen bestimmten Bereich fallen. Aber auch andere Geräusche wie Musik oder Stimme können unter diese Frequenz fallen. Um sie zu unterscheiden, werden wir sie auf Kontinuität überwachen. Wenn die Frequenz dreimal kontinuierlich ist, bestätigen wir, dass es sich um einen Pfeifton handelt. Wenn die Frequenz zwischen 1800 und 2000 liegt, erhöhen wir die Variable namens Kontinuität.
if (Frequenz> 1800 && Frequenz <2000) {Kontinuität ++; Serial.print ("Kontinuität ->"); Serial.println (Kontinuität); Frequenz = 0;}
Wenn der Wert der Kontinuität drei erreicht oder überschreitet, ändern wir den Status der LED, indem wir die Variable namens state umschalten. Wenn der Zustand bereits wahr ist, ändern wir ihn in falsch und umgekehrt.
if (Kontinuität> = 3 && state == false) {state = true; Kontinuität = 0; Serial.println ("Licht eingeschaltet"); delay (1000);} if (Kontinuität> = 3 && state == true) {state = false; Kontinuität = 0; Serial.println ("Licht ausgeschaltet"); Verzögerung (1000);}
Arduino Whistle Detector funktioniert
Sobald der Code und die Hardware fertig sind, können wir mit dem Testen beginnen. Stellen Sie sicher, dass die Verbindungen korrekt sind, und schalten Sie das Modul ein. Öffnen Sie den seriellen Monitor und beginnen Sie zu pfeifen. Sie können feststellen, dass der Wert der Kontinuität erhöht wird und die Lampe schließlich ein- oder ausgeschaltet wird. Ein Beispiel für eine Momentaufnahme meines seriellen Monitors ist unten dargestellt.
Wenn der serielle Monitor anzeigt, dass das Licht eingeschaltet ist, wird der Pin 13 hoch geschaltet und das Relais wird ausgelöst, um die Lampe einzuschalten. Ebenso wird die Lampe ausgeschaltet, wenn der serielle Monitor anzeigt, dass das Licht ausgeschaltet ist . Sobald Sie die Funktionsweise getestet haben, können Sie das Setup mit einem 12-V-Adapter mit Strom versorgen und Ihr AC-Haushaltsgerät mit einer Pfeife steuern.
Die vollständige Arbeitsweise dieses Projekts finden Sie im unten verlinkten Video. Ich hoffe, Sie haben das Tutorial verstanden und es genossen, etwas Neues zu lernen. Wenn Sie Probleme haben, Dinge zum Laufen zu bringen, lassen Sie sie im Kommentarbereich oder nutzen Sie unser Forum für andere technische Fragen.