Serielle Datenübertragung mit Arduino über Infrarot

 

Heute geht es um Infrarote Datenübertragung.

Eigentlich war sinn des Projektes einen Infrarotsender im Haus zu empfangen, aber dazu schreibe ich in einem anderen Beitrag mal was. Hier also eher eine einfache Übertragung  über die serielle Schnittstelle mit Hilfe von Infrarotlicht.

Boards

Sender

Aufgebaut habe ich einen Sender mit Hilfe eines Arduino Uno. Der macht nichts anderes als alle 2 Sekunden 480 Byte über die serielle Schnittstelle auszugeben. Das Coding dazu ist geradezu trivial:

void setup()
{
  // start serial port at 9600 bps:
  Serial.begin(9600);
}

void loop()
{
  for(int i = 0; i < 40;i++){
    Serial.write("Hallo Test--");
    }
    delay(2000);
}

Die Elektronik dazu verstärkt das Signal und leitet es an die Infrarot LED CQY 99 weiter. Die LED benötigt bis zu ca. 150mA Strom. Bei 5V braucht man einen 24Ohm Vorwiderstand mit 540mW. Da ich nicht soviel Leistung brauche, habe ich 2x100Ohm parallel geschaltet und komme so auf 75mA und 280mW. Das ist zwar etwas mehr Leistung als die Widerstände vertragen, aber im Pulsbetrieb sollte das kein Problem sein. Mit Hilfe einer Digitalkamera kann man sehen wie die LED alle 2 Sekunden kurz aufleuchtet. Mit bloßem Auge kann man das Infrarotlicht nicht sehen.

IrLed

Besonderst hell sieht das nicht aus, aber eigentlich kann man es ja gar nicht sehen, also ist das schon ein Fortschritt.

Schaltplan

Schaltplan

Die Transistoren verstärken das Signal und da es sich um eine Emitterschaltung handelt wird es auch invertiert. Das soll beim senden vermieden werden, daher eine doppelte Emitterschaltung, ist aber beim Empfangen erwünscht, da das serielle Signal eine invertierte Signalform hat.

Empfänger

Der Empfänger ist ein Arduino Mega. Dort ist ein Fototransistor SFH 300 FA-3/4 der die Infrarotsignale empfängt. Diode und Transistor sind für 950nm Wellenlänge ausgelegt, passen also zusammen. Die Empfangsschaltung ist ein einfacher Transistorverstärker. Ich nehme da den BC337, ein universeller NPN Transistor. Da der Arduino Mega 4 serielle Schnittstellen hat, kann man ganz einfach die empfangenen Daten an den über USB gekoppelten Computer ausgeben.

byte inByte = 0;

void setup()
{
  Serial.begin(9600);
  Serial1.begin(9600);
}

void loop()
{
  if (Serial1.available() > 0) {
    // get incoming byte:
    inByte = Serial1.read();
    Serial.print(inByte);
  }
}

Und nach einigen Experimenten funktioniert die Übertragung bei 9600 bps über eine Strecke von 5-20 cm je nach störendem Lichteinfall. Viel ist das nicht, aber doch ganz nett zu sehen dass es zumindest eine kurze Distanz überbrücken kann.

Demnächst mehr Details zu den übertragenen Daten.

3 Gedanken zu „Serielle Datenübertragung mit Arduino über Infrarot“

  1. Hallo Inka,

    Gute Frage. Also das &lt steht für < , das &gt für >.
    Das scheint wohl ein Fehler im Code-display plugin von WordPress zu sein.
    Rx an Masse ist tatsächlich nicht richtig. Da habe ich beim Zeichnen einen Fehler gemacht. Das muss natürlich an den Kollektor des Transistors. Also direkt über den Transistor.

    Ich habe die Fehler im Beitrag behoben. Danke fürs Lesen.

  2. Hi mit ein paar Teilen aus zwei alten cd Laufwerken (Laser und Photosensor aus dem Lesekopf)
    Könnte man die Reichweite auf einige Km erweitern.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.