Arduino-Projekt zur Geräuscherkennung und IR-Steuerung

In diesem Video werde ich ein Arduino-Projekt vorstellen, das die spannende Kombination von Geräuscherkennung und Infrarot (IR)-Steuerung zeigen soll. Das Projekt zielt darauf ab, ein IR-Gerät wie TV, Multimedia oder Beleuchtungsmittel, mithilfe von Geräuschen zu steuern und hat sowohl praktische als auch kreative Anwendungsmöglichkeiten.

Die Hauptkomponenten dieses Projekts sind ein Arduino-Board, ein Mikrofon, IR-LED und ein IR-Gerät. Hier in dem Video eine IR-Birne und ein Licht – Gadget.
Es wird in 4 Schritten gezeigt, wie die beiliegende Fernbedienung ausgelesen wird, wie dann diese Steuercodes testweise vom Arduino gesendet werden, dann wie ein Mikrofon steigende Lautstärke erkennt und zuletzt wird alles kombiniert.

Verwendete Hardware:
Arduino Uno R3/R4
Infrarot Receiver KY-022
Sound Detection Sensor
IR-LED 940nm
Widerstände
LED-Birne mit IR Fernbedienung
Multicolor Light Bar IR

Fernbedienung ausgelesen:

Erstmal benötige ich die Sendecodes der beiliegenden Fernbedienung.
Dafür wird der Infrarot-Empfänger KY-022 mit den Arduino Board verbunden:

Quellcode 1:
Für alle vier Schritte benötige ich die Bibliothek „irremote“. Bei mir in der Version 4.2.0. Diese bringt brauchbare Beispiel-Sketche mit.
Zum auslesen verwende ich unabgeändert die Auswahl „SimpleReceiver“.

In meinem Beispiel habe ich erstmal nur die beiden Steuercodes für das Ein- und Ausschalten ausgelesen:

SimpleReceiver:
Fernbedienung ist an
Protocol=NEC Address=0xEF00 Command=0x0 Raw-Data=0xFF00EF00 32 bits LSB first
Send with: IrSender.sendNEC(0xEF00, 0x0, );
Fernbedienung ist aus
Protocol=NEC Address=0xEF00 Command=0x1 Raw-Data=0xFE01EF00 32 bits LSB first
Send with: IrSender.sendNEC(0xEF00, 0x1, );



Steuercodes testen

Um jetzt die ausgelesenen Codes zu testen und die IR-Birne ohne Fernbedienung schalten zu können, benötige ich folgenden Versuchsaufbau mit einer IR-LED zum Senden:

Quellcode 2:

Auch aus der Bibliothek „irremote“ passe ich das Beispiel-Sketch „SimpleSender“ wie folgt an:

#include <Arduino.h>

#define DISABLE_CODE_FOR_RECEIVER // Disables restarting receiver after each send. Saves 450 bytes program memory and 269 bytes RAM if receiving functions are not used.

#include "PinDefinitionsAndMore.h"
#include <IRremote.hpp> // include the library

void setup() {
    pinMode(LED_BUILTIN, OUTPUT);

    Serial.begin(115200);

    // Just to know which program is running on my Arduino
    Serial.println(F("START " __FILE__ " from " __DATE__ "\r\nUsing library version " VERSION_IRREMOTE));
    Serial.print(F("Send IR signals at pin "));
    Serial.println(IR_SEND_PIN);

    
//    IrSender.begin(); // Start with IR_SEND_PIN as send pin and if NO_LED_FEEDBACK_CODE is NOT defined, enable feedback LED at default feedback LED pin
    IrSender.begin(DISABLE_LED_FEEDBACK); // Start with IR_SEND_PIN as send pin and disable feedback LED at default feedback LED pin
}


uint8_t sCommand = 0x34;
uint8_t sRepeats = 0;

void loop() {
    
    IrSender.sendNEC(0xEF00, 0x0, 2); // ausgelesener Hexadezimalen Wert/Steuercode plus Menge der Wiederholungen 
    delay(1000);  
       IrSender.sendNEC(0xEF00, 0x1, 2); // ausgelesener Hexadezimalen Wert/Steuercode plus Menge der Wiederholungen
    delay(1000); 
    
}

Da ich zur Übersichtlichkeit einige nützlichen Kommentare aus dem original Beispiel-Sketch entfernt habe, hier noch mal die Erinnerung diese bei der weiteren Recherche nicht zu übersehen.

Wie im Video zu sehen, konnte somit die LED-Birne aus und eingeschaltet werden.



Ansteigende Lautstärke erkennen, habe ich aus diesen Tutorial entnommen:

Schallsensor am Arduino – Geräusch als Auslöser



Mikro und IR-Sender kombinieren

Abschließend wurde aus den vorherigen Tests die Hardware wie folgt zusammengefasst:

Quellcode 4:

Jetzt kombiniere ich beide getesteten Sketche miteinander. Ich passe den Beispiel-Sketch „SimpleSender“ wie folgt an. Belasse aber die im gleichen Sketchordner zu findene „PinDefinitionsAndMore.h“ unverändert.

#include <Arduino.h>
#define DISABLE_CODE_FOR_RECEIVER
#include "PinDefinitionsAndMore.h"
#include <IRremote.hpp>
int ledPin = 13;
int micPin = 4;
boolean wert = 0;

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
  Serial.begin(115200);
  Serial.println(F("START " __FILE__ " from " __DATE__ "\r\nUsing library version " VERSION_IRREMOTE));
  Serial.print(F("Send IR signals at pin "));
  Serial.println(IR_SEND_PIN);
  IrSender.begin(DISABLE_LED_FEEDBACK);
  pinMode(ledPin, OUTPUT);
  pinMode(micPin, INPUT);
}

void loop() {
  wert = digitalRead(micPin);
  if (wert == HIGH) {
    IrSender.sendNEC(0xEF00, 0x1, 3);  //Ausschalten
    delay(100);                        //Dauer des Auslösers
  } else {
    IrSender.sendNEC(0xEF00, 0x0, 3);  //Einschalten
    delay(5000);                       //Dauer des Auslösers
  }
}

Die praktischen Anwendungen dieses Projekts könnten sein:

  • Automatisierung im Haushalt:
    • Ersetze Fernbedienungen durch Klatschen oder Geräusche, um Geräte ein- oder auszuschalten.
    • Zum Beispiel: Licht mit einem Klatschen aktivieren.
  • Sicherheitssysteme:
    • Erkenne ungewöhnliche Geräusche und sende Benachrichtigungen oder aktiviere eine Alarmanlage.
    • Kombiniere mit IR-Kameras zur Bewegungserkennung.
  • Kreatives Spielzeug oder Kunstinstallationen:
    • Interaktive Kunstwerke, die auf Geräusche reagieren.
    • Musikinstrumente, die Töne basierend auf Lautstärke erzeugen.
  • Barrierefreie Technologie:
    • Steuere Umgebung per Sprachbefehl für Menschen mit eingeschränkter Mobilität.
  • Unterhaltung und Spaß:
    • Klatschgesteuerte DJ-Systeme für Partys.
    • Interaktive Spiele mit Geräuschen als Rätsel.
  • Schlaflieder-Player:
    • Verwende die Geräuscherkennung, um festzustellen, wenn das Baby weint oder unruhig ist.
    • Wenn das Geräusch erkannt wird, starte automatisch ein beruhigendes Schlaflied über einen Lautsprecher oder Kopfhörer.
  • Nachtlicht-Steuerung:
    • Platziere ein nächtliches Licht im Babyzimmer.
    • Wenn das Baby weint oder sich bewegt, schalte das Licht automatisch ein, um ihm Sicherheit zu bieten.
  • Mobiles oder Spielzeug:
    • Hänge ein Mobile über dem Babybett auf.
    • Wenn das Baby Geräusche macht, aktiviere das Mobile, damit es sich beruhigt und abgelenkt wird.
  • Weißes Rauschen:
    • Spiele sanfte, beruhigende Geräusche wie Meeresrauschen, Regen oder Wind ab, um das Baby in den Schlaf zu wiegen.
  • Automatische Wiegefunktion:
    • Verbinde die Geräuscherkennung mit einer automatischen Wiegefunktion.
    • Wenn das Baby weint, beginnt die Wiege sanft zu schaukeln, um es zu beruhigen.

Viel Spaß beim Experimentieren! 🌟

Ein ausführliches Video-Tutorial, das diese Projekt Schritte erläutert, ist hier zu finden und bietet eine visuelle Darstellung der Umsetzung:

Abschließend bei dem Licht – Gadget Multicolor Light Bar habe ich als IR Steuerungssignal
IrSender.sendNEC(0xFF00, 0xBA45, 3); //Einschalten
IrSender.sendNEC(0xFF00, 0xF708, 3); //Multicolor
IrSender.sendNEC(0xFF00, 0xB946, 3); //Ausschalten

verwendet 🙂

, ,