Probleme mit IR

Hallo!

Ich arbeite zurzeit an einem IR remote control um eine HIFI Anlage anzusteuern und verwende dafür einen Nano. Ich benutze eine 940nm 38kHz IR Led, die über einen Transistor und einem 120 Ohm Widerstand über D3 gesteuert wird. Der Code ist recht simple gehalten:

#include <IRLibSendBase.h>    
#include <IRLib_P01_NEC.h>    
#include <IRLibCombo.h>  
 
IRsend irsend;

void setup() {
  Serial.begin(9600);
}
void loop() {
  irsend.send(NEC,0xA55A38C7,32);
  delay(1000);
}

Um das ganze zu testen verwende ich einen zweiten Arduino (Uno) mit einen IR receiver. Mit diesem Arduino habe ich den HEX Code (0xA55A38C7 = Power Button der HIFI Anlage) der Fernbedienung ausgelesen und möchte den nun über den Nano senden. Wenn ich ein IR Signal von dem Nano an den UNO sende dann funktioniert das Ganze auch, der UNO bekommt dasselbe Signal vom Nano wie von der Fernbedienung. Wenn ich das Signal aber an die HIFI Anlage sende dann passiert rein gar nichts, das Gerät reagiert nicht.

Ich habe bereits verschiedene Art und Weisen der Schaltung ausprobiert (mithilfe eines Elektrotechnikers haben wir einiges probiert), ich habe verschiedene Arduinos getestet, ich habe verschiedene HEX Codes an verschiedenen Geräten getestet (mehrere TV’s, Musikanlagen, usw.) ich habe es mit der IRremote libary versucht und ich habe es mit den Raw-Code versucht aber ich bekomme immer wieder dasselbe Ergebnis: der receiver am Arduino erhält das richtige Signal, aber das Gerät, dass ich versuche anzusteuern, reagiert nicht.

Hat jemand eine Idee, was ich falsch mache?

Wie sehen denn die RAW Daten aus? Sendet die Fernbedienung wirklich NEC Protokoll mit der gleichen Bitzahl wie die Bibliothek?

Wenn DrDiettrich’s Vermutung falsch sein sollte (und du auch RAW dasselbe siehst wie von der Original-Fernbedienung):
Die 38 kHz (und die IR-Wellenlänge) hast du ja geraten. Sieht so aus, als sei dein Test-Empfänger nicht so kritisch, und erkennt sowohl Nano als auch Original-Sender. Deine Anlage scheint etwas pingeliger. Oder dein Sender ist etwas schwächer und dein Testempfänger empfindlicher als deine Hifi-Anlage, aber das kann man ja leicht ausprobieren.

Der Code ist recht simple gehalten

Etwas sehr simpel, ja. Ich sehe keine Pin-Definition und kein pinMode(3, OUTPUT);
Ist das alles in deinen Libraries fest verdrahtet?

Hallo DrDiettrich!

Hier habe ich ein array der RAW Daten die ich vom UNO erhalten habe:

{8454, 4254, 518, 1602, 526, 574, 490, 1606,
518, 578, 498, 578, 494, 1602, 514, 582,
494, 1606, 522, 574, 498, 1598, 518, 582,
494, 1602, 522, 1598, 522, 578, 494, 1602,
526, 574, 498, 574, 498, 578, 498, 1598,
518, 1602, 514, 1606, 522, 578, 498, 574,
498, 578, 494, 1602, 514, 1606, 522, 578,
498, 550, 522, 578, 494, 1602, 518, 1602,
522, 1598, 522, 1000}

Ich habe mehrere arrays bereits probiert, jedoch ohne Erfolg.
Die Fernbedienung sendet mit 32 Bits, im folgenden Bild sieht man den Output des Uno’s, abwechselnd Fernbedienung und Nano. Man erkennt, dass jedes Mal dasselbe Signal ankommt.

Hallo michael_x!

Laut Dokumentation ist keine Pin-Definition notwendig, da D3 in der Libary als Output für den Transmitter vordefiniert ist. Ich habe es auch über einen andere Pins probiert, die ich davor definiert habe, jedoch kam dabei nicht mal ein Signal am Test-Arduino (IR receiver) an. Nur beim reiceiver muss man selbst den Pin definieren.

Schau mal was Pollin alles für unterschiedliche Empfänger hat

36, 36.7, 38 und sogar 56.8 kHz.

Versuch doch mal die Basisfrequenz zu verändern.

Ich habe nun verschiedene Frequenzen ausprobiert, leider ohne Erfolg.

Und die stimmen mit denen überein, die Du von der Fernsteuerung bekommst? Mit der Interpretation muß man großzügig sein, nach den “Startbit” von >8000 und >4000 kommen kurze Nullen (~500) und lange Einsen (~1600). Nimmt man noch das oben unterschlagene Vorzeichen hinzu, dann sind die Pausen (jeder zweite Wert) immer kurz, nur die Werte dazwischen haben eine Bedeutung.

Du könntest mit einer Fotodiode (Fototransistor) und einem Oszilloskop versuchen zu sehen,
was wirklich gesendet wird.
Wenn du die Fernbedienung öffnest, kannst du das natürlich auch direkt an der LED messen.

Hast du mal versucht, den Kode unmittelbar hintereinander wiederholt zu senden?

Hier sind die RAW Daten des IR Transmitters:

8454, 4254, 518, 1602, 514, 586, 490, 1606,
522, 574, 498, 578, 494, 1602, 518, 578,
494, 1602, 526, 574, 498, 1598, 522, 578,
494, 1602, 514, 1606, 522, 578, 494, 1602,
518, 582, 490, 582, 494, 578, 494, 1602,
526, 1598, 518, 1602, 526, 574, 498, 574,
502, 570, 494, 1602, 522, 1602, 518, 582,
490, 582, 490, 582, 494, 1602, 526, 1598,
518, 1602, 526, 1000

und hier die der Fernbedienung:

8982, 4642, 474, 1802, 486, 638, 486, 1766,
518, 666, 490, 634, 486, 1798, 478, 678,
486, 1794, 482, 642, 482, 1798, 490, 666,
490, 1794, 486, 1762, 514, 642, 482, 1798,
490, 666, 486, 642, 482, 674, 490, 1790,
486, 1762, 522, 1762, 514, 610, 514, 674,
478, 646, 490, 1790, 486, 1794, 490, 634,
522, 606, 514, 674, 482, 1798, 486, 1762,
514, 1766, 522, 1000

Ich habe die Fernbedienung und den IR Transmitter an der LED und mittels des IR receivers mit dem Oszilloskop gemessen und auch hier scheint es so als würde dasselbe Signal gesendet werden. Leider konnte ich die Frequenz nicht messen, da meine Fotowiderstände nicht für 940nm ausgelegt sind.

Lass mal auf dem Empfänger das ReceiverTimingAnalysis Beispiel laufen und vergleiche dann mal die beiden Signale.
Und dann kanst Du das Beispiel ReceiveAndSend probieren, das sollte funktionieren.

Das ReceiveAndSend Beispiel sollte doch genau das senden was der Receiver erhalten hat, aber auch das hat nicht funktioniert. Kann es sein, dass die Receiver das Signal nicht richtig lesen/auflösen kann? Mit diesem Beispiel kann ich den Fehler, dass ich eventuell die falschen HEX Codes, RAW-Daten, kHz, usw. über den Transmitter sende ja ausschließen. Auch hier habe verschiedene Geräte getestet und ich habe das Signal vorher an einem anderen Arduino getestet und bekam dasselbe Signal wie von der Fernbedienung - der Transmitter funktioniert also aber das Gerät reagiert nicht.