Ich wollte mal noch den Lichtsensor TSL2561 testen. Ich dachte, dass der vielleicht das ganze Lichstsprecktrum dunkel bis volle Sonne abdeckt, das ich ja für meinen Sonnenverfolger und für das Lichtmessgerät brauchen würde. Aber das war wohl nix. Schon mit meiner hellen LED Handlampe komme ich da auf Maximum Lichtwert. Ich bekomme mit der Lampe 65536 LUX mit dem Testprogramm, 2100 - 3300 Lux mit meinem Deckenlicht über dem Arbeitsplatz. Ich muss damit noch ein paar Tests machen, aber schaut nicht gut aus.
Franz
Hier das Testprogramm, das ich mir dafür angepasst habe.
Code: Alles auswählen
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_TSL2561_U.h>
#include <LiquidCrystal_I2C.h> // LCD Display
// Displayadresse ist 0x27 oder 0x3F
LiquidCrystal_I2C lcd(0x27, 20, 4);
/* Dieser Treiber verwendet die Adafruit Unified Sensor Library (Adafruit_Sensor),
die einen gemeinsamen "Typ" für Sensordaten und einige Hilfsfunktionen bereitstellt.
Um diesen Treiber zu verwenden, müssen Sie auch den Adafruit_Sensor herunterladen
library und fügen Sie sie in Ihren Bibliotheksordner ein.
Sie sollten diesem Sensor zur Verwendung auch eine eindeutige ID zuweisen
die Adafruit Sensor API, damit Sie diese identifizieren können
Sensor in beliebigen Datenprotokollen etc. Einfach eine eindeutige ID zuweisen
Geben Sie im Konstruktor unten einen geeigneten Wert an (12345
wird in diesem Beispiel standardmäßig verwendet).
Verbindungen
===========
Verbinden Sie SCL mit I2C SCL Clock
Verbinden Sie SDA mit I2C-SDA-Daten
Verbinden Sie VCC/VDD mit 3,3 V oder 5 V (abhängig vom Logikpegel des Sensors, siehe Datenblatt)
Verbinden Sie GROUND mit der gemeinsamen Masse
I2C-Adresse
===========
Die Adresse ist unterschiedlich.
TSL2561_ADDR_HIGH
TSL2561_ADDR_LOW
TSL2561_ADDR_FLOAT
Geschichte
=======
2013/JAN/31 - Erste Version (KTOWN)
*/
Adafruit_TSL2561_Unified tsl = Adafruit_TSL2561_Unified(TSL2561_ADDR_LOW, 12345);
/**************************************************************************/
/*
Zeigt einige grundlegende Informationen zu diesem Sensor aus dem Unified an
sensor API sensor_t type (weitere Informationen finden Sie unter Adafruit_Sensor)
*/
/**************************************************************************/
void displaySensorDetails(void)
{
sensor_t sensor;
tsl.getSensor(&sensor);
Serial.println("------------------------------------");
Serial.print ("Sensor: "); Serial.println(sensor.name);
Serial.print ("Sensor Ver: "); Serial.println(sensor.version);
Serial.print ("Name ID: "); Serial.println(sensor.sensor_id);
Serial.print ("Max Wert: "); Serial.print(sensor.max_value); Serial.println(" lux");
Serial.print ("Min Wert: "); Serial.print(sensor.min_value); Serial.println(" lux");
Serial.print ("Auflösung: "); Serial.print(sensor.resolution); Serial.println(" lux");
Serial.println("------------------------------------");
Serial.println("");
delay(500);
}
/**************************************************************************/
/*
Konfiguriert die Verstärkung und Integrationszeit für den TSL2561
*/
/**************************************************************************/
void configureSensor(void)
{
/* Sie können die Verstärkung auch manuell einstellen oder die automatische Verstärkungsunterstützung aktivieren */
// tsl.setGain(TSL2561_GAIN_1X); /* No gain ... Verwenden Sie es bei hellem Licht, um eine Sensorsättigung zu vermeiden */
// tsl.setGain(TSL2561_GAIN_16X); /* 16x gain ... Verwenden Sie es bei schwachem Licht, um die Empfindlichkeit zu erhöhen */
tsl.enableAutoRange(true); /* Auto-gain ... schaltet automatisch zwischen 1x und 16x um */
/* Eine Änderung der Integrationszeit ergibt eine bessere Sensorauflösung (402 ms = 16-Bit-Daten) */
// tsl.setIntegrationTime(TSL2561_INTEGRATIONTIME_13MS); /* schnell, aber niedrige Auflösung */
// tsl.setIntegrationTime(TSL2561_INTEGRATIONTIME_101MS); /* mittlere Auflösung und Geschwindigkeit */
tsl.setIntegrationTime(TSL2561_INTEGRATIONTIME_402MS); /* 16-Bit-Daten, aber langsamste Konvertierungen */
/* Aktualisieren Sie diese Werte je nachdem, was Sie oben eingestellt haben! */
Serial.println("------------------------------------");
Serial.print ("Gain: "); Serial.println("x1");
Serial.print ("Timing: "); Serial.println("402ms");
Serial.println("------------------------------------");
}
/**************************************************************************/
/*
Arduino-Setup-Funktion (wird beim Start automatisch aufgerufen)
*/
/**************************************************************************/
void setup(void)
{
Serial.begin(9600);
//-----------LCD Display Start----------------------------------------
lcd.begin();
lcd.backlight();
lcd.clear();
lcd.setCursor (0, 0); // Zeile 1
lcd.print (F("Lichtsensor TSL2561"));
lcd.setCursor (13, 2);
lcd.print ("LUX");
/* Initialisieren Sie den Sensor */
//use tsl.begin() to default to Wire,
//tsl.begin(&Wire2) directs api to use Wire2, etc.
if (!tsl.begin())
{
/* Beim Erkennen des TSL2561 ist ein Problem aufgetreten ... überprüfen Sie Ihre Verbindungen */
Serial.print("oops, kein TSL2561 erkannt ... Überprüfen Sie Ihre Verkabelung oder I2C ADDR!");
lcd.setCursor (0, 2); // Zeile 1
lcd.print (F("Kein TSL2561 erkannt"));
while (1);
}
/* Zeigt einige grundlegende Informationen zu diesem Sensor an */
displaySensorDetails();
/* Stellen Sie die Sensorverstärkung und die Integrationszeit ein */
configureSensor();
/* We're ready to go! */
Serial.println("");
}
/**************************************************************************/
/*
Arduino-Loop-Funktion, die aufgerufen wird, sobald „Setup“
abgeschlossen ist (Ihr eigener Code sollte hier hin)
*/
/**************************************************************************/
void loop(void)
{
/* Holen Sie sich ein neues Sensorereignis */
sensors_event_t event;
tsl.getEvent(&event);
/* Anzeige der Ergebnisse (Licht wird in Lux gemessen) */
if (event.light)
{
lcd.setCursor (0, 2); // Zeile 3
lcd.print (F(" "));
lcd.setCursor (0, 2);
lcd.print (event.light);
}
else
{
/* Wenn event.light = 0 Lux ist, ist der Sensor wahrscheinlich gesättigt
und es konnten keine zuverlässigen Daten generiert werden! */
Serial.println("Sensor overload");
}
delay(250);
}