Schnelle Entwicklung einer eigenen kostengünstigen 3D-Gestensteuerung

Von Jacob Beningo

Zur Verfügung gestellt von Nordamerikanische Fachredakteure von DigiKey

In der Regel interagiert der Mensch über Knöpfe, Tasten, Hebel und Touchscreens mit Maschinen und eingebetteten Geräten. Dank der jüngsten Fortschritte in der Sensortechnologie haben Entwickler jetzt aber auch die Möglichkeit, ihre Produkte mit dreidimensionaler (3D) Gestensteuerung auszustatten.

Je nach verwendeter Technologie kann der Kauf und die Integration eines Gestensteuerungsgeräts teuer sein. Es gibt jedoch eine Vielzahl von Gestensensor-Technologien, die von kostengünstigen Sensoren mit Infrarot-LEDs und Fotodioden zur Bewegungserkennung bis hin zu teuren Gestenerkennungskameras reichen. Infrarot-Gestensensoren sind kostengünstig, können digital an einen kostengünstigen Mikrocontroller angebunden werden und sind mit ein wenig Software für viele Anwendungen hinreichend genau.

Dieser Artikel befasst sich mit der Gestensteuerung über den APDS-9960 von Broadcom, einem Infrarot-Gestensteuerungssensor, der sich problemlos in nahezu jedes eingebettete System integrieren lässt.

IR-basierte Gestensensoren

Die Theorie hinter IR-basierten Gestensensoren ist relativ simpel. Beim Erkennen einer Handgeste sollen häufig mehrere verschiedene Gesten erkannt werden:

  • Aufwärts/abwärts
  • Links/rechts
  • Vorwärts/rückwärts

In jedem dieser Fälle muss der Sensor die Bewegungsrichtung erfassen können. Dazu dienen im Sensor zwei Hauptkomponenten: eine Leuchtdiode (LED) und mehrere Richtungsfotodioden. Richtungsfotodioden sind nichts weiter als mindestens vier Fotodioden, die in einem vordefinierten Abstand von der IR-LED positioniert sind. Beim Umgebungslicht-, Näherungs- und Gestensensor APDS-9960 von Broadcom sind die Fotodioden beispielsweise rautenförmig angeordnet, wobei jede Diode eine Richtungsspezifizierung wie oben, unten, links und rechts hat (Abbildung 1).

Abbildung: APDS-9960 von BroadcomAbbildung 1: Der APDS-9960 von Broadcom verfügt über eine integrierte IR-LED und vier Richtungsfotodioden, die reflektierte IR-Energie erfassen, die auf ein Gestenprofil analysiert werden kann. (Bildquelle: Broadcom)

Wenn die LED Infrarotenergie aussendet, wird diese in den leeren Raum abgestrahlt, es sei denn, dort befindet sich ein Objekt, beispielsweise eine Hand, die sie reflektiert. Die reflektierte Energie wird von den Fotodioden je nach Position des Objekts mit unterschiedlicher Intensität erfasst. So empfängt beispielsweise eine Fotodiode entlang der Eintrittskante der Geste anfänglich weniger reflektierte Energie als eine Fotodiode an ihrer Hinterkante. Das führt dazu, dass eine Fotodiode einen höheren Zählwert als die andere hat. Durch Messungen während der Ausführung der Geste erkennen die Fotodioden im zeitlichen Verlauf unterschiedliche reflektierte Intensitäten an den verschiedenen Dioden. Dieser Strom von Richtungsinformationen kann dann analysiert werden, um die Geste zu ermitteln.

Wenn ein Benutzer beispielsweise mit der Hand von der Oberseite des Sensors nach unten wischt, erfasst die Abwärts-Fotodiode zu Beginn der Geste ein stärkeres einfallendes reflektiertes Licht als die Aufwärts-Fotodiode. Im Verlauf der Geste bewegt sich die Hand zu einem Punkt, an dem beide Dioden die gleiche Energiemenge empfangen. Bei Ende der Geste empfängt die Abwärts-Fotodiode weniger reflektiertes Licht und die Aufwärts-Fotodiode mehr. Dadurch kehren sich die Kurve und die Phase für die Fotodioden um (Abbildung 2).

Abbildung: Fotodiodenkurven des APDS-9960 von BroadcomAbbildung 2: Eine Abwärts-Gestenbewegung vor dem APDS-9960 von Broadcom erzeugt diese Fotodiodenkurven, bei denen die vordere Kurve die Gestenrichtung angibt. (Bildquelle: Broadcom)

Mit dem Wissen darüber, wie die Daten für eine Geste generiert werden, schauen wir uns im nächsten Schritt die Schnittstelle zum APDS-9960 an.

Herstellung der Schnittstelle zum Gestensteuerungsgerät APDS-9960 von Broadcom

Der APDS-9960 wird in einem SMD-8-Gehäuse (Oberflächenmontage, 8 Pins) geliefert, das nur wenig Platz auf der Platine beansprucht (Abbildung 3). Der Sensor misst gerade einmal 3,94 × 2,36 × 1,35 Millimeter (mm). Das Paket enthält die normalen Strom- und Erdungspins sowie eine I2C-Schnittstelle für den digitalen Anschluss an einen Mikrocontroller und Pins zum Konfigurieren der LED-Treiberschaltungen. Zudem umfasst das Paket einen Interrupt-Pin für die Benachrichtigung des Mikrocontrollers, wenn Gestendaten zur Verarbeitung verfügbar sind.

Bild: APDS-9960 von Broadcom in einem kompakten SMD-8-Gehäuse für die OberflächenmontageAbbildung 3: Der APDS-9960 steckt in einem kompakten SMD-8-Gehäuse mit minimalem Platzbedarf auf der Karte. (Bildquelle: Broadcom)

Für die Herstellung eines Prototyps und die Anbindung an den APDS-9960 stehen verschiedene Optionen zur Verfügung. So bietet beispielsweise die SparkFun-Entwicklungskarte APDS-9960 eine relativ kleine Breakout-Karte mit LED-Treiberschaltkreisen, wodurch sie sofort einsatzbereit ist (Abbildung 4). Der Entwickler muss lediglich eine Stiftleiste anlöten, um Strom und Masse zu verbinden sowie den I2C-Bus und den optionalen Interrupt-Pin an einen Mikrocontroller anzuschließen. Dann kann er seine Embedded-Software programmieren. Die SparkFun-Karte umfasst auch Montagelöcher, damit sie in ein System eingebunden werden kann, wenn die Verwendung einer vorhandenen Karte für die Anwendung sinnvoll ist.

Bild: SparkFun-Evaluierungskarte APDS-9960Abbildung 4: Die SparkFun-Evaluierungskarte APDS-9960 verfügt über alle notwendigen Schaltkreise für den Einstieg in die Gestensteuerung. (Bildquelle: DigiKey)

Als Alternative können Entwickler die Breakout-Karte APDS-9960 von Adafruit verwenden. Diese Karte ist ebenfalls eine Komplettlösung (Abbildung 5). Die Breakout-Karte von Adafruit ist deshalb interessant, weil sie nicht nur klein ist, sondern auch einen integrierten 3-Volt-Regler enthält, mit dem zusätzliche Schaltkreise wie eine Power-LED oder sogar ein Low-Power-Mikrocontroller betrieben werden können. Darüber hinaus bietet Adafruit Entwicklern ein vollständiges Benutzerhandbuch zur Adafruit APDS9960 sowie mehrere Softwarebibliotheken für die Anbindung an Arduino-Karten oder Entwicklungskarten, auf denen Python ausgeführt wird. Dadurch lässt sich die APDS-9960 praktisch sofort verwenden und kann die Einstiegszeit für Entwickler drastisch verkürzen.

Bild: Breakout-Karte APDS-9960 von AdafruitAbbildung 5: Die Breakout-Karte APDS-9960 von Adafruit enthält neben der APDS-9960 einen eigenen 3-Volt-Regler sowie I2C-Spannungsumsetzungskreise zur Unterstützung von 3- bzw. 5-Volt-Bussen. (Bildquelle: DigiKey)

Am einfachsten lässt sich die Verbindung zu einer dieser Breakout-Karten durch Anlöten von Stiftleisten des Typs 22-28-4255 von Molex an die Karten bewerkstelligen. Am besten verwendet man dazu nach unten zeigende Stiftleisten, weil das mehrere Vorteile bietet. Zum einen lässt sich die Karte dadurch in ein lötfreies Breadboard wie das 340-002-1 von Digilent einstecken (Abbildung 6). Zum anderen bleibt die Oberfläche der Karte frei und bietet jede Menge Platz für Handgesten, ohne dabei versehentlich Drähte zu berühren, die von den Stiftleisten hängen.

Bild: Breakout-Karte APDS-9960 von AdafruitAbbildung 6: Die mit gelöteter Stiftleiste versehene und auf ein lötfreies Breadboard von Digilent aufgesteckte Breakout-Karte APDS-9960 von Adafruit. (Bildquelle: Adafruit)

Jetzt müssen noch Strom und Masse sowie die I2C-Leitungen an die gewünschte Mikrocontroller-Entwicklungskarte angeschlossen werden. Geeignet ist dafür jede Entwicklungskarte mit einem Mikrocontroller. Eine gute Wahl ist das STM32L475-IoT-Discovery-Kit B-L475E-IOT01A2 für IoT-Knoten von STMicroelectronics (Abbildung 7). Diese Entwicklungskarte verfügt über Arduino-Stiftleisten und wird zudem von MicroPython unterstützt, das sich mit minimalem Aufwand auf der Karte programmieren lässt. Sobald dies erfolgt ist, lässt sich mittels Python-Skripts die Schnittstelle zum Gestensensor herstellen. Dadurch wird die Erzeugung der Gestensteuerung nicht nur machbar, sondern geradezu trivial.

Abbildung: IoT-Discovery-Kit STM32L475 für IoT-Knoten von STMicroelectronicsAbbildung 7: Das Discovery-Kit für IoT-Knoten STM32L475 verfügt über Arduino-Stiftleisten, über die sich einfach eine Schnittstelle zu APDS-9960-Breakout-Karten herstellen lässt. (Bildquelle: STMicroelectronics)

Gestenerkennung mit Python

Der Abruf von Gestendaten von der APDS-9960 ist nicht kompliziert, setzt jedoch voraus, dass der Entwickler das Datenblatt sorgfältig studiert. Die APDS-9960 bietet mehrere Funktionen, darunter:

  • Gestenerfassung
  • Umgebungslichtmessung
  • RGB-Farberfassung
  • Näherungserfassung

Alle genannten Funktionen werden über eine Zustandsmaschine gesteuert, die auf der Basis der für die Anwendung eingerichteten Register ausgeführt wird. So lässt sich beispielsweise mit der Näherungserfassung erkennen, ob überhaupt eine Hand präsent ist, und so verhindern, dass die Gestenerfassung permanent ausgeführt wird. Sobald die reflektierte IR-Energie einen definierten Zählwert erreicht hat, geht die Näherungserfassung in die Gestenerfassung über. Diese misst die Richtungsfotodioden und legt den Messwert in einem FIFO-Puffer ab. Zur Aktivierung dieser Funktion muss das Steuerregister auf die Aktivierung der Näherungserfassung eingestellt sein. Zudem muss eine Zählwertschwelle gesetzt werden.

Je nach den von der Anwendung benötigten Gesten muss der Entwickler u. U. Algorithmen für die Erkennung spezifischer Gesten schreiben. Für gängige Gesten wie „oben/unten“ sowie „links/rechts“ können Entwickler jedoch die CircuitPython-Bibliothek der Adafruit APDS-9960 nutzen. Nachdem die Bibliothek auf das Python-Gerät kopiert wurde, kann sie mit dem Code in Listing 1 importiert werden. Dieser Code importiert neben der APDS-9960-Bibliothek mehrere Bibliotheken, die den I2C-Bus unterstützen.

Kopieren
import board 
import busio 
import adafruit_apds9960.apds9960 
 
i2c = busio.I2C(board.SCL, board.SDA) 
sensor = adafruit_apds9960.apds9960.APDS9960(i2c)

Listing 1: Der Code für den Import von CircuitPython und die Initialisierung der Bibliothek zur Herstellung der Schnittstelle zum APDS-9960-Gestensteuerungsgerät. (Bildquelle: Adafruit)

Das Sensorobjekt ist eine Instanz der Bibliothek APDS-9960. Gleich werden wir sehen, dass ihre Verwendung sehr einfach ist. Um die Gestenerkennung zu aktivieren, muss der Entwickler lediglich mit folgendem Code die Gestenfunktion aktivieren:

Kopieren
sensor.enable_gesture = True
Die eigentliche Hauptprogrammschleife zum Lesen der Geste besteht nur aus wenigen Zeilen Code (Listing 2).
gesture = sensor.gesture()
while gesture == 0:
gesture = sensor.gesture()
print('Saw gesture: {0}'.format(gesture))

Listing 2: Die Erkennung einer Geste erfolgt im Grunde nur durch das wiederholte Aufrufen einer Methode aus der Bibliothek. (Bildquelle: Adafruit)

Wie Sie an diesem Code sehen können, werden erkannte Gesten an den Bildschirm gesendet (Abbildung 8).

Abbildung: Beispiel für eine Gestenausgabe von der CircuitPython-Bibliothek der Adafruit APDS-9960Abbildung 8: Beispiel für eine Gestenausgabe von der CircuitPython-Bibliothek der Adafruit APDS-9960. (Bildquelle: Adafruit)

Die Gestenausgabe erfolgt über eine Zahl, die sich mit folgendem Schlüssel einfach umwandeln lässt:

0 = keine Geste erkannt

1 = Aufwärts-Geste erkannt

2 = Abwärts-Geste erkannt

3 = Links-Geste erkannt

4 = Rechts-Geste erkannt

Wie gezeigt, kann die Erkennung einfacher Gesten durch Nutzung einer bereits vorhandenen Bibliothek mittels einiger weniger Codezeilen sehr einfach sein. Bei komplexeren Gesten müsste die Bibliothek modifiziert werden, um die Gesten-Rohdaten zu analysieren.

Tipps und Tricks für das Entwickeln eines Gestensteuerungsgeräts

Das Entwickeln und Integrieren eines Gestensteuerungssensors in ein Produkt birgt einige Herausforderungen. Nachstehend finden Sie einige Tipps und Tricks, die Entwickler bei der Arbeit mit infrarotbasierten Gestensteuerungen beherzigen müssen:

  • Nutzen Sie den internen Näherungssensor des Gestensensors, um die Gestensteuerung auszulösen und unnötige Auslösungen zu minimieren.
  • Beginnen Sie mit einer vorhandenen Gestenbibliothek und ergänzen Sie die bereits vorhandenen Funktionen um zusätzliche Gesten.
  • Stellen Sie die Verstärkung der Fotodioden auf Werte ein, die sich am besten für die Endanwendung eignen.
  • Stellen Sie die Intensität des LED-Ausgangstreibers auf die besten Werte für die Anwendung ein. Um reproduzierbare Ergebnisse zu erzielen, muss u. U. eine Feineinstellung vorgenommen werden.
  • Die Entwicklung von Gestenanwendungen sollte mit der Entwicklung der Software auf hoher Ebene beginnen und sich erst dem Code auf niedrigerer Ebene zuwenden, wenn der Sensor verstanden wurde.

Werden diese Tipps befolgt, können Entwickler den Zeitaufwand für die Einrichtung und den Betrieb einer IR-Gestensteuerung minimieren.

Fazit

Die Entwicklung von Mensch-Maschine-Schnittstellen geht in Richtung der natürlichen und intuitiven Interaktion mit Maschinen. Entscheidend dafür ist der Einsatz von Gestensteuerungstechnik. Diese Technik gibt es in vielfältiger Ausprägung; der Gestensensor auf Infrarotbasis ist jedoch die kostengünstigste und am einfachsten zu handhabende Technik. Wie gezeigt muss die Einbindung eines Gestensensors in einen Mikrocontroller keine zeitraubende Aufgabe sein – wenn Entwickler dabei auf vorhandene Hardware- und Softwaretechnologien setzen.

DigiKey logo

Haftungsausschluss: Die Meinungen, Überzeugungen und Standpunkte der verschiedenen Autoren und/oder Forumsteilnehmer dieser Website spiegeln nicht notwendigerweise die Meinungen, Überzeugungen und Standpunkte der DigiKey oder offiziellen Politik der DigiKey wider.

Über den Autor

Image of Jacob Beningo

Jacob Beningo

Jacob Beningo ist ein Berater für eingebettete Software, der derzeit mit Kunden in mehr als einem Dutzend Ländern zusammenarbeitet, um ihr Unternehmen durch die Verbesserung von Produktqualität, Kosten und Markteinführungszeit dramatisch zu transformieren. Er hat mehr als 200 Artikel über Entwicklungstechniken für eingebettete Software veröffentlicht, ist ein gefragter Redner und technischer Trainer und verfügt über drei Abschlüsse, darunter einen Masters of Engineering der University of Michigan. Bei Interesse können Sie ihn unter jacob@beningo.com kontaktieren oder besuchen Sie seine Website www.beningo.com und melden Sie sich für seinen monatlichen Embedded Bytes Newsletter an.

Über den Verlag

Nordamerikanische Fachredakteure von DigiKey