Re: Tageslicht Messgerät
Verfasst: Di 10. Jan 2023, 14:11
Ich habe den Plan mit der Lastregelung aufgegeben. Wenn ich mit dem Transistor die Last regle, dann wird der Transistor verdammt warm und braucht somit eine Kühlung. Dann wird es in meinem Kistchen ganz schön warm und das will ich nicht. Also habe ich doch voll durchschalten lassen, da bleibt die Endstufe kalt, weil sie keine Spannung verbrennen müßen. Und ich habe aussen einen Satz Lastwiderstände, die ich zu- und abschalten kann. Damit kontrolliere ich die Last. Die 100_Watt 10_Ohm Widerstände sind heute angekommen, und schon mal Probeweise verbaut
Oder ich kann auch jederzeit anstelle der Lastwiderstände einen Solar-Laderegler mit einer Batterie, oder nur eine Batterie, als Last anstecken. Dann habe ich Echtbedinungen fürs Solarpanel und kann Strom, Spannung, Leistung vom Panel kontrollieren.
Im Bild sieht man das Gerät, auf dessen Display in der ersten Zeile die aktuellen Werte für Spannung, Strom, Leistung angezeigt werden. In der zweiten Zeile sieht man wieviele Datensätze bereits Serial übertragen wurde (jede Minute ein Datensatz), und die ermittelte Lichtstärke. In der unteren Zeile sieht man die Messwerte der beiden Lichtsensoren, aus denen ein gemeinsammer Wert entsteht, der ja in der Zeile 2 gezeigt wird.
. Hier habe ich noch das aktuelle Programm:
Ein Aktuelles Schaltbild ist hier auch noch.
.

Oder ich kann auch jederzeit anstelle der Lastwiderstände einen Solar-Laderegler mit einer Batterie, oder nur eine Batterie, als Last anstecken. Dann habe ich Echtbedinungen fürs Solarpanel und kann Strom, Spannung, Leistung vom Panel kontrollieren.
Im Bild sieht man das Gerät, auf dessen Display in der ersten Zeile die aktuellen Werte für Spannung, Strom, Leistung angezeigt werden. In der zweiten Zeile sieht man wieviele Datensätze bereits Serial übertragen wurde (jede Minute ein Datensatz), und die ermittelte Lichtstärke. In der unteren Zeile sieht man die Messwerte der beiden Lichtsensoren, aus denen ein gemeinsammer Wert entsteht, der ja in der Zeile 2 gezeigt wird.
. Hier habe ich noch das aktuelle Programm:
Code: Alles auswählen
//##############################################################
/*
Messteiler für Panelspannung erhöht, dass bis 35 Volt OK ist
Strommessung und Lastwiderstand eingebaut
PWM Spannungsregler zur Lastreglung eingebaut
Last wird immer nur kurz für Protokoll Übertragung zugeschalten
Version 2.0 vom 04.01.2023
*/
//##############################################################
#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 sekundenablauf2 = 0; // 60Sek. für Serial.print
const unsigned long pausezeit2 = 60000;
unsigned long sekundenablauf3 = 0; // 55Sek. für Lastzuschaltung
const unsigned long pausezeit3 = 55000;
unsigned long aktuellzeit = 0;
const byte pwmPort = 6;
const byte ampereMeter = A1;
int ampereSensor = 0;
float panelStrom = 0;
float lastwatt = 0;
const byte schalter = 9;
byte schalterstatus = 0;
byte SerielleAusgabe = 0;
int printzaehler = 0;
//-----------------------Panel-Messung-----------------
const byte panel = A0;
int panelwert = 0;
float panelspannung = 0;
//==============================================================
//=========================SETUP================================
//==============================================================
void setup() {
//----------------------------------------------------
lcd.begin();
lcd.backlight();
lcd.clear();
//----------------------------------------------------
Serial.begin(9600);
//-------------------Schalter / Taster----------------
pinMode(schalter, INPUT_PULLUP);
pinMode(panel, INPUT); // Spannung vom Panel
pinMode(pwmPort, OUTPUT); // Stromregler
pinMode(ampereMeter, INPUT); // Strommesser
//----------------------------------------------------
ads.begin(ADS_I2C_ADDR, &Wire);
// Werte 1-fach verstärken (ESP32 liefert max. 3,3V)
ads.setGain(GAIN_ONE);
//----------------------------------------------------
lcd.setCursor (0, 1);
lcd.print (F("Ser="));
lcd.setCursor (0, 2);
lcd.print (F("--------------------"));
//----------------------------------------------------
sekundenablauf1 = millis();
sekundenablauf2 = millis();
sekundenablauf3 = millis();
//----------------------------------------------------
}
//==============================================================
//=========================LOOP=================================
//==============================================================
void loop() {
aktuellzeit = millis();
//Jede Sekunde Spannung am Panel messen
if (aktuellzeit - sekundenablauf1 >= pausezeit1) // Eine Sekunde abgelaufen?
{
//----------------Panel_Messung----------------------
panelwert = analogRead(panel);
panelspannung = panelwert * 34.1 / 1024.0;
lcd.setCursor (0, 0);
lcd.print (F("V "));
lcd.setCursor(1, 0);
lcd.print(panelspannung);
ampereSensor = analogRead(ampereMeter);
lcd.setCursor (7, 0);
lcd.print (F("A "));
lcd.setCursor(8, 0);
panelStrom = (ampereSensor - 510) * 0.047;
lcd.print(panelStrom);
lcd.setCursor (14, 0);
lcd.print (F("W "));
lcd.setCursor(15, 0);
lastwatt = panelspannung * panelStrom;
lcd.print(lastwatt);
// -----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; //
//---------------Display alle Anzeigen---------------
lcd.setCursor (9, 1);
lcd.print (F("Licht= "));
lcd.setCursor (15, 1);
lcd.print (Messung1);
lcd.setCursor (0, 3);
lcd.print (F("L1= "));
lcd.setCursor (3, 3);
lcd.print (ads_mv0);
lcd.setCursor (11, 3);
lcd.print (F("2= "));
lcd.setCursor (13, 3);
lcd.print (ads_mv1);
sekundenablauf1 = millis();
}
//----------Last Zuschaltung-------------------------
if (aktuellzeit - sekundenablauf3 >= pausezeit3) // 55 Sekunden abgelaufen?
{
digitalWrite (pwmPort, HIGH);
}
//-------Serial-Datenausgabe-------------------------
if (SerielleAusgabe == HIGH)
{
if (aktuellzeit - sekundenablauf2 >= pausezeit2) // Eine Minute abgelaufen?
{
if (printzaehler < 9999)
{
printzaehler++;
}
lcd.setCursor (4, 1);
lcd.print (F(" "));
lcd.setCursor (4, 1);
lcd.print (printzaehler);
Serial.print(F("SonnenSensor="));
Serial.print(ads_mv1);
Serial.print(F(" DunkelSensor="));
Serial.print(ads_mv0);
Serial.print(F(" Summe-Licht="));
Serial.print(Messung1);
Serial.print(F(" Zaehler="));
Serial.print(printzaehler);
Serial.print(" / ");
Serial.print(F(" PanelSpannung="));
Serial.print(panelspannung);
Serial.print(F(" PanelStrom="));
Serial.print(panelStrom);
Serial.print(F(" Leistung="));
Serial.println(lastwatt);
digitalWrite (pwmPort, LOW);
sekundenablauf2 = millis();
sekundenablauf3 = millis();
}
}
//---------------Schalter abfragen-------------------
//Schalter bestimmt ob Daten serial ausgegeben werden
schalterstatus = digitalRead(schalter);
if (schalterstatus == LOW)
{
SerielleAusgabe = HIGH;
}
else
{
SerielleAusgabe = LOW;
printzaehler = 0;
digitalWrite (pwmPort, HIGH);
}
//---------------------------LOOP Ende---------------
}
.