Tutorial: Como utilizar o Sensor de Gestos e RGB Sparkfun 11

Olá pessoal! Hoje vou apresentar um sensor muito bacana para vocês utilizarem em seus projetos que envolvam movimentos, luminosidade e cores: o Sensor de Gestos e RGB Sparkfun!

Sobre o Sensor de Gestos e RGB Sparkfun

sensor de gestos e rgb sparkfun

Este módulo contém o Sensor APDS-9960, que mede a luminosidade ambiente e cores (níveis de vermelho, verde e azul. Além disto, ele detecta nível de proximidade e sentido de gestos (esquerda, direita, alto e baixo).

Ele faz utilização do protocolo I2C para utilização (pinos SDA e SCL). Também possui pino de interrupção INT e um pino opcional VL para led Infravermelho (IR).

vistatraseira01_sensordegesto

O Sensor de Gestos e RGB Sparkfun vem sem os pinos Headers, porém vamos iniciar soldando estes pinos para usar o sensor em um protoboard. Os pinos serão soldados para baixo, conforme imagem a seguir:

sensor de gestos e rgb sparkfun

Após soldar os pinos, faremos as conexões com uma placa Uno R3 conforme esquemático a seguir:

Pinos sensor <-> Pinos Arduino

  • INT <-> Digital 2
  • VCC <-> 3.3V
  • GND <-> GND
  • SDA <-> A4
  • SCL <-> A5

ATENÇÃO: O Sensor de Gestos e RGB Sparkfun tem seu VCC em 3.3V, cuidado para não conectar em 5V, pois poderá danificá-lo!

sensor de gestos e rgb sparkfun

Baixe a seguinte biblioteca para utilização aqui. Instale conforme os seguintes passos:

  • Na IDE Arduino, vá em SKETCH -> Incluir Biblioteca -> Adicionar Biblioteca .zip
  • Selecione o Arquivo zipado e clique em OK
  • Aparecerá que a biblioteca foi instalada no canto inferior esquerdo: “Biblioteca adicionada às suas Bibliotecas…”

Teste do Sensor de Gestos e RGB Sparkfun

Utilizaremos dois exemplos para demonstração. O primeiro encontra-se em Arquivos -> Exemplos -> Sparkfun APDS-9960 RGB and Gesture Sensor -> Gesture Test

Gesture_test

Carregue o sketch para sua placa Uno. Quando carregado, abra o Serial Monitor. Lá veremos as indicações de movimento do sensor (perto/longe, esquerda/direita e alto/baixo:

inicializar_sensordegesto

sensor de gestos e rgb sparkfun

Sensor de luminosidade e cores

Agora utilizaremos o mesmo sensor para medição de cores e luminosidade ambiente. Para isto, acrescentaremos um LED RGB Catodo comum e três resistores 220, conforme circuito abaixo:

sensor de gestos e rgb sparkfun

Os pinos 11, 10 e 9 são para cada cor do LED RGB e possuem função PWM, para que, quando medida a intensidade destas cores, os leds variem seu brilho.

A mesma biblioteca da Sparkfun será usada neste experimento também. O sketch para utilização é o seguinte:

#include <Wire.h>
#include <SparkFun_APDS9960.h>

// variaveis globais
SparkFun_APDS9960 apds = SparkFun_APDS9960();
uint16_t ambient_light = 0;
uint16_t red_light = 0;
uint16_t green_light = 0;
uint16_t blue_light = 0;

int red = 9; // define pino 9 como vermelho do led RGB
int green = 10; // define pino 10 como verde do led RGB
int blue = 11; // define pino 11 como azul do led RGB

void setup() {
  
  // Initialize Serial port
  Serial.begin(9600);
  Serial.println();
  pinMode(red,OUTPUT); // declara red como saida
  pinMode(green,OUTPUT); // declara green como saida
  pinMode(blue,OUTPUT); // declara blue como saida
  Serial.println(F("--------------------------------"));
  Serial.println(F("SparkFun APDS-9960 - ColorSensor"));
  Serial.println(F("--------------------------------"));
  
  // Initialize APDS-9960 (configure I2C and initial values)
  if ( apds.init() ) {
    Serial.println(F("APDS-9960 initialization complete"));
  } else {
    Serial.println(F("Something went wrong during APDS-9960 init!"));
  }
  
  // inicia o sensor de luz APDS-9960
  if ( apds.enableLightSensor(false) ) {
    Serial.println(F("Light sensor is now running"));
  } else {
    Serial.println(F("Something went wrong during light sensor init!"));
  }
  
  // aguarda 500ms para calibraçao
  delay(500);
}

void loop() {
  
  // Leitura de niveis de luz Ambiente, Vermelho, Verde e Azul
  if (  !apds.readAmbientLight(ambient_light) ||
        !apds.readRedLight(red_light) ||
        !apds.readGreenLight(green_light) ||
        !apds.readBlueLight(blue_light) ) {
    Serial.println("Erro de leitura luz ambiente");
  } else {
    Serial.print("Ambiente: ");
    Serial.print(ambient_light);
    Serial.print(" Vermelho: ");
    Serial.print(red_light);
    int red_leitura = map(red_light,0,3500,0,255); // transforma nivel de vermelho para nivel em PWM
    analogWrite(red,red_leitura); // escreve PWM no led
    Serial.print(" Green: ");
    Serial.print(green_light);
    int green_leitura = map(green_light,0,3500,0,255); // transforma nivel de verde para nivel em PWM
    analogWrite(green,green_leitura);// escreve PWM no led
    Serial.print(" Blue: ");
    Serial.println(blue_light);
    int blue_leitura = map(blue_light,0,3500,0,255); // transforma nivel de azul para nivel em PWM
    analogWrite(blue,blue_leitura);// escreve PWM no led
  }
  
  // aguarda 1s
  delay(1000);
}

Carregue o sketch na placa R3 e verifique o brilho do led e seus respectivos valores no Serial Monitor.

sensor de gestos e rgb sparkfun

Verifique os demais exemplos disponíveis e faça suas próprias adaptações. Há uma gama de possibilidades para este pequeno e poderoso sensor. Use a imaginação e criatividade!

Gostou? Deixe seu comentário logo abaixo. Em caso de dúvidas, caso queira trocar uma ideia, ou até mesmo dividir seu projeto, acesse nosso Fórum!

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

11 Comentários

  1. Olá Gedeane, muito obrigado por ter postado este tutorial. Você poderia incluir no post qual distância do sensor foi testada o rgb? Seria algo em torno de 2cm ou 3mm a distância ideal para detecção?

    1. Olá Rafael, perdoe-me pela demora!
      A distância foi em torno de 3 cm, ainda farei outros testes!
      Obrigada, abraço!! 🙂

  2. Ola tudo bem?? Poderia dizer como seria a ligação em um nodemcu?

    1. Olá Jesio!

      Você pode utilizar os pinos D1 e D2 do NodeMCU, correspondentes aos pinos SCL e SDA no sensor.

  3. Sou Engenheiro de Sistemas e me apaixono fácil principalmente IoT, Gedeane me conquistou. Eu gostaria de receber contatos de interessados em projetos AI para marketing, os interessados……. claudrmarques@gmail.com

    Abraços e parabéns pelo site, blog enfim all IoT here im pressing button hehe

    ClaudReus Lopes Marques
  4. Boa tarde, você sabe me dizer se é possivel utilizar esse sensor no PIC18F4520? Quero fazer a medição da radiância de uma determinada luz e mostrar seus valores em um display. Obrigada

    Rafaela Coutinho Silva
  5. Ola Gedeane. Sou artista visual e estou testando anéis de LED RGB endereçável junto com um sensor especializado para um projeto na USP. Um engenheiro ja nos auxiliou com o desenho e gostaria de saber pode nos indicar alguém que teria disponibilidade para nos auxiliar na montagem de uma obra tridimensional com luz e sensor (conexões etc).

  6. Como faço para conectar dois dispositivos desse?

    1. Olá Fernando!

      Você deve juntar os pinos SDA e SCL no mesmo local. Vai virar uma rede, cada um com seu próprio endereço.

      Abraços!

      André Rocha – Equipe FilipeFlop

  7. E se eu quiser usar apenas o sensor RGB, para detectar uma luz vermelha numa bolinha metálica de cor dourada, como fazer?
    Daria pra fazer usando só o SDA e SDL ?

    1. Olá Adriel!

      A ligação é feita como mostrado no tutorial.

      No seu caso, usaria apenas a luz vermelha no código. A leitura é feita na linha:
      int red_leitura = map(red_light,0,3500,0,255); // transforma nivel de vermelho para nivel em PWM

      Abraços!

      André Rocha – Equipe FilipeFlop