- Erforderliche Materialien für das ESP32-Leistungsmessgerät
- Arduino- und ESP32-basiertes Effizienzmessgerät - Schaltplan
- PCB Design für Arduino und ESP32 Based Efficiency Meter
- Arduino- und ESP32-basiertes Effizienzmessgerät - Code
- Testen des auf Arduino und ESP32 basierenden Wirkungsgradmessers
- Weitere Verbesserungen
Wir alle kennen ein grundlegendes Voltmeter, Amperemeter und Wattmeter, die drei grundlegenden Dinge, die Sie benötigen, um Werte in elektronischen Projekten oder Schaltkreisen zu messen. Das Messen von Spannung und Strom mit Hilfe eines Multimeters kann ein guter Anfang sein, aber eines der größten Probleme beim Testen einer Schaltung ist das Messen der Energieeffizienz. Daher werden wir dieses Problem heute lösen, indem wir ein auf Arduino und ESP32 basierendes Effizienzmessgerät bauen, mit dem Eingangsspannung, Eingangsstrom, Ausgangsspannung und Ausgangsstrom gemessen werden können. Daher kann die Eingangsleistung und die Ausgangsleistung gleichzeitig gemessen werden, und mit diesen Werten können wir den Wirkungsgrad leicht messen. Zuvor haben wir in unserem Arduino-basierten Wattmeter-Projekt auch etwas sehr Ähnliches gemacht, aber hier werden wir sowohl die Eingangsleistung als auch die Ausgangsleistung messen Energieeffizienz berechnen.
Anstatt vier Meter für diesen Auftrag zu kaufen, können wir dieses Problem lösen, indem wir die Funktionen aller vier Meter in einem integrieren. Der Bau Ihres digitalen Messgeräts reduziert nicht nur die Kosten, sondern bietet Ihnen auch Spielraum für Upgrades und Verbesserungen. Da wir zum Erstellen dieses Projekts ein ESP32 verwenden, können wir dieses Messgerät problemlos IoT aktivieren und Daten über das Web protokollieren, was das Thema für das zukünftige Projekt ist. Nachdem alle Grundlagen geklärt sind, können wir gleich loslegen.
Hinweis: Dieser Leistungsmesser ist für Gleichstromkreise ausgelegt. Wenn Sie den Wechselstrom bis zur berechneten Wechselstromleistung messen möchten, können Sie sich die IoT-basierten Projekte für Stromenergiezähler und Prepaid-Energiezähler ansehen.
Erforderliche Materialien für das ESP32-Leistungsmessgerät
Das Bild unten zeigt die Materialien, die zum Aufbau der Schaltung verwendet wurden. Da dies mit sehr generischen Komponenten gemacht wird, sollten Sie in der Lage sein, das gesamte aufgelistete Material in Ihrem örtlichen Hobbygeschäft zu finden.
Ich habe auch die Komponenten unten zusammen mit der erforderlichen Menge aufgelistet. Wenn Sie die Schaltung selbst bauen, wird dringend empfohlen, alle Materialien aus der folgenden Liste zu entnehmen.
- ESP32-Karte - 1
- 128X64 OLED - 1
- ACS712-20 IC - 2
- DC Barrel Jack - 1
- 100 uF Kondensator - 2
- 104pF - 2
- 102pF - 2
- 10 K, 1% - 4
- 68 K, 1% - 2
- 6,8 K, 1% - 2
Arduino- und ESP32-basiertes Effizienzmessgerät - Schaltplan
Das Schema für das Arduino- und ESP32-basierte Effizienzmessgerät ist unten dargestellt. Das Erstellen dieser Schaltung ist sehr einfach und verwendet generische Komponenten.
Die Bedienung der Schaltung ist sehr einfach. Wir werden die Spannung und den Strom in diesem Projekt auf einzigartige Weise messen. Wir messen Spannung und Strom sowohl für den Eingang als auch für den Ausgang, daher können wir den Wirkungsgrad der Schaltung sehen. Dies ist für einige Projekte sehr praktisch. Ein Beispiel könnte ein DC / DC-Wandler sein, bei dem die Effizienzmessung obligatorisch wird. Die Funktionsweise dieser Schaltung wird unten beschrieben.
Der ACS712-Stromsensor-IC:
Wie Sie im obigen Bild sehen können, verwenden wir einen ACS712-Stromsensor-IC, um den Strom zu messen. Dies ist ein sehr interessanter IC, da er den Hall-Effekt zur Strommessung verwendet. Es gibt drei Varianten dieses ICs, die auf dem Markt für f (oder 5A, 20A und 30A) erhältlich sind. Wir verwenden die 20A-Variante davon und sie ist als ACS712-20 gekennzeichnet.
Das Datenblatt ACS712 empfiehlt einen Spannungsbereich von 4,5 bis 5,5, um einen reibungslosen Betrieb zu gewährleisten. Und da wir den Strom mit einem ESP32 messen werden, ist er nur 3,3 V tolerant, weshalb ich einen Spannungsteiler mit zwei 10K-Widerständen verwendet habe, um die Ausgangsspannung des ACS712-IC zu senken. Wenn kein Strom durch den IC fließt, gibt er 2,5 V aus, und wenn eine gewisse Strommenge durch den IC fließt, senkt er entweder die Spannung oder erhöht die Spannung in Abhängigkeit von der Stromflussrichtung. Wir haben zwei dieser ICs verwendet, um den Eingangs- und Ausgangsstrom zu messen. Schauen Sie sich unsere vorherigen Projekte (unten) an, in denen wir diesen ACS712-Sensor verwendet haben.
- IoT-basierter Strom-Energiezähler mit Arduino- und ESP8266-WLAN-Modul
- Digitaler Amperemeter-Schaltkreis mit PIC-Mikrocontroller und ACS712
Wo wir die Funktionsweise dieser Sensoren ausführlich besprochen haben. Sie können diese überprüfen, wenn Sie mehr über diese Sensoren erfahren möchten.
Der Spannungsteiler:
Um die Eingangs- und Ausgangsspannung zu messen, haben wir zwei Spannungsteiler auf der Eingangs- und der Ausgangsseite der Schaltung. Die maximale Spannung, die die Schaltung messen kann, beträgt 35 V, kann jedoch leicht durch Ändern der Widerstandswerte für den Spannungsteiler geändert werden.
Der Spannungsregler:
Ein generischer Spannungsregler LM7805 wird zur Stromversorgung der ICs ESP32, OLED und ACS712 verwendet. Da wir es mit ziemlich sauberer Energie einschalten, werden keine Entkopplungskondensatoren verwendet, aber wir haben 100 uF Kondensatoren sowohl am Eingang als auch am Ausgang verwendet, um den IC zu stabilisieren.
Der ESP32-IC und das OLED-Display:
Wir haben einen ESP32 als Hauptprozessor verwendet, der für alle Messwerte, Berechnungen, Eingaben und Ausgaben verantwortlich ist. Außerdem haben wir ein 128X64-OLED-Display verwendet, um die Werte zu kennen.
PCB Design für Arduino und ESP32 Based Efficiency Meter
Die Platine für unser Arduino- und ESP32-basiertes Effizienzmessgerät ist auf einer einseitigen Platine ausgeführt. Ich habe Eagle zum Entwerfen meiner Leiterplatte verwendet, aber Sie können jede Entwurfssoftware Ihrer Wahl verwenden. Das 2D-Bild meines Board-Designs ist unten dargestellt.
Es wird eine ausreichende Erdungsspur verwendet, um ordnungsgemäße Erdungsverbindungen zwischen allen Komponenten herzustellen. Außerdem haben wir darauf geachtet, geeignete 5-V- und 3,3-V-Leiterbahnen zu verwenden, um das Rauschen zu reduzieren und die Effizienz zu verbessern.
- Laden Sie die PCB Design- und GERBER-Dateien Arduino und ESP32 Based Efficiency Meter herunter
Handgefertigte Leiterplatte:
Zur Vereinfachung und zum Testen habe ich meine handgefertigte Version der Leiterplatte hergestellt, die unten gezeigt wird. In der ersten Version habe ich einige Fehler gemacht, die ich mit einigen Überbrückungsdrähten behoben habe. Aber in der endgültigen Version habe ich diese behoben. Sie können einfach die Dateien herunterladen und verwenden.
Arduino- und ESP32-basiertes Effizienzmessgerät - Code
Nachdem wir die Hardware-Seite gut verstanden haben, können wir die Arduino IDE öffnen und mit der Codierung beginnen. Der Code dient zum Lesen der analogen Spannung von Pin 35 und 33 der ESP32-Karte. Außerdem lesen wir die Spannung von 32 und 34 Pin, die der aktuelle Wert ist. Sobald wir dies tun, können wir diese multiplizieren, um Eingangsleistung und Ausgangsleistung zu erhalten, und wenn wir sie auf die Effizienzformel setzen, können wir die Effizienz erhalten.
Schließlich zeigen wir es auf dem LCD-Bildschirm. Das vollständige Programm, um dasselbe zu tun, ist am Ende angegeben, das als solches für die oben diskutierte Hardware verwendet werden kann. Außerdem wird der Code in kleine Schnipsel aufgeteilt und erklärt.
Da wir ein 128X64-OLED-Display verwenden, benötigen wir die Adafruit_GFX-Bibliothek und die Adafruit_SSD1306-Bibliothek , um mit dem Display zu kommunizieren. Sie können beide vom Standard-Board-Manager-Terminal des Arduino herunterladen. Wenn Sie Probleme mit dem Board-Manager-Teil haben, können Sie die Bibliotheken auch aus dem zugehörigen GitHub-Repository herunterladen und einbinden, das unten angegeben ist.
- Laden Sie die Adafruit_GFX-Bibliothek herunter
- Laden Sie die Bibliothek Adafruit_SSD1306 herunter
Wie immer beginnen wir unseren Code mit der Aufnahme aller erforderlichen Bibliotheken. Dann definieren wir alle notwendigen Pins und Variablen, die alle unten gezeigt werden.
#einschließen
Die Definitionen SCREEN_WIDTH & SCREEN_HEIGHT werden zum Definieren der Bildschirmgröße verwendet. Als nächstes haben wir alle notwendigen Pins definiert, über die wir die Spannung und den Strom messen werden. Als nächstes haben wir die Widerstandswerte definiert, die in der Hardware verwendet werden, wie Sie aus dem Schaltplan sehen können. Wenn Sie diese Werte nicht haben oder den Bereich des Messgeräts ändern möchten, können Sie diese Werte ändern. Der Code funktioniert einwandfrei.
Da wir einen ACS712 verwenden, um den Strom zu messen, benötigen wir den mVperAmp- Wert, um den Strom aus der Spannung zu berechnen. Da ich ein 20A ACS712-Modul verwende, beträgt der mV / A-Wert 100, wie im Datenblatt angegeben. Da wir jedoch einen ESP32 und einen Spannungsteiler verwenden, haben wir den halben Wert, der 50 beträgt, und deshalb haben wir den mV / AMP-Wert eingegeben.
ACSoffset ist der Offset, der zur Berechnung des Stroms aus der Spannung benötigt wird. Da die ACS712-ICs mit 5 V betrieben werden, beträgt die Offset-Spannung 2,5 V. Da wir jedoch einen Spannungsteiler verwenden, sinkt dieser auf 1,25 V. Möglicherweise kennen Sie den beschissenen ADC des ESP32 bereits, daher musste ich einen Wert von 1136 verwenden. Wenn Sie Kalibrierungsprobleme haben, können Sie die Werte anpassen und den ADC kompensieren.
Zum Abschluss dieses Abschnitts erstellen wir ein Anzeigeobjekt der Klasse Adafruit_SSD1306 und übergeben die Bildschirmbreite, -höhe, die I 2 C-Konfiguration. Der letzte Parameter -1 wird zum Definieren der Rücksetzfunktion verwendet. Wenn Ihr Display keinen externen Reset-Pin hat (was sicherlich für mein Display gilt), müssen Sie für das letzte Argument -1 verwenden.
void setup () {Serial.begin (115200); if (! display.begin (SSD1306_SWITCHCAPVCC, 0x3C)) {// Adresse 0x3D für 128x64 Serial.println (F ("SSD1306-Zuordnung fehlgeschlagen")); zum (;;); } display.clearDisplay (); display.setRotation (2); display.setTextSize (1); Verzögerung (100); }}
Als nächstes haben wir unseren Abschnitt setup () . In diesem Abschnitt aktivieren wir Seriell für das Debuggen. Mit Hilfe der Anfangsmethode des Anzeigeobjekts prüfen wir, ob eine I 2 C-Anzeige verfügbar ist oder nicht. Außerdem stellen wir die I 2 C-Adresse ein. Als nächstes löschen wir die Anzeige mit der clearDisplay () -Methode. Außerdem drehen wir die Anzeige mit der setRotation- Methode, weil ich mein PCB-Design durcheinander gebracht habe. Als nächstes setzen wir eine Verzögerung von 100 ms, damit die Funktionen wirksam werden. Sobald dies erledigt ist, können wir nun zur Schleifenfunktion übergehen. Aber bevor Sie mit der Loop - Funktion fortfahren, müssen wir zwei weitere Funktionen diskutieren, die sind return_voltage_value () , und return_current_value () .
double return_voltage_value (int pin_no) {double tmp = 0; doppelte ADCVoltage = 0; doppelte Eingangsspannung = 0; doppelter Durchschnitt = 0; für (int i = 0; i <150; i ++) {tmp = tmp + analogRead (pin_no); } avg = tmp / 150; ADCVoltage = ((Durchschnitt * 3,3) / (4095)) + 0,138; inputVoltage = ADCVoltage / (R2_VOLTAGE / (R1_VOLTAGE + R2_VOLTAGE)); // Formel zur Berechnung der Spannung in dh GND return inputVoltage; }}
Die Funktion return_voltage_value () wird verwendet, um die in den ADC kommende Spannung zu messen, und verwendet das Argument pin_no als Argument. In dieser Funktion deklarieren wir zunächst einige Variablen: tmp, ADCVoltage, inputVoltage und avg. Die tmp-Variable wird verwendet, um den temporären ADC-Wert zu speichern, den wir von der Funktion analogRead () erhalten. Anschließend wird er in einer for-Schleife 150-mal gemittelt und der Wert in einer Variablen namens avg gespeichert. Wir berechnen dann die ADCVoltage aus der angegebenen Formel, berechnen schließlich die Eingangsspannung und geben die Werte zurück. Der angezeigte Wert von +0,138 ist der Kalibrierungswert, den ich zum Kalibrieren des Spannungspegels verwendet habe. Spielen Sie mit diesem Wert, wenn Sie Fehler erhalten.
double return_current_value (int pin_no) {double tmp = 0; doppelter Durchschnitt = 0; doppelte ADCVoltage = 0; doppelte Ampere = 0; für (int z = 0; z <150; z ++) {tmp = tmp + analogRead (pin_no); } avg = tmp / 150; ADCVoltage = ((Durchschnitt / 4095,0) * 3300); // Ermittelt mV Amps = ((ADCVoltage - ACSoffset) / mVperAmp); Ampere zurückgeben; }}
Als nächstes haben wir die Funktion return_current_value () . Diese Funktion verwendet auch pin_no als Argument. In dieser Funktion haben wir auch vier Variablen, nämlich. tmp, avg, ADCVoltage und Amps
Als nächstes lesen wir den Pin mit der Funktion analogRead () und mitteln ihn 150 Mal. Als nächstes berechnen wir die ADC-Spannung anhand der Formel, berechnen den Strom und geben den Wert zurück. Damit können wir auf den Loop-Abschnitt übergehen.
void loop () {float input_voltage = abs (return_voltage_value (INPUT_VOLTAGE_SENSE_PIN)); float input_current = abs (return_current_value (INPUT_CURRENT_SENSE_PIN)); float output_voltage = abs (return_voltage_value (OUTPUT_VOLTAGE_SENSE_PIN)); float output_current = abs ((return_current_value (OUTPUT_CURRENT_SENSE_PIN))); Eingabestrom = Eingabestrom - 0,025; Serial.print ("Eingangsspannung:"); Serial.print (input_voltage); Serial.print ("- Eingangsstrom:"); Serial.print (input_current); Serial.print ("- Ausgangsspannung:"); Serial.print (output_voltage); Serial.print ("- Ausgangsstrom:"); Serial.println (output_current); Verzögerung (300); display.clearDisplay (); display.setCursor (0, 0); display.print ("I / PV:"); display.setCursor (37, 0); display.print (input_voltage); display.setCursor (70, 0); Anzeige.Drucken ("V"); }}
Wir beginnen den Loop-Abschnitt mit der Deklaration und Definition einiger Float-Variablen in allen vier Variablen. Wir rufen die jeweiligen Funktionen auf und übergeben pin_no als Argument, da das ACS712-Modul aktuelle Werte negativ zurückgeben kann. Wir verwenden die abs () -Funktion der Mathematikbibliothek, um den negativen Wert als positiv zu definieren. Als nächstes drucken wir alle Werte für das Debuggen seriell aus. Als nächstes löschen wir die Anzeige, setzen den Cursor und drucken die Werte. Wir tun dies für alle im Display angezeigten Zeichen. Welches markiert das Ende der Schleifenfunktion und des Programms.
Testen des auf Arduino und ESP32 basierenden Wirkungsgradmessers
Wie Sie meinen Testaufbau im obigen Bild sehen können. Ich habe meinen 30-V-Transformator als Eingang und mein Messgerät für die Testplatine angeschlossen. Ich verwende eine auf LM2596 basierende Tiefsetzstellerplatine und für die Last und ich verwende drei 10-Ohm-Widerstände parallel.
Wie Sie im obigen Bild sehen können, habe ich mehrere Meter angeschlossen, um die Eingangs- und Ausgangsspannung zu überprüfen. Der Transformator erzeugt fast 32 V und der Ausgang des Tiefsetzstellers beträgt 3,95 V.
Das Bild hier zeigt den von meinem Wirkungsgradmesser und dem Multimeter gemessenen Ausgangsstrom. Wie Sie sehen können, zeigt das Multimeter 0,97 Ampere an. Wenn Sie ein wenig zoomen, zeigt es 1,0 A an. Aufgrund der Nichtlinearität des ACS712-Moduls ist es leicht ausgeschaltet. Dies dient jedoch unserem Zweck. Eine ausführliche Erklärung und Tests finden Sie im Video in unserem Videobereich.
Weitere Verbesserungen
Für diese Demonstration wird die Schaltung auf einer handgefertigten Leiterplatte hergestellt, die Schaltung kann jedoch leicht in eine Leiterplatte guter Qualität eingebaut werden. In meinem Experiment ist die Größe der Leiterplatte aufgrund der Komponentengröße sehr groß, aber in einer Produktionsumgebung kann sie durch die Verwendung billiger SMD-Komponenten reduziert werden. Die Schaltung hat auch keine eingebaute Schutzfunktion, so dass die Aufnahme einer Schutzschaltung den allgemeinen Sicherheitsaspekt der Schaltung verbessert. Außerdem habe ich beim Schreiben des Codes festgestellt, dass der ADC des ESP32 nicht so gut ist. Die Verwendung eines externen ADC wie des ADS1115-Moduls erhöht die allgemeine Stabilität und Genauigkeit.
Ich hoffe, Ihnen hat dieser Artikel gefallen und Sie haben etwas Neues daraus gelernt. Wenn Sie Zweifel haben, können Sie in den Kommentaren unten nachfragen oder unsere Foren für detaillierte Diskussionen nutzen.