Luminosity sensor by Texas Advanced Optoelectronic Solutions Inc.. Device combines one broadband photodiode (visible plus infrared) and one infrared-responding photodiode. Sets Gain x1 and 402mS as default.
Dependents: MusicBoxForFathersDay FTHR_SensorHub Affich_Lum_Moist Projetv0 ... more
Original/sensorapi_ino.txt@5:5b1b625fda6f, 2018-09-21 (annotated)
- Committer:
- kenjiArai
- Date:
- Fri Sep 21 22:57:07 2018 +0000
- Revision:
- 5:5b1b625fda6f
based on Adafruit program and keep interface functions
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kenjiArai | 5:5b1b625fda6f | 1 | #include <Wire.h> |
kenjiArai | 5:5b1b625fda6f | 2 | #include <Adafruit_Sensor.h> |
kenjiArai | 5:5b1b625fda6f | 3 | #include <Adafruit_TSL2561_U.h> |
kenjiArai | 5:5b1b625fda6f | 4 | |
kenjiArai | 5:5b1b625fda6f | 5 | /* This driver uses the Adafruit unified sensor library (Adafruit_Sensor), |
kenjiArai | 5:5b1b625fda6f | 6 | which provides a common 'type' for sensor data and some helper functions. |
kenjiArai | 5:5b1b625fda6f | 7 | |
kenjiArai | 5:5b1b625fda6f | 8 | To use this driver you will also need to download the Adafruit_Sensor |
kenjiArai | 5:5b1b625fda6f | 9 | library and include it in your libraries folder. |
kenjiArai | 5:5b1b625fda6f | 10 | |
kenjiArai | 5:5b1b625fda6f | 11 | You should also assign a unique ID to this sensor for use with |
kenjiArai | 5:5b1b625fda6f | 12 | the Adafruit Sensor API so that you can identify this particular |
kenjiArai | 5:5b1b625fda6f | 13 | sensor in any data logs, etc. To assign a unique ID, simply |
kenjiArai | 5:5b1b625fda6f | 14 | provide an appropriate value in the constructor below (12345 |
kenjiArai | 5:5b1b625fda6f | 15 | is used by default in this example). |
kenjiArai | 5:5b1b625fda6f | 16 | |
kenjiArai | 5:5b1b625fda6f | 17 | Connections |
kenjiArai | 5:5b1b625fda6f | 18 | =========== |
kenjiArai | 5:5b1b625fda6f | 19 | Connect SCL to I2C SCL Clock |
kenjiArai | 5:5b1b625fda6f | 20 | Connect SDA to I2C SDA Data |
kenjiArai | 5:5b1b625fda6f | 21 | Connect VDD to 3.3V or 5V (whatever your logic level is) |
kenjiArai | 5:5b1b625fda6f | 22 | Connect GROUND to common ground |
kenjiArai | 5:5b1b625fda6f | 23 | |
kenjiArai | 5:5b1b625fda6f | 24 | I2C Address |
kenjiArai | 5:5b1b625fda6f | 25 | =========== |
kenjiArai | 5:5b1b625fda6f | 26 | The address will be different depending on whether you leave |
kenjiArai | 5:5b1b625fda6f | 27 | the ADDR pin floating (addr 0x39), or tie it to ground or vcc. |
kenjiArai | 5:5b1b625fda6f | 28 | The default addess is 0x39, which assumes the ADDR pin is floating |
kenjiArai | 5:5b1b625fda6f | 29 | (not connected to anything). If you set the ADDR pin high |
kenjiArai | 5:5b1b625fda6f | 30 | or low, use TSL2561_ADDR_HIGH (0x49) or TSL2561_ADDR_LOW |
kenjiArai | 5:5b1b625fda6f | 31 | (0x29) respectively. |
kenjiArai | 5:5b1b625fda6f | 32 | |
kenjiArai | 5:5b1b625fda6f | 33 | History |
kenjiArai | 5:5b1b625fda6f | 34 | ======= |
kenjiArai | 5:5b1b625fda6f | 35 | 2013/JAN/31 - First version (KTOWN) |
kenjiArai | 5:5b1b625fda6f | 36 | */ |
kenjiArai | 5:5b1b625fda6f | 37 | |
kenjiArai | 5:5b1b625fda6f | 38 | Adafruit_TSL2561_Unified tsl = Adafruit_TSL2561_Unified(TSL2561_ADDR_FLOAT, 12345); |
kenjiArai | 5:5b1b625fda6f | 39 | |
kenjiArai | 5:5b1b625fda6f | 40 | /**************************************************************************/ |
kenjiArai | 5:5b1b625fda6f | 41 | /* |
kenjiArai | 5:5b1b625fda6f | 42 | Displays some basic information on this sensor from the unified |
kenjiArai | 5:5b1b625fda6f | 43 | sensor API sensor_t type (see Adafruit_Sensor for more information) |
kenjiArai | 5:5b1b625fda6f | 44 | */ |
kenjiArai | 5:5b1b625fda6f | 45 | /**************************************************************************/ |
kenjiArai | 5:5b1b625fda6f | 46 | void displaySensorDetails(void) |
kenjiArai | 5:5b1b625fda6f | 47 | { |
kenjiArai | 5:5b1b625fda6f | 48 | sensor_t sensor; |
kenjiArai | 5:5b1b625fda6f | 49 | tsl.getSensor(&sensor); |
kenjiArai | 5:5b1b625fda6f | 50 | Serial.println("------------------------------------"); |
kenjiArai | 5:5b1b625fda6f | 51 | Serial.print ("Sensor: "); Serial.println(sensor.name); |
kenjiArai | 5:5b1b625fda6f | 52 | Serial.print ("Driver Ver: "); Serial.println(sensor.version); |
kenjiArai | 5:5b1b625fda6f | 53 | Serial.print ("Unique ID: "); Serial.println(sensor.sensor_id); |
kenjiArai | 5:5b1b625fda6f | 54 | Serial.print ("Max Value: "); Serial.print(sensor.max_value); Serial.println(" lux"); |
kenjiArai | 5:5b1b625fda6f | 55 | Serial.print ("Min Value: "); Serial.print(sensor.min_value); Serial.println(" lux"); |
kenjiArai | 5:5b1b625fda6f | 56 | Serial.print ("Resolution: "); Serial.print(sensor.resolution); Serial.println(" lux"); |
kenjiArai | 5:5b1b625fda6f | 57 | Serial.println("------------------------------------"); |
kenjiArai | 5:5b1b625fda6f | 58 | Serial.println(""); |
kenjiArai | 5:5b1b625fda6f | 59 | delay(500); |
kenjiArai | 5:5b1b625fda6f | 60 | } |
kenjiArai | 5:5b1b625fda6f | 61 | |
kenjiArai | 5:5b1b625fda6f | 62 | /**************************************************************************/ |
kenjiArai | 5:5b1b625fda6f | 63 | /* |
kenjiArai | 5:5b1b625fda6f | 64 | Configures the gain and integration time for the TSL2561 |
kenjiArai | 5:5b1b625fda6f | 65 | */ |
kenjiArai | 5:5b1b625fda6f | 66 | /**************************************************************************/ |
kenjiArai | 5:5b1b625fda6f | 67 | void configureSensor(void) |
kenjiArai | 5:5b1b625fda6f | 68 | { |
kenjiArai | 5:5b1b625fda6f | 69 | /* You can also manually set the gain or enable auto-gain support */ |
kenjiArai | 5:5b1b625fda6f | 70 | // tsl.setGain(TSL2561_GAIN_1X); /* No gain ... use in bright light to avoid sensor saturation */ |
kenjiArai | 5:5b1b625fda6f | 71 | // tsl.setGain(TSL2561_GAIN_16X); /* 16x gain ... use in low light to boost sensitivity */ |
kenjiArai | 5:5b1b625fda6f | 72 | tsl.enableAutoRange(true); /* Auto-gain ... switches automatically between 1x and 16x */ |
kenjiArai | 5:5b1b625fda6f | 73 | |
kenjiArai | 5:5b1b625fda6f | 74 | /* Changing the integration time gives you better sensor resolution (402ms = 16-bit data) */ |
kenjiArai | 5:5b1b625fda6f | 75 | tsl.setIntegrationTime(TSL2561_INTEGRATIONTIME_13MS); /* fast but low resolution */ |
kenjiArai | 5:5b1b625fda6f | 76 | // tsl.setIntegrationTime(TSL2561_INTEGRATIONTIME_101MS); /* medium resolution and speed */ |
kenjiArai | 5:5b1b625fda6f | 77 | // tsl.setIntegrationTime(TSL2561_INTEGRATIONTIME_402MS); /* 16-bit data but slowest conversions */ |
kenjiArai | 5:5b1b625fda6f | 78 | |
kenjiArai | 5:5b1b625fda6f | 79 | /* Update these values depending on what you've set above! */ |
kenjiArai | 5:5b1b625fda6f | 80 | Serial.println("------------------------------------"); |
kenjiArai | 5:5b1b625fda6f | 81 | Serial.print ("Gain: "); Serial.println("Auto"); |
kenjiArai | 5:5b1b625fda6f | 82 | Serial.print ("Timing: "); Serial.println("13 ms"); |
kenjiArai | 5:5b1b625fda6f | 83 | Serial.println("------------------------------------"); |
kenjiArai | 5:5b1b625fda6f | 84 | } |
kenjiArai | 5:5b1b625fda6f | 85 | |
kenjiArai | 5:5b1b625fda6f | 86 | /**************************************************************************/ |
kenjiArai | 5:5b1b625fda6f | 87 | /* |
kenjiArai | 5:5b1b625fda6f | 88 | Arduino setup function (automatically called at startup) |
kenjiArai | 5:5b1b625fda6f | 89 | */ |
kenjiArai | 5:5b1b625fda6f | 90 | /**************************************************************************/ |
kenjiArai | 5:5b1b625fda6f | 91 | void setup(void) |
kenjiArai | 5:5b1b625fda6f | 92 | { |
kenjiArai | 5:5b1b625fda6f | 93 | Serial.begin(9600); |
kenjiArai | 5:5b1b625fda6f | 94 | Serial.println("Light Sensor Test"); Serial.println(""); |
kenjiArai | 5:5b1b625fda6f | 95 | |
kenjiArai | 5:5b1b625fda6f | 96 | /* Initialise the sensor */ |
kenjiArai | 5:5b1b625fda6f | 97 | //use tsl.begin() to default to Wire, |
kenjiArai | 5:5b1b625fda6f | 98 | //tsl.begin(&Wire2) directs api to use Wire2, etc. |
kenjiArai | 5:5b1b625fda6f | 99 | if(!tsl.begin()) |
kenjiArai | 5:5b1b625fda6f | 100 | { |
kenjiArai | 5:5b1b625fda6f | 101 | /* There was a problem detecting the TSL2561 ... check your connections */ |
kenjiArai | 5:5b1b625fda6f | 102 | Serial.print("Ooops, no TSL2561 detected ... Check your wiring or I2C ADDR!"); |
kenjiArai | 5:5b1b625fda6f | 103 | while(1); |
kenjiArai | 5:5b1b625fda6f | 104 | } |
kenjiArai | 5:5b1b625fda6f | 105 | |
kenjiArai | 5:5b1b625fda6f | 106 | /* Display some basic information on this sensor */ |
kenjiArai | 5:5b1b625fda6f | 107 | displaySensorDetails(); |
kenjiArai | 5:5b1b625fda6f | 108 | |
kenjiArai | 5:5b1b625fda6f | 109 | /* Setup the sensor gain and integration time */ |
kenjiArai | 5:5b1b625fda6f | 110 | configureSensor(); |
kenjiArai | 5:5b1b625fda6f | 111 | |
kenjiArai | 5:5b1b625fda6f | 112 | /* We're ready to go! */ |
kenjiArai | 5:5b1b625fda6f | 113 | Serial.println(""); |
kenjiArai | 5:5b1b625fda6f | 114 | } |
kenjiArai | 5:5b1b625fda6f | 115 | |
kenjiArai | 5:5b1b625fda6f | 116 | /**************************************************************************/ |
kenjiArai | 5:5b1b625fda6f | 117 | /* |
kenjiArai | 5:5b1b625fda6f | 118 | Arduino loop function, called once 'setup' is complete (your own code |
kenjiArai | 5:5b1b625fda6f | 119 | should go here) |
kenjiArai | 5:5b1b625fda6f | 120 | */ |
kenjiArai | 5:5b1b625fda6f | 121 | /**************************************************************************/ |
kenjiArai | 5:5b1b625fda6f | 122 | void loop(void) |
kenjiArai | 5:5b1b625fda6f | 123 | { |
kenjiArai | 5:5b1b625fda6f | 124 | /* Get a new sensor event */ |
kenjiArai | 5:5b1b625fda6f | 125 | sensors_event_t event; |
kenjiArai | 5:5b1b625fda6f | 126 | tsl.getEvent(&event); |
kenjiArai | 5:5b1b625fda6f | 127 | |
kenjiArai | 5:5b1b625fda6f | 128 | /* Display the results (light is measured in lux) */ |
kenjiArai | 5:5b1b625fda6f | 129 | if (event.light) |
kenjiArai | 5:5b1b625fda6f | 130 | { |
kenjiArai | 5:5b1b625fda6f | 131 | Serial.print(event.light); Serial.println(" lux"); |
kenjiArai | 5:5b1b625fda6f | 132 | } |
kenjiArai | 5:5b1b625fda6f | 133 | else |
kenjiArai | 5:5b1b625fda6f | 134 | { |
kenjiArai | 5:5b1b625fda6f | 135 | /* If event.light = 0 lux the sensor is probably saturated |
kenjiArai | 5:5b1b625fda6f | 136 | and no reliable data could be generated! */ |
kenjiArai | 5:5b1b625fda6f | 137 | Serial.println("Sensor overload"); |
kenjiArai | 5:5b1b625fda6f | 138 | } |
kenjiArai | 5:5b1b625fda6f | 139 | delay(250); |
kenjiArai | 5:5b1b625fda6f | 140 | } |