Hallo Community!
Ich möchte meinen Fernseher und andere per Infrarot Fernbedienung
nutzbare Geräte "smart" steuern. Dafür plane ich ein Modul zu bauen,
dass mit meinem Netzwerk verbunden ist (über WLAN oder Ethernet) und
dort eine simple Web API anbietet, an die ich Anfragen senden kann, die
dann das senden eines vorher definierten Infrarotsignals triggern.
Dafür will ich die Signale meiner Fernbedienung (an/aus, lauter, leiser,
etc.) einmal bei Einrichten des Gerätes "einfangen" und dann eben jeder
Zeit wieder "abspielen" können.
Ich studiere Informatik, mit Code habe ich also eher keine Probleme, bei
Elektronik bin ich aber leider ziemlich unerfahren.
Ich habe vor einiger Zeit mal probiert das ganze mit einem ESP8266 und
günstigen Infrarot Sendern/Empfängern zu realisieren, bin aber
gescheitert. Deswegen möchte ich mich hier nach alternativen
Möglichkeiten erkundigen.
Wichtig ist mir folgendes:
- nicht unnötig komplex (umso einfacher, umso besser)
- nicht unnötig teuer
- das Ding solle 24/7/365 laufen, nicht ausfallen oder gewartet werden
müssen
- Ethernet wäre toll, WLAN ist aber auch okay
Ich denke mit einem ESP8266 (gibt es eigentlich einen ähnlichen
Controller mit Ethernet statt WLAN?) ist das ganze schon gut umzusetzen,
leider bin ich mit den verschiedenen Infrarotsendern und -empfängern
etwas überfordert. Vielleicht kann mir ja hier jemand weiterhelfen.
Ich bin dankbar für jede Antwort!
Viele Grüße,
Julian
Julian F. schrieb:> (gibt es eigentlich einen ähnlichen> Controller mit Ethernet statt WLAN?)
Der ESP32 hat auch ne Ethernet MAC eingebaut.
Ansonsten würde ich mir einfach ne Struktur ausdenken mit Protokoll +
Daten und der ESP hat es einfach via IR-Diode mit der richtigen
Modulationsfrequenz raus. Würde es per MQTT oder so realisieren und er
ESP subscribed dann das topic und übersetzt es dann in IR
Mit IRMP und dem zugehörigen IRSND kannst Du den Anlernen und
Senden-Teil ganz einfach lösen.
Von der Umsetzung her am schnellsten dürfte es sein die STM32-Variante
vom IRMP mit USB zu nehmen und das an einen RasPi (oder ähnliches)
anzuschließen.
Timmo H. schrieb:> Der ESP32 hat auch ne Ethernet MAC eingebaut.
Danke!
Timmo H. schrieb:> Würde es per MQTT oder so realisieren und er ESP subscribed dann das topic und
übersetzt es dann in IR
MQTT hab ich bei meinem letzten Versuch auch verwendet. Das werde ich
dann denk ich beibehalten.
Könnt ihr mir noch Namen oder Links zu Sender und Empfänger geben, die
ich hierfür brauche? Das wäre super! Das ganze dann an einen ESP
anzuschließen sollte ich dann hinbekommen. :D
Julian F. schrieb:> leider bin ich mit den verschiedenen Infrarotsendern und -empfängern> etwas überfordert. Vielleicht kann mir ja hier jemand weiterhelfen.
Nicht dass ich Ahnung hätte, aber ich versuchs mal:
Senden:
IR-Leds gibt es in ein paar verschiedenen Wellenlängen
und Abstrahlwinkeln.
Internet hilft bei Wellenlänge, Winkel musst du selbst wissen.
Werden gerne mit 100mA gepulst betrieben --> Datenblatt
Empfangen:
Es gibt diese TSOPS die schon ein decodiertes Signal ausgeben
(ohne Trägerwelle) auch für verschiedene Grundfrequenzen
(Typisch 38kHz)
https://www.google.com/search?client=firefox-b-d&q=+tsop+ir
Das es schon 100erte fertige Geräte gibt die alles schon können
ist dir bekannt?
Viel Spass beim Basteln.
Vielen Dank für die ganzen Antworten! Ich werde mir die Verlinkungen am
Wochenende mal genauer anschauen.
Chr. M. schrieb:> Das es schon 100erte fertige Geräte gibt die alles schon können> ist dir bekannt?
Alles was ich bisher gefunden habe konnte entweder zu wenig oder zu viel
(und war dann dementsprechend kostspielig). Wenn hier jemand ein
(günstiges) Gerät empfehlen kann, dass wirklich alle meine Anforderungen
erfüllt, würde ich das wohl dem selbst basteln vorziehen und die Zeit in
andere Projekte stecken, für die es keine fertige Lösung zu kaufen gibt.
Julian F. schrieb:> Alles was ich bisher gefunden habe konnte entweder zu wenig oder zu viel> (und war dann dementsprechend kostspielig). Wenn hier jemand ein> (günstiges) Gerät empfehlen kann, dass wirklich alle meine Anforderungen> erfüllt, würde ich das wohl dem selbst basteln vorziehen und die Zeit in> andere Projekte stecken, für die es keine fertige Lösung zu kaufen gibt.
Dann nimm das GitHub-Projekt, das snowfly verlinkt hat.
Das passt wirklich perfekt zu Deiner Anforderungsliste.
Mal interessehalber: Weisst Du eigentlich, an was es damals, bei Deinem
eigenen Versuch, so etwas umzusetzen, gescheitert ist?
Ich würde instinktiv darauf tippen, dass Du das zu reproduzierende
Infrarot-Signal von einem Infrarot-Empfänger wie den TSOPs bekommen
hast, und dieses Signal dann einfach 1:1 auf einen GPIO-Port ausgegeben
hast, an dem eine Infrarot-LED angeschlossen war. Das funktioniert so
aber nicht, weil man das Signal erst noch auf ein ca. 38kHz-Signal
aufmodulieren muss.
Diesen Fehler hatte ich nämlich ursprünglich bei einem ähnlichen
Vorhaben gemacht, daher würde mich interessieren, ob andere Leute
instinktiv den gleichen Fehler machen... :)
Joachim S. schrieb:> Mal interessehalber: Weisst Du eigentlich, an was es damals, bei Deinem> eigenen Versuch, so etwas umzusetzen, gescheitert ist?> Ich würde instinktiv darauf tippen, dass Du das zu reproduzierende> Infrarot-Signal von einem Infrarot-Empfänger wie den TSOPs bekommen> hast, und dieses Signal dann einfach 1:1 auf einen GPIO-Port ausgegeben> hast, an dem eine Infrarot-LED angeschlossen war. Das funktioniert so> aber nicht, weil man das Signal erst noch auf ein ca. 38kHz-Signal> aufmodulieren muss.
Das ganze ist schon ca. ein halbes Jahr her und wenn ich damals gewusst
hätte, wo genau das Problem liegt hätte ich auch nicht aufgegeben.
Die verwendeten Komponenten sind jedenfalls diese hier:
Empfänger:
https://www.banggood.com/10pcs-Universal-IR-Infrared-Receiver-Head-With-Iron-Shell-TL1838-VS1838B-1838-38Khz-p-1211280.html?cur_warehouse=CN
Sender:
https://www.banggood.com/3pcs-38KHz-Infrared-IR-Transmitter-Sensor-Module-For-Arduino-p-1389143.html?rmmds=search&cur_warehouse=CN
Controller:
WeMos D1 Mini
Zusätzlich natürlich noch Widerstände, Board und Wires.
Damals haben wir (Kumpel und ich) das einfach irgendwie verkabelt und
versucht das Signal von der Fernbedienung auszulesen. Als das irgendwann
funktioniert hat (= es kamen reproduzierbare Werte in der Konsole an),
haben wir versucht das was wir ausgelesen haben wieder mit dem Sender zu
senden, der Fernseher blieb aber aus.
Ob das auslesen schon nicht richtig funktioniert hat, oder ob nur das
senden das Problem war weiß ich leider nicht.
Aufmoduliert haben wir jedenfalls nichts, hätte man das hier auch
gemusst? Wir haben ja einen 38khz Empfänger verwendet?
Julian F. schrieb:> Sender:> https://www.banggood.com/3pcs-38KHz-Infrared-IR-Transmitter-Sensor-Module-For-Arduino-p-1389143.html?rmmds=search&cur_warehouse=CN>> Damals haben wir (Kumpel und ich) das einfach irgendwie verkabelt und> versucht das Signal von der Fernbedienung auszulesen. Als das irgendwann> funktioniert hat (= es kamen reproduzierbare Werte in der Konsole an),> haben wir versucht das was wir ausgelesen haben wieder mit dem Sender zu> senden, der Fernseher blieb aber aus.> Ob das auslesen schon nicht richtig funktioniert hat, oder ob nur das> senden das Problem war weiß ich leider nicht.>> Aufmoduliert haben wir jedenfalls nichts, hätte man das hier auch> gemusst? Wir haben ja einen 38khz Empfänger verwendet?
Der Empfänger ist okay. Der liefert an seinem Daten-Ausgang ein Signal,
bei der die 38kHz-Trägerfrequenz bereits herausgefiltert ist.
Der Sender ist das Problem - bei dem steht zwar ebenfalls etwas von
"38kHz", aber das ist imho Mumpitz - auf diesem Modul befindet sich
lediglich eine einzige gewöhnliche IR-Sendediode. Wenn man diese
Sende-Diode an einen Output-Pin anschliesst, und dort einfach 1:1 den
gleichen digitalen Signalverlauf ausgibt, den man an dem Input-Pin
aufgezeichnet hat, an dem der Daten-Ausgang des IR-Empfängers hängt,
dann funktioniert das nicht, weil dieser digitale Signalverlauf noch auf
eine 38kHz-Trägerfrequenz aufmoduliert werden muss. Ohne das klappt es
nicht. Diese 38kHz-Trägerfrequenz kann bspw. durch PWM erzeugt werden.
Es könnte natürlich sein, dass bei euch auch noch ein anderes Problem
vorlag, aber schon aus obigem Grund hätte es gar nicht funktionieren
können, wenn ihr das eingelesene Signal einfach 1:1 ausgegeben habt.
Wie gesagt, genau das gleiche Problem hatte ich damals anfangs auch -
ich hatte glaube ich sogar exakt das gleiche IR-Sendemodul :)
Wenn ich Glück habe, liegt der Controller so noch irgendwo rum um ich
kann das mal ausprobieren.
Wo kann ich denn nachlesen, was man dafür genau machen muss?
Edit: Oder kann ich auch einfach einen anderen Sender kaufen, der das
von sich aus macht? Wenn ja, auf was muss ich da achten, damit ich nicht
wieder einen falschen erwische?
Julian F. schrieb:> Wenn ich Glück habe, liegt der Controller so noch irgendwo rum um ich> kann das mal ausprobieren.> Wo kann ich denn nachlesen, was man dafür genau machen muss?>> Edit: Oder kann ich auch einfach einen anderen Sender kaufen, der das> von sich aus macht? Wenn ja, auf was muss ich da achten, damit ich nicht> wieder einen falschen erwische?
Letztlich geht es bei diesem aufmodulieren auf eine 38kHz Trägerfrequenz
darum:
In den Zeiträumen, in denen die IR-Sendediode tatsächlich
senden/leuchten soll (also in den Zeiträumen, in denen der Daten-Pin
eures IR-Empfänger einen Low-Pegel ausgegeben hat), darf diese
IR-Leuchtdiode nicht dauerhaft leuchten, sondern muss sozusagen mit
38kHz "blinken".
In den anderen Zeiträumen, also wenn die IR-Leuchtdiode gerade nicht
senden/leuchten soll (was den Zeiträumen entspricht, in denen der
Daten-Pin eures IR-Empfängers einen High-Pegel ausgegeben hat), ist sie
tatsächlich einfach ausgeschaltet.
Bei Mikrocontrollern erledigt man das i.d.R. in Software, per PWM. Man
schliesst die IR-Leuchtdiode an einen PWM-fähigen IO-Pin an, und
konfiguriert PWM so, dass auf diesem IO-Pin ein PWM-Signal mit
38kHz-Frequenz bei einem Duty-Cycle von 50% ausgegeben wird. In den
Zeiten, in denen gesendet wird, schaltet man dieses PWM-Signal ein; in
den anderen Zeiten, in denen nichts gesendet wird, sorgt man dafür dass
das PWM-Signal nicht ausgegeben wird.
Alternativ könnte man es aber auch in Hardware machen. Wenn man nach
"infrared 38khz ne555" googlet, findet man diverse Schaltungen, die das
mit Hilfe eines 555-Timer-ICs erledigen.
Ich habe auch ein fertiges IR-Sendemodul gefunden, das eine derartige
Schaltung mit 555-Timer-IC enthält:
https://www.ebay.de/itm/50mA-infrarot-Emitter-Sender-Modul-Board-Mit-38K-Tragerschaltung-Fur-Arduino-CA/163541016912
Das könntest Du vermutlich als Ersatz für euer KY-005-IR-Sendemodul
anschliessen und es würde funktionieren.
Ich konnte dafür auf die Schnelle allerdings nur Anbieter aus Asien
finden, mit entsprechend langer Lieferzeit.
Das war auf die Schnelle allerdings auch das einzige käufliche
IR-Sendemodul mit integrierter 38kHz-Trägerfrequenz, das ich finden
konnte.
Fast alle Lösungen, bei denen ein Mikrocontroller Signale von
IR-Fernbedienungen sendet, erzeugen das 38kHz-Trägersignal halt in
Software, weil das für einen Mikrocontroller üblicherweise kein Problem
ist, und man sich dadurch zusätzliche Bauteile spart. Ausserdem hat das
den Vorteil, dass man die Trägerfrequenz auch einfach per Software
ändern könnte, während die Hardware-Lösungen fest auf eine bestimmte
Trägerfrequenz eingestellt sind.
Der Sourcecode der (offenbar recht beliebten) "Arduino-IRremote"-Library
könnte ein Ansatz sein, wie man das in Software, per Hardware-PWM,
erledigt:
https://github.com/z3t0/Arduino-IRremote/blob/master/irSend.cpp