IR Sender B&O Anlage 455 kHz & IR-Code -> Arduino Code Converter

Hallo,

ich bin zur Zeit dran ein bisschen Hausautomatisierung umzusetzen. Unteranderem eben Steuerung von Musikanlagen, welche über Infrarot Fernbedienungen gesteuert werden. 2 Fernbedienungen konnte ich schon problemlos klonen und deren Code wiedergeben (Yamaha und YFC).

Bei der größeren und eigentlichen Haus Anlage handelt es sich jedoch um eine B&O Anlage. Leider klappte hier das klonen nicht ohne weiteres. Auch mit herkömmlichen Universalfernbedienungen können diese Fernbedienungen nicht kopiert werden.

Meine Codes habe ich mit einem IR-Leser aus einem China RGB-Leisten Kontroller, sprich ein 0815 ding. Hat auch ohne weiteres geklappt.

Selbst von der Fernbedienung der Anlage konnte ich Codes empfangen. Das Programm hierzu habe ich von Adafruit genommen.

Leider reagiert die B&O Anlage nicht auf meine selbst gesendeten Codes. Im Normalfall gibt die Empfangseinheit eine rotes Blinklicht zurück.

Ich werde nun noch einmal probieren die Codes auszulesen im Empfangsbereich der Anlage, denn das Blinklicht scheint mir auch eine IR diode hinter einem Filter zu sein, da erst nach dem Erblinken Informationen auf der Fernbedienung auftauchen, wie z.B. die aktuelle Lautstärke. Nach dem empfangen vom "Empfangsmodul" sendet die Fernbedienung ebenfalls noch einen Block.

Standard Anlagen senden auf 38 kHz, welche ich auch ohne weiteres wiedergeben kann. Nach etwas Recherche zu der B&O Anlage ergab sich aber, dass diese nicht auf 38 kHz sendet sondern auf 455 kHz! Das ergibt eine Puls-Signallänge von 2 µs. Der Ardnuino braucht jedoch allein 3 µs um den Pinzustand zu ändern, das ergibt dann eine min. Puls-Signallänge von 6 µs..

Daher bräuchte ich eine Modulation des Signals, weiß aber noch nicht so wirklich wie ich das Bewerkstelligen soll und mit welchen Komponenten. Wäre cool wenn mir irr jemand weiter helfen könnte :slight_smile:

Das nächste ist, dass ich bei Recherchen ebenfalls Codes zu meiner B&O Anlage gefunden habe und habe festgestellt, dass hierbei komplett andere Signale (getestet) gegeben sind, als ich sie mit meinem 0815 Empfänger empfangen habe. Könnte das an der Empfangsauflösung liegen? Im Sample Code für 38 kHz ist hier ein x20 Resolution eingestellt. Wie muss ich diesen verändern? Kan man das einfach in ein Verhältnis setzten? :slight_smile:
Und kann meine 0815 IR-Diode das überhaupt verarbeiten oder bräuchte ich da etwas höherwertiges?

Das letzte ist, dass ich diesen Code genommen habe und wollte ihn in Arduino Code umwandeln. Der Auslese Sketch, empfängt die Signale und wandelt dass dann in Sende- und Pausenfunktions Blöcke um und gibt es in der seriellen Konsole aus.

Ich habe hierzu auch ein Programm geschrieben, dieses weißt aber noch ein paar Fehler auf. Es werden so große Werte aus dem Array falsch übernommen und wenn der Array ungerade ist geht mein Code eine Position weiter als im Array vertreten und gibt mir hierfür einen X-beliebigen wert aus. Ich schätze dass uint_16 hierfür eventuell falsch ist (wurde im Sample sketch auch verwendet, wobei da kleinere Werte raus kamen..)
Ist da eventuell ein double float angebrachter? (Max Wert ist im übrigen 461000)

Hier seht ihr meinen selbst geschriebenen Code, der meinen Arduino zum Converter macht:

//IR signal to Arduino Code converter
//by mrlowalowa (C)11.10.2014
//paste the IR code into the array
uint16_t irCode[] = {461000,1,1,103,1328,103,1328,103,7042,103,1328,103,2762,103,2762,103,2762,103,2762,103,2762,103,2762,103,2762,103,4187,103,1328,103,2762,103,2762,103,2762,103,4187,103,2762,103,1328,103,2762,103,5608,103,103};

int sizeIR = sizeof(irCode);

void setup(){
  Serial.begin(9600);
}

void loop() {
  Serial.println("");
  Serial.println("");
  Serial.println("Converted Code:");
  Serial.println("");
  for(int i= 0; i < sizeIR -1; i++) {
    
     Serial.print("pulseIR(");
     Serial.print(irCode[i]);
     Serial.println(");");
     Serial.print("delayMicroseconds(");
     Serial.print(irCode[i+1]);
     Serial.println(");");
  }
  while(1)  { }
}

Danke schonmal für euer Bemühen!
mfg
mrlowalowa

Hallo,
ich habe es nur "überflogen" Vielleicht hilft es Dir auf die Sprünge.
http://www.mikrocontroller.net/articles/IRMP#IRMP_-_Infrarot-Multiprotokoll-Decoder
Gruß und Glück
Andreas