Leer iluminación ambiental con Arduino Nano 33 BLE Sense (sensor APDS9960)

Ya hemos visto que Arduino Nano 33 BLE Sense cuenta con un sensor que permite detectar colores, pero no solo eso, al mismo tiempo que lee los colores permite medir la cantidad de luz ambiental.

Lo primero es incluir la librería correspondiente. Se encuentra en el gestor de librerías de Arduino por lo que solo hay que buscarlo para instalarlo:

#include <Arduino_APDS9960.h>

Al incluirla se puede acceder al objeto APDS:

  • Se usa APDS.begin(); para inicializar la lectura de datos. Devuelve true si todo ha ido bien y false si ha ocurrido algún error.
  • Es necesario declarar cuatro variables de tipo int donde se almacenaran los valores leídos int r, g, b, a;
  • Para leer el color se usa APDS.readColor(r, g, b, a); a la que es necesario pasar los cuatro integer declarados antes. El que nos interesa es el a que contiene el valor de la iluminación ambiental.

Veamos como queda el código inspirado en uno de los ejemplos:

/*
  APDS-9960 - Color Sensor

  This example reads color data from the on-board APDS-9960 sensor of the
  Nano 33 BLE Sense and prints the color RGB (red, green, blue) values
  to the Serial Monitor once a second.

  The circuit:
  - Arduino Nano 33 BLE Sense

  This example code is in the public domain.
*/

#include <Arduino_APDS9960.h>

void setup() {
  Serial.begin(9600);
  while (!Serial);

  //comprueba si elsensor se ha iniciado correctamente
  if (!APDS.begin()) {
    Serial.println("Error initializing APDS-9960 sensor.");
  }
}

void loop() {
  // comprueba si hay un color disponible
  while (! APDS.colorAvailable()) {
    delay(5);
  }
  int r, g, b, a;
  
  // lee el color
  APDS.readColor(r, g, b, a);

  Serial.print("r = ");
  Serial.println(r);
  Serial.print("g = ");
  Serial.println(g);
  Serial.print("b = ");
  Serial.println(b);
  Serial.print("a = ");
  Serial.println(a);
  Serial.println();

  delay(2000);
}

Al igual que con los colores el máximo valor que he logrado que devuelva para la luz ambiental es 4097 y el mínimo es 0.