Forum: Mikrocontroller und Digitale Elektronik IR-Fernbedienung: Auslesen funktioniert nicht!


von Jonathan K. (burgerohnealles)


Lesenswert?

Hallo,

ich versuche mit dem Arduino IR-Fernbedienugen auszulesen. Ich verwende 
dazu als Detektor [1]! Wenn ein Schaltplan für meine Frage nötig ist, 
einfach sagen. Ich habe getestet, ob der Arduino meine Fernbedienug 
überhaupt erkennt. Ja. Er erkennt sie. Daraufhin habe ich den Code, der 
unten zu sehen ist geschrieben. Dieser gibt am PC aus, wenn sich der 
AN/AUS-Wert ändert und zeigt die Zeit zur letzten Änderung an. Aber es 
funktioniert nicht. Warum? Liegt es am Detektor? An der Taktfrequenz des 
Arduinos (16MHz; sollte eigtl. ausreichen)?

1
#define CHANGE_VAL        30
2
#define WAIT_AFTER_CHANGE 0
3
4
void setup () {
5
  Serial.begin(9600);
6
}
7
8
9
boolean       state       = false;
10
boolean       changed     = false;
11
unsigned long time_ms     = 0;
12
unsigned long time_us     = 0;
13
boolean       drew_line   = false;
14
String        result      = "";
15
unsigned long time_now_ms = 0;
16
unsigned long time_now_us = 0;
17
18
void loop () {
19
  int val = analogRead(A0);
20
  
21
  if (!state && val > CHANGE_VAL) {
22
    state   = true;
23
    changed = true;
24
  } else if (state && val < CHANGE_VAL) {
25
    state   = false;
26
    changed = true;
27
  }
28
  
29
  if (changed) {
30
    time_now_ms = millis()-time_ms;
31
    time_now_us = micros()-time_us;
32
    
33
    Serial.print("CHANGED (");
34
    Serial.print(time_now_ms > 500 ? "X" : "-");
35
    Serial.print("): ");
36
    Serial.print(time_now_ms);
37
    Serial.print("ms - ");
38
    Serial.print(time_now_us);
39
    Serial.print("us - ");
40
    Serial.println(state ? "ON" : "OFF");
41
    
42
    result += (time_now_ms > 500 ? "1" : "0");
43
  }
44
  
45
  
46
  if (changed) {
47
    time_ms = millis();
48
    time_us = micros();
49
    
50
    drew_line = false;
51
    delay(WAIT_AFTER_CHANGE);
52
  }
53
  
54
  if (!drew_line && millis() > time_ms+100) {
55
    Serial.println("Result: " + result);
56
    Serial.println("--------------------------------------");
57
    
58
    result = "";
59
    drew_line = true;
60
  }
61
  
62
  changed = false;
63
}


Links:
[1] http://www.pollin.de/shop/dt/NzA0OTc4OTk-/

Danke
burgerohnealles

von Spess53 (Gast)


Lesenswert?

Hi

>ich versuche mit dem Arduino IR-Fernbedienugen auszulesen. Ich verwende
>dazu als Detektor [1]!

Dir ist bekannt, das übliche Fernbedienungen ein moduliertes Signal mit 
einer Trägerfrequenz im Bereich 30-56kHz benutzen?

MfG Spess

von Stefan (Gast)


Lesenswert?

Ist die serielle Ausgabe gepuffert, oder blockiert Serial.println() den 
Programmablauf bis die gesamte Zeichenkette gesendet wurde (das wäre 
dann die zweite Fehlerquelle).

von IR-Rer (Gast)


Lesenswert?


von Jonathan K. (burgerohnealles)


Lesenswert?

Spess53 schrieb:
> Dir ist bekannt, das übliche Fernbedienungen ein moduliertes Signal mit
> einer Trägerfrequenz im Bereich 30-56kHz benutzen?

Nein. Nur so halb. Ich habe mich damit noch nicht richtig beschäftigt. 
Das war erstmal zum Testen.


Stefan schrieb:
> Ist die serielle Ausgabe gepuffert, oder blockiert Serial.println() den
> Programmablauf bis die gesamte Zeichenkette gesendet wurde (das wäre
> dann die zweite Fehlerquelle).

Weiß ich nicht genau. Aber wenn ich das richtig herausgefunden habe, ist 
es gepuffert. Siehe dazu [1]. Kann mir das mit diesem Link jemand 
bestätigen?


IR-Rer schrieb:
> Das wäre der richtige Empfänger:
>
> http://www.pollin.de/shop/dt/NDA3OTc4OTk-/Baueleme...

Ok. Aber warum funktioniert das mit dem Arduino jetzt nicht. Ich 
verstehe das nicht. Weil der Arduino läuft mit 16MHz. Dann müsste dieser 
36KHz locker schaffen. Wenn nicht, was geben diese 36KHz sonst an?


Links:
[1] http://arduino.cc/en/Serial/Flush

Danke
burgerohnealles

von Spess53 (Gast)


Lesenswert?

Hi

>Ok. Aber warum funktioniert das mit dem Arduino jetzt nicht. Ich
verstehe das nicht. Weil der Arduino läuft mit 16MHz. Dann müsste dieser
>36KHz locker schaffen. Wenn nicht, was geben diese 36KHz sonst an?

Der TSOP demoduliert das FB-Signal. Dein Fototransistor nicht.

Du benutzt den ADC. Im von Atmel empfohlenen Bereich kann der ca. 15 
kSamples/s. Damit kann man keine Frequenz von 36kHz abtasten.

MfG Spess

von Jonathan K. (burgerohnealles)


Lesenswert?

Spess53 schrieb:
> Der TSOP demoduliert das FB-Signal.

Ich guck mir mal an, was "modulieren" ist. Hab mich damit noch nicht 
wirklich auseinandergesetzt. Und was ist ein FB-Signal?


Danke
burgerohnealles

von Karl H. (kbuchegg)


Lesenswert?

Jonathan K. schrieb:
> Spess53 schrieb:
>> Der TSOP demoduliert das FB-Signal.
>
> Ich guck mir mal an, was "modulieren" ist. Hab mich damit noch nicht
> wirklich auseinandergesetzt. Und was ist ein FB-Signal?

F    Fern
B    Bedienung


Die FB blinkt nicht einfach nur irgendwie mit der LED. Sondern da gibt 
es eine Grundfrequenz, eben die zb 35kHz und darauf überlagert ist dann 
das eigentliche Nutzsignal.

Wobei es hier so ist, dass das Nutzsignal die 35kHz ein/aussschaltet.
Wenn die FB eine 1 übertragen will, dann sendet sie die 35kHz eine 
bestimmte Zeit lang und wenn sie eine 0 übertragen will, dann sendet sie 
die 35kHz eine andere Zeit lang. Wie das genau funktioniert hängt vom 
jeweilig verwendeten Protokoll ab. Die Information, ob eine 0 oder eine 
1 übertragen werden soll, steckt also nicht im Lichtsignal selber, 
sondern in der zeitlichen Abfolge in der das 35kHz Signal ein/aus 
geschaltet wird.

von spess53 (Gast)


Lesenswert?

Hi

>Ich guck mir mal an, was "modulieren" ist.

http://de.wikipedia.org/wiki/Fernbedienung

MfG Spess

von Jonathan K. (burgerohnealles)


Lesenswert?

Karl Heinz Buchegger schrieb:
>> Spess53 schrieb:
>>> Der TSOP demoduliert das FB-Signal.
>>
>> Ich guck mir mal an, was "modulieren" ist. Hab mich damit noch nicht
>> wirklich auseinandergesetzt. Und was ist ein FB-Signal?
>
> F    Fern
> B    Bedienung
>
>
> Die FB blinkt nicht einfach nur irgendwie mit der LED. Sondern da gibt
> es eine Grundfrequenz, eben die zb 35kHz und darauf überlagert ist dann
> das eigentliche Nutzsignal.
>
> Wobei es hier so ist, dass das Nutzsignal die 35kHz ein/aussschaltet.
> Wenn die FB eine 1 übertragen will, dann sendet sie die 35kHz eine
> bestimmte Zeit lang und wenn sie eine 0 übertragen will, dann sendet sie
> die 35kHz eine andere Zeit lang. Wie das genau funktioniert hängt vom
> jeweilig verwendeten Protokoll ab. Die Information, ob eine 0 oder eine
> 1 übertragen werden soll, steckt also nicht im Lichtsignal selber,
> sondern in der zeitlichen Abfolge in der das 35kHz Signal ein/aus
> geschaltet wird.

Ok. Ich muss also einen IR-Empfänger wie

IR-Rer schrieb:
> Das wäre der richtige Empfänger:
>
> http://www.pollin.de/shop/dt/NDA3OTc4OTk-/

nutzen. Ich hab noch einen solchen IR-Empänger von einem alten 
DVD-Player. Auf diesem steht:
38B 3V
Ro712

Kann ich diesen auch nutzen?


spess53 schrieb:
>>Ich guck mir mal an, was "modulieren" ist.
>
> http://de.wikipedia.org/wiki/Fernbedienung

Das hab ich mir jetzt angeguckt. Jetzt weiß ich, was Modulation ist. 
Aber noch eine Frage dazu: Eine "0" bedeuted IR-Licht aus? Und eine "1" 
bedeuted, dass das IR-Licht mit der entsprechenden Frequenz 
Ein/Aus-Geschaltet wird? Liege ich da richtig?



Danke
burgerohnealles

von Karl H. (kbuchegg)


Lesenswert?

Jonathan K. schrieb:

> Das hab ich mir jetzt angeguckt. Jetzt weiß ich, was Modulation ist.
> Aber noch eine Frage dazu: Eine "0" bedeuted IR-Licht aus? Und eine "1"
> bedeuted, dass das IR-Licht mit der entsprechenden Frequenz
> Ein/Aus-Geschaltet wird? Liege ich da richtig?


Nicht notwendigerweise.

Google mal nach Manchester Codierung.

von spess53 (Gast)


Lesenswert?

Hi

>Kann ich diesen auch nutzen?

Bei der Bezeichnung würde auf einen 38kHz Empfänger tippen. Kannst du 
nehmen.

>Jetzt weiß ich, was Modulation ist

Nein, weißt du nicht. Das ist nur eine von vielen Möglichkeiten der 
Modulation.

>Aber noch eine Frage dazu: Eine "0" bedeuted IR-Licht aus? Und eine "1"
>bedeuted, dass das IR-Licht mit der entsprechenden Frequenz
>Ein/Aus-Geschaltet wird? Liege ich da richtig?

Mal eine der vielen Codierungen:

http://www.opendcc.de/info/rc5/rc5.html

MfG Spess

von Jonathan K. (burgerohnealles)


Lesenswert?

spess53 schrieb:
>>Kann ich diesen auch nutzen?
>
> Bei der Bezeichnung würde auf einen 38kHz Empfänger tippen. Kannst du
> nehmen.

Ok. Sind die Teile hitzeempfindlich (hatte ich mal irendwie erhitzt)?


spess53 schrieb:
>>Jetzt weiß ich, was Modulation ist
>
> Nein, weißt du nicht. Das ist nur eine von vielen Möglichkeiten der
> Modulation.
>
>>Aber noch eine Frage dazu: Eine "0" bedeuted IR-Licht aus? Und eine "1"
>>bedeuted, dass das IR-Licht mit der entsprechenden Frequenz
>>Ein/Aus-Geschaltet wird? Liege ich da richtig?
>
> Mal eine der vielen Codierungen:
>
> http://www.opendcc.de/info/rc5/rc5.html

Achso. Dann muss ich mir das nochmal genauer angucken.


Danke
burgerohnealles

von spess53 (Gast)


Lesenswert?

Hi

>Ok. Sind die Teile hitzeempfindlich (hatte ich mal irendwie erhitzt)?

Dann nimm etwas Neues. Elektronischen Bauteile sind nicht gerade 
grillpartytauglich.

MfG Spess

von egal (Gast)


Lesenswert?

spess53 schrieb:
>Ok. Sind die Teile hitzeempfindlich (hatte ich mal irendwie erhitzt)?
Auf wieviel Grad? 50 oder 60°C halten die Dinger bestimmt aus, 300° eher 
nicht.

von Jonathan K. (burgerohnealles)


Lesenswert?

egal schrieb:
> Auf wieviel Grad? 50 oder 60°C halten die Dinger bestimmt aus, 300° eher
> nicht.

Dann muss ich wohl ausprobieren, ob's geht.


Danke
burgerohnealles

von toshi (Gast)


Lesenswert?

Hi,
also ich nutze das hier für den Arduino:
http://arcfn.com/2009/08/multi-protocol-infrared-remote-library.html

Funktioniert ohne Probleme und hat auch ein paar Beispiele dabei. 
Einfach in "..\arduino-1.0.1\libraries\IRremote\" abspeichern und schon 
gehts los.

Den Empfänger TSOP31233 findest du beim Conrad und passende 940nm LED 
gibts da auch. Ich konnte damit Samsung, Strong, Toshiba und MediaCenter 
Fernbedienung auslesen umd die Geräte mit der LED auch bedienen.

von Jonathan K. (burgerohnealles)


Lesenswert?

So. Hab mal den Empfänger den ich gefunden habe mit der tollen Library 
getestet und es funktioniert. Irgendwie cool. :D

Danke
burgerohnealles

von Jonathan K. (burgerohnealles)


Lesenswert?

Da ich anscheinend meinen IR-Receiver geschrottet habe, wollte ich 
wissen, ob [1] auch funktioniert? Ich habe beim Suchen nur auf die 
Trägerfrequenz geachtet. Gibt es noch andere Dinge, die wichtig sind 
(wenn nein, sollte der IR-Reveiver funktionieren)?


[1] http://www.reichelt.de/?ACTION=3;ARTICLE=107210

Danke
burgerohnealles

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.