Zonne intentie meten met BH1750

Als U een gezamenlijk project wil starten of aan projecten van anderen mee wilt werken.
Gebruikers-avatar
Berichten: 256
Geregistreerd: 05 Apr 2018, 00:44
Woonplaats: ALKMAAR

Zonne intentie meten met BH1750

Berichtdoor Gompy » 22 Jun 2019, 23:56

Voor mijn zonnepaneelproject (zie elders) wil ik graag meten wat de zon aan vermogen (Lumen) levert per vierkante meter (Watt/m^2)
Alles gaat goed behalve.....die Lumen weergeven.
Telkens strandt de aangegeven waarde bij ongeveer 20.000 Lumen op de LCD.
Ik krijg dan een min teken voor de waarde te staan en de waarde geeft dan dus ook weer lager aan.

Kan iemand mij vertellen waar ik overheen kijk ?

Tweede vraag, ik heb gehoord dat de BH1750 niet in direct zonlicht geplaatst mag worden, maar waarom kan ik dan wel tot minimaal 100.000 LUX meten volgens de sheet ?

Alvast bedankt, Rob


Code: Alles selecteren
/*Solarpanel Lightmeter*/

#include <LiquidCrystal_I2C.h>
#include <BH1750.h>
#include <Wire.h>; //BH1750 IIC Mode

  LiquidCrystal_I2C lcd(0x27,16,2); // ADDRESS LCD BLUE
 
  int BH1750_Device = 0x23; // I2C address for BH1750
  unsigned int Lux, Scaled_FtCd, Wattsm2;
  float FtCd; // FEET CANDEL
 
void setup() {
  Wire.begin();
  Serial.begin(9600);
  lcd.setBacklight (HIGH);
  lcd.begin (16,2);

   Wire.beginTransmission(BH1750_Device);
   Wire.write(0x10); // Set resolution to 1 Lux 
// Wire.write(0x11); // Set resolution to 2 Lux
// Wire.write(0x13); // Set resolution to 4 Lux
   Wire.endTransmission();
 
  delay(200);

  lcd.clear();

}
 
void loop() {
  int i;
  Lux = BH1750_Read();
  FtCd = Lux/10.764;
  Wattsm2 = Lux/93; // 93 Lumen = 1 Watt/m^2 ?

/*debug*/ 
  Serial.println();
  Serial.print(Lux,DEC);     
  Serial.println("[lx]");
  Serial.print(FtCd,2);     
  Serial.println("[FC]");
  Serial.print(Wattsm2,4);     
  Serial.println("[Watt/m^2]");
  delay(1000);
 
  lcd.setCursor (0,0);
  lcd.print ("W/m^2:");
  lcd.setCursor (11,0);
  char temp2[40]; // enough space for 5 numbers
  snprintf(temp2,7,"%5d",Wattsm2); // %5d = 5 digits, right aligned
  lcd.print (temp2);
 
  lcd.setCursor (0,1);
  lcd.print ("Lumen:"); // 130.000 max lux sunpower
  lcd.setCursor (10,1);
  char temp1[40]; // enough space for 7 numbers
  snprintf(temp1,7,"%6d",Lux); // %5d = 5 digits, right aligned
  lcd.print (temp1); 

}
 
unsigned int BH1750_Read() {
  unsigned int i=0;
  Wire.requestFrom(BH1750_Device, 2);
  while(Wire.available()) //
  {
    i <<=8;
    i|= Wire.read(); 
  }
  return i/1.3;  // Convert to Lux
}

Advertisement

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Zonne intentie meten met BH1750

Berichtdoor Koepel » 23 Jun 2019, 00:23

In de functie "BH1750_Read()" haal je twee byte op en die combineer je in een 16-bits variabele 'i'.
Dat is een unsigned integer, tot zover gaat het goed.
Ik raad je aan om vanaf dat punt de rest met 'float' te doen, en zelfs zodat "BH1750_Read()" een float terug geeft.

cpp code
float BH1750_Read() {
unsigned int i=0;
Wire.requestFrom(BH1750_Device, 2);
while(Wire.available()) //
{
i <<=8;
i|= Wire.read();
}
float lux = float( i) / 1.3; // Convert to Lux, default 1.2 correction factor
return( lux);
}


Daarna alle berekeningen met 'float' doen.

Hij kan zelfs tot 120.000 lux.
Maar hij hoort nu eenmaal niet in direct zonlicht.
De datasheet zegt: "BH1750FVI is an digital Ambient Light Sensor IC for I²C bus interface". Hij meet het omgevingslicht, niet de zon-intensiteit.

Ik heb je sketch niet uitgeprobeerd.

Gebruikers-avatar
Berichten: 256
Geregistreerd: 05 Apr 2018, 00:44
Woonplaats: ALKMAAR

Re: Zonne intentie meten met BH1750

Berichtdoor Gompy » 23 Jun 2019, 00:52

Ik kan een stukje "melkglas" voor de sensor te zetten, maar dat houdt in dat ik weer een verzwakking van de Lux krijg.
Op internet kan ik eigenlijk niets vinden hoe je zonlicht kan meten, uitzondering een LDR, of welke filter ik moet gebruiken.

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Zonne intentie meten met BH1750

Berichtdoor Koepel » 23 Jun 2019, 01:03

Een LDR kan ook niet in zonlicht. Als de LDR een beetje te warm wordt, dan is hij definitief beschadigd.

Er zijn "filters" of een halve bol ("dome") die het daglicht met 50% of 90% tegenhouden.
Dan is het nog steeds oppassen dat de sensor niet te warm wordt.
Sommigen gebruiken een fotografisch filter. Die hebben een nauwkeurige verzwakking en zijn voor het hele daglicht-spectrum.

Gebruikers-avatar
Berichten: 256
Geregistreerd: 05 Apr 2018, 00:44
Woonplaats: ALKMAAR

Re: Zonne intentie meten met BH1750

Berichtdoor Gompy » 23 Jun 2019, 01:14

Met die fotografische filters is het probleem (meestal) dat ze voor een bepaald spectrum geschikt zijn (UV-IR-enz).
Ik denk dat ik even naar Action loop en daar een goedkope PIR-sensor haal van 2 euro en daar de dome vanaf sloop.

Spec [1] geeft een piek bij 600nm, dus de filter moet deze dus niet blokkeren.
Ik zie ook dat de meting redelijk constant is tussen de -20 en + 80° C

Het zelfde is inderdaad bij mijn solarvolger, de LDR's pakken teveel licht waardoor het paneel behoorlijk nerveus werd.
Ik heb er een (melkkleur) plastic bakje overheen gezet en nu is het OK, hoewel de reactietijd nog wel wat langer kan dan 10 sec.
Het heeft geen enkele zijn om iedere 10 sec het paneel te stellen, daar kan makkelijk een (0,5) uur overheen gaan, zo snel draait de zon niet.

[1]
http://rohmfs.rohm.com/en/products/data ... 1fvc-e.pdf

Gebruikers-avatar
Berichten: 256
Geregistreerd: 05 Apr 2018, 00:44
Woonplaats: ALKMAAR

Re: Zonne intentie meten met BH1750

Berichtdoor Gompy » 23 Jun 2019, 12:11

Ik zit nog met het volgende probleem....de LUX-waarde op de LCD.
Serial geeft hij goed weer:

11:57:52.425 -> 54612[lx]

Code: Alles selecteren
/*Solarpanel Lightmeter*/

#include <LiquidCrystal_I2C.h>
#include <BH1750.h>
#include <Wire.h>; //BH1750 IIC Mode

  LiquidCrystal_I2C lcd(0x27,16,2); // ADDRESS LCD BLUE
 
  int BH1750_Device = 0x23; // I2C address for light sensor
  unsigned int Lux, Scaled_FtCd, Wattsm2;
  float FtCd; // FEET CANDEL
 
void setup() {
  Wire.begin();
  Serial.begin(9600);
  lcd.setBacklight (HIGH);
  lcd.begin (16,2);

   Wire.beginTransmission(BH1750_Device);
   Wire.write(0x10); // Set resolution to 1 Lux 
// Wire.write(0x11); // Set resolution to 2 Lux
// Wire.write(0x13); // Set resolution to 4 Lux
   Wire.endTransmission();
 
  delay(200);

  lcd.clear();

}
 
void loop() {
  int i;
  Lux = BH1750_Read();
  FtCd = Lux/10.764;
  Wattsm2 = Lux/683; // 683 Lux = 1 Watt/m^2

/*debug*/ 
  Serial.println();
  Serial.print(Lux,DEC);     
  Serial.println("[lx]");
  Serial.print(FtCd,2);     
  Serial.println("[FC]");
  Serial.print(Wattsm2,4);     
  Serial.println("[Watt/m^2]");
  delay(1000);
 
  lcd.setCursor (0,0);
  lcd.print ( "LUX  :" );
  lcd.setCursor (10,0);
  char temp1[20]; // enough room for 9 numbers
  snprintf(temp1,7,"%6d",Lux); // %6d = 6 digits, right aligned
  lcd.print (temp1); 

  lcd.setCursor (0,1);
  lcd.print ( "W/m^2:" );
  lcd.setCursor (11,1);
  char temp2[20]; // enough room for 5 numbers
  snprintf(temp2,7,"%5d",Wattsm2); // %6d = 5 digits, right aligned
  lcd.print (temp2);

}
 
float BH1750_Read() {
  unsigned int i=0;
  Wire.requestFrom(BH1750_Device, 2);
  while(Wire.available()) //
  {
  i <<=8;
  i|= Wire.read();
  }
  float lux = float( i) / 1.2;  // Convert to Lux, default 1.2 correction factor
  return( lux);
}


Maar op de LCD krijg ik dit te zien als ik boven de 30.000 LUX kom.
Het lijkt dan als of er terug geteld gaat worden want bij meer licht gaat de waarde ook omlaag.
Bijlagen
P1050482.JPG
P1050482.JPG (58.75 KiB) 6867 keer bekeken

Gebruikers-avatar
Berichten: 256
Geregistreerd: 05 Apr 2018, 00:44
Woonplaats: ALKMAAR

Re: Zonne intentie meten met BH1750

Berichtdoor Gompy » 23 Jun 2019, 14:10

Gevonden !

Code: Alles selecteren
  lcd.setCursor (0,0);
  lcd.print ( "LUX  :" );
  lcd.setCursor (10,0);
  char temp1[40]; // enough space value
  snprintf(temp1,7,"%6u",Lux); // %6d = 6 digits, right aligned
  lcd.print (temp1);


%6d gewijzigd in %6u

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Zonne intentie meten met BH1750

Berichtdoor Koepel » 23 Jun 2019, 22:29

Gelukkig heb je het gevonden :D zover had ik nog niet gekeken.

Gebruikers-avatar
Berichten: 256
Geregistreerd: 05 Apr 2018, 00:44
Woonplaats: ALKMAAR

Re: Zonne intentie meten met BH1750

Berichtdoor Gompy » 23 Jun 2019, 22:39

We zijn er nog niet want ik weet nog niet wat de dome gaat doen......er zal dan een herberekening gemaakt moeten worden.
Ik ben er ook nog steeds niet goed achter hoeveel LUX 1 Watt/m^2 is, er zijn verschillende uitleggen met name het spectrum.
Tussen 500 en 700 nm zit een wereld van verschil en dan lees je dit weer

/start/
http://bccp.lbl.gov/Academy/workshop08/ ... re_Law.pdf

Converting Lux to W/m2
• There is no simple conversion….it depends on
the wavelength or color of the light.
• However, for the SUN, there is an approximate
conversion of 0.0079 W/m2 per Lux.
• Example: We read 75,000 Lux on our light
sensor. We can convert that reading to W/m2.
75,000 x 0.0079 = 590 W/m2
/end/

Ik begin langzaam maar zeker door de bomen het bos niet meer te zien :shock:

Kwam deze tegen bij Banggood.
https://nl.banggood.com/BH1750-BH1750FV ... rehouse=CN

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Zonne intentie meten met BH1750

Berichtdoor Koepel » 24 Jun 2019, 05:03

Wat ik er van begrijp is inderdaad voor de zon de 0.0079 W/m2 per Lux een grove maar werkbare benadering.
Dat is voor de zon. Onze ogen zien een ander spectrum en een zonnecel vangt weer een ander deel op.

Stel dat de sensor zegt: 75.000 lux, dan is dat inderdaad ongeveer 590 Watt/m².

Stel dat je de lux als float hebt, dan:
Code: Alles selecteren
float wattPerSquareMeter = lux * 0.0079;   // 0.0079 is approximate value for sunlight

Zet in je sketch een verklaring voor het getal "0.0079", het liefst met een link naar een goede bron.

Het dopje op een PIR sensor laat infrarood door.
Dat dopje van Banggood is ook maar vaag.
Een grijsfilter voor een fototoestel is nauwkeurig voor zichtbaar licht. Misschien vind je zoiets op een rommelmarkt, maar nieuw zijn ze niet duur. Bijvoorbeeld een ND4 or ND8 grijsfilter. Daar zijn ook van die halve bolletjes van, maar dat kan ik nu even niet vinden.

Volgende

Terug naar Gezamenlijke projecten

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 10 gasten