I2C-Workshop, Teil 20: APDS-9960

Farbenspiele

Der winzige Sensorbaustein APDS-9960 vereint vier unterschiedliche Anwendungsfälle in einem Chip.

Der winzige Sensorbaustein APDS-9960 erkennt neben Farben auch noch Annäherung, Bewegung und Umgebungshelligkeit. Schon für wenig Geld gibt es im Handel Module, auf denen er verbaut ist. Mit 38 Seiten geriert sich das Datenblatt [1] zum APDS-9960 schon eher als kleines Buch. Eine komplette Seite darin zählt die Register des Halbleiters samt ihrer Funktion auf. Alle davon bis ins Detail zu beschreiben, würde den Rahmen des Artikels sprengen, sodass wir uns im Folgenden auf die Farbkennung des APDS-9960 beschränken.

Bevor wir ins Detail gehen, sehen wir uns noch einige allgemeine Daten des APDS-9960 an. Als Betriebsspannung verträgt er maximal 3,8 Volt. Die Stromaufnahme hängt vom Betriebsmodus ab, liegt aber immer unter 1 Milliampere. Diese geringe Stromaufnahme erlaubt, das Modul über den 3,3-Volt-Anschluss des Raspberry Pi mit Energie zu versorgen. Am I2C-Bus meldet sich der Baustein unter der Adresse 0x39h.

Wir verwenden für unsere Versuche die Testumgebung, die wir in Teil 18 dieser Reihe aufgebaut haben. In der Tabelle "Verbindung zum APDS-9960-Modul" sehen Sie, wie Sie das Modul an die I2C-Schnittstelle des Raspberry Pi anschließen, Abbildung 1 zeigt den Versuchsaufbau.

Verbindung zum APDS-9960-Modul

GPIO-Pin

APDS-9960-Modul

1 (+3,3 Volt)

VIN

3 (SDA)

SDA

5 (SCL)

SCL

9 (0 Volt)

GND

Abbildung 1: Der Testaufbau.

Für einen Funktionstest benötigen wir eine starke Lichtquelle und Farbfilter, die nur ein bestimmtes Lichtspektrum durchdringen lassen. Interessanterweise funktionieren Gummibärchen als Farbfilter sehr gut, sofern sie den Appetit des Experimentators überleben. Als Lichtquelle dient eine Taschenlampe oder ein Stück eines LED-Bands.

Einstieg

Wie eingangs erwähnt, handelt es sich beim APDS-9960 um einen sehr komplexen Halbleiter. Daher beschäftigen wir uns nur mit den Registern, die wir zur Farberkennung benötigen (siehe Tabelle Tabelle "Register des APDS-9960").

Der APDS-9960 verwendet intern dieselbe Hardware für unterschiedliche Funktionen. Daher müssen Sie beim Verwenden mehrerer Funktionen aufpassen, in welcher Reihenfolge sich diese auswerten lassen. Das Datenblatt liefert alle dazu nötigen Informationen. Da wir hier nur die Farberkennung nutzen, müssen wir uns nicht um die Reihenfolge kümmern.

Register des APDS-9960

Register

Bit

Funktion

Beschreibung

0x80

 

Aktivierungsregister

Sensor einschalten, Funktionen aktivieren

 

0

Power on

Messeinrichtungen anschalten

 

1

ALS Enable

aktiviert Farb- und Lichtsensor

 

2

Proximity Enable

aktiviert die Annäherungserkennung

 

3

Wait Enable

aktiviert den Warte-Timer

 

4

ALS Interrupt Enable

aktiviert die Interrupt-Verarbeitung für Farb- und Lichtsensor

 

5

Proximity Interrupt Enable

aktiviert die Interrupt-Verarbeitung für Annäherungserkennung

 

6

Gesture Enable

aktiviert Gestenerkennung

 

7

reserviert

0x8F

 

Steuerregister 1

Funktionsparameter des ICs einstellen.

 

0/1

 

Verstärkung Farb- und Lichtsensor (00=1x, 01=4x, 10=16x, 11=64x)

 

2/3

 

Verstärkung Annäherungssensor (00=1x, 01=2x, 10=4x, 11=8x)

 

4/5

 

reserviert

 

6/7

 

Stromstärke LED (00=100mA, 01=50mA, 10=25mA, 11=12,5mA)

0x94

 

CDATAL

Low Byte Helligkeit

0x95

 

CDATAH

High Byte Helligkeit

0x96

 

RDATAL

Low Byte rot

0x97

 

RDATAH

High Byte rot

0x98

 

GDATAL

Low Byte grün

0x99

 

GDATAH

High Byte grün

0x9A

 

BDATAL

Low Byte blau

0x9B

 

BDATAH

High Byte blau

Um sicherzustellen, dass der Versuchsaufbau fehlerfrei arbeitet, scannen Sie mithilfe der I2C-Tools den Bus nach Teilnehmern (Listing 1). Meldet sich der APDS-9960 unter der Adresse 0x39h, funktioniert der Testaufbau. Mit den Kommandos aus Listing 2 aktivieren Sie die Farberkennung des Moduls und lassen sich die Werte der Farbregister (jeweils nur das Low Byte) anzeigen. Um den Watch-Befehl abzubrechen, verwenden Sie [Strg]+[C].

Listing 1

$ i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- 39 -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

Listing 2

$ i2cset -y 1 0x39 0x8f 0x01
$ i2cset -y 1 0x39 0x80 0x03
$ watch 'i2cget -y 1 0x39 0x96; i2cget -y 1 0x39 0x98; i2cget -y 1 0x39 0x9a'

Testprogramm

Das in Go geschriebene Testprogramm aus Listing 3 starten Sie mit dem Kommando go run APDS-9960.go. Es aktiviert zunächst die Farberkennung des APDS-9960 und beginnt dann, die einzelnen Register auszulesen und die gemessenen Werte auszuwerten. Mit verschiedenfarbigen Gummibärchen erzeugen Sie für den Sensor unterschiedliche Farben – so lässt er sich einfach testen. Danach können Sie die Filterbären umweltschonend entsorgen.

Damit das Programm fehlerfrei arbeitet, müssen Sie die unterschiedlichen Farbkanäle miteinander abgleichen: Jede Lichtquelle erzeugt ein etwas anderes Licht, die Sensoren zeigen sich für die einzelnen Farben unterschiedlich empfindlich. Auch der Abstand zwischen Sensor und Lichtquelle beeinflusst die Messwerte.

Für den Abgleich aktivieren Sie in Listing 3 zunächst die drei auskommentierten Zeilen 33 bis 35. Danach setzen Sie alle Korrekturfaktoren auf 100 und starten das Programm. Sie erhalten daraufhin unterschiedliche Werte für die einzelnen Farbkanäle. Das Ziel des Abgleichs: Die Resultate für die drei Farben sollen bei weißem Licht möglichst alle denselben Wert annehmen. Passen Sie also nach dem ersten Prüflauf die Faktoren an, starten Sie das Programm erneut, und beginnen Sie gegebenenfalls von vorn, bis alles passt. Es hilft, zum Abgleich die Division durch 1000 in den Berechnungszeilen auszukommentieren.

Sobald Sie gut funktionierende Korrekturfaktoren gefunden haben, kommentieren Sie die drei Codezeilen wieder aus und können nun den Gummibärchensensor testen. Allerdings gibt es keine blauen Gummibären (Anm. d. Red.: siehe Kasten "Käpt'n Blaubär"). Als Ersatz können Sie beispielsweise eine durchscheinende Stiftkappe verwenden.

Käpt'n Blaubär

Wie die mit den Produkten einer bekannten Bonner Süßwarenfirma äußerst vertraute Gattin des Chefredakteurs auf Befragen anmerkte, gibt es im Gegensatz zur Annahme des Autors sehr wohl blaue Gummibärchen, die besagtes Unternehmen traditionell zu jeder Fußballweltmeisterschaft in einer Sonderedition ("Fan-tasia") anbietet [4]. Zumindest im Sommer 2018 haben Sie also gute Chancen, auch die blaue Sensorkomponente des APDS-9960 mit hochwertigen Gelatineprodukten testen zu können. Diese bieten außerdem anders als die vom Autor ersatzhalber vorgeschlagenen Stiftkappen appetitlichere Zweitverwertungmöglichkeiten. Die nächste passende Testmöglichkeit ergibt sich dann voraussichtlich erst wieder Mitte 2022. (jlu)

Falls Sie Probleme beim Abgleich der Werte haben, kann das an einer zu schwachen oder zu starken Lichtquelle liegen. Der APDS-9960 ermöglicht eine Verstärkung für den Farbsensor über die Bits 0 und 1 im Register 0x8f. Möchten Sie den Gummibärchenensensor in Aktion sehen, finden Sie dazu ein Video [2] auf Youtube.

Listing 3

// APDS-9960.go
package main
import (
  "fmt"
  "gobot.io/x/gobot/drivers/i2c"
  "gobot.io/x/gobot/sysfs"
  "time"
)
func main() {
  var red,green,blue uint16
  bus,_ := sysfs.NewI2cDevice("/dev/i2c-1")
  device := i2c.NewConnection(bus,0x39)
  defer device.Close()
  device.WriteByteData(0x8f,0x01)
  device.WriteByteData(0x80,0x03)
  redc=100
  greenc=166
  bluec=231
  for {
    redl,_ := device.ReadByteData(0x96)
    redh,_ := device.ReadByteData(0x97)
    greenl,_ := device.ReadByteData(0x98)
    greenh,_ := device.ReadByteData(0x99)
    bluel,_ := device.ReadByteData(0x9a)
    blueh,_ := device.ReadByteData(0x9b)
    red=((uint16(redh)<<8)+uint16(redl)*redc)/1000
    green=((uint16(greenh)<<8)+uint16(greenl)*greenc)/1000
    blue=((uint16(blueh)<<8)+uint16(bluel)*bluec)/1000
    // --- Farbabgleich -------------------
    // fmt.Printf("red   Value:%d\n",red)
    // fmt.Printf("green Value:%d\n",green)
    // fmt.Printf("blue  Value:%d\n",blue)
    // --- Ende Farbabgleich --------------
    if (red>green&&red>blue) {fmt.Printf("RED\n")}
    if (green>red&&green>blue) {fmt.Printf("GREEN\n")}
    if (blue>green&&blue>red) {fmt.Printf("BLUE\n")}
    time.Sleep(1 * time.Second)
  }
}

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 4 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Raspberry Pi Geek kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Aktuelle Ausgabe

02/2019
Neue Energien

Diese Ausgabe als PDF kaufen

Preis € 9,99
(inkl. 19% MwSt.)

Stellenmarkt

Neuigkeiten

  • Scheibchenweise

    Zu den Stärken von Sonic Pi gehört es, mit wenigen Zeilen Code Samples dynamisch auszuwählen und zu zerlegen.

  • Unter Strom

    Für einen kleinen Spannungsmesser wie den INA3221 gibt es viele Einsatzmöglichkeiten. Wir zeigen, wie Sie den flexiblen Baustein richtig verdrahten.

  • Vermittlungsstelle

    Fischertechnik-Modelle bieten sich zum Fernsteuern an. Mit dem Ftduino schlagen Sie die Brücke zwischen dem RasPi und dem Technik-Spielzeug.

  • Durchgeschlängelt

    Mit den M0-Boards steigen Sie unkompliziert in die Welt der Mikrocontroller ein – ganz ohne C-Kenntnisse.

  • Gesiebt und gefiltert

    Filter und Werbeblocker einzurichten ist besonders auf Smartphones aufwendig. Den eBlocker hingegen schließen Sie einfach nur an Ihren Router an.

  • Es werde Licht

    Wollen Sie bei beginnender Dämmerung nicht ständig die Helligkeit der heimischen Beleuchtung nachregeln, überlassen Sie das einfach einem RasPi – der macht es automatisch.

  • Energiekontrolle

    Der Gesetzgeber erschwert das Direktvermarkten von Strom durch technische Hürden: So muss sich die Einspeisung etwa aus der Ferne abschalten lassen. Der RasPi löst das Problem.

  • H<->2<->-Power

    Gilt es, Energie aus einer regenerativen Quelle zu speichern, erweist sich die Kombi aus einer Brennstoffzelle und dem RasPi als ideale Lösung.

  • Kleine Wolke

    Lokale Cloud-Lösungen im Heimnetz finden immer mehr Nutzer. Mit dem RasPi und Seafile haben Sie eine Lösung zur Hand, die selbst professionellen Ansprüchen genügt.

  • Planvoll verdrahtet

    Die Leiterplattendesign-Software KiCad leistet trotz einer etwas umständlichen Bedienung auch Hobbybastlern gute Dienste.