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

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.

Faça seu comentário

Acesse sua conta e participe

22 Comentários

  1. Olá, seria possível usar esse sensor para contar voltas (cronometrar e contar)?
    Tipo… ele leria uma linha preta no chão cinza, por exemplo, ao ler a cor preta começa a contar e marcava a volta quando lesse novamente essa linha. Seria interessante, até poderiam fazer um projeto deste, como teste, colocando o sensor embaixo de um carrinho controle remoto.
    Abraços. Obrigado!

    1. Olá Messias!

      Acredito que o sensor irá funcionar sem maiores problemas para essa aplicação.

      Vai detectar a mudança nos níveis de cor, e fazer uma contagem quando houver essa mudança.

      Abraços,
      Vinícius – Equipe MakerHero

  2. ola gedeane parabens to iniciando no arduino e no momento ainda so estou copiando sketchs pois nao sei criar e sempre aparece isso. Arduino: 1.8.13 (Windows 10), Placa:”Arduino Uno”

    sketch_jan17c:2:10: fatal error: SparkFun_APDS9960.h: No such file or directory

    #include

    ^~~~~~~~~~~~~~~~~~~~~

    compilation terminated.

    exit status 1

    SparkFun_APDS9960.h: No such file or directory

    Este relatório teria mais informações com
    “Mostrar a saida detalhada durante a compilação”
    opção pode ser ativada em “Arquivo -> Preferências”

    1. Marcelo,

      Você precisa instalar a biblioteca.

      Abraços!
      Diogo – Equipe MakerHero

      1. diogo muito obrigado resolveu. uma dica poderiam fazer esse mesmo projeto com 3 leds separados para as pessoas que nao tem o modulo rgb como eu kkk. se fizerem estarei aqui pra fazer. muito obrigado mais uma vez

        1. Olá Marcelo!

          Acredito que trocar o LED RGB por três LEDs comum seja bem tranquilo. A montagem é praticamente a mesma e há poucas mudanças no código.

          Abraço!
          Rosana – Equipe MakerHero

  3. Olá , Muito bem explicado e exemplificado. Parabéns !
    Qual é a distância máxima para a detecção de gestos ?
    Obrigado.

    1. Gerson,

      Segundo datasheet, cerca de 20cm.

      Abraços!
      Diogo – Equipe MakerHero

  4. Olá, vocês conseguiram ver alguma diferença na distância de operação ajustando o valor do registrador LED_BOOST? Eu alterei os valores para 12.5ma a 100mA e o circuito como um todo continua operando a 9.5mA e não altera em nada a distância.
    Obrigado!

  5. Boa noite,

    Estou iniciando um TCC em meu curso Técnico de Automação Industrial e gostaria de saber se o módulo de reconhecimento gestual apresenta uma boa precisão e para a identificação dos movimentos e se é possível “cadastrar” certas posições para que este possa manter salvo em algum tipo de banco de dados…

    Desde já agradeço,

    1. Olá Pedro,

      O sensor de Gestos é capaz de medir a luminosidade ambiente e cores. Além disto, ele detecta nível de proximidade e sentido de gestos (esquerda, direita, alto e baixo).

      Abraço!
      Rosana – Equipe MakerHero

  6. 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 MakerHero

  7. 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 MakerHero

  8. 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).

  9. 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

  10. 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……. [email protected]

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

  11. 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.

  12. 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!! 🙂