A09|02 Der Lagesensor APDS-9930
APDS-9930 Attitude Sensor

Sensorwerte / Magnetsensoren

https://learn.sparkfun.com/tutorials/bi-directional-logic-level-converter-hookup-guide/all

https://electropeak.com/learn/interfacing-apds-9930-proximity-and-ambient-light-and-gesture-sensor-with-arduino/

https://wiki.keyestudio.com/Ks0267_keyestudio_APDS-9930_Attitude_Sensor_Module

Der APDS-9930 bietet digitale Umgebungslichterkennung (ALS), IR-LED und ein komplettes Näherungserkennungssystem in einem einzigen 8-Pin-Gehäuse. Die Näherungsfunktion bietet eine Plug-and-Play-Erkennung bis zu 100 mm (ohne Frontglas), wodurch die Notwendigkeit einer werkseitigen Kalibrierung des Endgeräts oder der Unterbaugruppe entfällt.

Die Näherungserkennungsfunktion funktioniert sowohl bei hellem Sonnenlicht als auch in dunklen Räumen. Der große Dynamikbereich ermöglicht auch die Erkennung von kurzen Entfernungen hinter dunklem Glas, wie z. B. bei einem Mobiltelefon. Darüber hinaus bietet eine interne Zustandsmaschine die Möglichkeit, das Gerät zwischen ALS- und Näherungsmessungen in einen Energiesparmodus zu versetzen, was einen sehr niedrigen durchschnittlichen Stromverbrauch ermöglicht. Die ALS bietet eine photopische Reaktion auf die Lichtintensität bei sehr schlechten Lichtverhältnissen oder hinter einer dunklen Frontscheibe.

Das APDS-9930 ist besonders nützlich für das Display-Management, um die Batterielebensdauer zu verlängern und eine optimale Anzeige bei unterschiedlichen Lichtverhältnissen zu gewährleisten. Die Hintergrundbeleuchtung von Display und Tastatur kann bis zu 30 bis 40 Prozent der gesamten Plattformleistung ausmachen. Die ALS-Funktionen sind ideal für den Einsatz in Notebooks, LCD-Monitoren, Flachbildfernsehern und Mobiltelefonen.

Die Näherungsfunktion ist speziell auf Nahfeldanwendungen ausgerichtet. In Mobiltelefonen kann die Näherungserkennung erkennen, wenn der Benutzer das Telefon nahe an sein Ohr hält. Das Gerät ist schnell genug, um Näherungsinformationen mit einer hohen Wiederholungsrate zu liefern, die bei der Annahme eines Telefonanrufs erforderlich ist. Dies bietet sowohl eine verbesserte "grüne" Energiesparfunktion als auch die zusätzliche Sicherheit, den Computer zu sperren, wenn der Benutzer nicht anwesend ist. Die zusätzlichen mikrooptischen Linsen innerhalb des Moduls sorgen für eine hocheffiziente Übertragung und einen effizienten Empfang von Infrarotenergie, wodurch die Gesamtverlustleistung gesenkt wird.

Merkmale

- ALS, IR-LED und Annäherungsdetektor in einem optischen Modul

- Erkennung von Umgebungslicht (ALS)

- Entspricht in etwa der menschlichen Augenreaktion

- Programmierbare Unterbrechungsfunktion mit oberem und unterem Schwellenwert

- Bis zu 16-Bit Auflösung

- Hohe Empfindlichkeit für den Betrieb hinter abgedunkeltem Glas

- Niedrige Lux-Leistung bei 0,01 Lux Näherungserkennung

- Vollständig kalibriert auf 100 mm Erkennung

- Integrierte IR-LED und synchroner LED-Treiber

- Stromverbrauch im Wartezustand - 90 µA typisch

- Programmierbar von 2,7 ms bis > 8 Sekunden

- Bis zu 400 kHz (I2C Fast-Mode)

- Dedizierter Interrupt-Pin

Hier ist ein Modul, das ich gekauft habe

Übersetzt mit www.DeepL.com/Translator (kostenlose Version)

Das Keyestudio-Lagesensormodul verwendet hauptsächlich den APDS-9930-Chip. Der APDS-9930 in einem einzigen 8-Pin-Gehäuse kann den Umgebungslichtsensor bereitstellen, der mit der I2C-Schnittstelle und dem Infrarot-LED-Näherungssensor kompatibel ist.

Der vollständig justierte Näherungssensor kann ein 100-mm-Objekt erkennen und befreit sowohl Endgeräte als auch Unterkomponenten von den Anforderungen der Werkskalibrierung. Von hellem Sonnenlicht bis hin zu dunklen Räumen kann die Näherungssensorfunktion des Näherungssensors gut funktionieren.

Die durch dieses Modul hinzugefügte mikrooptische Linse kann für eine energieeffiziente Übertragung und einen energieeffizienten Empfang von Infrarotstrahlung sorgen, wodurch der Gesamtstromverbrauch gesenkt werden kann. Darüber hinaus kann seine interne Zustandsmaschine das Gerät in einen Niedrigverbrauchsmodus versetzen, was einen sehr niedrigen durchschnittlichen Stromverbrauch mit sich bringt.

Betrieb Voltage:DC 3.3-3.8V

Ausgang Current:0-20mA

Merkmale:

1. optisches Modul integriert mit ALS, Infrarot-LED und Näherungsdetektor;

3. programmierbare Unterbrechungsfunktion mit oberem und unterem Schwellwert;

4. bis zu 16-Bit-Auflösung;

5. hohe Empfindlichkeit der Bedienung auf der Rückseite von dunklem Glas;

6.0.01lux Leistung bei niedrigen Lumen;

7.Näherungserkennung, vollständig kalibriert auf 100-mm-Erkennung;

8.Integrierte Infrarot-LED und synchroner LED-Treiber;

9 Eliminiert die werkseitige Kalibrierung für Näherungssensoren;

10.programmierbarer Wartetimer, Stromverbrauch im Wartezustand - 90μA (typischer Wert);

11.programmierbarer Bereich von 2,7 Millisekunden bis 8 Sekunden;

12 Kompatibel mit I2C-Schnittstelle, bis zu 400 kHz (I2C-Schnellmodus);

13 Dedizierter Unterbrechungs-Pin;

14.Leistung im Ruhemodus - 2,2μA (typischer Wert).

 

Spezifikationen
- Signalart: digital
- Spannung: 3,3V – 3,8V
- Pinabstand: 2,54mm
- Stromaufnahme: 0-20mA
- Temperaturbereich:
–40℃ bis 85℃

 

Der Aufbau

attitude-.png
 
 

Der minimal Sketch

Der kapazitative Taster ist digitaler Natur. Er besitzt interne Elektronik, die die Eingabe in ein digitales Signal wandelt.

#include < Wire.h >
#include < SparkFun_APDS9960.h >

// Pins
#define APDS9960_INT    2  // Needs to be an interrupt pin
#define LED_PIN         13 // LED for showing interrupt

// Constants
#define LIGHT_INT_HIGH  1000 // High light level for interrupt
#define LIGHT_INT_LOW   10   // Low light level for interrupt

// Global variables
SparkFun_APDS9960 apds = SparkFun_APDS9960();
uint16_t ambient_light = 0;
uint16_t red_light = 0;
uint16_t green_light = 0;
uint16_t blue_light = 0;
int isr_flag = 0;
uint16_t threshold = 0;

void setup() { 
  // Set LED as output
  pinMode(LED_PIN, OUTPUT);
  pinMode(APDS9960_INT, INPUT);
  // Initialize Serial port
  Serial.begin(9600);
  Serial.println();
  Serial.println(F("-------------------------------------"));
  Serial.println(F("SparkFun APDS-9960 - Light Interrupts"));
  Serial.println(F("-------------------------------------"));
  // Initialize interrupt service routine
  attachInterrupt(0, interruptRoutine, FALLING);
  // Initialize APDS-9960 (configure I2C and initial values)
  if ( apds.init() ) {
    Serial.println(F("APDS-9960 initialization complete"));
  } else {
    Serial.println(F("Something went wrong during APDS-9960 init!"));
  }
  // Set high and low interrupt thresholds
  if ( !apds.setLightIntLowThreshold(LIGHT_INT_LOW) ) {
    Serial.println(F("Error writing low threshold"));
  }
  if ( !apds.setLightIntHighThreshold(LIGHT_INT_HIGH) ) {
    Serial.println(F("Error writing high threshold"));
  }
  // Start running the APDS-9960 light sensor (no interrupts)
  if ( apds.enableLightSensor(false) ) {
    Serial.println(F("Light sensor is now running"));
  } else {
    Serial.println(F("Something went wrong during light sensor init!"));
  }
  // Read high and low interrupt thresholds
  if ( !apds.getLightIntLowThreshold(threshold) ) {
    Serial.println(F("Error reading low threshold"));
  } else {
    Serial.print(F("Low Threshold: "));
    Serial.println(threshold);
  }
  if ( !apds.getLightIntHighThreshold(threshold) ) {
    Serial.println(F("Error reading high threshold"));
  } else {
    Serial.print(F("High Threshold: "));
    Serial.println(threshold);
  }
  // Enable interrupts
  if ( !apds.setAmbientLightIntEnable(1) ) {
    Serial.println(F("Error enabling interrupts"));
  }
  // Wait for initialization and calibration to finish
  delay(500);
}

  
void loop() 
{ 
  // If interrupt occurs, print out the light levels
  if ( isr_flag == 1 ) {
    
    // Read the light levels (ambient, red, green, blue) and print
    if (  !apds.readAmbientLight(ambient_light) ||
          !apds.readRedLight(red_light) ||
          !apds.readGreenLight(green_light) ||
          !apds.readBlueLight(blue_light) ) {
      Serial.println("Error reading light values");
    } else {
      Serial.print("Interrupt! Ambient: ");
      Serial.print(ambient_light);
      Serial.print(" R: ");
      Serial.print(red_light);
      Serial.print(" G: ");
      Serial.print(green_light);
      Serial.print(" B: ");
      Serial.println(blue_light);
    }  
    // Turn on LED for a half a second
    digitalWrite(LED_PIN, HIGH);
    delay(500);
    digitalWrite(LED_PIN, LOW);
    
    // Reset flag and clear APDS-9960 interrupt (IMPORTANT!)
    isr_flag = 0;
    if ( !apds.clearAmbientLightInt() ) {
      Serial.println("Error clearing interrupt");
    }  
  }
}
void interruptRoutine() {
  isr_flag = 1;
}
 

Falls du die hier beschriebenen Elektronik-Module nicht hast kannst du sie in meiner Einkaufsliste finden. Warum ich selber hauptsächlich mit Modulen der Marke Keyestudio arbeite erläutere ich unter diesem Blog-Artikel.

In dieser Übersicht äußere ich Empfehlungen aller Art.

Hier kommst du wieder zur Übersicht aller Module.