Können Sie mit einem Arduino die Signalmodulation einer Infrarot-Fernbedienung erhalten?

Lassen Sie mich vorausschicken, dass ich ein absoluter Elektronik-Noob bin. Ich bin anständig mit der Programmierung.

Ich habe einen RCA L40FHD41 HDTV, den ich 2010 gekauft habe. Ich habe versucht, viele Universalfernbedienungen mit diesem Fernseher zu verwenden, aber nachdem ich Hunderte von Codes ausprobiert habe, funktioniert nichts. Ich habe eine billige Ersatzfernbedienung (RCA 276045 TV-Fernbedienung) gekauft, aber es ist ein Hit und Miss, wenn sie sich entscheidet, tatsächlich zu funktionieren. Ich hatte gehofft, ich könnte einen Arduino mit einem IR-Empfänger verwenden, um alle IR-Codes für die Fernbedienung zu erhalten, wenn sie sich verhält, und dann versuchen, einen Arduino-IR-Sender zur Steuerung des Fernsehers herzustellen.

Ich hatte einen Code, der im Grunde einen rohen IR-Eingang nehmen und über eine IR-LED ausgeben würde. Zum Testen richtete ich die IR-LED auf den Empfänger meiner PC-Medienfernbedienung und drückte einige Tasten auf der PC-Medienfernbedienung. Das hat funktioniert. Aber als ich die IR-LED auf den Fernseher richtete und die Tasten auf der TV-Fernbedienung drückte, passierte nichts. Ich denke, dass der Fernseher eine Differenzmodulation verwendet. Ich habe gelesen, dass die meisten Standard-IR 38 kHz verwenden. Ich möchte herausfinden, welche Modulation die TV-Fernbedienung verwendet. Gibt es überhaupt diese Informationen mit einem Arduino und einem IR-Empfänger?

Bearbeiten: Jemand sagte, es könnte ein Dekodierungsproblem sein. Das kann nicht der Fall sein, da ich einen anderen Beispielcode verwendet habe, um die Timings und HEX-Codes für alle Tasten zu erhalten, und wenn ich dieselbe Taste mehrmals gedrückt habe, wurden immer die gleichen Ergebnisse erzielt. Hier ist ein Beispiel für die Ausgabe dieses Beispielcodes: POWER BUTTON

Code: 6A68351E (32 Bit)

Zeitplan[51]:

 +4050, -3400     + 800, -1650     + 800, -1600     + 850, -1600
 + 800, -1600     + 800, - 650     + 800, - 650     + 850, -1600
 + 800, - 650     + 800, -1650     + 750, - 700     + 750, -1650
 + 750, - 750     + 700, - 750     + 750, - 700     + 750, - 700
 + 750, - 750     + 700, -1700     + 700, -1700     + 700, - 750
 + 700, -1750     + 650, - 800     + 600, -1850     + 600, - 850
 + 600, -1800     + 600

unsigned int rawData[51] = {4050,3400, 800,1650, 800,1600, 850,1600, 800,1600, 800,650, 800,650, 850,1600, 800,650, 800,1650, 750,700, 750,705,16 700.750, 750.700, 750.700, 750.750, 700.1700, 700.1700, 700.750, 700.1750, 650.800, 600.1850, 600.850, 600.1800, 600};

BEARBEITEN: Ich habe einen Code, der funktioniert, um den Fernseher ein- und auszuschalten. Ich bin mir nicht sicher, was sich zwischen dem Code unterscheidet, der einfach eine Roheingabe genommen und gesendet hat.

Als Sie das an den Fernseher weitergeleitet haben, haben Sie die Zeitangaben oder den "Code" verwendet. Letzteres funktioniert möglicherweise nicht. Mir ist aufgefallen, dass Ihre Timings mit einer "Ein"-Periode enden. Sind Sie sicher, dass die LED wieder ausgeschaltet wird? Fügen Sie am Ende vielleicht eine willkürliche "Aus"-Periode hinzu.
Wenn es funktioniert, wenn es funktioniert, haben Sie möglicherweise andere Störungen, ebenso bei den Universalfernbedienungen. Es ist ein kommerzielles Produkt, das nicht so empfindlich ist, dass es kaum funktioniert. Ein Blick auf die modulierte Frequenz wird nicht helfen. Die Verwendung eines demodulierten Empfängers zum Herausziehen des Signals mit niedrigerer Geschwindigkeit ist gut genug. Wenn Sie es dann neu erstellen können (vielleicht / vielleicht nicht mit einem Arduino), können Sie die verschiedenen gemeinsamen Frequenzen mit IR-LEDs mit verschiedenen Frequenzen ausprobieren ...
Stellen Sie den Fernseher nach Möglichkeit in einen Raum ohne andere IR-Geräte oder Elektronik im Allgemeinen, versuchen Sie es dort, oder werfen Sie eine Decke über sich und den Fernseher, damit er von anderen Störungen isoliert ist. Ich hatte Boxen, die IR aus irgendeinem Grund erneut senden, dass andere IR-Geräte nicht funktionieren, wenn sie im selben Raum eingeschaltet sind. Könnte andere Gründe haben, warum das IR nicht funktioniert, aber wenn Sie eine Fernbedienung haben, die manchmal funktioniert und es nicht die Batterie ist, dann ist das Problem meiner Meinung nach nicht IR.
Sie werden das modulierte IR nicht mit einem Arduino "sehen" können, ich glaube nicht, dass Sie schnell genug abfragen / empfangen können. Sie können jedoch ein Experiment durchführen, eine enge Schleife erstellen, die ein Sample eines Pins enthält, es im RAM speichern, wiederholen, diese Schleife eine Million Mal ausführen und sie timen. Können Sie 80 kHz oder schneller erreichen? vielleicht versuchst du es mit einem Raspberry Pi oder so ... das funktioniert vielleicht auch nicht ...
Beachten Sie, dass es sehr, sehr schwierig ist, ein richtig moduliertes Signal von einem Mikrocontroller zu erzeugen, das leicht abweicht oder keine perfekte Rechteckwelle in die LED eingeht, und es wird schlimmer sein als Ihre Ersatzfernbedienung. und das ist nur die modulierte Uhr, das Timing des zugrunde liegenden Signals, das moduliert wird, wirkt sich auch darauf aus, wie weit / nah Sie vom Fernseher entfernt sein müssen, damit es funktioniert, es wird einen Sweet Spot geben und der Rest der Entfernungen funktioniert nicht . Die Verwendung eines üblichen demodulierten IR-Empfängers zum Decodieren kann zu einem falschen Timing führen (gehen Sie mit dem Standard-Timing, nicht mit dem, was Sie sehen).
www.sbprojects.com/knowledge/ir/index.php Wenn sie alle 38 kHz wären, warum dann ein solcher (Frequenz-) Bereich von IR-Empfängern und Sende-LEDs? Ich würde erwarten, dass ein Anbieter dieselbe Frequenz verwendet, wenn er dieselben Codes verwendet, möglicherweise für immer dieselbe Frequenz und dasselbe Codierungsschema verwendet (obwohl ich einen RCA habe / hatte, der so ziemlich der erste IR-Fernseher auf dem Markt war, und dies nicht tat keinem der modernen/bekannten Standardprotokolle entsprechen, aber das ist nicht überraschend, da es noch keinen Markt für IR gab).
Schauen Sie sich das EEVBlog-Video an, in dem Dave genau das tut: erfasst das IR-Paket und reproduziert es auf Arduino youtube.com/watch?v=BUvFGTxZBG8
@old_timer Wenn ich sage, dass die Fernbedienung ein Glücksfall ist, meine ich, dass sie super billig ist, also gibt es Zeiten, in denen die Fernbedienung ausflippt und die LED, die anzeigt, dass ein Signal gesendet wird, zu 100% eingeschaltet ist, und ich müssen die Batterien entfernt werden, damit es aufhört. Ich weiß nicht, was es verursacht. Ich dachte, vielleicht verursacht das Gehäuse selbst einen Kurzschluss, also öffnete ich es und bedeckte die Platine im Inneren mit Isolierband, aber das löste das Problem nicht. Der Hit and Miss hat nichts mit dem Fernseher selbst zu tun. Wenn sich die Fernbedienung verhält, funktioniert jeder Tastendruck auf der Fernbedienung 100 % der Zeit.
Okay, das macht es einfacher, Sie sollten es zumindest mit einem IR-Modul dekodieren können, aber das Erstellen neuer Signale ist eine andere Geschichte, für diesen alten Fernseher, den ich hatte, habe ich tatsächlich ein Board mit einem MCU (zuerst der Cortex-M3s von Luminary Micro), die wie ein Sony-Code empfangen und dann diesen seltsamen alten TV-Code gesendet und zum Übersetzen verwendet haben, sodass ich eine moderne Fernbedienung verwenden konnte, anstatt eine andere verwenden zu müssen. Ich bin verblüfft, dass ein 2010er Fernseher nicht von einer der Fernbedienungen mit mehreren Geräten (vorprogrammiert) unterstützt wird.
Wenn Sie einen 38- oder 40- oder was auch immer-Takt erzeugen können, dann ein einfaches und Gate, und Sie können das zu modulierende Signal ansteuern (oder umgekehrt). und stellen Sie Ihre eigene Fernbedienung her. Ich weiß, dass ST eine MCU (oder vielleicht mehrere) hat, die dies für IR eingebaut hat, Sie erzeugen den Trägertakt mit internen Teilern und erzeugen das Signal vielleicht mit dem Timer, es und es zusammen, dann können Sie eine IR-LED ansteuern. Habe die LEDs gekauft, nie damit gespielt.

Antworten (1)

Mit einem gewöhnlichen IR-Empfänger wie TSOP4840 oder CHQ0038 ist dies nicht möglich, da diese bereits einen Demodulator eingebaut haben (siehe Blockdiagramm im Datenblatt).

Sie benötigen einen AC-gekoppelten Sensor wie den TSMP58000.

Die IRLib2 Arduino Infrarotbibliothek hat eine Beispielskizze , die die Modulationsfrequenz bestimmt. Die Vorgehensweise ist im Handbuch näher beschrieben .


Übrigens ist es meiner Meinung nach wahrscheinlicher, dass Sie ein Timing-, Dekodierungs- oder Reichweitenproblem haben, als dass der Fernseher etwas anderes als 38 kHz verwendet. Haben Sie ein Oszilloskop/Logikanalysator und einen zweiten IR-Empfänger?

Nein, ich habe kein Oszilloskop, ich bin ein Noob-Tüftler. Ich weiß, es war nicht die Reichweite. Ich hielt die IR-LED etwa 1 Fuß vom IR-Empfänger des Fernsehers entfernt. Ich weiß, dass es kein Dekodierungsproblem war, weil ich einen anderen Beispielcode verwendet habe, um alle IR-Codes zu erhalten. Wenn ich wiederholt dieselbe Taste auf der TV-Fernbedienung drückte, erhielt ich jedes Mal eine konsistente Signaldecodierung. Zur Zeit kann ich nichts sagen.
Haben Sie die notwendige Hardware, um aufzuzeichnen, was Ihre IR-LED sendet, damit Sie es mit dem vergleichen können, was die TV-Fernbedienung sendet?
@YoItsTrev - Sie sagten: "Ich weiß, dass es kein Dekodierungsproblem war [...] Ich habe wiederholt dieselbe Taste auf der TV-Fernbedienung gedrückt, ich habe jedes Mal eine konsistente Signaldekodierung erhalten." Ich kann verstehen, warum Sie denken, dass Sie eine falsche Dekodierung beseitigt haben, aber zu Ihrer Information, es ist nicht unbedingt wahr. Die Dekodierung durch den Arduino wird durch alles begrenzt, was vom IR-Empfänger empfangen wird. Sie können eine konsistente Dekodierung erhalten, die falsch ist , zB wenn die Software auf dem Arduino durch ihre Eingabe "in die Irre geführt" wird. Dies ist ein Teil dessen, was old_timer in seinen Kommentaren zu Ihrer Frage sagt. Daher schlage ich vor, dass Sie diese Möglichkeit dennoch in Betracht ziehen.