Bildergalerie
Bild 1: Blockdiagramm des digitalen Umgebungslicht- und Infrarot-Näherungssensors MAX44000.
Bild 2: Zielabstand vs. Signalstärke beim Näherungssensor MAX44000, gemessen mit einer 18 %-Graukarte  bei 100 mA Treiberstrom ohne Glas vor dem Sensor.
Code-Beispiel Triggerung des Host-Prozessors durch einen vom MAX44000 ausgelösten Interrupt.
Beispiel für ein FIR-Filter zur Verringerung des Falscherkennungsrisikos
Beispiel für einen vom MAX44000 per Hardware ausgelösten Host-Prozessor-Interrupt
25790.jpg

Maxim

Technikbegeisterte Köche lassen sich ihre Rezepte selbstverständlich von einem Tablet-PC oder Smartphone anzeigen. Manchmal stellt sich dies jedoch als nicht so ganz einfach dar. Das Handheld-Gerät geht nach ein paar Minuten in den Sleep-Modus über, um Strom zu sparen. Wenn man dann etwas im Rezept nachschauen möchte, gibt es zwei Möglichkeiten: Entweder wird das Gerät so konfiguriert, dass es ständig eingeschaltet bleibt – dann verbraucht es unnötig Strom; oder es wird bei Bedarf immer wieder aufgeweckt und man riskiert dabei, hässliche Fingerabdrücke aus Mehl, Fett oder Tomatenketchup auf dem Bildschirm zu hinterlassen. Natürlich kann man sich auch jedesmal, bevor man etwas nachschaut, die Hände waschen – doch das ist lästig und verschwendet Wasser.

Durch moderne Technik gibt es jetzt die Möglichkeit, das Gerät durch eine Handbewegung aufzuwecken, ohne es zu berühren.

Näheres über Näherungssensoren

Viele Touchscreen-Geräte, insbesondere Smartphones, enthalten Infrarot- (IR) Näherungssensoren. Diese Sensoren dienen in der Regel dazu, den Bildschirm beim Annehmen eines Anrufs abzuschalten, um ungewollte Bildschirmeingaben während des Telefonats zu verhindern. Dieser Sensor – und ein paar pfiffige Software-Routinen – ist alles, was benötigt wird, um das Gerät berührungslos per Handbewegung einzuschalten.

Dahinter steckt die folgende Idee: Man bringt den Näherungssensor dazu, dass er, wenn das Gerät schläft – d. h. wenn der Touchscreen abgeschaltet ist und der Host-Prozessor sich im Stromspar-Modus befindet – „Ausschau hält“ nach Abstandsänderungen relativ zum Hintergrund, und dass er bei ausreichend großer Änderung das Gerät weckt. Dies verhält sich ähnlich zu der Situation, in der der Näherungssensor den Bildschirm abschaltet, sobald ein Anruf entgegengenommen wird. In unserer Applikation müssen lediglich die Sensordaten ein wenig anders interpretiert werden.

Hochintegrierter Licht- und Näherungssensor zur Gestenerkennung

Der im nur 2 mm x 2 mm x 0,6-mm-Gehäuse untergebrachte digitale Umgebungslicht- und Infrarot-Näherungssensor MAX44000 eignet sich besonders für den Einsatz bei berührungsempfindlichen Bildschirmen von Smartphones und Mobilgeräten sowie Industriesensoren und Präsenzmeldern. Der Beitrag beschäftigt sich mit der Problematik der Gestenerkennung und stützt sich dabei beispielhaft auf diesen Baustein.

Zunächst einmal wird der vom Sensor gemeldete „normale“ Hintergrundwert erfasst. Dieser ist im Idealfall null, in der Praxis ist allerdings mit systematischen Offsets (beispielsweise durch Rückstreuungen oder Übersprechen) zu rechnen. Danach wird der Sensor so konfiguriert, dass er entweder einen Interrupt auslöst oder ein entsprechendes Signal an den Host-Prozessor sendet, sobald der Sensor-Messwert die vorgegebene Schwelle überschreitet. Dadurch wird das System aufgeweckt und der Bildschirm eingeschaltet. Das Konzept ist ganz einfach und lässt sich unter Verwendung eines Umgebungslicht- und IR-Näherungssensors implementieren.

In unserem Beispiel wird der MAX44000 verwendet, der alle 1,56 ms, oder auch langsamer bis maximal 100 ms (abwechselnd mit dem Umgebungslichtsensor) einen Messwert liefert. Bei einer Erkennungsdistanz von 10 cm und einer LED mit einem Abstrahlwinkel von ±15° wird eine Fläche von etwa 22 cm2 (bzw. ein Kreis mit einem Durchmesser von etwa 5,3 cm) abgedeckt. Ein Ziel, das sich durch diesen Bereich hindurch bewegt, muss bei den periodischen Messungen mindestens einmal erfasst werden, damit es erkannt wird.

Die Aufweck-Schwelle

In der Theorie ist der Ansatz sehr einfach. Wenn ein Gerät in den Sleep-Modus übergeht, wird der Näherungssensor so konfiguriert, dass er die Umgebung scannt und einen Interrupt sendet, sobald er ein Ziel erkennt (d. h. der Sensor-Messwert eine vorgegebene Schwelle überschreitet). Ob die Schwelle überschritten ist oder nicht, kann der Host-Prozessor herausfinden, indem er regelmäßig den Sensor-Messwert über die I2C-Schnittstelle abfragt. Leider kosten solche regelmäßigen Abfragen mehr Strom, als manchem Nutzer lieb ist.

An dieser Stelle kommt eine Besonderheit des Sensors MAX44000 zum Tragen. Er ist so konzipiert, dass er den Host-Prozessor entlastet, wodurch dieser weniger Strom verbraucht.

Wenn die internen Näherungs-Interrupts des MAX44000 (Bit 1 im Register 0x01) aktiviert werden, lässt sich die Aufweck-Schwelle in ein internes Register (0x0B und 0x0C) schreiben. Sobald der Sensor-Messwert diese Schwelle überschreitet, setzt der Sensor ein Interrupt-Flag. Daraufhin zieht der MAX44000 die externe (Active-low-) INT-Leitung auf Low und löst dadurch einen Host-Prozessor-Interrupt aus. Auf den Interrupt hin kann der Host-Prozessor dann – je nach Programmierung – das Gerät aufwecken und den Bildschirm einschalten oder sonstige Aktionen ausführen.

Wie so oft ist die praktische Implementierung einer Anwendung komplizierter als die zugrunde liegende Theorie. Für berührungsloses Aufwecken genügt es nicht, nach einem einzigen Messwert Ausschau zu halten, der die Schwelle überschreitet. Stattdessen müssen mehrere Faktoren berücksichtigt werden.

Signalpegel und Auswertung

Der vielleicht wichtigste Aspekt ist der zum Triggern der Aufweck-Bedingung gewählte Signalpegel. Hier muss man einen Kompromiss zwischen Ansprechempfindlichkeit und Immunität gegenüber Falscherkennung schließen. Eine niedrige Schwelle begünstigt die Erkennung eines Eingangssignals (beispielsweise einer Geste), erhöht jedoch das Risiko einer Falscherkennung infolge von Rauschen oder ungewollten Bewegungen. Umgekehrt kann eine hohe Schwelle das Falscherkennungsrisiko auf nahezu null reduzieren, zugleich aber auch die Empfindlichkeit so weit herabsetzen, dass nur noch sehr nahe Ziele erkannt werden und sogar wildes Gestikulieren ignoriert würde.

Dieses Problem geht man am besten an, indem man zunächst einmal das Systemrauschen reduziert. Dies kann mithilfe optischer Lösungen erreicht werden sowie durch eine sorgfältige elektrische Signalführung und geschickte Bauteilplatzierung. Durch Reduktion des Rauschens wird das Falscherkennungsrisiko verringert. Als nächstes ist eine „mittlere“ Erkennungsdistanz (beispielsweise 4 cm bis 5 cm) auszuwählen und anschließend das Signal unter Verwendung eines Test-Ziels zu messen. Ideal geeignet für diesen Zweck ist eine 18 %-Graukarte. Der Vollständigkeit halber sei darauf hingewiesen: Wenn in der jeweiligen Anwendung vor dem Sensor ein Dunkelglasfilter angeordnet ist, muss dieses auch in die Messungen einbezogen werden. Der gemessene Signalpegel eignet sich gut zum Abschätzen eines passenden Schwellenwertes. Eine Faustregel besagt, dass der Pegel auf 8 % bis 15 % des Bereichsendwertes eingestellt werden sollte, wobei im Einzelfall natürlich Abweichungen möglich sind.

Der mit der zuvor beschriebenen Messung ermittelte Aufweck-Schwellenwert wird in die Näherungssensor-Schwellenwertregister des MAX44000 geschrieben. Bild 2 zeigt die Sensor-Messwerte in Abhängigkeit vom Ziel-Abstand, gemessen mit einer 18 %-Graukarte bei 100 mA Treiberstrom und ohne Glas vor dem Sensor. Die blaue Linie markiert einen geeigneten Aufweck-Schwellenwert.

Rauschen und Tiefpassfilter

Falls Rauschen ein Problem darstellt, kann das Signal mithilfe eines Tiefpassfilters „gesäubert“ werden. Es gibt zwei Möglichkeiten, ein solches Tiefpassfilter zu implementieren. Eine dieser Möglichkeiten besteht darin, den MAX44000 über spezielle Registerbits so zu programmieren, dass er erst dann ein Interrupt-Flag setzt, wenn eine vorgegebene Anzahl von Messwerten den Schwellenwert überschreitet.

Bei der zweiten Möglichkeit werden die Sensor-Messwerte in einer Warteschlange gespeichert und anschließend ein Software-implementiertes FIR-Filter darauf angewendet. Beide Ansätze haben leider einen Schönheitsfehler: Wenn es nicht möglich ist, die Abtastrate des Näherungssensors zu erhöhen, dann verringert sich dadurch die maximale Geschwindigkeit der Handbewegung, bei der die Geste noch zuverlässig erkannt wird. Insbesondere beim Betrieb mit einer effektiven Abtastperiode von 100 ms kann das problematisch sein. Bei dem erstgenannten Verfahren kann die Triggerverzögerung bis zu 16 Messungen betragen (in der Regel ist eine Verzögerung um 4 Messungen ausreichend).

Maximale Geschwindigkeit der Handbewegung

Die maximale Geschwindigkeit der Handbewegung wird durch folgende Faktoren bestimmt: Blickfeld des Sensors (±15° beim MAX44000), Größe und Abstand der Hand, Abtastperiode und Schwellenwert. Unter der Annahme, dass all diese Parameter so eingestellt sind, dass die Hand während 10 cm ihrer Bewegung erkannt wird, so ergibt sich bei einer Abtastperiode T von beispielsweise 100 ms (langsamste Abtastgeschwindigkeit des MAX44000) eine maximal zulässige Geschwindigkeit von 1 m/s. Das ist recht schnell. Wenn zwecks Verringerung des Falscherkennungsrisikos mehrere Messwerte ausgewertet werden, reduziert sich die maximal zulässige Geschwindigkeit entsprechend. Diese ist weiterhin von der Erfassungsschwelle abhängig. Je empfindlicher die Erfassungsschwelle, desto länger wird die Hand erkannt und desto schnellere Bewegungen können erfasst werden. Wie bereits oben erwähnt wurde, sollte der Schwellenwert aber sorgfältig gewählt werden, um Falscherfassungen zu vermeiden.

Der Faktor Mensch

Menschen haben unterschiedliche Hände, und auch ihre Bewegungen unterscheiden sich voneinander. Bei einer Anwendung wie dieser sollte man deshalb Fallstudien durchführen, um herauszufinden, wie schnell und in welchem Abstand typische Benutzer die Hand vor dem Bildschirm bewegen und ob sie dabei Handschuhe tragen oder nicht. Je nach Art des Touchscreen-Gerätes – Smartphone, Tablet, Armaturenbrett… – kann diese Interaktion erheblich variieren. Alle diese Variablen, die sich unter „Faktor Mensch“ subsummieren lassen, müssen bei der Entwicklung solcher Anwendungen berücksichtigt werden.
Und noch etwas muss beachtet werden: Wann liegt überhaupt eine Handbewegung vor und wann nicht? Konkret: Woran erkennt ein Gerät, ob ein Sensorsignal aus einer Handbewegung resultiert und nicht etwa daher, dass das Gerät in eine Hülle, eine Tasche oder einen Rucksack gesteckt oder mit dem Bildschirm nach unten abgelegt wird? Hier muss den Tatsachen ins Gesicht geschaut werden – auf diese Frage gibt es keine einfache Antwort, es sei denn, das Gerät verfügt über Kontextinformationen. Wie es diese Kontextinformationen erhält, ist ein ganz anderes Thema.
Letztlich lässt es sich beispielsweise so einrichten, dass die Aufweckfunktion nur dann aktiviert wird, wenn das Touchscreen-Gerät bestimmte Applikationen ausführt, oder dass sie vom Benutzer selbst aktiviert werden muss. Viele mobile Geräte enthalten außerdem Beschleunigungssensoren, die das Gerät darüber informieren, wenn es mit der Vorderseite nach unten abgelegt wird. Die Gestenerkennung könnte außerdem automatisch deaktiviert werden, wenn das Gerät vom Benutzer in den Sleep-Modus versetzt wird (zum Beispiel beim Ausschalten).

Code-Beispiele

Zum Abschluss sind drei Code-Beispiele angeführt, die dabei helfen, das beschriebene Konzept in der Praxis zu testen. Code 1 ist eine rudimentäre Implementierung der Weckfunktion, bei der einfach nur die Näherungssensor-Messwerte mit dem vorgegebenen Schwellenwert verglichen werden; bei Überschreitung der Schwelle wird die Variable device_status auf WAKE_MODE gesetzt, und man kann sich beispielsweise den Sensor-Messwert anzeigen lassen. Das zweite Code-Beispiel baut auf dem ersten auf und zeigt eine Implementierung des bereits beschriebenen FIR-Filterkonzepts. Das dritte und letzte Beispiel demonstriert die Triggerung des Host-Prozessors durch einen vom MAX44000 ausgelösten Interrupt. Die beiden letztgenannten Code-Beispiele sind über die infoDIRECT-Nummer abrufbar.