3D-Dateien

Zu Beginn ist es möglich mit der Software Onshape die 3D-Modelle für die Halterungen des ESP32 mit Display und des Wassertanks zu entwerfen. Zusätzlich gibt es die Möglichkeit auf der Internetseite https://www.yeggi.com/ die Dateien für die Halterung des INA226 Sensors und die benötigten Winkel herunterzuladen. Diese Dateien werden anschließend durch das Slicer-Programm Ultimaker Cura für den 3D-Druck vorbereitet in einem 3D-Drucker ausgedruckt.

Abbildung 4: 3D-Druck Dateien

Aufbau Solarpanel und Batterie

Vor der Installation der Elektronikkomponenten sollte die Spannung an den Leitungen des Solarpanels mit einem Multimeter gemessen werden und die Funktionsfähigkeit überprüft werden, indem das Panel mit der Batterie verbunden wird. Nach erfolgreicher Überprüfung werden die beigelegten Verbindungspins an den ESP32 gelötet, um eine dauerhafte und sichere Verbindung zu schaffen.

Schaltungsaufbau

Anschließend soll auf Erstellung der Schaltung für den ESP32 und die Programmierung übergegangen werden. Hierbei muss besonders auf die korrekte Pinbelegung und die Konfiguration der Software geachtet werden.


Abbildung 5: Pin-Belegung ESP32


Abbildung 6: Pin-Belegung INA226 Sensor

Anschluss der LED

Die LED am ESP32 wird mit Bedacht an einen geeigneten GPIO-Pin angeschlossen, um mögliche Konflikte während des Bootvorgangs zu vermeiden. Für die Dimensionierung des Vorwiderstands der LED sollen die LED-Spezifikationen und die Versorgungsspannung des ESP32 berücksichtigt werden, um eine Überlastung zu verhindern.

Schluss INA226 Sensor

Der INA226 Sensor wird sorgfältig für eine stromrichtige Messung vorbereitet, indem die positive Leitung des Solarpanels direkt an den Sensor angeschlossen wird, um die Spannung und den Stromfluss effektiv messen zu können. Zudem soll die korrekte Pinbelegung zwischen dem INA226 und dem ESP32 überprüft werden, um eine fehlerfreie Kommunikation und Datenübertragung zu gewährleisten. Nach der Verifizierung und Abschluss des Projekts kann man den Sensor und weitere Komponente sorgfältig auf die Lötplatine löten und die weiteren Verbindungen herstellen.

Code

Um die Leistungsdaten des Solarpanels zu erfassen und darzustellen, sollen die notwendigen Bibliotheken für den INA226 Sensor importiert werden. Wie im folgenden Code-Beispiel gezeigt, müssen die GPIO-Pins für das Display und die LED deklariert werden und das Display zur Visualisierung der Daten programmiert werden. Die Messwerte wurden alle fünf Sekunden aktualisiert, um eine Balance zwischen Energieverbrauch und Datenaktualität zu halten. 

Der zugehörige Code wird im Folgenden abgebildet:

// Code für die Entwicklung und Implementierung eines Überwachungssystems für die Leistung eines Solarpanels unter Verwendung eines ESP32 und INA226 mit visueller Anzeige auf einem E-Ink Display
// Autor: Jason Ristok
// Datum: 13.05.2024

// Importierung der Bibliotheken für den INA226 Sensor, ESP32 und das Display
#include <Wire.h>
#include <INA226_WE.h>
#include <GxEPD.h>
#include <GxIO/GxIO_SPI/GxIO_SPI.h>
#include <GxIO/GxIO.h>
#include <GxDEPG0213BN/GxDEPG0213BN.h>

#include <Fonts/FreeMonoBold9pt7b.h> // Importierung der Schriftart und der kleinen Schriftgröße für die Anzeige von Spannung und Strom auf dem Display
#include <Fonts/FreeMonoBold18pt7b.h> // Importierung der Schriftart und der großen Schriftgröße für die Anzeige der Leistung auf dem Display

// Definition des Pins für die Verwendung des Displays
#define ELINK_SS 5
#define ELINK_BUSY 4
#define ELINK_RESET 16
#define ELINK_DC 17

#define LED_PIN 2 // Definition des GPIO-Pins für die Verwendung der LED

#define INA226_ADDRESS 0x40  

#define REG_CONFIG         0x00
#define REG_SHUNT_VOLTAGE  0x01
#define REG_BUS_VOLTAGE    0x02
#define REG_POWER          0x03
#define REG_CURRENT        0x04
#define REG_CALIBRATION    0x05

//GxEPD_Class display(ELINK_SS, ELINK_DC, ELINK_RESET, ELINK_BUSY); // Dein Display
INA226_WE ina226(INA226_ADDRESS);
GxIO_Class io(SPI, /*CS=*/ ELINK_SS, /*DC=*/ ELINK_DC, /*RST=*/ ELINK_RESET); // arbitrary selection of 8, 9 selected for default of GxEPD_Class
GxEPD_Class display(io, /*RST=*/ ELINK_RESET, /*BUSY=*/ ELINK_BUSY); // default selection of (9), 7

void setup() {
  Serial.begin(115200);
  Wire.begin(); // Startet die I²C-Kommunikation
  ina226.init();

  // Initialisiere das e-Ink Display
  display.init(115200); // Ermöglicht diagnostische Ausgabe auf Serial
  display.setRotation(1); // Setzt die Ausrichtung des Displays

  pinMode(LED_PIN, OUTPUT); // LED-Pin als Ausgang setzen
}

void loop() {
  float shuntVoltage_mV = 0.0;
  float loadVoltage_V = 0.0;
  float busVoltage_V = 0.0;
  float current_mA = 0.0;
  float power_mW = 0.0; 
  float res=0.0;
  float pes=0.0;

  ina226.readAndClearFlags();
  shuntVoltage_mV = ina226.getShuntVoltage_mV();
  busVoltage_V = ina226.getBusVoltage_V();
  current_mA = ina226.getCurrent_mA();
  power_mW = ina226.getBusPower();
  loadVoltage_V  = busVoltage_V + (shuntVoltage_mV/1000);
  
  Serial.print("Shunt Voltage [mV]: "); Serial.println(shuntVoltage_mV);
  Serial.print("Bus Voltage [V]: "); Serial.println(busVoltage_V);
  Serial.print("Load Voltage [V]: "); Serial.println(loadVoltage_V);
  Serial.print("Current[mA]: "); Serial.println(current_mA);

  if(power_mW > 6.0)
  {
    digitalWrite(LED_PIN, HIGH); // LED soll eingeschaltet werden, wenn die Leistung über 6 W beträgt
  }
  else
  {
    digitalWrite(LED_PIN, LOW); // LED soll ausgeschaltet werden, wenn die Leistung den Wert von 6 W unterschreitet
  }

  // Vorbereitung des Displays auf das Update
  display.fillScreen(GxEPD_WHITE);
  
  // Set font for voltage and current
  display.setFont(&FreeMonoBold9pt7b);
  display.setTextColor(GxEPD_BLACK);
  display.setCursor(0, 30); // Position des Textes auf dem Display
  display.print("U: "); 
  display.print(busVoltage_V, 2); // Anzeige der Spannung
  display.print(" V, I: ");
  display.print(current_mA, 3); // Anzeige des Stroms
  display.println(" A");
  
  // Einstellung der Schriftart und der Schriftgröße auf dem Display
  display.setFont(&FreeMonoBold18pt7b);0
  display.setCursor(0, 80); // Anpassung an die Auflösung des Displays und Verschiebung nach unten
  display.print("P: ");
  display.print(power_mW, 2);
  display.println(" W");

  // Aktualisierung des Displays
  display.update();
  
  delay(10000); // 10 Sekunden Pause bis zur Aktualisierung des Displays
}

Installation

Abschließend geht es um die physische Installation der Komponenten. Das Solarpanel wird auf dem Dach des Modellhauses montiert und das E-Ink Display sowie die Platine werden in einem speziell gedruckten Gehäuse an einer der Plexiglaswände des Hauses befestigt. Der Wassertank wird im Haus in den vorgesehenen Raum platziert und die LED-Leitung zum Tank geführt, um die Wassererwärmung visuell darzustellen. Nachdem alle Installationsschritte abgeschlossen sind, soll mit dem Auftraggeber einen Termin für die Inbetriebnahme und offizielle Übergabe der Anlage abgesprochen werden.


Abbildung 7: Solarpanel auf Dach


Abbildung 8: E-Ink Display und leuchtende LED

Zuletzt geändert: Mittwoch, 5. Juni 2024, 13:02