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

12/2018
Coole Projekte

Diese Ausgabe als PDF kaufen

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

Stellenmarkt

Neuigkeiten

  • Bytes und Beats

    In Sonic Pi können Sie mit wenigen Codezeilen Klänge manipulieren, Beats zusammenstellen und ganze Songs komponieren.

  • Klein, aber fein

  • Trick or treat

    Das traditionelle RPG-Gruselkabinett glänzt dieses Jahr mit einer innovativen Umsetzung mittels Pneumatik und Elektropneumatik sowie ST-Programmierung.

  • Unter Kontrolle

    Traditionell stellen wir alljährlich ein selbst gebautes Halloween-Gespenst vor. Die pneumatischen und elektronischen Grundlagen erklärt dieser Artikel.

  • Go Pi Go!

    Der Bausatz GoPiGo3 liefert Bauteile und Software für ein kleines Roboterauto. Zusammen mit einem RasPi als Gehirn programmieren Sie den Roboter per Mausklick.

  • Handlicher Helfer

    Während die Folien der Präsentation durchlaufen, liefert ein kleiner Dokumentenserver auf Basis des GL-AR300M-ext zusätzliche Informationen aus.

  • Wiederverwertet

    Mithilfe eines einfachen Python-Programms recyceln Sie ein ausgedientes Smartphone als drahtlos angebundenes RasPi-Display.

  • Herzenssache

    Steigt beim Krimi der Herzschlag bedrohlich an? Mit einem Pulsmesser in Eigenbau ermitteln Sie einfach und kostengünstig, ob der Herzschlag noch in verträglichen Bereichen liegt.

  • Fernbedient

    Mit der Fernbedienung den RasPi steuern. In der Theorie möglich, in der Praxis oft beschwerlich. Die Libcec liefert praktische Tools zur Fehlersuche.

  • Musikwürfel

    Mit Musikcube machen Sie Ihre eigene Sammlung fit fürs Streamen. Der terminalbasierte Audioplayer lässt sich Fernsteuern und bietet eine App für Android-Smartphones.