KS0269
Nuevo
Módulo de detección óptica de proximidad por led infrarrojo ALS. Marca Keyestudio.
EL KS0269 un sensor triple integrado que incluye luz ambiental, sensor de proximidad y LED infrarrojo, que tiene dos funciones, por un lado, se utiliza para detectar el brillo ambiental actual (ALS); De acuerdo con el brillo ambiental actual, ajusta automáticamente el brillo de la luz de fondo para adaptarse a la luz ambiental mediante el ajuste del software, lo que puede suavizar el brillo de la luz de fondo para proteger su visión y lograr el efecto de ahorro de energía.
Respecto a la otra función, es un sensor de proximidad (PROX). El sensor ha sido integrado transmisor / receptor y minimizado el diseño, además, el diseño y la instalación no tienen más restricciones de espacio, y para parte de una estructura es relativamente simple.



#define DUMP_REGS
#include <Wire.h>
#include <APDS9930.h>
// Pins
#define APDS9930_INT 2 // Necesita ser un pin de interrupción
#define LED_PIN 13 // LED para mostrar la interrupción
// Constantes
#define PROX_INT_HIGH 600 // Nivel de proximidad para la interrupción
#define PROX_INT_LOW 0 // Sin interrupción
// Variables globales
APDS9930 apds = APDS9930 ();
flotante luz_de_ambiente = 0; // también puede ser un largo sin signo
uint16_t ch0 = 0;
uint16_t ch1 = 1;
uint16_t proximity_data = 0;
volatile bool isr_flag = false;
void setup () {
// Establecer el LED como salida
pinMode (LED_PIN, SALIDA);
pinMode (APDS9930_INT, INPUT);
// Inicializar el puerto serie
Serial.begin (9600);
Serial.println ();
Serial.println (F ("------------------------------"));
Serial.println (F ("APDS-9930 - ProximityInterrupt"));
Serial.println (F ("------------------------------"));
// Inicia la rutina del servicio de interrupción
attachInterrupt (digitalPinToInterrupt (APDS9930_INT), interruptRoutine, FALLING);
// Inicializar APDS-9930 (configurar I2C y valores iniciales)
if (apds.init ()) {
Serial.println (F ("inicialización APDS-9930 completa"));
}
else {
Serial.println (F ("Algo salió mal durante APDS-9930 init!"));
}
// Ajuste la ganancia del sensor de proximidad
if (! apds.setProximityGain (PGAIN_2X)) {
Serial.println (F ("Algo salió mal al intentar establecer PGAIN"));
}
// Establecer umbrales de interrupción de proximidad
if (! apds.setProximityIntLowThreshold (PROX_INT_LOW)) {
Serial.println (F ("Error al escribir bajo umbral"));
}
if (! apds.setProximityIntHighThreshold (PROX_INT_HIGH)) {
Serial.println (F ("Error al escribir alto umbral"));
}
// Comience a ejecutar el sensor de proximidad APDS-9930 (interrupciones)
if (apds.enableProximitySensor (true)) {
Serial.println (F ("El sensor de proximidad se está ejecutando ahora"));
}
else {
Serial.println (F ("Algo salió mal durante el sensor init!"));
}
// Comience a ejecutar el sensor de luz APDS-9930 (sin interrupciones)
if (apds.enableLightSensor (false)) {
Serial.println (F ("Sensor de luz se está ejecutando ahora"));
}
else {
Serial.println (F ("¡Algo salió mal durante el inicio del sensor de luz!"));
}
#ifdef DUMP_REGS
/ * Register dump * /
uint8_t reg;
uint8_t val;
para (reg = 0x00; reg <= 0x19; reg ++) {
if ((reg! = 0x10) && \
(reg! = 0x11))
{
apds.wireReadDataByte (reg, val);
Serial.print (reg, HEX);
Serial.print (": 0x");
Serial.println (val, HEX);
}
}
apds.wireReadDataByte (0x1E, val);
Serial.print (0x1E, HEX);
Serial.print (": 0x");
Serial.println (val, HEX);
#terminara si
}
void loop () {
// Si ocurre una interrupción, imprima el nivel de proximidad
if (isr_flag) {
// Leer el nivel de proximidad e imprimirlo
if (! apds.readProximity (proximity_data)) {
Serial.println ("Error al leer el valor de proximidad");
}
else {
Serial.print ("Proximity detected! Level:");
Serial.print (proximity_data);
Serial.print ("");
}
apds.readAmbientLightLux (ambient_light);
// Leer los niveles de luz (ambiente, rojo, verde, azul)
if (! apds.readAmbientLightLux (ambient_light) ||
! apds.readCh0Light (ch0) ||
! apds.readCh1Light (ch1)) {
Serial.println (F ("Error al leer los valores de luz"));
}
else {
Serial.print (F ("Ambiente:"));
Serial.print (ambient_light);
Serial.print (F ("Ch0:"));
Serial.print (ch0);
Serial.print (F ("Ch1:"));
Serial.println (ch1);
}
// Enciende el LED por medio segundo
digitalWrite (LED_PIN, ALTO);
retraso (300);
digitalWrite (LED_PIN, BAJO);
// Restablecer el indicador y borrar la interrupción APDS-9930 (¡IMPORTANTE!)
isr_flag = false;
if (! apds.clearProximityInt ()) {
Serial.println ("Error al borrar la interrupción");
}
}
}
void interruptRoutine () {
isr_flag = verdadero;
}
Probado por el software de la versión Arduino-1.8.2, luego abra el monitor serie, puede ver los datos como la figura que se muestra a continuación.