Arduino – Gebaren en lichtintensiteit sensor module (APDS-9930)
Hardware
De APDS-9930 sensor is een alles-in-één chip, welke onder andere licht, gebaren en afstand kan meten. De afstands detectie werkt tot ongeveer 100mm, deze chip wordt vaak gebruikt in telefoons om het scherm te locken / dimmen wanneer de telefoon tegen het oor wordt gehouden. Verder kan de lichtsterkte worden gemeten en ‘berekend’ de module gebaren zoals het swipen naar links, rechts, boven en beneden.
features als:
IR LED en de nabijheid van de detector in een optische module
omgevingslicht sensing (ALS)
benadert menselijk oog respons
programmeerbare interrupt-functie met hogere en lagere drempel
tot 16-bit resolutie
hoge gevoeligheid werkt achter verduisterd glas
lage lux prestaties tegen 0.01Lux
aanwezigheidsdetectie
volledig gekalibreerd tot 100mm detectie
geïntegreerde IR-LED en synchrone LED-driver
elimineert fabriekskalibratie van prox
programmeerbare wachttimer
Wacht staatsmacht: 90uA typische
programmeerbaar van 2,7 ms tot> 8 sec
I2C-interface compatibel
tot 400 kHz (I2C fast-modus)
dedicated interrupt pin
slaapstand power – 2.2uA typische
toepassingen: mobiele telefoon backlight dimming
mobiele telefoon touch-screen uitschakelen
notebook / monitor veiligheid
automatische speakerphone te schakelen
automatische menu pop-up
digitale camera oogsensor
Informatie over de APDS-9930 chip (ENG):
- I²C Interface Compatible
- Programmable Wait Timer
- 70µA Typical wait state power
- Dedicated interrupt pin
- 2.2µA Typical sleep mode power
- Sensor Output: Digital
- Sensing Range Max: 100mm
- Supply Voltage DC Min: 2.2V
- Supply Voltage DC Max: 3.6V
- Output Current: 20mA
Pinout
Pin: | Functie: |
1 | VL (interne infrarood LED voeding) |
2 | GND |
3 | VCC (+2.8-3.6v) |
4 | SCL (I²C Clock) |
5 | SDA (I²C Data) |
6 | INT (Interrupt) |
Aansluiten op de Arduino
Sluit de module aan volgens onderstaand overzicht:
Arduino pin: | APDS-9930 Module pin: |
---|---|
GND | GND |
+3.3v | VCC (+2.8-3.6v) |
A5 | SCL (I²C Clock) |
A4 | SDA (I²C Data) |
Voorbeeldscript “AmbientlightLED”
Wat heb je nodig?
1) APDS-9930 Arduino bibliotheek
Sluit de module aan zoals hierboven aangegeven, het script hieronder laat de lichtintensiteit zien op 3 kanalen.
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 |
#define PWM_LED_PIN 10 #define DUMP_REGS #include <Wire.h> #include <APDS9930.h> // Global Variables APDS9930 apds = APDS9930(); float ambient_light = 0; // can also be an unsigned long uint16_t ch0 = 0; uint16_t ch1 = 1; float max_light = 0; void setup() { //analogReference(EXTERNAL); pinMode(PWM_LED_PIN, OUTPUT); // Initialize Serial port Serial.begin(9600); Serial.println(); Serial.println(F("--------------------------------")); Serial.println(F("APDS-9930 - Ambient light sensor")); Serial.println(F("--------------------------------")); // Initialize APDS-9930 (configure I2C and initial values) if ( apds.init() ) { Serial.println(F("APDS-9930 initialization complete")); } else { Serial.println(F("Something went wrong during APDS-9930 init!")); } // Start running the APDS-9930 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!")); } #ifdef DUMP_REGS /* Register dump */ uint8_t reg; uint8_t val; for(reg = 0x00; reg <= 0x19; reg++) { if( (reg != 0x10) && \ (reg != 0x11) ) { apds.wireReadDataByte(reg, val); Serial.print(reg, HEX); Serial.print(": 0x"); Serial.println(val, HEX); } } apds.wireReadDataByte(0x1E, val); Serial.print(0x1E, HEX); Serial.print(": 0x"); Serial.println(val, HEX); #endif // Wait for initialization and calibration to finish delay(500); } void loop() { // Read the light levels (ambient, red, green, blue) if ( !apds.readAmbientLightLux(ambient_light) || !apds.readCh0Light(ch0) || !apds.readCh1Light(ch1) ) { Serial.println(F("Error reading light values")); } else { Serial.print(F("Ambient: ")); Serial.print(ambient_light); Serial.print(F(" Ch0: ")); Serial.print(ch0); Serial.print(F(" Ch1: ")); Serial.println(ch1); if ( ambient_light > max_light ) { max_light = ambient_light; } ambient_light = map(ambient_light, 0, max_light, 0, 1023); analogWrite(PWM_LED_PIN, ambient_light); } // Wait before next reading delay(50); } |
Het resultaat
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 |
Ambient: 316.21 Ch0: 85 Ch1: 17 Ambient: 321.52 Ch0: 108 Ch1: 21 Ambient: 330.86 Ch0: 110 Ch1: 21 Ambient: 345.50 Ch0: 126 Ch1: 24 Ambient: 404.72 Ch0: 137 Ch1: 27 Ambient: 408.74 Ch0: 161 Ch1: 31 Ambient: 500.63 Ch0: 165 Ch1: 31 Ambient: 636.45 Ch0: 226 Ch1: 42 Ambient: 1042.62 Ch0: 337 Ch1: 61 Ambient: 1627.89 Ch0: 522 Ch1: 93 Ambient: 2361.05 Ch0: 754 Ch1: 131 Ambient: 3006.99 Ch0: 946 Ch1: 162 Ambient: 3179.83 Ch0: 1024 Ch1: 183 Ambient: 2927.84 Ch0: 1024 Ch1: 213 Ambient: 2658.47 Ch0: 1024 Ch1: 249 Ambient: 1937.25 Ch0: 1024 Ch1: 327 Ambient: 1242.11 Ch0: 1024 Ch1: 418 Ambient: 582.68 Ch0: 1024 Ch1: 495 Ambient: 401.94 Ch0: 1024 Ch1: 525 Ambient: 64.55 Ch0: 1024 Ch1: 590 Ambient: -375.25 Ch0: 1024 Ch1: 654 Ambient: -706.60 Ch0: 1024 Ch1: 713 Ambient: -857.22 Ch0: 1024 Ch1: 734 Ambient: -1158.45 Ch0: 1024 Ch1: 780 Ambient: -1441.61 Ch0: 1024 Ch1: 831 Ambient: -1778.99 Ch0: 1024 Ch1: 877 Ambient: -1977.81 Ch0: 1024 Ch1: 920 Ambient: -2236.87 Ch0: 1024 Ch1: 963 Ambient: -2538.10 Ch0: 1024 Ch1: 1019 Ambient: -2604.37 Ch0: 1024 Ch1: 1024 Ambient: -2604.37 Ch0: 1024 Ch1: 1024 Ambient: -2604.37 Ch0: 1024 Ch1: 1024 Ambient: -2604.37 Ch0: 1024 Ch1: 1024 Ambient: -2604.37 Ch0: 1024 Ch1: 1024 Ambient: -2604.37 Ch0: 1024 Ch1: 1024 Ambient: -2604.37 Ch0: 1024 Ch1: 1024 Ambient: -2604.37 Ch0: 1024 Ch1: 1024 Ambient: -2604.37 Ch0: 1024 Ch1: 1024 Ambient: -2357.36 Ch0: 1024 Ch1: 983 Ambient: -1664.53 Ch0: 1024 Ch1: 848 Ambient: -796.97 Ch0: 1024 Ch1: 724 Ambient: 534.48 Ch0: 1024 Ch1: 489 Ambient: 2032.84 Ch0: 1024 Ch1: 316 Ambient: 2693.23 Ch0: 1024 Ch1: 236 Ambient: 2933.63 Ch0: 988 Ch1: 193 Ambient: 2421.73 Ch0: 824 Ch1: 160 Ambient: 2011.70 Ch0: 675 Ch1: 131 Ambient: 1646.24 Ch0: 552 Ch1: 107 Ambient: 1407.27 Ch0: 449 Ch1: 87 Ambient: 1119.70 Ch0: 374 Ch1: 72 Ambient: 997.88 Ch0: 312 Ch1: 60 Ambient: 870.75 Ch0: 289 Ch1: 55 Ambient: 840.18 Ch0: 254 Ch1: 48 Ambient: 766.96 Ch0: 250 Ch1: 46 Ambient: 669.76 Ch0: 218 Ch1: 40 Ambient: 582.54 Ch0: 199 Ch1: 36 Ambient: 542.63 Ch0: 174 Ch1: 31 Ambient: 440.77 Ch0: 161 Ch1: 29 Ambient: 388.15 Ch0: 126 Ch1: 23 Ambient: 353.55 Ch0: 118 Ch1: 21 Ambient: 373.50 Ch0: 102 Ch1: 18 Ambient: 314.93 Ch0: 101 Ch1: 18 |
[#/datasheets/apds9930″ ]