IR LED sendet nur bedingt

Hallo,

ich möchte mit einem Arduino und einer IR-LED, die ich aus einer FB ausgebaut habe über diese Library verschiedene Geräte ansteuern.

Hierfür habe ich mit einem IR-Empfänger am Arduino zunächst einmal die zu sendenen Codes ermittelt. Die Sendebefehle sendete ich hierbei über eine Multifunktionsfernbedienung, mit der sich sämtliche zu steuernden Geräte einwandfrei steuern lassen.

Bei der Ermittlung der zu sendenden Befehle habe ich festgestellt, dass ich je nach zu steuerndem Gerät entweder im “Raw”- oder “NEC”-Format senden muss. Hierfür habe ich innerhalb von Arduino unter den Beispielen der IR-Library den Beispielcode “IRrelay” verwendet.

Die “Raw”-Befehle funktionieren, die “NEC”-Befehle nicht, obwohl ich mittlerweile…

a) eine weitere IR-LED einer FB ausgebaut und diese eingebunden habe.
b) den Abstand zwischen IR-LED und der Empfangs-LED auf 5cm reduziert habe.
c) die NEC-Befehle auch als Raw gesendet habe.

Es befinden sich keine Neonröhren in unmittelbarer Nähe und der Aufbau ist auch nicht unmittelbarer Sonneneintrahlung ausgesetzt. Vewendet wird Arduino 1.6.5 und ein Uno.

Weiss nun nicht mehr weiter.

Wer kann helfen?

Gruß Chris

/*
 *  Aufnahme beenden und HiFi-Anlange vollumfänglich ausschalten.
 */


#include <IRremote.h>

IRsend irsend;  // Eine IR-LED muss an Pin 3 angeschlossen sein.

void setup()
{
  int khz = 38;
  unsigned int stopSat[] = {1750, 950, 800, 950, 850, 1750, 1700, 950, 800, 950, 800, 1800, 1650, 1850, 800, 950, 1650, 1000, 800};
  unsigned int enterSat[] = {1750, 1750, 1750, 1800, 1650, 950, 850, 950, 750, 1000, 750, 1850, 1650, 1850, 800, 950, 800, 950, 750};

  delay(5000);
  irsend.sendRaw(stopSat, sizeof(stopSat) / sizeof(stopSat[0]), khz); //Note the approach used to automatically calculate the size of the array.
  delay(1000);
  irsend.sendRaw(enterSat, sizeof(enterSat) / sizeof(enterSat[0]), khz); //Note the approach used to automatically calculate the size of the array.
  delay(5000);
  irsend.sendNEC(0x6D308976, 32); // Videotechnik ausschalten
  delay(500);
  irsend.sendNEC(0x1D008976, 32); // Umschaltung auf Tuner
  delay(500);
  irsend.sendNEC(0x1D00B946, 32); // Verstärker aus
}

void loop()
{
}

Auch das Schaltbild ist wichtig.

Hab noch ein Bild hochgeladen.

Denke, dass man den Aufbau da ganz gut rauslesen kann.

Die LED ist richtig rum angeschlossen.

Gruß Chris

Ich empfehle dir die Verwendung eines Transistors zur Verstärkung der Sendesignale.

Hier ist ein Beispiel für die Schaltung.
http://html.szaktilla.de/vermischtes/2.html

Den hier eingezeichneten Taster brauchst du nicht.

Der Strom durch die Led kann ruhig größer sein, da er nur gepulst wird.

Danke. Werd ich direkt mal versuchen.

Gruß Chris

Hallo,

hab nun nen BC547 (NPN-Transistor) eingebaut.

Arduino 5V -> 100Ohm Widerstand -> IR-LED -> Collector
Arduino Pin 3 -> 1kOhm Widerstand -> Basis
Emitter -> GND

Problematik unverändert.

Die im "Raw"-Format gesendeten Befehle kommen an. Ebenso kommen die per FB gesendetet "NEC"-Befehle bei den entsprechenden Geräten an.

Gruß Chris

Hallo,
nutze einmal das Zeug´s von Ken Shirriff

Das funktioniert ohne wenn und aber.
Gruß und Spaß
Andreas

Das verwendet er doch

Dann kann eigentlich nur der IR-Code falsch sein.

Wie erfasst ihr für gewöhnlich IR-Codes?

Sprich: Mit wechem Code und Bauteil.

Ich nutze hierfür ja wie bereits erwähnt den "IRrelay" Beispielcode.

Diesen IR-Empfänger nutze ich.

Gruß Chris

Hallo,
na- wenn er das Zeug´s von “Ken Shirriff” verwendet, und sich danach richtet
dann funktioniert das auch, alles gut…

Wenn sein Foto das Schaltbild ist, dann ist es falsch verdrahtet. Das
Datenblatt gibt schon etwas her.

IR-Dioden habe leider die dumme Angewohnheit nach vorne zu strahlen. Soll das
aber mit den montierten (siehe sein Bild) funktionieren, dann sollten die
schon mit/ab 80mA gespeist werden.
Verwendest er allerdings den gelieferten Strom des Arduino, dann sollte die
schon richtig auf das Ziel ausgerichtet sein.
Die IR-Diode sollte schon das “Licht-Spektrum” des Empfänger abdecken, oder
sehr in der Nähe liegen. Datenblatt: Wellenlänge

Wenn nun einige der Meinung sind, nicht so wichtig, brauch nicht, geht auch so…
Dann sollte man sich nicht wundern.

Ich nutze als Empfänger den TFM5360 und als Sender IR-Dioden von Osram mit
der richtigen Wellenlänge. Alles richtig verdrahtet.
Wenn die Sendediode auf das Ziel ausgerichtet ist, dann funktioniert das mit
dem Arduino ohne Probleme bis 7/10m.
Ich habe hier mit keinem Gerät Probleme, selbst mein MacMini läßt sich über
IR bedienen. Auch der Arduino läßt sich über die Apple-IR bedienen.

Wenn Du “Ken Shirriff” verwendest, dann funktioniert das.
Dort gibt es zwei Sketche, einen- der Dir anzeigt, was Du empfängst- einen
anderen, der das Signal empfängt-Du drückst dann einen Taster und das selbe
Signal wird gesendet.
Diesen solltest Du nutzen mit Geräten die funktionieren. Ich würde das erst
einmal so aufbauen, das Du zuverlässig sagen kannst- alles funktioniert.

Im eigenen Sketch nutze ich das so:

int RECV_PIN = 8;
IRrecv irrecv(RECV_PIN);
decode_results results;

void setup()  
{
irrecv.enableIRIn(); // Starte IR
}

void loop() 
{ 
// Serial.println(results.value, HEX); 
    irrecv.resume();
valZS5 = digitalRead(S5) || (results.value == 0x77E1A0B6);
{
mach was
}
(results.value = 0);

Ein wenig Info habe ich angehängt
Gruß und Spaß
Andreas

IR-TFM5360.pdf (139 KB)

SchlauLesen.pdf (408 KB)

Chris72622:
Ich nutze hierfür ja wie bereits erwähnt den "IRrelay" Beispielcode.
Diesen IR-Empfänger nutze ich.

Ich wundere mich über die 36kHz, die bei deinem Empfänger angegeben sind.
Ich verwende bisher immer 38kHz-Empfänger und habe da noch nie Probleme gehabt.
Egal ob TV, Recorder oder Hifi.

Das solltest du nochmal prüfen.

Hab nun diesen Empfänger gekauft. Der Code, der nun aufgezeichnet wird unterscheidet sich nicht von dem, den ich bereits mit dem ersten IR-Empfänger aufgezeichnet habe.

Werde mir nun demnächst noch eine alternative IR-Sende-LED besorgen. Hat mir evtl. jmd. einen Tipp, welche von den vielen bei Conrad erhältlichen IR-LEDs passen könnte?

Gruß Chris

Achte auf die Wellenlänge. Der Empfänger hat sein Maximum bei 950nm. Dann willst du auch eine 950nm LED.

Hallo,

auch mit dem Einsatz einer weiteren LED funktionierten die NEC-Codes bei mir nicht.

Ich möchte an dieser Stelle nochmals das Problem schildern:

Es geht darum, dass ein per IR-Empfänger empfangerner NEC-Code offensichtlich nicht per IR-LED gesendet werden kann. Diverse Raw-Codes funktionieren an anderen Geräten einwandfrei.

Was bzgl. des NEC-Codes funktioniert:

Das per NEC-Befehl zu steuernde Gerät versteht den per Original-FB gesendeten NEC-Code.
Das per NEC-Befehl zu steuernde Gerät versteht den per All_for_one-FB gesendeten NEC-Code.
Der von der Original-FB an den Arduino gesendeten NEC-Code unterscheidet sich nicht von dem, den die All_for_one-FB ausgibt.

Eine testweise eingebaute "normale LED" leuchtet auf, sobald ein NEC-Code gesendet wird.

Auf dem Wiki der Library steht Folgendes:

Make sure to delete Arduino_Root/libraries/RobotIRremote. Where Arduino_Root refers to the install directory of Arduino. The library RobotIRremote has similar definitions to IRremote and causes errors.

Habt ihr das gemacht? Ich hatte zwischenzeitlich RobotIRremote entfernt. Leider ebenfalls ohne Erfolg.

Zudem hatte ich meinen Aufbau laut diesem Schaltbild aufgebaut. Auch dies brachte nichts.

Ebenfalls habe ich Arduino 1.6.5 vollkommen neu installiert. Auch ohne Erfolg.

Bin mit meinem Latein nun vollkommen am Ende, habe aber trotzdem noch keine Lust aufzugeben.

Gruß Chris

Hast du denn mal versucht, den von dir gesendeten NEC-Code zu empfangen und auf dem SerialMonitor anzuzeigen?

Dann kannst du doch die gesendeten Werte vergleichen.

Hallo,

nein, aber das ist natürlich ein super Ansatz.

Bin dabei mir einen weiteren Arduino zu organisieren, um dem Problem auf die Schliche zu kommen,
hab jedoch leider momentan etwas wenig Zeit.

Werde hier berichten, sobald ich weitere Infos habe.

Gruß Chris

Hallo,

hab nun endlich die Lösung.

Manche der zu steuernden Geräte erwarten den zu sendenden Code mehrmals unmittelbar hintereinander.

Z.B. so:

  irsend.sendNEC(0x1D00B946, 32); // Verstärker aus (muss zweimal gesendet werden)
 irsend.sendNEC(0x1D00B946, 32); // Verstärker aus (muss zweimal gesendet werden)

Da muss man aber echt auch erstmal draufkommen! :o

Gruß Chris

Edit: Könnte ich das dann eigentlich auch gleich so schreiben?

irsend.sendNEC(0x1D00B9461D00B946, 64);

Sehr merkwürdig, aber fein wenn's jetzt klappt. Hätte der serielle Monitor sicher auch zutage gebracht.

Ob das mit Deiner Variante funktioniert kannste doch prima selbst ausprobieren, oder?

Hallo,
ist ja schön, das Du es hinbekommen hast. Ich kann mir nur nicht vorstellen,
das das Signal 2x gesendet werden muß.
Ich nehme vielmehr an, das das ein "getoggeltes" Signal ist.
Du hättest es ja eigentlich schon früher bemerken müssen, denn Deine
Fernbedienung sollte es ja auch 2x senden.

Warum solltest Du es nicht so schreiben können? Wenn es sicher funktioniert
dann nutze es.
Interessant wird die Sache jetzt, weil Du an Deinem Arduino keine Taster mehr
verbasteln mußt. Deine Sketche lassen sich jetzt über IR steuern.
Wie auch immer, scheint zu laufen. Viel Spaß damit.
Gruß
Andreas