Jump to content

Recommended Posts

Geschrieben

Das sollte mein nächstes Projekt werden, aber ich habe es gerade begraben. Ich erwähne es hier, weil meine Erfahrungen vielleicht anderweitig Nutzen bringen können.

 

Die Aufgabe ist, die Signale einer IR-Fernbedienung zu entschlüsseln. In meinem speziellen Fall geht es um eine preiswertes Funk-Übertragungssystem, das Fernbedienungssignale in ein Nebenzimmer übertragen kann. Der Empfänger hat einen Ausgang, dem ich das Signal entnehmen kann. Das heißt, ich brauche mich nicht mit einem IR-Empfänger und Elektronik herumzuschlagen.

 

Ich hatte so etwas schon mal gemacht, und zwar mit einem älteren Notebook, das noch eine parallele Druckerschnittstelle hatte. Mit einem C-Programm lässt sich diese Schnittstelle schnell genug abfragen, um sämtliche Impulse einlesen und analysieren zu können.

 

Nun aber gibt es nur noch USB. Und das IO4-Bricklett. Aber das erwies sich in meinen Versuchen als zu langsam (was auch an dem preiswerten Notebook liegen könnte).

 

Ein Signal (es geht um eine Panasonic-Fernbedienung) ist 60 ms lang und wird von einer 70 ms langen Pause gefolgt. Es beginnt mit einem 3 ms langen Impuls und einer anschließenden Kette von Impulsen, die 0,5 ms lang sind und von einer 0,5 ms langen Pause gefolgt werden. Die Kodierung der verschiedenen Tasten entsteht durch das Weglassen von Impulsen, das heißt, die jeweilige Pause ist dort 1,5 ms lang.

 

Jeder Impuls besteht aber seinerseits noch mal aus einer Reihe von kurzen Impulsen, die 20 us lang sind mit einer Pause von 10 us. Diese Pausen habe ich beseitigt, indem ich die Impulse mit einem Monoflop (1/2 CD 4528 mit 3,3 nF und 22 kOhm) verlängert habe.

 

Ich habe dann ein kleines Python-Programm geschrieben, das Callbacks vom IO4-Brickletts annimmt. Dabei werden nur die Callbacks verarbeitet, bei denen der Eingang auf 1 liegt. Die Routine misst die Zeit, die zwischen zwei Callbacks vergeht.

 

Es zeigte sich, dass die Callbacks sehr unregelmäßig verarbeitet werden. Mal wird eine Zeit gemessen, anschließend kommen mehrere Callbacks direkt hintereinander, also praktisch in Nullzeit.

 

Ich habe dann ein weiteres Monoflop benutzt, um die 0,5 ms langen Impulse auf 1,5 ms zu verlängern. Dadurch werden die normalen Pausen von 0,5 ms überbrückt, und nur die mich interessierenden Pausen bleiben übrig. Das bedeutet erheblich weniger Callbacks. Aber auch die Zeit zwischen diesen ließ sich nicht zuverlässig messen.

 

Zumindest unter Python auf meinem Notebook liefern die Funktionen time.time() und time.clock() nur Vielfache von etwa 15 ms, das heißt, ich kann nicht unterscheiden, ob zwischen zwei Callbacks 5 ms oder 10 ms vergehen. Und auch längere Zeiten sind nicht zuverlässig zu ermitteln, weil das Betriebssystem die aufgelaufenen Callbacks offensichtlich nach eigenem Ermessen abarbeitet, wenn es gerade Zeit und Lust dazu hat.

 

Eine zuverlässige Entschlüsselung von Fernbedienungssignalen ist vermutlich nur durch ein Programm direkt im Brick zu bewerkstelligen.

 

Inzwischen ist mir jedoch eine ganz andere Lösung eingefallen: ich schicke das Signal einfach in die Mikrofonbuchse des Notebooks, mache kurze Aufnahmen von 200 bis 300 ms und analysiere diese.

 

 

Geschrieben
Zumindest unter Python auf meinem Notebook liefern die Funktionen time.time() und time.clock() nur Vielfache von etwa 15 ms

 

Das klingt danach als würden diese Funktionen keine High-Resolution-timer benutzen. Eine kurze Suche auf Stackoverflow hat mir aber auch keine besseren Kandidaten gebracht :/ Zumindest sollte das noch ein lösbares Problem sein. Das rechtzeitige ausführen sollte durch anheben der Prozess-priorität in den Echtzeitbereich auch erzielt werden können (wenn es dann manchmal doch schiefgeht ists ja nicht schlimm).

 

Bin gespannt ob deine Mikrofonlösung zum Erfolg führt... halte uns auf dem Laufenden :D

Geschrieben

Yepp, einen Nachmittag geproggt, und die Erkennung ist fertig. Es gibt etwa zwei Durchgänge "Einlesen - Analysieren" pro Sekunde. Das ist zwar nicht gerade viel, aber dafür besteht der ganze Hardwareaufwand nur aus Draht, zwei 3,5mm-Stecker, zwei Widerständen und einem Kondensator.  8)

 

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Reply to this topic...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...