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 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 mal gesendet werden, dann wie ein Mikrofon steigender Lautstärke erkennt und zuletzt wird alles kombiniert.

Verwendete Hardware:
Arduino Uno R3/R4
INFRARED 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 dieser kleine Aufbau mit dem Infrarot-Empfänger KY-022:

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 wurde folgendes 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 Birne ohne Fernbedienung schalten zu können, benötige ich folgenden Versuchsaufbau:

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() {
    

    // Receiver output for the first loop must be: Protocol=NEC Address=0x102 Command=0x34 Raw-Data=0xCB340102 (32 bits)
    IrSender.sendNEC(0xEF00, 0x0, 2);
    delay(1000);  
       IrSender.sendNEC(0xEF00, 0x1, 2);
    delay(1000); 
    
}

Da ich zur Übersichtlichkeit alle 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

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 sind vielfältig. Es kann verwendet werden, um die Fernbedienung von Licht, Musiksystemen oder Haushaltsgeräten zu automatisieren. Darüber hinaus kann es in kreativen Projekten wie interaktiven Kunstinstallationen oder Robotik eingesetzt werden.

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 🙂

, ,