Arduino Nano 33 BLE Sense incorpora el sensor APDS9960 que permite leer el color de lo que «tiene delante». Para ellos devuelve el color en formato RGB, esto es que devuelve tres valores con los componentes rojo (red), verde (green) y azul (blue) del color. Aunque el valor de estos tres componentes se devuelva en una variable integer de 16 bits realmente solo se usan 12 bits (0…4095). En realidad el mayor valor que he logrado leer del sensor es 4097 que para eso necesita usar 13 bits pero se puede considerar el 4095 como máximo para simplificar.
Para tener más información del sensor se puede consultar su datasheet aquí.
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 tres variables de tipo int donde se almacenaran los valores leídos int r, g, b;
- Para leer el color se usa APDS.readColor(r, g, b); a la que es necesario pasar los tres integer declarados antes.
Veamos como queda el código inspirado en uno de los ejemplos
#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;
// lee el color
APDS.readColor(r, g, b);
Serial.print("r = ");
Serial.println(r);
Serial.print("g = ");
Serial.println(g);
Serial.print("b = ");
Serial.println(b);
Serial.println();
delay(2000);
}
Un detalle importante a tener en cuenta es que el formato RGB que devuelve el sensor tiene 12 bits por componente (color de 36 bits). El color RGB más habitual tiene 8 bits por componente (color de 24 bits) por lo que es probable que la mayoría de los algoritmos y librerías que se encuentren usen ese formato y sea necesario adaptar los valores.
Pingback: Leer iluminación ambiental con Arduino Nano 33 BLE Sense (sensor APDS9960) | Construyendo a Chispas