Módulo sensor de gesto e RGB APDS9960: Analisando seu funcionamento

Neste tutorial utilizaremos o sensor de gesto e RGB APDS9960 com arduino. Este, no que lhe concerne, é utilizado para fazer a medição de luz, cor ambiente, detecção de proximidade e detecção de gestos. Visualizaremos como este pequeno componente funciona e desenvolveremos uma aplicação para ele.

kit robotica educacional com Arduino ESP ou Microbit

O  que é o Módulo Sensor de Gesto e RGB APDS9960?

Este módulo possui o Sensor APDS-9960. Ele mede na parte de cor RGB a intensidade da luminosidade do ambiente, cor ambiente. Além disso, ele também na parte de sensor de gestos detecta nível de proximidade e sentido de gestos (direita, esquerda, alto e baixo) o que permite que um computador, robô ou plataforma microcontroladora possa ser controlado por ele.

– Funcionamento

Primeiramente, o sensor utiliza barramento I2C para utilização (pinos SDA e SCL), possui pino de interrupção (INT) para transferir os dados de proximidade de gesto e um pino adicional (VL) para LED infravermelho além de ser utilizado em projetos  com diversos tipos de Arduino como o NodeMCU ESP8266, pequenos computadores como o Raspberry ou qualquer outra plataforma microcontroladora. Ao mover o sensor, ele consegue identificar o movimento e direção por meio dos gestos que realizamos com ele e nos informar.

– Movimento

De início, os controladores por gestos são muito utilizados hoje em nossos smartphones. Temos então que antes de serem inseridos na sociedade havia a necessidade de ter botões nas telas dos smartphones, entretanto com a chegado desta tecnologia, agora apenas temos que arrastar para o lado quando queremos desbloquear ou mudar de aba no smartphone.

Imagem do sensor de gesto em Smartphones

Aliás, vemos que os sensores de gestos como mostra a imagem abaixo são capazes de imitar perfeitamente os movimentos que fazemos com nossas mãos, por exemplo, em outros objetos.

Imagem do sensor de gesto imitando movimentos

– Os terminais deste sensor são:

  • INT – pino de interrupção
  • VCC – Tensão de entrada 3.3V
  • GND – O pino de O V do módulo, conectado ao GND do Arduino ou fonte
  • SDA  – Pino utilizado pelo barramento I2C
  • SCL – Pino utilizado pelo barramento I2C
  • VL – Pino adicional para LED infravermelho.

Sensor de Gesto e RGB APDS9960

 

Mãos à obra — Configurando um sensor de gesto

Componentes Necessários

– Montando o projeto:

Primeiramente, o sensor da vida de silício vem sem os pinos Headers soldados, então antes de iniciar a montagem vamos soldá-los ao módulo, lembrando que soldamos ao módulo a parte de menor comprimento. Após a soldagem conectaremos o modulo sensor de gesto na protoboard e conectar o VCC do módulo no 3.3V do arduino (Cuidado para não conectar no 5V ou pode danificar o módulo). Logo depois, vamos conectar o GND do módulo ao GND do arduino, já o SDA do módulo conectaremos no pino analógico A4 do arduino e o SCL do módulo conectamos no pino analógico A5 do arduino. Observe o diagrama de montagem abaixo:

Diagrama de montagem do sensor de gesto e RGB APDS9960

 — Biblioteca <Adafruit_APDS9960.h>:

A biblioteca que utilizaremos será a Adafruit_APDS9960.h . Esta biblioteca nos permitirá configurar o sensor com função que já estão dentro dela e apenas precisaremos utilizá-las em nosso programa. Após o download do arquivo zip, abra a IDE e adicione a biblioteca em forma zip ao seu programa. Caso não entenda nada de biblioteca ou como prosseguir,veja o tutorial  COMO INSTALAR UMA BIBLIOTECA NO ARDUINO IDE” no portal vida de silício.

– Programando o Arduino:

Agora vamos conectar o arduino no computador e abrir a IDE arduino.  Escreva o programa abaixo na IDE e compile o programa para o seu arduino.

Entretando, antes de carregar o programa, precisamos selecionar qual porta desejamos usar para fazer o carregamento do nosso programa no Arduino (upload). Dentro do Arduino IDE, clique no menu Ferramentas (tools) e abra o submenu Porta(Port). Clique na porta que seu Arduino está conectado, tal como COM3 ou COM4. Geralmente aparece o nome da placa Arduino : “COM3 (Arduino/Genuino Uno)”.

#include <Adafruit_APDS9960.h> //INCLUSÃO DE BIBLIOTECA
Adafruit_APDS9960 apds; //OBJETO DO TIPO Adafruit_APDS9960 (I2C)

void setup() {
  Serial.begin(9600); //INICIALIZA A SERIAL
  
  if(!apds.begin()){ //SE O SENSOR NÃO FOR INICIALIZADO, FAZ
    Serial.println("Falha ao inicializar o dispositivo. Verifique as conexões!"); //IMPRIME O TEXTO NO MONITOR SERIAL
  }//SENÃO, FAZ
  else Serial.println("Dispositivo inicializado!"); //IMPRIME O TEXTO NO MONITOR SERIAL

  //O MODO DETECÇÃO DE GESTO SERÁ HABILITADO QUANDO O SENSOR DETECTAR ALGO PRÓXIMO DO MÓDULO (APROXIME SEU DEDO E AFASTE)
  apds.enableProximity(true);
  apds.enableGesture(true);
}

void loop() {
    uint8_t gesture = apds.readGesture(); //FAZ A LEITURA DA DIREÇÃO DO GESTO
    if(gesture == APDS9960_DOWN) Serial.println("↓"); //SE DETECTAR GESTO (DE CIMA PARA BAIXO), IMPRIME O SÍMBOLO NO MONITOR SERIAL
    if(gesture == APDS9960_UP) Serial.println("↑"); //SE DETECTAR GESTO (DE BAIXO PARA CIMA), IMPRIME O SÍMBOLO NO MONITOR SERIAL
    if(gesture == APDS9960_LEFT) Serial.println("←"); //SE DETECTAR GESTO (DA DIREITA PARA A ESQUERDA), IMPRIME O SÍMBOLO NO MONITOR SERIAL
    if(gesture == APDS9960_RIGHT) Serial.println("→"); //SE DETECTAR GESTO (DA ESQUERDA PARA A DIREITA), IMPRIME O SÍMBOLO NO MONITOR SERIAL
}

– Testando o funcionamento:

Em fim, caso tudo estiver correto o resultado será igual à imagem abaixo. Temos que o sensor de gestos ficará identificando os seus movimentos ao passar com a mão encima dele e mostrará no serial monitor a direção.

Imagem do serial monitor

ATENÇÃO: não esqueça de definir a placa e a porta que esta utilizando para carregar o programa.

Imagem do circuito do Sensor de Gestos

 

Entendendo a fundo:

Software

– Definições e variáveis utilizadas no projeto do sensor de gesto e RGB APDS9960 com arduino

Precipuamente, a instrução inclui <> permitirá que adicionemos a biblioteca Adafruit_APDS9960.h ao nosso programa. Assim podemos utilizar suas funcionalidades em nosso algoritmo.

#include <Adafruit_APDS9960.h> //INCLUSÃO DE BIBLIOTECA

– Função Setup – Definindo pinos do sensor de gesto e RGB APDS9960 com arduino

Vemos que a função setup é aquela que ira rodar apenas uma vez quando nosso programa for iniciado. Além disso, ela é do tipo void, ou seja, não tem retorno e também não tem parâmetros de entrada. Em princípio, temos a função Serial.begin que irá inicializar a comunicação serial para podermos visualizar os resultados nela. Temos que na função if, antes de mais nada, possui uma condição entre parenteses “!apds.begin()” a qual se for verdadeira tudo o que tiver entre os colchetes do if será executado, ou seja, será impresso no monitor serial o texto “Falha ao inicializar o dispositivo. Verifique as conexões!”. Em seguida, podemos observar que caso a condição seja falsa o comando else será executado e imprimirá “Dispositivo inicializado!” no serial monitor. As funções ” apds.enableProximity(true)” e “apds.enableGesture(true)” da biblioteca serão executadas como parâmetro “true”.

Serial.begin(9600); //INICIALIZA A SERIAL
 
 if(!apds.begin()){ //SE O SENSOR NÃO FOR INICIALIZADO, FAZ
   Serial.println("Falha ao inicializar o dispositivo. Verifique as conexões!"); //IMPRIME O TEXTO NO MONITOR SERIAL
 }//SENÃO, FAZ
 else Serial.println("Dispositivo inicializado!"); //IMPRIME O TEXTO NO MONITOR SERIAL

 //O MODO DETECÇÃO DE GESTO SERÁ HABILITADO QUANDO O SENSOR DETECTAR ALGO PRÓXIMO DO MÓDULO (APROXIME SEU DEDO E AFASTE)
 apds.enableProximity(true);
 apds.enableGesture(true);

– Função Loop – Leitura do nosso sensor de gesto e RGB APDS9960 com arduino e Estruturas de decisão

A função loop ao contrário da setup roda tudo que estiver dentro dela varias vezes em um loop constante até que seja reiniciado ou parado o programa. Primeiramente, temos a leitura das direções do sensor “uint8_t gesture = apds.readGesture()” com a função declarada no void setup. Logo depois, temos uma série de comando if’s, que por sua vez, caso forem verdadeiras irão imprimir no serial monitor os textos em aspas. No entando, seguindo a lógica apenas uma pode ser verdadeira de cada vez. Similarmente, temos que a primeira condição “gesture == APDS9960_DOWN” que será verdadeira caso a direção for para baixo, a função “Serial.println(“↓”)” será executada. Na mesma perspectiva, caso a condição “gesture == APDS9960_UP” que, por assim dizer, detectou gesto para cima, for verdadeira a função “Serial.println(“↑”)” será executada e assim por diante.

uint8_t gesture = apds.readGesture(); //FAZ A LEITURA DA DIREÇÃO DO GESTO
   if(gesture == APDS9960_DOWN) Serial.println("↓"); //SE DETECTAR GESTO (DE CIMA PARA BAIXO), IMPRIME O SÍMBOLO NO MONITOR SERIAL
   if(gesture == APDS9960_UP) Serial.println("↑"); //SE DETECTAR GESTO (DE BAIXO PARA CIMA), IMPRIME O SÍMBOLO NO MONITOR SERIAL
   if(gesture == APDS9960_LEFT) Serial.println("←"); //SE DETECTAR GESTO (DA DIREITA PARA A ESQUERDA), IMPRIME O SÍMBOLO NO MONITOR SERIAL
   if(gesture == APDS9960_RIGHT) Serial.println("→"); //SE DETECTAR GESTO (DA ESQUERDA PARA A DIREITA), IMPRIME O SÍMBOLO NO MONITOR SERIAL

Hardware

– Cor RGB – APDS9960:

A Cor RGB digital APDS-9960 é a parte do sensor que permite identificar cores e intensidades de luz em um ambiente.

 

Considerações finais:

Neste tutorial mostramos como funciona e como utilizar o sensor de gesto e RGB APDS9960. Esperamos que você continue nos acompanhando e sinta-se à vontade para nos dar sugestões, críticas ou elogios. Lembre-se de deixar suas dúvidas nos comentários abaixo.