Manual
do
Maker
.
com
Esse sensor de gestos APDS9960 é uma das coisas mais divertidas que podemos encontrar em sensores. Dá pra fazer um monte de brincadeiras, além de ter não só a capacidade de identificar gestos, mas também de ser um sensor RGB.
Vamos ver como utilizá-lo de forma simples e rápida.
Esse sensor tem nível lógico de 3v3, por isso a primeira coisa a considerar é a utilização de um step down. Ou então, utilizá-lo de forma transparente com um ESP8266 ou um ESP32.
Atrás da placa já vem impresso o endereço I2C, o que nos possibilita pular o passo de fazer scan no barramento para descobrir o endereço.
Ele possui um pino de interrupção, além dos tradicionais SDA, SCL, VCC e GND. A pinagem também está impressa na placa, restando apenas acertar os pinos I2C da MCU em questão. Vou fazer um código simples no ESP32, mas qualquer coisa de diferente, use o sketch de exemplo como base (lembrando que os exemplos estarão disponíveis na IDE do Arduino após instalar a biblioteca).
Esse sensor detecta movimentos laterias e aproximação/afastamento. Assim sendo, temos 6 possibilidades de gerar comandos.
Esse sensor de gestos APDS9960 está disponível em nosso parceiro CurtoCircuito, através desse link. Não deixe de visitar a loja para conhecer a grande diversidade de sensores que eles possuem.
A SparkFun disponibiliza uma biblioteca para a utilização desse sensor. Essa biblioteca está disponível no repositório de bibliotecas do Arduino, bastando procurar por APDS9960.
No caso, estou utilizando um ESP32 Wemos, bastante parecido com o ESP8266 Wemos D1 Mini. Mas não dá para confundir, porque o o ESP32 tem duas barras de pinos de cada lado, olhando isso, a identificação já é garantida.
Os pinos do ESP32 utilizados para a conexão I2C são os pinos 22 e 21 para SCL e SDA, respectivamente. VCC deve ser 3v3 e GND, bem, GND.
No código está definido o pino de inturrupção ( veja: Interrupções e timer com ESP32), a instância do objeto apds, um manipulador do movimento e as configurações de interrupção no setup. Fiz a interrupção no estilo do RTOS, mas deve funcionar no modo do Arduino também.
#include <Arduino.h>
#include <Wire.h>
#include <SparkFun_APDS9960.h>
// Pins
#define APDS9960_INT GPIO_NUM_27
bool is_isr = false;
SparkFun_APDS9960 apds = SparkFun_APDS9960();
void handleGesture();
//declaração da ISR
void IRAM_ATTR exec_isr(void *arg){
if (!is_isr){
gpio_intr_disable(APDS9960_INT);
is_isr = true;
}
}
//função para ISR
void handleGesture(){
if (apds.isGestureAvailable()){
switch (apds.readGesture()){
case DIR_UP:
Serial.println("UP");
break;
case DIR_DOWN:
Serial.println("DOWN");
break;
case DIR_LEFT:
Serial.println("LEFT");
gpio_set_level(GPIO_NUM_2, HIGH);
break;
case DIR_RIGHT:
Serial.println("RIGHT");
gpio_set_level(GPIO_NUM_2, LOW);
break;
case DIR_NEAR:
Serial.println("NEAR");
break;
case DIR_FAR:
Serial.println("FAR");
break;
default:
Serial.println("NONE");
}
}
}
void setup() {
Serial.begin(9600);
pinMode(2, OUTPUT);
digitalWrite(2,HIGH);
//configurando o LED onboard para responder a ligamento e desligamento
//gpio_set_direction(, OUTPUT);
gpio_set_level(GPIO_NUM_2, LOW);
Serial.println("Ativando interrupções");
gpio_set_direction(APDS9960_INT, GPIO_MODE_INPUT);
gpio_set_pull_mode(APDS9960_INT, GPIO_PULLUP_ONLY);
gpio_install_isr_service(0);
gpio_set_intr_type(APDS9960_INT, GPIO_INTR_NEGEDGE);
gpio_intr_enable(APDS9960_INT);
gpio_isr_handler_add(APDS9960_INT, exec_isr, NULL);
if (apds.init()){
Serial.println(F("APDS9960 inicializado"));
}
else{
Serial.println(F("APDS9960 não inicializado"));
}
if ( apds.enableGestureSensor(true) ) {
Serial.println(F("Sensor de gestos em execução"));
} else {
Serial.println(F("..."));
}
}
void loop() {
if (is_isr){
is_isr = false;
handleGesture();
gpio_intr_enable(APDS9960_INT);
}
}
Do jeito que aí está, o LED onboad é ligado ao passar a mão para a esquerda, e desligado ao passar a mão para a direita. Dá uma sensação boa de "futuro", até pretendo fazer mais umas soldas pra atuar no evento do sensor. Ainda vou escrever mais sobre ele, um pouco mais de aplicação e também sobre o sensor RGB, é só acompanhar.
Pretendo subir o vídeo em poucas horas. Se não é inscrito, inscreva-se em nosso canal DobitAoByteBrasil e clique no sininho para receber notificações de novos vídeos. Aproveite para deixar seu like quando assistir, ok? Até a próxima!
Manual do Maker é mais do que um blog. Somos uma empresa de serviços, cuja principal atividade é desenvolvimento e implementação de projetos embarcados e IoT. Trabalhamos dentro da legalidade, emitindo nota fiscal de serviço, elaboração de requisitos de sistema e documentação do código. Não importa onde você esteja, montamos a prova de conceito e gravamos vídeo do projeto antes de entregar o código e/ou hardware configurado.
Em parceria com a AFEletrônica, projetamos e produzimos hardware industrial (também com nota), para lhe entregar a melhor experiência para seu projeto. Entre em contato: vendas@afeletronica.com.br Ou direto comigo: djames.suhanko@gmail.com
Será um prazer tê-lo como nosso cliente!
Inscreva-se no nosso canal Manual do Maker no YouTube.
Também estamos no Instagram.
Autor do blog "Do bit Ao Byte / Manual do Maker".
Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.