

O Arduino é uma plataforma que nos dá uma vasta quantidade de sensores e módulos capazes de executar as mais diversas tarefas, coletando os mais variados dados do ambiente em que estão inseridos.Hoje vamos apresentar o APDS-9960: um sensor capaz de reconhecer determinados padrões de movimentos e cores no padrão RGBC que pode agregar muito valor e conhecimento aos seus projetos. Veja um pouco sobre suas características e como utilizá-lo em conjunto com o Arduino:
O APDS-9960 é um módulo que possui um sensor de cor RGB, gestos e luminosidade em um único encapsulamento. É produzido pela Broadcom e uma das suas principais aplicações no mercado foi a interface de movimento e luminosidade presentes no Galaxy S5, da Samsung. Para o Arduino, o módulo traz uma interface de comunicação I2C, além de um pino para interrupção (INT) e um para infravermelho (VL).Falando um pouco sobre cada sensor presente no módulo, temos:Sensor de gestos: O sensor de gestos do módulo APDS-9960 é composto por quatro fotodiodos direcionais integrados com um filtro de bloqueio visível, o que permite a detecção de gestos como subir, descer, direita e esquerda a distâncias de até 10cm sem a necessidade de calibração por parte do usuário. Sempre que um movimento é realizado, o sinal infravermelho que é constantemente emitido reflete no objeto e então é detectado por pelos fotodiodos: se um movimento é feito da esquerda para a direita, o sinal IR refletido é detectado primeiramente pelos fotodiodos à esquerda do sensor e, dessa forma, o sensor entende que o movimento foi feito no sentido esquerda -> direita.Sensor RGBC: O sensor de cor do módulo APDS-9960 é no padrão RGBC (Vermelho, Verde, Azul e Claro). Isso faz com que ele seja capaz de detectar a intensidade da luz sob várias condições de luminosidade graças aos materiais de atenuação presentes em seu sensor. Além disso, o módulo conta com um filtro de bloqueio UV-IR integrado que permite a medição da luz ambiente e cores correlacionadas de forma mais precisa.Veja abaixo algumas características desse módulo:
Como dito anteriormente o módulo APDS-9960 possui dois sensores em seu encapsulamento. Vamos te mostrar como fazer o uso de cada um separadamente, começando pelo sensor de cor:


/****************************************************************
GestureTest.ino
APDS-9960 RGB and Gesture Sensor
Shawn Hymel @ SparkFun Electronics
May 30, 2014
https://github.com/sparkfun/APDS-9960_RGB_and_Gesture_Sensor
Conexões
Importante: O módulo APDS-9960 funciona somente com 3.3V!!!
Arduino Pin APDS-9960 Board Function
3.3V VCC Power
GND GND Ground
A4 SDA I2C Data
A5 SCL I2C Clock
D2 INT Interrupt
****************************************************************/
//Inclusão de bibliotecas
#include <Wire.h>
#include <SparkFun_APDS9960.h>
//Pinos
#define APDS9960_INT 2 // Needs to be an interrupt pin
//Variáveis globais
SparkFun_APDS9960 apds = SparkFun_APDS9960();
int isr_flag = 0;
void setup() {
//Seta o pino de interrupção como entrada
pinMode(APDS9960_INT, INPUT);
//Inicializa a comunicação serial
Serial.begin(9600);
Serial.println();
Serial.println(F("--------------------------------"));
Serial.println(F("SparkFun APDS-9960 - Teste de Gestos"));
Serial.println(F("--------------------------------"));
//Iniciando rotina de interrupção
attachInterrupt(0, interruptRoutine, FALLING);
//Iniciando o módulo APDS-9960
if ( apds.init() ) {
Serial.println(F("APDS-9960: Inicialização completa!"));
} else {
Serial.println(F("APDS-9960: Algo deu errado durante a inicialização!"));
}
//Iniciando o sensor de gestos
if ( apds.enableGestureSensor(true) ) {
Serial.println(F("O sensor de gestos está funcionando!"));
} else {
Serial.println(F("Algo deu errado durante a unidade do sensor de gestos!"));
}
}
void loop() {
//Lógica de interrupção
if( isr_flag == 1 ) {
detachInterrupt(0);
handleGesture();
isr_flag = 0;
attachInterrupt(0, interruptRoutine, FALLING);
}
}
//Função responsável pela interrupção
void interruptRoutine() {
isr_flag = 1;
}
//função responsável por identificar e retornar os resultados da leitura
void handleGesture() {
if ( apds.isGestureAvailable() ) {
switch ( apds.readGesture() ) {
case DIR_UP:
Serial.println("CIMA");
break;
case DIR_DOWN:
Serial.println("BAIXO");
break;
case DIR_LEFT:
Serial.println("ESQUERDA");
break;
case DIR_RIGHT:
Serial.println("DIREITA");
break;
case DIR_NEAR:
Serial.println("APROXIMANDO");
break;
case DIR_FAR:
Serial.println("DISTANCIANDO");
break;
default:
Serial.println("GESTO NÃO RECONHECIDO");
}
}
}
/****************************************************************
ColorSensor.ino
APDS-9960 RGB and Gesture Sensor
Shawn Hymel @ SparkFun Electronics
October 15, 2014
https://github.com/sparkfun/APDS-9960_RGB_and_Gesture_Sensor
Conexões
Importante: O módulo APDS-9960 funciona somente com 3.3V!!!
Arduino Pin APDS-9960 Board Function
3.3V VCC Power
GND GND Ground
A4 SDA I2C Data
A5 SCL I2C Clock
******************************************************************/
//Inclusão de bibliotecas
#include <Wire.h>
#include <SparkFun_APDS9960.h>
//Instanciando o objeto "apds" e atribuindo como valor uma função existente na biblioteca
SparkFun_APDS9960 apds = SparkFun_APDS9960();
//Variáveis globais
uint16_t ambient_light = 0;
uint16_t red_light = 0;
uint16_t green_light = 0;
uint16_t blue_light = 0;
void setup() {
//Inicializando a comunicação serial
Serial.begin(9600);
Serial.println();
Serial.println(F("--------------------------------"));
Serial.println(F("SparkFun APDS-9960 - Sensor de Cor"));
Serial.println(F("--------------------------------"));
//Inicializa o módulo APDS-9960
if ( apds.init() ) {
Serial.println(F("APDS-9960: Inicialização completa!"));
} else {
Serial.println(F("APDS-9960: Algo deu errado durante a inicialização!"));
}
//Executa o sensor de luminosidade
if ( apds.enableLightSensor(false) ) {
Serial.println(F("O sensor de luz está funcionando!"));
} else {
Serial.println(F("Algo deu errado durante a unidade do sensor de luz!"));
}
// Aguarde a inicialização e calibração terminar
delay(500);
}
void loop() {
// Lê os níveis de luminosidade (ambiente, vermelho, verde, azul)
if ( !apds.readAmbientLight(ambient_light) ||
!apds.readRedLight(red_light) ||
!apds.readGreenLight(green_light) ||
!apds.readBlueLight(blue_light) ) {
Serial.println("Erro ao ler os valores de luminosidade");
} else {
Serial.print("Ambiente: ");
Serial.print(ambient_light);
Serial.print(" Vermelho: ");
Serial.print(red_light);
Serial.print(" Verde: ");
Serial.print(green_light);
Serial.print(" Azul: ");
Serial.println(blue_light);
}
// Espera 1 segundo e executa a próxima leitura
delay(1000);
}
A variação é causada pela intensidade da luz incidente no sensor. Essa variação é exibida da seguinte forma:Ambiente: índice de luminosidade local
Vermelho: índice do espectro vermelho na luz captada
Verde: índice do espectro verde na luz captada
Azul: índice do espectro azul na luz captadaQuando há um aumento na intensidade em determinada faixa de cor, como no azul destacado acima, os valores lidos são significativamente maiores naquela faixa que os demais. Isso nos permite desenvolver algoritmos que detectam as mínimas variações em um determinado espectro e retornem com precisão a cor reconhecida (lembre-se que, para essa finalidade, devem ser consideradas apenas as leituras de vermelho, verde e azul, ok?). Legal, né?Hoje você conheceu mais um sensor muito legal e extremamente útil e versátil em aplicações que envolvam luz. Esperamos que esse post te ajude e te motive a conhecer ainda mais o fantástico mundo do Arduino e suas infinitas possibilidades. Um forte abraço e até a próxima!
Se você deseja adquirir mais sensores como esse, visite a nossa loja e conheça nossa linha de produtos voltadas para o Arduino e robótica. Nos siga no Instagram e, se você desenvolveu qualquer projeto com base no blog ou com nossos produtos, tire uma foto e nos mencione. Estamos ansiosos para ver a criatividade dos nossos leitores e clientes!Conheça a Metodologia Eletrogate e ofereça aulas de robótica em sua escola!
|
Hoje vamos apresentar o APDS-9960: um sensor capaz de reconhecer determinados padrões de movimentos e cores no padrão RGBC que pode agregar muito valor e conhecimento aos seus projetos. Veja um pouco sobre suas características e como utilizá-lo em conjunto com o Arduino.
Encontre tudo na Loja Eletrogate com frete grátis para compras acima de R$ 200