IR Signal mit Arduino senden

Hat man ein RAW-Paket im NEC-Format einer Infrarotfernbedienung ermittelt, kann man es einfach über die IRremote-Library, einem Arduino, einer IR-LED und einem Vorwiderstand versenden.

Hier ist die IR-LED an PIN 3 mit einem 220 Ohm Vorwiderstand zur Strombegrenzung angeschlossen. Das lange Beinchen einer LED ist + und kommt an den Vorwiderstand. Das kurze Beinchen wird an GND angeschlossen.

#include <IRremote.h>

const int IR_SEND_PIN = 3; // LED-Sende-PIN als Konstante

uint32_t reverseBits( uint32_t val )
{
  uint32_t ret = 0;
  for (uint8_t i = 0; i < 32; i++)
  {
    ret = (ret << 1) | ((val >> i) & 1);
  }
  return ret;
}

void setup() {
  Serial.begin(9600);
  IrSender.begin(IR_SEND_PIN, ENABLE_LED_FEEDBACK); 
}

void loop() {
  unsigned long code = 0xF807FE01; // RAW-NEC-Code der gesendet werden soll (Hier: "Brilo Nachtlicht")
  IrSender.sendNECMSB(reverseBits(code), 32);
  Serial.println("Sende...");
  delay(1000);
}

Info zum Vorwiderstand der LED:

220 Ohm ist recht konservativ. Es sollte also keine LED durchbrennen. Dafür leuchtet die LED nicht so hell (was man im IR-Bereich mit bloßem Auge sowie nicht sehen kann). Die 16mA die maximal gezogen werden schaden auch dem GPIO-Ausgang des Arduino nicht.

Ist also die Leistung zu gering, kann man durch Anpassen des Vorwiderstands erreichen, dass die LED heller leuchtet und größere Entfernungen überbrücken kann. Die LED-Lebensdauer verkürzt sich dadurch und man muss aufpassen den Arduino nicht zu überlasten.

Die Rechnung ist:

U(Gesamt) = 5V (Spannung die der Arduino i.d.R. abgibt)

U(LED) = 1.5V (Durchlassspannung / hier gibt es je nach LED Unterschiede, aber 1,5V sollte grob passen)

Ich nehme hier an, dass nicht mehr als max. 40mA durch die LED durchfließen soll. Auch hier gibt es je nach LED Unterschiede. 40mA können es ganz grob aber im Pulsbetrieb sein. Dauerhaft ist das eher ein kritischer Wert und die LED würde (je nach Typ/Datenblatt) schnell durchbrennen bzw. noch wahrscheinlicher nimmt der Arduino (!) Schaden.

ACHTUNG: Es gibt Arduinos mit max. 20mA pro GPIO- oder 40mA pro GPIO-Port! An einem Arduino Pro Mini hat es bei MIR auch schon länger mit 100mA funktioniert. Ein Digispark hat aber nach ein paar Impulsen das Zeitliche gesegnet…

Die grundsätzliche Formel ist ja U = R * I umgestellt also R = U / I

Konkret: R = (U(Gesamt) – U(LED) ) / 0,04 A = 3,5 V / 0,04A = 87,5 Ohm

Ich nehme nun den nächst größeren (!) Widerstand aus meinem Vorrat und die LED leuchtet nun deutlich heller und überbrückt eine größere Strecke.

Soll die LED noch heller leuchten, muss ein Transistor oder MOSFET vorgeschaltet werden, um den Arduino nicht zu schädigen/zerstören. z.B. einen IRLZ44N (der reicht auch bis 47A mit entsprechender Kühlung 😉

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Time limit is exhausted. Please reload CAPTCHA.