apds9960 — Yakınlık, Hareket ve Renk Sensörü Sürücüsü

Bu modül, Broadcom/Avago APDS9960 dijital yakınlık, ortam ışığı, RGB renk ve hareket sensörü için I2C üzerinden bir sürücü sağlar. Sürücü; özellik bazında etkinleştirme/devre dışı bırakma denetimlerini, ham kanal okumalarını (clear, R, G, B, yakınlık) ve çip üzerindeki 4 fotodiyotlu FIFO’dan yukarı/aşağı/sola/sağa kaydırma ve yakın/uzak hareketlerini sınıflandıran bir yazılımsal hareket çözme durum makinesini açığa çıkarır.

Örnek kullanım:

import time
from machine import I2C, Pin
from apds9960 import uAPDS9960 as APDS9960

bus = I2C(1, scl=Pin("P15"), sda=Pin("P14"))
sensor = APDS9960(bus)

sensor.enableLightSensor()
sensor.enableProximitySensor()

while True:
    r = sensor.readRedLight()
    g = sensor.readGreenLight()
    b = sensor.readBlueLight()
    c = sensor.readAmbientLight()
    p = sensor.readProximity()
    print(r, g, b, c, p)
    time.sleep_ms(100)

Sınıflar

class apds9960.APDS9960(bus: machine.I2C, address: int = 0x39, valid_id: list = [0xAB, 0x9C, 0xA8, -0x55])

Bir APDS9960 sürücü örneği oluşturur.

  • bus, sensörle iletişim kurmak için kullanılan, yapılandırılmış bir I2C veri yolu nesnesidir. Temel sınıf, SMBus tarzı read_byte_data, write_byte_data ve read_i2c_block_data çağrıları yapar; MicroPython’ın machine.I2C sınıfı için bunun yerine uAPDS9960 kullanın.

  • address, aygıtın 7 bitlik I2C adresidir. Varsayılan olarak APDS9960_I2C_ADDR (0x39) değerine sahiptir.

  • valid_id, çipin ID yazmacının döndürdüğü kabul edilebilir değerlerin bir listesidir. Varsayılan olarak APDS9960_DEV_ID değerine sahiptir.

Yapıcı, aygıt ID’sini okur ve değer valid_id içinde yoksa ADPS9960InvalidDevId yükseltir. Ardından her özelliği devre dışı bırakır, varsayılan ATIME/WTIME/PPULSE değerlerini programlar ve varsayılan LED sürüş akımını, yakınlık kazancını, ALS kazancını, yakınlık eşiklerini, ortam ışığı eşiklerini, kalıcılığı ve hareket motoru yapılandırmasını (giriş/çıkış eşikleri, GCONF1, hareket kazancı, hareket LED sürüş akımı, hareket bekleme süresi, hareket ofsetleri, GPULSE, GCONF3 ve hareket kesmesi etkinleştirme) uygular.

Mod ve güç denetimi

getMode() int

Hangi özelliklerin şu anda etkin olduğunu (güç, ALS, yakınlık, bekleme, ALS kesmesi, yakınlık kesmesi, hareket) kodlayan ENABLE yazmacının ham değerini döndürür.

setMode(mode: int, enable: bool = True) None

ENABLE yazmacındaki tek bir özelliği etkinleştirir veya devre dışı bırakır. mode, APDS9960_MODE_* değerlerinden biri olmalıdır (APDS9960_MODE_POWER ..\ APDS9960_MODE_ALL). mode APDS9960_MODE_ALL olduğunda, tüm bitler aynı anda açılır veya kapatılır. Aralık dışı değerler için ADPS9960InvalidMode yükseltir.

enablePower() None

APDS9960’ı açar (ENABLE içindeki PON bitini ayarlar).

disablePower() None

APDS9960’ı kapatır (ENABLE içindeki PON bitini temizler).

Ortam ışığı / RGB sensörü

enableLightSensor(interrupts: bool = True) None

Varsayılan ALS kazancını geri yükler, ALS kesmesi etkinleştirme bitini yapılandırır, aygıtı açar ve ortam ışığı/renk motorunu etkinleştirir.

disableLightSensor() None

ALS kesmesini devre dışı bırakır ve ortam ışığı/renk motorunu durdurur.

readAmbientLight() int

Clear kanalı ortam ışığı seviyesini 16 bitlik işaretsiz bir değer olarak okur.

readRedLight() int

Kırmızı kanal seviyesini 16 bitlik işaretsiz bir değer olarak okur.

readGreenLight() int

Yeşil kanal seviyesini 16 bitlik işaretsiz bir değer olarak okur.

readBlueLight() int

Mavi kanal seviyesini 16 bitlik işaretsiz bir değer olarak okur.

Yakınlık sensörü

enableProximitySensor(interrupts: bool = True) None

Varsayılan yakınlık kazancını ve LED sürüş akımını geri yükler, yakınlık kesmesi etkinleştirme bitini yapılandırır, aygıtı açar ve yakınlık motorunu etkinleştirir.

disableProximitySensor() None

Yakınlık kesmesini devre dışı bırakır ve yakınlık motorunu durdurur.

readProximity() int

Yakınlık seviyesini 8 bitlik işaretsiz bir değer olarak okur.

Hareket motoru

enableGestureSensor(interrupts: bool = True) None

Hareket durumunu sıfırlar, WTIME ve hareket darbe sayısını ayarlar, LED’i %300’e yükseltir, hareket kesmesi etkinleştirme bitini yapılandırır, hareket durum makinesine girer, aygıtı açar ve bekleme, yakınlık ve hareket modlarını etkinleştirir.

disableGestureSensor() None

Hareket durumunu sıfırlar, hareket kesmesini ve durum makinesini devre dışı bırakır ve hareket motorunu durdurur.

isGestureAvailable() bool

Hareket durum yazmacının GVALID biti ayarlıysa True döndürür; bu, hareket FIFO verisinin okunmaya hazır olduğunu gösterir.

readGesture() int

Hareket FIFO’sunu boşaltır, yerleşik hareket çözücüyü çalıştırır ve APDS9960_DIR_* yön sabitlerinden birini döndürür. Motor çalışmıyorsa, geçerli veri yoksa veya veri tanınan bir harekete çözümlenmediyse APDS9960_DIR_NONE döndürür.

resetGestureParameters() None

Dahili hareket FIFO arabelleğini, farkları (delta), sayımları, yakın/uzak sayaçlarını, durumu ve son çözülen hareketi temizler.

processGestureData() bool

U/D ve L/R farklarını (delta) ve yakın/uzak sayaçlarını güncellemek için şu anda arabelleğe alınmış ham U/D/L/R FIFO örneklerini işler. Yakın veya uzak bir olay tespit edilirse True, aksi halde False döndürür.

decodeGesture() bool

Geçerli U/D ve L/R sayımlarını ve biriken farkları (delta), dahili gesture_motion_ alanında saklanan bir yöne dönüştürür. Bir yön tanındığında True, aksi halde False döndürür.

Yakınlık eşikleri

getProxIntLowThresh() int

Düşük yakınlık kesmesi eşiğini (PILT yazmacı) döndürür.

setProxIntLowThresh(threshold: int) None

Düşük yakınlık kesmesi eşiğini ayarlar.

getProxIntHighThresh() int

Yüksek yakınlık kesmesi eşiğini (PIHT yazmacı) döndürür.

setProxIntHighThresh(threshold: int) None

Yüksek yakınlık kesmesi eşiğini ayarlar.

getProximityIntLowThreshold() int

getProxIntLowThresh() için takma ad.

setProximityIntLowThreshold(threshold: int) None

setProxIntLowThresh() için takma ad.

getProximityIntHighThreshold() int

getProxIntHighThresh() için takma ad.

setProximityIntHighThreshold(threshold: int) None

setProxIntHighThresh() için takma ad.

LED sürüş akımı, kazanç ve güçlendirme

getLEDDrive() int

Yakınlık ve ALS için kullanılan LED sürüş gücünü döndürür. APDS9960_LED_DRIVE_* değerlerinden biri olarak kodlanır (0 = 100 mA, 1 = 50 mA, 2 = 25 mA, 3 = 12.5 mA).

setLEDDrive(drive: int) None

Yakınlık ve ALS için kullanılan LED sürüş gücünü ayarlar. drive, APDS9960_LED_DRIVE_* değerlerinden biridir.

getProximityGain() int

Yakınlık alıcısı kazancını döndürür. APDS9960_PGAIN_* değerlerinden biri olarak kodlanır (0 = 1x, 1 = 2x, 2 = 4x, 3 = 8x).

setProximityGain(drive: int) None

Yakınlık alıcısı kazancını ayarlar. drive, APDS9960_PGAIN_* değerlerinden biridir.

getAmbientLightGain() int

Ortam ışığı sensörü kazancını döndürür. APDS9960_AGAIN_* değerlerinden biri olarak kodlanır (0 = 1x, 1 = 4x, 2 = 16x, 3 = 64x).

setAmbientLightGain(drive: int) None

Ortam ışığı sensörü kazancını ayarlar. drive, APDS9960_AGAIN_* değerlerinden biridir.

getLEDBoost() int

LED akım güçlendirmesini döndürür. APDS9960_LED_BOOST_* değerlerinden biri olarak kodlanır (0 = %100, 1 = %150, 2 = %200, 3 = %300).

setLEDBoost(boost: int) None

LED akım güçlendirmesini ayarlar. boost, APDS9960_LED_BOOST_* değerlerinden biridir.

Yakınlık kazanç telafisi ve fotodiyot maskesi

getProxGainCompEnable() bool

Yakınlık kazanç telafisi etkinse True döndürür.

setProxGainCompEnable(enable: bool) None

Yakınlık kazanç telafisini etkinleştirir veya devre dışı bırakır.

getProxPhotoMask() int

Devre dışı bırakılmış yakınlık fotodiyotlarının 4 bitlik maskesini döndürür. Bitler şöyle eşlenir: 3=UP, 2=DOWN, 1=LEFT, 0=RIGHT; 1 bir fotodiyotu devre dışı bırakır ve 0 etkinleştirir.

setProxPhotoMask(mask: int) None

Devre dışı bırakılmış yakınlık fotodiyotlarının 4 bitlik maskesini ayarlar (yukarıdaki kodlamaya bakın).

Hareket yapılandırması

getGestureEnterThresh() int

Hareket moduna girmek için gereken yakınlık eşiğini döndürür.

setGestureEnterThresh(threshold: int) None

Hareket moduna girmek için gereken yakınlık eşiğini ayarlar.

getGestureExitThresh() int

Hareket modundan çıkmak için gereken yakınlık eşiğini döndürür.

setGestureExitThresh(threshold: int) None

Hareket modundan çıkmak için gereken yakınlık eşiğini ayarlar.

getGestureGain() int

Hareket modu sırasında kullanılan fotodiyot kazancını döndürür. APDS9960_GGAIN_* değerlerinden biri olarak kodlanır (0 = 1x, 1 = 2x, 2 = 4x, 3 = 8x).

setGestureGain(gain: int) None

Hareket modu sırasında kullanılan fotodiyot kazancını ayarlar.

getGestureLEDDrive() int

Hareket modu sırasında kullanılan LED sürüş akımını döndürür. APDS9960_LED_DRIVE_* değerlerinden biri olarak kodlanır.

setGestureLEDDrive(drive: int) None

Hareket modu sırasında kullanılan LED sürüş akımını ayarlar.

getGestureWaitTime() int

Hareket tespitleri arasındaki düşük güçlü bekleme süresini döndürür. APDS9960_GWTIME_* değerlerinden biri olarak kodlanır (0 = 0 ms .. 7 = 39.2 ms).

setGestureWaitTime(time: int) None

Hareket tespitleri arasındaki düşük güçlü bekleme süresini ayarlar.

getGestureMode() bool

Hareket durum makinesi şu anda çalışıyorsa True döndürür.

setGestureMode(enable: bool) None

Hareket durum makinesine girer veya çıkar.

Ortam ışığı kesmesi eşikleri

getLightIntLowThreshold() int

Ortam ışığı kesmesi için kullanılan 16 bitlik düşük eşiği döndürür.

setLightIntLowThreshold(threshold: int) None

Ortam ışığı kesmesi için kullanılan 16 bitlik düşük eşiği ayarlar.

getLightIntHighThreshold() int

Ortam ışığı kesmesi için kullanılan 16 bitlik yüksek eşiği döndürür.

setLightIntHighThreshold(threshold: int) None

Ortam ışığı kesmesi için kullanılan 16 bitlik yüksek eşiği ayarlar.

Kesme etkinleştirmeleri ve temizlemeleri

getAmbientLightIntEnable() bool

Ortam ışığı kesmeleri etkinse True döndürür.

setAmbientLightIntEnable(enable: bool) None

Ortam ışığı kesmelerini etkinleştirir veya devre dışı bırakır.

getProximityIntEnable() bool

Yakınlık kesmeleri etkinse True döndürür.

setProximityIntEnable(enable: bool) None

Yakınlık kesmelerini etkinleştirir veya devre dışı bırakır.

getGestureIntEnable() bool

Hareket kesmeleri etkinse True döndürür.

setGestureIntEnable(enable: bool) None

Hareket kesmelerini etkinleştirir veya devre dışı bırakır.

clearAmbientLightInt() None

Bekleyen bir ortam ışığı kesmesini temizler.

clearProximityInt() None

Bekleyen bir yakınlık kesmesini temizler.

class apds9960.uAPDS9960(bus: machine.I2C, address: int = 0x39, valid_id: list = [0xAB, 0x9C, 0xA8, -0x55])

APDS9960 sınıfının MicroPython alt sınıfı. Genel API’si aynıdır, ancak alttaki yazmaç erişimi SMBus tarzı yöntemler yerine machine.I2C tarzı readfrom_mem ve writeto_mem çağrılarını kullanır. OpenMV / MicroPython hedeflerinde kullanılacak sınıf budur.

İstisnalar

exception apds9960.ADPS9960InvalidDevId(id: int, valid_ids: list)

ValueError alt sınıfı. Çipin ID yazmacından okunan değer valid_id listesinde bulunmadığında APDS9960 yapıcısı tarafından yükseltilir.

exception apds9960.ADPS9960InvalidMode(mode: int)

ValueError alt sınıfı. mode argümanı APDS9960_MODE_POWER..\ APDS9960_MODE_ALL aralığının dışında olduğunda APDS9960.setMode() tarafından yükseltilir.

Sabitler

I2C adresi ve aygıt ID’leri

apds9960.APDS9960_I2C_ADDR: int

APDS9960’ın varsayılan 7 bitlik I2C adresi (0x39).

apds9960.APDS9960_DEV_ID: list

Geçerli aygıt ID yazmacı değerlerinin varsayılan listesi ([0xAB, 0x9C, 0xA8, -0x55]).

Hareket ayarlaması

apds9960.APDS9960_GESTURE_THRESHOLD_OUT: int

Hareket çözücünün, aralık içindeki ilk/son FIFO örneklerini ararken kullandığı minimum örnek büyüklüğü (fotodiyot başına).

apds9960.APDS9960_GESTURE_SENSITIVITY_1: int

Çözücünün bir kaydırma yönüne karar verdiği, biriken U/D ve L/R farkları (delta) üzerindeki eşik.

apds9960.APDS9960_GESTURE_SENSITIVITY_2: int

Çözücünün bir örneği kaydırma yerine yakın/uzak adayı olarak değerlendirdiği, adım başına U/D ve L/R farkları (delta) altındaki eşik.

apds9960.APDS9960_TIME_FIFO_PAUSE: int

Hareket döngüsünün FIFO boşaltmaları arasında uyuduğu milisaniye.

Özellik modları

Bu değerler APDS9960.setMode() yöntemine aktarılır.

apds9960.APDS9960_MODE_POWER: int

Güç açma biti (0).

apds9960.APDS9960_MODE_AMBIENT_LIGHT: int

Ortam ışığı/renk motoru etkinleştirme biti (1).

apds9960.APDS9960_MODE_PROXIMITY: int

Yakınlık motoru etkinleştirme biti (2).

apds9960.APDS9960_MODE_WAIT: int

Bekleme durumu etkinleştirme biti (3).

apds9960.APDS9960_MODE_AMBIENT_LIGHT_INT: int

Ortam ışığı kesmesi etkinleştirme biti (4).

apds9960.APDS9960_MODE_PROXIMITY_INT: int

Yakınlık kesmesi etkinleştirme biti (5).

apds9960.APDS9960_MODE_GESTURE: int

Hareket motoru etkinleştirme biti (6).

apds9960.APDS9960_MODE_ALL: int

APDS9960.setMode() yöntemine ENABLE yazmacındaki her biti aynı anda etkinleştirmesini veya devre dışı bırakmasını söyleyen nöbetçi (sentinel) değer (7).

LED sürüş akımları

apds9960.APDS9960_LED_DRIVE_100MA: int

100 mA LED sürüş akımı (0).

apds9960.APDS9960_LED_DRIVE_50MA: int

50 mA LED sürüş akımı (1).

apds9960.APDS9960_LED_DRIVE_25MA: int

25 mA LED sürüş akımı (2).

apds9960.APDS9960_LED_DRIVE_12_5MA: int

12.5 mA LED sürüş akımı (3).

Yakınlık kazancı (PGAIN)

apds9960.APDS9960_PGAIN_1X: int

1x yakınlık kazancı (0).

apds9960.APDS9960_PGAIN_2X: int

2x yakınlık kazancı (1).

apds9960.APDS9960_PGAIN_4X: int

4x yakınlık kazancı (2). Yapıcı tarafından uygulanan varsayılan.

apds9960.APDS9960_PGAIN_8X: int

8x yakınlık kazancı (3).

Ortam ışığı kazancı (AGAIN)

apds9960.APDS9960_AGAIN_1X: int

1x ALS kazancı (0).

apds9960.APDS9960_AGAIN_4X: int

4x ALS kazancı (1). Yapıcı tarafından uygulanan varsayılan.

apds9960.APDS9960_AGAIN_16X: int

16x ALS kazancı (2).

apds9960.APDS9960_AGAIN_64X: int

64x ALS kazancı (3).

Hareket kazancı (GGAIN)

apds9960.APDS9960_GGAIN_1X: int

1x hareket kazancı (0).

apds9960.APDS9960_GGAIN_2X: int

2x hareket kazancı (1).

apds9960.APDS9960_GGAIN_4X: int

4x hareket kazancı (2). Yapıcı tarafından uygulanan varsayılan.

apds9960.APDS9960_GGAIN_8X: int

8x hareket kazancı (3).

LED güçlendirme

apds9960.APDS9960_LED_BOOST_100: int

%100 LED güçlendirme (0).

apds9960.APDS9960_LED_BOOST_150: int

%150 LED güçlendirme (1).

apds9960.APDS9960_LED_BOOST_200: int

%200 LED güçlendirme (2).

apds9960.APDS9960_LED_BOOST_300: int

%300 LED güçlendirme (3). APDS9960.enableGestureSensor() tarafından otomatik olarak uygulanır.

Hareket bekleme süreleri

apds9960.APDS9960_GWTIME_0MS: int

0 ms (0).

apds9960.APDS9960_GWTIME_2_8MS: int

2.8 ms (1). Yapıcı tarafından uygulanan varsayılan.

apds9960.APDS9960_GWTIME_5_6MS: int

5.6 ms (2).

apds9960.APDS9960_GWTIME_8_4MS: int

8.4 ms (3).

apds9960.APDS9960_GWTIME_14_0MS: int

14.0 ms (4).

apds9960.APDS9960_GWTIME_22_4MS: int

22.4 ms (5).

apds9960.APDS9960_GWTIME_30_8MS: int

30.8 ms (6).

apds9960.APDS9960_GWTIME_39_2MS: int

39.2 ms (7).

Hareket yönleri

Bu değerler APDS9960.readGesture() tarafından döndürülür.

apds9960.APDS9960_DIR_NONE: int

Hareket tespit edilmedi (0).

apds9960.APDS9960_DIR_LEFT: int

Sola kaydırma (1).

apds9960.APDS9960_DIR_RIGHT: int

Sağa kaydırma (2).

apds9960.APDS9960_DIR_UP: int

Yukarı kaydırma (3).

apds9960.APDS9960_DIR_DOWN: int

Aşağı kaydırma (4).

apds9960.APDS9960_DIR_NEAR: int

Yakın olayı (5).

apds9960.APDS9960_DIR_FAR: int

Uzak olayı (6).

apds9960.APDS9960_DIR_ALL: int

Dahili olarak “herhangi bir yön”ü temsil etmek için kullanılan nöbetçi (sentinel) değer (7).

Hareket durumları

Hareket durum makinesi aracılığıyla raporlanan dahili durum değerleri.

apds9960.APDS9960_STATE_NA: int

Durum yok (0).

apds9960.APDS9960_STATE_NEAR: int

Yakın durumu tespit edildi (1).

apds9960.APDS9960_STATE_FAR: int

Uzak durumu tespit edildi (2).

apds9960.APDS9960_STATE_ALL: int

Dahili olarak “herhangi bir durum”u temsil etmek için kullanılan nöbetçi (sentinel) değer (3).