Ich habe also für die Messung zwei Sensoren genommen, habe einen von den beiden abgeschirmt mit drei Lagen 100gramm Papier, und messe mit beiden gleichzeitig. Jeder Sensor hat eine Messspanne von 0 - 4095. diese Beiden Werte anddiere ich und habe so nur noch einen Wert von 0 - 8190. Das reicht von dunkel bis volle Sonne. Also auch für meinen Sonnenverfolger.
Und hier ist das kleine Messgerät, das ich auf dem selben Prinzip wie die Lichtstärke-Messungen des Sonnenverfolgers gebaut habe. Nur dass der diese Messung in 4 Richtungen gleichzeitig durchführt und etwa 10x in der Sekunde. Bei dem kleinen Gerät hier, zeige ich die Werte nur einmal pro Sekunden.
Hier ist mal das Programm zu diesem kleinen Messgerät:
Code: Alles auswählen
#include <LiquidCrystal_I2C.h>
// Display Adresse 0x3F 0der 0x27
LiquidCrystal_I2C lcd(0x27, 20, 4);
#include <Adafruit_ADS1X15.h> // bindet Wire.h für I2C mit ein
Adafruit_ADS1115 ads;
#define ADS_I2C_ADDR 0x48
//------------------------------------------------------
const float multiplier = 0.125F; // ADS1115-Multiplikator bei einf. Verstärkung
float ads_mv0 = 0; // Sensor rechts
float ads_mv1 = 0; // Sensor links
int adc0 = 0;
int adc1 = 0;
int Messung1 = 0;
int Messung2 = 0;
byte Status = 0;
unsigned long sekundenablauf1 = 0; // Messabstand 1 Sekunde
const unsigned long pausezeit1 = 1000;
unsigned long aktuellzeit = 0;
//==============================================================
//=========================SETUP================================
//==============================================================
void setup() {
//----------------------------------------------------
lcd.begin();
lcd.backlight();
lcd.clear();
//----------------------------------------------------
Serial.begin(115200);
//----------------------------------------------------
ads.begin(ADS_I2C_ADDR, &Wire);
// Werte 1-fach verstärken (ESP32 liefert max. 3,3V)
ads.setGain(GAIN_ONE);
//----------------------------------------------------
lcd.setCursor (0, 0); // Zeile 1
lcd.print (F("Tageslicht - Messung"));
lcd.setCursor (0, 1);
lcd.print (F("Licht Summe"));
lcd.setCursor (0, 2);
lcd.print (F("--------------------"));
lcd.setCursor (0, 3);
lcd.print (F("1="));
lcd.setCursor (11, 3);
lcd.print (F("2="));
//----------------------------------------------------
//----------------------------------------------------
}
//==============================================================
//=========================LOOP=================================
//==============================================================
void loop() {
aktuellzeit = millis();
//Jede Sekunde Spannung am Panel messen
if (aktuellzeit - sekundenablauf1 >= pausezeit1) // Eine Sekunde abgelaufen?
{
//---------------------Display alle Anzeigen---------------
lcd.setCursor (15, 1);
lcd.print (" ");
lcd.setCursor (16, 1);
lcd.print (Messung1);
lcd.setCursor (2, 3);
lcd.print (F(" "));
lcd.setCursor (2, 3);
lcd.print (ads_mv0);
lcd.setCursor (13, 3);
lcd.print (F(" "));
lcd.setCursor (13, 3);
lcd.print (ads_mv1);
sekundenablauf1 = millis();
}
// -----Kanal 0 Messung------------------------------
adc0 = ads.readADC_SingleEnded(0);
ads_mv0 = ads.computeVolts(adc0) * 1000;
// -----Kanal 1 Messung------------------------------
adc1 = ads.readADC_SingleEnded(1);
ads_mv1 = ads.computeVolts(adc1) * 1000;
Messung1 = ads_mv0 + ads_mv1; //
//----------------------Ende Loop----------------------
}
. Der niedrige Wert vierte Zeile 2= ist der Wert der bei großer Sonneneinstrahlung zur Geltung kommt. Der wird nur bei sehr grellen Licht hoch, weil dieser Sensor abgedeckt ist. Der Wert 1= ist der Wert der auch bei kleinem Licht schon größer wird. Wie man am Bild sieht. Diese beiden Werte werden addiert und ergeben dann den Messwert in der zweiten Zeile im Bild, der mich interessiert.