Forum: Mikrocontroller und Digitale Elektronik IR - Sender mit Arduino


von Heinz S. (aves_aquila)


Angehängte Dateien:

Lesenswert?

Hallo Forum!

Vor ein paar Wochen habe ich ein Arduino Starter-Paket mit einem Arduino 
Mega geschenkt bekommen. Jetzt bin ich ein wenig damit am rumspielen und 
habe mir zunächst einen IR-Empfänger gebastelt. Das hat auch geklappt. 
Nur das mit dem IR-Sender haut irgendwie nicht hin. Da würde ich mal 
gerne Rat zu haben.

Da die von mir ausgewählte LED einen Strom von 100mA zieht, der Ausgang 
des Arduino aber nur maximal 40mA liefert, muss ich logischerweise mit 
einem Transistor zur Stromverstärkung arbeiten. In meinem Starterkit ist 
ein BC547C enthalten, der gerade die geforderten 100mA liefern kann.

Die Werte habe ich so weit wie möglich aus den Datenblättern entnommen. 
Bei der Diode handelt es sich um eine IR-Diode 950nm LD 274-3. Erstes 
Ziel ist die Dimensionierung von R1 und Rb.

R1 = 3,1V / 100mA = 31 Ohm
Rb = 4,3V / 5mA = 869 Ohm

Das Signal, das ich mittels der LED senden will, arbeitet mit 38 kHz. 
Wenn ich das richtig sehe, sollte der Transistor eine Frequenz bis zu 
300 MHz bewältigen können.

Ist das soweit korrekt?

von Heinz S. (aves_aquila)


Lesenswert?

So, jetzt zum Controller.

Zur Ansteuerung der IR-Diode habe ich die folgende Arduino IR-Libary 
genutzt: 
http://www.arcfn.com/2009/08/multi-protocol-infrared-remote-library.html

Der Libary liegt zum Senden eines IR-Signals folgendes kleines Beispiel 
bei:
1
#include <IRremote.h>
2
3
IRsend irsend;
4
5
void setup()
6
{
7
  Serial.begin(9600);
8
}
9
10
void loop() {
11
  if (Serial.read() != -1) {
12
    for (int i = 0; i < 3; i++) {
13
      irsend.sendSony(0xa90, 12); // Sony TV power code
14
      delay(100);
15
    }
16
  }
17
}

Laut Kommentar soll ich die Diode an Port 3 anschließen. Das habe ich 
alles getan, hat aber leider nicht gefruchtet. Gebe ich manuell ein High 
auf die Basis, sehe ich in meiner DigiCam die IR-Led wunderbar leuchten.

von Heinz S. (aves_aquila)


Lesenswert?

Keiner mag sich mal die Schaltung anschauen, die ich berechnet und 
aufgebaut habe? Haut das mit der Dimensionierung so hin?

Ist das Arduino-Zeug zu sehr N00b-Kram, den ich hier nicht zu erwähnen 
brauch?

von Karl H. (kbuchegg)


Lesenswert?

Heinz Sturrhahn schrieb:
> Keiner mag sich mal die Schaltung anschauen, die ich berechnet und
> aufgebaut habe? Haut das mit der Dimensionierung so hin?

Ohne nachgerechnet zu haben, sieht die Auslegung plausibel aus.
~800 Ohm als Basiswiderstand kann hinkommen. Eventuell könnte man 
kleiner gehen um den Transistor ordentlich in die Sättigung zu treiben, 
aber das dürfte hier nicht das Problem sein. Dein IR Led müsste auf 
jeden Fall leuchten, möglicherweise mit verminderter Helligkeit.
Und das tut sie ja auch laut deinen Tests.

> Ist das Arduino-Zeug zu sehr N00b-Kram, den ich hier nicht zu erwähnen
> brauch?

Ne.
Aber es hängt alles am IRsend Objekt. Und in das kann hier keiner 
hineinschauen.  Das ganze ist ein bischen so, wie wenn man von aussen 
ein Wohnhaus betrachtet und feststellen soll, warum der Lift nicht geht. 
Wenn eine Fliegerbombe aufs Haus gefallen ist, dann kann man das noch 
feststellen. Jedoch gibt es viele Möglichkeiten, die man von aussen eben 
nicht sehen kann.

Mein Vorschlag wäre: noch mehr abspecken.

Du hast 2 mögliche Fehlerquellen: UART und IR-Sender.

Also schalte erst mal einen davon aus. Zb die UART

void loop() {
  irsend.sendSony(0xa90, 12); // Sony TV power code
  delay(100);
}

tut sich was an der LED? Wenn ja, dann ist die UART dein Problem.

von Heinz S. (aves_aquila)


Lesenswert?

Guten Morgen Karl!

Mittlerweile hatte ich schon weiter getestet und genau deine 
Vorgeschlagenen Schritt durchgeführt. Die LED zB. direkt mit einem 100 
Ohm Widerstand an den Ausgang gehängt und irsend in einer Endlosschleife 
ohne Anfangsbedingung laufen lassen. Leider ohne Erfolg... Ich habe auch 
testweise eine normale LED mit einem 220 Ohm Widerstand an den Ausgang 
gehängt, die blieb ebenfalls dunkel.

Mittlerweile habe ich mir mal die Library angeschaut. Dort ist der Port 
3 fest angegeben für das irsend.

Aber warum das nicht mag...

von Erich (Gast)


Lesenswert?

Vielleicht mal den Basiswiderstand vom uC trennen und dort "zu Fuß" 
+5Volt anlegen, dann sollte die normale LED heftig brennen (ruckzuck 
defektgehen).
Meine Vermutung: Lötfehler, Transistor-Pinreihenfolge etc.

von Heinz S. (aves_aquila)


Lesenswert?

Wie gesagt, ich habe die LEDs mit entsprechenden Vorwiderständen direkt 
am Ausgang betrieben. Die IR-LED und normale LED bleiben beide dunkel.
Die einfache Schaltung und die Schaltung mit Transistor funktioniert, 
wenn ich den Ausgang einfach für 100ms abwechselnd von High auf Low 
schalten lassen. Also an der Schaltung kann es eigentlich nicht liegen. 
Wie auch, wenn nur ein Vorwiderstand und die LED anliegen. Anode und 
Kathode habe ich beachtet.

> Die LED zB. direkt mit einem 100
> Ohm Widerstand an den Ausgang gehängt und irsend in einer Endlosschleife
> ohne Anfangsbedingung laufen lassen. Leider ohne Erfolg... Ich habe auch
> testweise eine normale LED mit einem 220 Ohm Widerstand an den Ausgang
> gehängt, die blieb ebenfalls dunkel.

von Heinz S. (aves_aquila)


Lesenswert?

Hmpf...

Habe auf der Seite die Kommentare mal weiter durchgelesen. Die 
Vermutung, das es an einem Unterschied zwischen den Controllern liegt, 
hat sich jetzt bestätigt:

> My code won't work with an Arduino mega as it has a different processor
> and the pins are all different. (Sorry I didn't mention that in my
> original article.) You could see if there's anything on PWM pin 9; I
> believe that's where the OC2B output connects on the mega. Probably you'll
> need to study the atmega 1280 datasheet and see how the PWM flags are
> different for the mega's processor, and change the code appropriately.
> Unfortunately I don't have a mega, so I can't try this myself.

Werde das heute Abend mal testen. Aber das wird wohl der Fehler gewesen 
sein.

von Christian B. (sourcecode)


Lesenswert?

Hallo.

Das es irgendwie Unterschiede zweischen dem Uno und Mega Board
geben muß, habe ich auch irgendwie feststellen müssen.

Ich nutze auch die IR Librarie und besitze das Uno als auch das
Mega Board. An dem Mega Board funktioniert mein IR Sender an
Pin3 auch nicht. Am Uno Board funktioniert es einwandfrei.

Gruß
sourcecode

von chri (Gast)


Lesenswert?

Versuche mal statt:

irsend.sendSony(0xa90, 12); // Sony TV power code

irsend.sendSony(0xa90, 3); // Sony TV power code


oder häng die Diode auf Port 12.

von _invisible09_ (Gast)


Lesenswert?

Hy...Hast du schon ne Antwort für dein Problem gefunden????Ich habe 
nämlich dasselbe.....;)

von Wolfgang (Gast)


Lesenswert?

Heinz Sturrhahn schrieb:
> Da die von mir ausgewählte LED einen Strom von 100mA zieht

Die LED "zieht" nicht 100mA, sondern sie nimmt was sie kriegen kann. DU 
mußt darauf achten, das die als maximal zulässig angegebenen 100mA 
nicht überschritten werden. Keiner zwingt dich, das auszureizen.

von Heinz S. (aves_aquila)


Lesenswert?

Öh... Ich hatte das Problem dann damals gelöst. Lag irgendwie an dem 
unterschiedlichen Verhalten des PWM zwischen Uno und Mega, wie schon in 
dem zitierten Text erwähnt.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.