BH1750 Lichtsensor 'überlastet'

Hallo Community,

bin gerade am Bauen und Programmieren einer Solarsteuerung für den Pool.

Kurze Erklärung:
Sonne ist da: Poolpumpe schaltet sich durch ein Relais ein um das Wasser über die Solaranlage laufen zu lassen. >Lux Wert über 25000 (Messung über zwei BH1750 Sensoren, die an zwei unterschiedlichen Orten der Solaranlage platziert sind)
Es ist bewölkt/Nacht: Relais fällt ab dass der Pool durch die Solarkollektoren nicht abkühlt. > Lux Wert unter 15000.

Das Problem ist jetzt, dass die Sensoren (BH1750) nur einen Wert bis max. 65535 ausgibt. Alles darüber ist in meinem Sketch wieder 0 Lux. An sonnigen Tagen kann der Lux Wert der Sonne jedoch bei etwa 120k liegen. Also über der Spezifikation des Sensors. Dann geht die Pumpe bei voller Sonne aus. Kennt jemand einen Fix dafür.
Physikalisch den Sensor verdunkeln wäre meine letzte Idee. Aber das geht doch auch Software seitig?

Danke im Voraus und allen einen schönen Abend

Anbei der Code:

#include <Wire.h> //BH1750 IIC Mode
#include <math.h>
int Sen1 = 0x23; //Adresse BH1750 Sensor 1
int Sen2 = 0x5C; ////Adresse BH1750 Sensor 2
const int RELAY_PIN = 8;  // Relais Anschluss

byte buff[2];

void setup()
{
  Wire.begin();
  Serial.begin(9600);
  pinMode(RELAY_PIN, OUTPUT);
}

void loop()
{
  int i;
  uint16_t val1 = 0, val2 = 0;

  BH1750_Init(Sen1);
  BH1750_Init(Sen2);
  delay(200);

  if (2 == BH1750_Read(Sen1))
  {
    val1 = ((buff[0] << 8) | buff[1]) / 1.2;
    Serial.print("Sensor01: ");
    Serial.print(val1, DEC);
    Serial.println("[lx]");
  }
  delay(200);

  if (2 == BH1750_Read(Sen2))
  {
    val2 = ((buff[0] << 8) | buff[1]) / 1.2;
    Serial.print("Sensor02: ");
    Serial.print(val2, DEC);
    Serial.println("[lx]");
  }
  delay(200);

  if ( float(val1) > 25000.00 || float(val2) > 25000.00) //Wenn Lux Wert über 25000 = Relais/Pumpe an
  {
    digitalWrite(RELAY_PIN, HIGH);
    delay(5000);
  }


  else if ( float(val1) < 15000.00 || float(val2) < 15000.00) //Wenn Lux Wert unter 15000 = Relais/Pumpe aus
  {
    digitalWrite(RELAY_PIN, LOW);
    delay(1000);
  }
}

int BH1750_Read(int address) //
{
  int i = 0;
  Wire.beginTransmission(address);
  Wire.requestFrom(address, 2);
  while (Wire.available()) //
  {
    buff[i] = Wire.read();  // receive one byte
    i++;
  }
  Wire.endTransmission();
  return i;
}

void BH1750_Init(int address)
{
  Wire.beginTransmission(address);
  Wire.write(0x10);//1lx reolution 120ms
  Wire.endTransmission();
}

solartest.ino (1.54 KB)

goeggianer:
Das Problem ist jetzt, dass die Sensoren (BH1750) nur einen Wert bis max. 65535 ausgibt. Alles darüber ist in meinem Sketch wieder 0 Lux.

Das ist auch richtig so.
Das, was Du mit dem sensor anstellst, ist so gar nicht vorgesehen:

Descriptions
BH1750FVI is an digital Ambient Light Sensor IC for I2C bus interface. This IC is the most suitable to obtain the ambient light data for adjusting LCD and Keypad backlight power of Mobile phone. It is possible to detect wide range at High resolution.
( 1 - 65535 lx ).

Tipp: Milchglasscheibe davor und die Einschaltwerte

Sonne ist da: Poolpumpe schaltet sich durch ein Relais ein um das Wasser über die Solaranlage laufen zu lassen. >Lux Wert über 25000

runtersetzen.

Nur um nicht ganz dumm zu sterben: Willst Du die Filterpumpe mit einem Photovoltaik-Panel betreiben oder das Wasser mit einem thermischen Solarpanel erwärmen?

Danke für die schnelle Antwort
Okay dann wirds wohl doch die Hardware Lösung. Werde aus Petg ein Gehäuse drucken. Sollte theoretisch hitzebeständig genug sein. Es handelt sich um Solarmatten. Also das kühle Poolwasser fließt durch viele kleine Bahnen um sich dadurch zu erhitzen.

Grüße

goeggianer:
Okay dann wirds wohl doch die Hardware Lösung. Werde aus Petg ein Gehäuse drucken. Sollte theoretisch hitzebeständig genug sein. Es handelt sich um Solarmatten. Also das kühle Poolwasser fließt durch viele kleine Bahnen um sich dadurch zu erhitzen.

Also dafür reicht ja optimal ein LDR.
Suchmaschine Deiner Wahl "Arduino LDR" - mit Codebeispielen en Mass.

Dafür würde ich keinen 3D-Drucker anschmeissen :wink:

(deleted)