Helligkeits- und UV-Sensor
Auf diesem senseBox-Bauteil sind zwei Sensoren zusammengelegt.
Die Lichtintensität wird mit dem TSL45315-Sensor von AMS-TAOS gemessen oder dem LiteOn LTR329ALS-01 gemessen (seit 02/21). Dieser Sensor erkennt die Lichtverhältnisse ähnlich dem menschlichen Auge und gibt die Helligkeitswerte direkt in Lux, mit großem Dynamikbereich (3 Lux bis 220k Lux), aus.
Der zweite Sensor ist ein Vishay VEML6070 Ultravioletter (UV)-Lichtsensor. Dieser wandelt die Intensität des UV-Lichts der Sonne in digitale Daten um. Der Sensor hat eine hervorragende UV-Empfindlichkeit und Linearität über Filtron™-Technologie. Er hat eine gute UV-Strahlungsmessung auch bei langer Sonnen-UV-Belastung und kann exzellent Temperaturschwankungen ausgleichen.
Helligkeit und UV Sensor
Technische Details
Belichtungssensor
- 3,3V - 5V tolerantes I2C/TWI Interface
- Eingangsspannungsbereich: 3,3V - 5V
- on-board 2,5V Spannungsregler
- on-board Pegelwandler
UV-Sensor
- Betriebsspannung: 2,7V - 5,5V I2C Interface
- Unterstützt Quittierungsfunktion (Active Acknowledge-Funktion)
- Temperaturkompensation: -40°C bis +85°C
- Software-Abschaltregelung für Immunität bei flackernden Leuchtstofflampen
Maße
- 25mm x 25mm x 9mm
- Gewicht: 2,5 g
Anschluss
Die Komponente wird am I2C Port angeschlossen.
Programmierung (Arduino)
Software Bibliothek
Um den Sensor in Arduino zu Programmieren musst du die Software Bibliothek Adafruit LTR329 and LTR303 sowie Adafruit VEML6070 Library installieren.
Code
Dieser Code gibt die Werte für Lux und der UV-Intensität im Seriellen Monitor aus
#include <SPI.h>
#include <LTR329.h>
#include <Wire.h>
#include <VEML6070.h>
bool lightsensortype = 0; //0 for tsl - 1 for ltr
//settings for LTR sensor
LTR329 LTR;
unsigned char gain = 1;
unsigned char integrationTime = 0;
unsigned char measurementRate = 3;
VEML6070 veml;
int read_reg(byte address, uint8_t reg)
{
int i = 0;
Wire.beginTransmission(address);
Wire.write(reg);
Wire.endTransmission();
Wire.requestFrom((uint8_t)address, (uint8_t)1);
delay(1);
if(Wire.available())
i = Wire.read();
return i;
}
void write_reg(byte address, uint8_t reg, uint8_t val)
{
Wire.beginTransmission(address);
Wire.write(reg);
Wire.write(val);
Wire.endTransmission();
}
void Lightsensor_begin()
{
Wire.begin();
unsigned int u = 0;
u = read_reg(0x29, 0x80 | 0x0A); //id register
if ((u & 0xF0) == 0xA0) // TSL45315
{
write_reg(0x29, 0x80 | 0x00, 0x03); //control: power on
write_reg(0x29, 0x80 | 0x01, 0x02); //config: M=4 T=100ms
delay(120);
lightsensortype = 0; //TSL45315
}
else
{
LTR.begin();
LTR.setControl(gain, false, false);
LTR.setMeasurementRate(integrationTime, measurementRate);
LTR.setPowerUp(); //power on with default settings
delay(10); //Wait 10 ms (max) - wakeup time from standby
lightsensortype = 1; //
}
}
unsigned int Lightsensor_getIlluminance()
{
unsigned int lux = 0;
if (lightsensortype == 0) // TSL45315
{
unsigned int u = (read_reg(0x29, 0x80 | 0x04) << 0); //data low
u |= (read_reg(0x29, 0x80 | 0x05) << 8); //data high
lux = u * 4; // calc lux with M=4 and T=100ms
}
else if (lightsensortype == 1) //LTR-329ALS-01
{
delay(100);
unsigned int data0, data1;
for (int i = 0; i < 5; i++) {
if (LTR.getData(data0, data1)) {
if(LTR.getLux(gain, integrationTime, data0, data1, lux));
if(lux > 0) break;
else delay(10);
}
else {
byte error = LTR.getError();
}
}
}
return lux;
}
void setup() {
Serial.begin(9600);
Lightsensor_begin();
veml.begin();
}
void loop() {
Serial.print("Illuminance: ");
Serial.println(ightsensor_getIlluminance());
Serial.print("UV-Intensity: ");
Serial.println(veml.getUV());
}
Programmierung (Blockly)
In Blockly kann der Sensor über folgenden Block ausgelesen werden:
Im Block kannst du zwischen den verschiedenen Parametern des Helligkeits-/UV-Sensors auswählen:
- Helligkeit in LUX
- UV-Belastung in µW/cm^2