Lichtsensor TSL2561

Antworten
Benutzeravatar
Admin
Administrator
Beiträge: 1197
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Lichtsensor TSL2561

Beitrag von Admin »

Hallo Gemeinde.
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);
}
Benutzeravatar
Admin
Administrator
Beiträge: 1197
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Lichtsensor TSL2561

Beitrag von Admin »

Also meine Lösung mit zwei Sensoren, deren Messdaten ich zu einem Wert addiere, macht mehr Sinn. Bei denen einer die extrem hellen Werte abdeckt und einer das Licht von Dunker Himmel bis Bedeckter Himmel abdeckt, ist meine Lösung.

Der TSL2561 ist im Vergleich wesentlich teuerer, denn ich bräuchte auch da zwei Sensoren, um die ganze Lichtspanne von Dunkel bis volle Sonne abzudecken. Das macht keinen Sinn. Um Lichtwerte im Raum zu messen, ist dieser Sensor sinnvoll, weil ich damit offenbar echte Lux-Werte bekomme.

Franz
Antworten

Zurück zu „Hardware / Schaltungstechnik“

Wer ist online?

Mitglieder in diesem Forum: Ahrefs [Bot] und 6 Gäste