Skip to content

Commit 2a1bd2f

Browse files
Merge pull request #11 from FHNW-IP5-IP6/feat/ir-receiver
Feature: IR Receiver Docs
2 parents aa3fd76 + 7e83ac2 commit 2a1bd2f

File tree

4 files changed

+82
-1
lines changed

4 files changed

+82
-1
lines changed

content/german/basics/crowpi.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ Komponenten aufgeführt:
5151
| [Button]({{< ref "components/button" >}}) | Abfragen von vier unabhängigen Knöpfen | GPIO | {{< dip-switches 5 6 7 8 >}} |
5252
| [Button Matrix]({{< ref "components/button-matrix" >}}) | Abfragen von Matrix aus 4 × 4 Knöpfen | GPIO | {{< dip-switches 1 2 3 4 5 6 7 8 >}} |
5353
| [Buzzer]({{< ref "components/buzzer" >}}) | Abspielen von verschiedenen Tönen | PWM | {{< dip-switches >}} |
54+
| [Infrarot Empfänger]({{< ref "components/ir-receiver" >}}) | Empfangen von Infrarot-Signalen | GPIO | {{< dip-switches >}} |
5455
| [LCD Display]({{< ref "components/lcd-display" >}}) | Anzeige von Text und Zahlen | I²C, GPIO | {{< dip-switches >}} |
5556
| [LED Matrix]({{< ref "components/led-matrix" >}}) | Darstellen von beliebigen Symbolen | SPI | {{< dip-switches >}} |
5657
| [Lichtsensor]({{< ref "components/light-sensor" >}}) | Erkennen von aktueller Lichtstärke | I²C | {{< dip-switches >}} |
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
---
2+
title: Infrarot Empfänger
3+
tags: ["gpio"]
4+
---
5+
6+
## Funktionsweise
7+
8+
Mithilfe von Infrarot können über einige Meter Distanz digitale Informationen übertragen werden, was zum Beispiel oft für die Fernbedienung
9+
eines Fernsehers genutzt wird. Die Übertragungsart gleich hierbei etwas dem Prinzip des Morsens, da die Infrarot-LED im Sendegerät eine
10+
Abfolge von Bits durch unterschiedlich lange Pausen zu dem Empfängergerät überträgt. Da jedoch auch viele andere Dinge in der Natur wie
11+
beispielsweise unsere Sonne ein Infrarot-Licht emittieren, wird für die elektronische Verwendung nur eine Frequenz von 38kHz verwendet.
12+
13+
Um zu vermeiden, dass eine Fernbedienung über eine oder gar mehrere Sekunden komplett still gehalten werden muss, werden die einzelnen Bits
14+
in sehr kurzen zeitlichen Abständen übertragen. Dies klingt im ersten Moment natürlich praktisch, bedeutet jedoch auch dass das empfangende
15+
Gerät sehr präzise zeitliche Messungen durchführen können muss. Genau dies war jedoch beim CrowPi mit der Verwendung von Java in Kombination
16+
mit Pi4J nicht möglich, da eine Genauigkeit von rund 60 Mikrosekunden (0.00006 Sekunden) benötigt wird, was sich mit dem Design der Java
17+
Virtual Machine nicht umsetzen lässt.
18+
19+
Um diese Komponente jedoch trotzdem zur Verfügung zu stellen, nutzt diese Implementation eine vorinstallierte Applikation namens `mode2`
20+
welche in C geschrieben wurde. Diese gibt die entsprechend erkannten Signale über die Konsole aus, welche dann automatisch in Java
21+
ausgewertet, geprüft und weitergegeben werden. Ein grosser Teil der Logik ist somit weiterhin innerhalb dieser Komponenten-Klasse
22+
aufzufinden, das Erkennen der Signale findet jedoch nicht mit Pi4J statt. Sollten sich hier in Zukunft neue Möglichkeiten ergeben, so würde
23+
sich die Komponente regulär via GPIO auslesen lassen.
24+
25+
Eine saubere Alternative, welche sich weiterhin mit Pi4J umsetzen lässt, wäre einen dedizierten Mikrocontroller für das Empfangen der
26+
Infrarot-Signale zu verwenden, welcher dann über einen anderen Bus wie beispielsweise [I²C]({{< ref "hardware/i2c" >}}) oder [SPI]({{< ref
27+
"hardware/spi">}}) die Signale an den Raspberry Pi sendet. Auf dem CrowPi ist dies jedoch nicht vorhanden, sodass diese Möglichkeit nicht
28+
bestand.
29+
30+
Für die Verwendung dieser Komponente muss die beigelegte Infrarot-Diode auf dem CrowPi in die 3 Pin-Header eingesteckt werden, da sich diese
31+
nicht direkt auf dem CrowPi befindet. Auf dem nachfolgenden Foto ist angegeben, wo die Infrarot-Photodiode einzustecken ist:
32+
33+
{{< img alt="Anschluss für Infrarot-Diode" src="components/ir-receiver.jpg" height="500px" >}}
34+
35+
## Voraussetzungen
36+
37+
### DIP Switches
38+
39+
Für diese Komponente werden keine spezifischen DIP-Switches benötigt, sodass diese in der Standardkonfiguration belassen werden können:
40+
41+
{{< dip-switches >}}
42+
43+
## Verwendung
44+
45+
Nachfolgend wird die Verwendung der Klasse {{< javadoc class="com.pi4j.crowpi.components.IrReceiverComponent" >}} beschrieben.
46+
47+
### Konstruktoren
48+
49+
| Konstruktor | Bemerkung |
50+
|:-------------------------------------------------------------|:--------------------------------------------------------------------------------------------------------------------|
51+
| `IrReceiverComponent()` | Initialisiert einen Infrarot-Empfänger mit Standardeinstellungen für den CrowPi. |
52+
| `IrReceiverComponent(String mode2Binary, String devicePath)` | Initialisiert einen Infrarot-Empfänger mit benutzerdefiniertem Pfad zur `mode2` Applikation sowie einem Gerätepfad. |
53+
54+
### Methoden
55+
56+
| | Methode | Bemerkung |
57+
|:-----------------------------------------------|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:----------|
58+
| `void onKeyPressed(EventHandler<Key> handler)` | Setzt den Event Handler, welcher gedrückte Tasten auf der Infrarot-Fernbedienung als ersten Parameter erhält. Durch die Angabe von `null` kann das Empfangen von Infrarot-Signalen deaktiviert werden. | |
59+
60+
### Enumerationen
61+
62+
- {{< javadoc class="com.pi4j.crowpi.components.IrReceiverComponent" subclass="Key" >}} enthält alle unterstützten Tasten, welche sich auf
63+
der beigelegten Infrarot-Fernbedienung des CrowPi befinden. Diese Enumeration kann genutzt werden, um innerhalb eines Events die erhaltene
64+
Taste zu vergleichen und unterschiedliche Aktionen durchzuführen.
65+
66+
## Beispielapplikation
67+
68+
Die Beispielapplikation initialisiert zuerst den Infrarot-Empfänger, wobei hier nicht einmal der übliche Pi4J-Kontext übergeben werden muss,
69+
da wie bereits weiter oben beschrieben von dieser Komponente die Pi4J-Library nicht genutzt wird. Nach erfolgter Initialisierung wird ein
70+
Event Handler registriert, welcher jeden Tastendruck auf der Konsole ausgibt sowie beim Drücken der "CH" Taste eine zusätzliche Ausgabe
71+
vornimmt. Anschliessend wird 30 Sekunden gewartet, bevor der Event Handler wieder deaktiviert wird und die Applikation sich beendet.
72+
73+
{{< code file="src/main/java/com/pi4j/crowpi/applications/IrReceiverApp.java" language="java" >}}
74+
75+
## Weitere Möglichkeiten
76+
77+
- Mit der beigelegten Fernbedienung lassen sich einwandfrei numerische Eingaben tätigen, z.B. um einen einfachen Taschenrechner mit Addition
78+
und Subtraktion zu bauen, wofür sich die Zahlentasten sowie Plus und Minus nutzen lassen würden.
79+
- Die Steuerungstasten für Previous, Next sowie Play/Pause könnten genutzt werden, um den Buzzer zu steuern und verschiedene Melodien damit
80+
abzuspielen.
1020 KB
Loading

0 commit comments

Comments
 (0)