Fala Pessoal! Tudo Beleza?! 🙂
Espero do fundo do coração que estejam TODOS muito BEM! 😉
Hoje vamos falar de um Sensor que é um verdadeiro “multi-função”! Sério mesmo Pessoal! (risos)
O Sensor APDS-9960 (datasheet), um sensor do tipo SMD, “minúsculo“, alimentado com apenas 3,3V mas muito funcional, identifica literalmente “todas as cores” do espectro! 😮 Isso mesmo Pessoal! Este pequenino sensor “enxerga” todas as “cores fundamentais” e realiza a “mistura” destas cores, ou seja, o sensor “vê” as cores RGB (Vermelho, Verde e Azul), então “mescla” todos estes espectros e responde de acordo ao que ele estiver “vendo”! 💡
No super vídeo-tutorial que segue abaixo, vocês poderão conferir isso na PRÁTICA! 🙂
Bom, mas as “características” deste minúsculo sensor não terminam por aí não pessoal! O APDS-9960 também é capaz de “sentir” distâncias, como um verdadeiro sensor de proximidade e além disso (sério mesmo que tem mais Rodrigo?), SIM, e pra “finalizar” o APDS-9960 é capaz de “ler gestos“! Sim, como por exemplo: acima, abaixo, direita, esquerda, longe e perto! 😯
Pessoal, e esse “sensorzinho” aí tem a característica “mais bacana” de todas – é um sensor que utiliza comunicação I2C, ou seja, nada de “um montão” de fios, jumpers, etc. São necessários apenas 2 fios para realizar toda a comunicação e leitura do sensor, onde um dos fios será o pino de DADOS (SDA – Dados Seriais) e o segundo fio, será responsável pelo CLOCK (SCL – Clock Serial)! ❗
Olhem o módulo que leva o “mini-poderoso” sensor APDS-9960 aí acima Pessoal! 🙂
Reparem que além dos terminas/pinos que comentamos acima, o módulo também conta com um pino de “INTERRUPÇÃO“, que no nosso caso não será necessário, MAS ao utilizar o sensor por exemplo, como sensor de GESTOS ou distância, então SIM, deve ou poderá ser necessário utilizarmos este pino. Fica a Dica! 🙂
Ah! Este pequenino módulo também vem com o HEADER completamente dessoldado, ENTÃO, para fazermos uso do mesmo, ANTES vamos precisar SOLDAR um header nos terminais do módulo (geralmente as plaquinhas acompanham seus respectivos headers quando a compramos).
CURIOSIDADE: Parece que este sensor, APDS-9960, é o mesmo sensor que equipou os famosos aparelhos de celular da SAMSUNG, o modelo Galaxy S5! 💡
VIDEO- TUTORIAL mostrando desde a soldagem da plaquinha até o funcionamento do sensor APDS-9960 com Arduino:
Abaixo temos o Código/Sketch necessário para fazer o sensor APDS-9960 funcionar da mesma maneira que apresentamos no video acima com o ARDUINO:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 |
/**************************************************************** ColorSensor.ino APDS-9960 RGB and Gesture Sensor Shawn Hymel @ SparkFun Electronics October 15, 2014 https://github.com/sparkfun/APDS-9960_RGB_and_Gesture_Sensor Tests the color and ambient light sensing abilities of the APDS-9960. Configures APDS-9960 over I2C and polls the sensor for ambient light and color levels, which are displayed over the serial console. Hardware Connections: IMPORTANT: The APDS-9960 can only accept 3.3V! Arduino Pin APDS-9960 Board Function 3.3V VCC Power GND GND Ground A4 SDA I2C Data A5 SCL I2C Clock Resources: Include Wire.h and SparkFun_APDS-9960.h Development environment specifics: Written in Arduino 1.0.5 Tested with SparkFun Arduino Pro Mini 3.3V This code is beerware; if you see me (or any other SparkFun employee) at the local, and you've found our code helpful, please buy us a round! Distributed as-is; no warranty is given. =================================================== OBS: CÓDIGO MODIFICADO E ATUALIZADO PARA RODAR | COM LED RGB ANODO COMUM By Rodrigo Costa. | --------------------------------------------------- BLOG: EletronicaParaTodos.COM | EletronicaParaTodos.NET | EletronicaParaTodos.ORG | ------------------------------------------- AGRADECIMENTOS: À Amiga Gedeane Kenshima | ****************************************************************/ #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!")); } // Start running the APDS-9960 light sensor (no interrupts) if ( apds.enableLightSensor(false) ) { Serial.println(F("Light sensor is now running")); } else { Serial.println(F("Something went wrong during light sensor init!")); } // Wait for initialization and calibration to finish delay(500); } void loop() { // Read the light levels (ambient, red, green, blue) if ( !apds.readAmbientLight(ambient_light) || !apds.readRedLight(red_light) || !apds.readGreenLight(green_light) || !apds.readBlueLight(blue_light) ) { Serial.println("Error reading light values"); } else { Serial.print("Ambiente: "); Serial.print(ambient_light); Serial.print(" Vermelho: "); Serial.print(red_light); int red_leitura = map(red_light,0,3500,255,0); // transforma nivel de vermelho para nivel em PWM analogWrite(red,red_leitura); // escreve PWM no led Serial.print(" Verde: "); Serial.print(green_light); int green_leitura = map(green_light,0,2500,255,0); // transforma nivel de verde para nivel em PWM analogWrite(green,green_leitura);// escreve PWM no led Serial.print(" Azul: "); Serial.println(blue_light); int blue_leitura = map(blue_light,0,3500,255,0); // transforma nivel de azul para nivel em PWM analogWrite(blue,blue_leitura);// escreve PWM no led } // Espera 300ms até a próxima leitura! delay(300); } |
Valeu Pessoal!
Espero muito que Gostem e mais ainda, que o conteúdo deste artigo + video tenha lhe agregado ainda mais CONHECIMENTO! 💡
Um Abração,
Rodrigo Costa.
- Medindo e Monitorando a Temperatura com Arduino (Sensor LM35) - 5 de setembro de 2021
- Controle de Cargas através de Entrada Analógica com Arduino - 30 de agosto de 2021
- REVIEW E DICAS – ALICATE AMPERÍMETRO (UNI-T UT210E PRO) - 28 de agosto de 2021