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
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).
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:
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!
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
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:
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:
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.
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.
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!
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
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”
Marcelo,
Você precisa instalar a biblioteca.
Abraços!
Diogo – Equipe MakerHero
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
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
Olá , Muito bem explicado e exemplificado. Parabéns !
Qual é a distância máxima para a detecção de gestos ?
Obrigado.
Gerson,
Segundo datasheet, cerca de 20cm.
Abraços!
Diogo – Equipe MakerHero
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!
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,
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
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 ?
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
Como faço para conectar dois dispositivos desse?
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
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).
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
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
Ola tudo bem?? Poderia dizer como seria a ligação em um nodemcu?
Olá Jesio!
Você pode utilizar os pinos D1 e D2 do NodeMCU, correspondentes aos pinos SCL e SDA no sensor.
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?
Olá Rafael, perdoe-me pela demora!
A distância foi em torno de 3 cm, ainda farei outros testes!
Obrigada, abraço!! 🙂