Infrarot Fernbedinung

Wie baue ich eine Fernbedienung für meine Hausautomation?
Hermann | 5. April 2019

Sensor am Fernseher

Arduino
IR Sender (MySensor)

Unser Fernseher wird größtenteils ohne Fernbedienung bedient. Wir haben keinen Regionalen oder Sattelitenempfang angeschlossen. Das Welchsel zwischen HDMI Geräten geht automatisch. Einzig das An- und Ausschalten muss manuell oder über eine Fernbedienung passieren.

Schema
Schema

Teile

  • Arduino Pro Mini 5V/16Mhz
  • NRF24L01 (E01-ML01D von CDEBYTE)
  • LE33 Spannungsregler 3.3V
  • IR Diode 940nm
  • PNP Transistor (BC337)
  • EasyPCB (V10) von Sunberg84

Software

  • MySensors 2.3.1
  • IRRemote

Die Kommandos werden via MySensors empfangen. Das Gateway schickt z.B. den Code für SAMSUNG32 geräte über Child_Id 1 und Variable V_VAR1. Dieses Kommando wird dann direkt per IR LED an den Fernseher gesendet.
Die Codes habe ich selbst aufgezeichnet. Dazu braucht man natürlich eine Empfangs IR LED.
Leider wird die Soundbar von Samsung nicht direkt aus der IRRemote lib unterstützt. Diese benutzt eine andere Codierung als der Fernseher. Deshalb habe ich die Codes als Rohformat aufgezeichnet. Da die Sequenz sehr lang ist und mehrere Integer Werte benötigt, habe ich diese direkt in den Arduino geschrieben und werden dann vom Gateway ein selbst nummerierte Folge schicken und dann den Befehl im Rohformat an die Sounbar schicken.

/*

  Fernbedienung für Samsung TV

  05.04.2019 Erstellt


*/

#include <IRremote.h>
IRsend irsend;

/*
 RAW IR COMMANDS
*/ 

unsigned int samsung_volup[] = {4400,4600,350,650,350,650,350,650,350,650,300,1650,350,1650,350,650,350,650,350,1650,350,1600,350,1700,300,1600,400,650,350,650,350,600,400,600,350,4650,350,650,300,650,350,650,350,650,350,1600,400,1650,350,1650,300,650,350,1700,300,1600,400,1650,350,650,350,600,400,600,350,700,300,1700,300,700,300,650,350,650,350,1600,400};


//#define MY_DEBUG
#define MY_SIGNAL_REPORT_ENABLED
#define MY_SPECIAL_DEBUG
// Options are: RF24_PA_MIN, RF24_PA_LOW, RF24_PA_HIGH or RF24_PA_MAX. MAX will use more power but will transmit the furthest
#define MY_RF24_PA_LEVEL RF24_PA_HIGH
#define MY_RADIO_RF24
#include <MySensors.h>
#define CHILD_ID_IR 1
MyMessage msg_ir_samsung32(CHILD_ID_IR, V_VAR1);

void before()
{

}

void presentation()
{
  sendSketchInfo(F("Fernbedienung"),F("1.0"));
  present(CHILD_ID_IR,S_CUSTOM);
}

void setup()
{

}

void receive(const MyMessage &message)
{

  if (message.sensor == CHILD_ID_IR)
  {
    if (message.type == V_VAR1) // Samsung32
    {
      irsend.sendSAMSUNG(message.getULong(),32);
    }
    else if (message.type == V_VAR2) // Samsung
    {
      irsend.sendRaw(samsung_volup,sizeof(samsung_volup)/sizeof(int),38);
    }
  }
}
void loop() {
  sendHeartbeat();
  wait(60000);
}

Quellen

Name Beschreibung Internet
MySensors Bibliothek zum Aufbau eines Sensornetzwerks mysensors.org
IRRemote Infrarot Bibliothek irremote.git
EasyPCB MySensor PCB für Arduino Pro Mini openhardware.io/easypcb