Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

So bauen Sie einen Arduino-Energiemonitor und einen Datenlogger

Komponenten und Verbrauchsmaterialien

Arduino UNO
× 1
Dr. Wattson Energieüberwachungsboard
× 1
Gehäuse für Dr. Wattson Energy Monitoring Board
× 1
Adafruit MicroSD-Karten-Breakoutboard+
× 1
LED (generisch)
× 1
Adafruit Tactile Button
× 1
Widerstand 221 Ohm
× 1

Über dieses Projekt

(Dieser Beitrag basiert auf einem Beitrag, der erstmals am 19. September 2017 auf Medium veröffentlicht wurde und hier aktualisiert und aktueller wurde, einschließlich Details zur Veröffentlichung der Bibliothek und Beispiel(en) auf GitHub).

In diesem Beitrag zeige ich Ihnen, wie ich einen Arduino-Energiemonitor und einen Datenlogger gebaut habe, der mir helfen würde, Strom- und Energiedaten für verschiedene Lasten einfach zu sammeln und diese Informationen mit einem Programm wie Excel darzustellen.

Einige von Ihnen wissen vielleicht, dass ich ein neues Breakout-Board für die Energieüberwachung erstellt habe, das ich Dr. Wattson nenne (das auf dem #Microchip #MCP39F521, einem Stromüberwachungs-IC) zusammen mit einer #Arduino-Bibliothek und einer #Python-Bibliothek ( für Boards wie #RaspberryPi und #BeagleBoneBlack) zur einfachen Integration hochwertiger Energiedaten in Ihr nächstes Projekt! Wenn Sie noch nichts davon gehört haben und weitere Informationen wünschen, besuchen Sie https://upbeatlabs-wattson.launchrock.com/ für weitere Informationen. Es ist auch auf Tindie erhältlich.

Um mir zu helfen, die Energieeigenschaften verschiedener Lasten zu studieren, habe ich einen Arduino-Energiemonitor und einen Datenlogger erstellt, der das Thema dieses Beitrags ist!

Es besteht aus einem Arduino (natürlich!), der mit dem Dr. Wattson-Board kommuniziert, um Energiedaten zu erhalten, zusammen mit einer SD-Karte, auf die die Daten geschrieben werden. Ich habe auch eine Schaltfläche zum Umschalten der Datenprotokollierung hinzugefügt, zusammen mit einer LED-Anzeige, die anzeigt, wann Daten protokolliert werden. Der Knopf zusammen mit der LED machte es wirklich einfach, die Datenprotokollierung zu starten, wenn ich die entsprechende Last angeschlossen hatte.

Um die Protokollierung und anschließende Analyse zu erleichtern, habe ich auch ein Protokollrotationsschema implementiert, sodass jeder Lauf in einer anderen Datei protokolliert wird. Die Ausgabe erfolgt im CSV-Format, was bedeutet, dass sie einfach in Excel (oder Numbers auf dem Mac oder ein anderes Äquivalent) importiert und die Daten geplottet werden können.

Einrichtung

Ich habe das Dr. Wattson Board in ein Acrylgehäuse gelegt, damit die AC-Kabel eingeschlossen sind und Sie es auf sichere Weise verwenden können! Gefällt mir:

Ich habe das Gehäuse später ein wenig aktualisiert und es ist jetzt auf Tindie verfügbar. So sieht es jetzt aus. Etwas aufgeräumter mit einer zusätzlichen IEC-Buchse und Kabelschuhen für einfache Verbindungen.

Ich habe ein Benutzerhandbuch erstellt, das zeigt, wie die Verkabelung zu machen ist, das jetzt auf GitHub verfügbar ist.

Der von Dr. Wattson kommende Digitalausgang ist komplett vom Netz getrennt, da die Energiemessung über Strom- und Spannungswandler isoliert erfolgt, so dass der Digitalausgang absolut sicher zu handhaben ist.

Im Gehäuse angekommen, müssen Sie nur noch das Kabel in eine vorhandene Steckdose stecken und ein beliebiges Gerät in die Steckdose am Gehäuse stecken — die Platine ist für Ströme bis zu 12A ausgelegt, also ziemlich gut gebaut! Es ist kalibriert, um Ströme bis zu 4 A zu messen (damit kann ich wirklich kleine Ströme messen, um die Standby-Leistung zu messen  -  der MCP39F521-Chip, auf dem er basiert, hat ein dynamisches Verhältnis von 4000:1, was bedeutet, dass er von 4A bis hinunter zu 1mA messen kann)

Schaltung

Hier ist die Schaltung, die ich verwendet habe:

Ich habe einen SD-Karten-Breakout ähnlich dem von Adafruit verwendet (also habe ich den in Fritzing verwendet, da dies der engste Teil war). Die Verbindung ist ziemlich Standard - CLK (Arduino Uno Pin 13), MISO (Arduino Uno Pin 12), MOSI (Arduino Uno Pin 11) und CS (Chip Select). CS ist konfigurierbar, obwohl es standardmäßig auf Pin 10 für Hardware-CS eingestellt ist — Ich benutze das einfach.

Für den Button verwende ich die Button-Bibliothek von Jack Christensen, die Entprellung und eine Vielzahl nützlicher Dinge in einem einfach zu verwendenden Paket bietet. (https://github.com/JChristensen/Button). Der Button verwendet den internen Pullup des Arduino, hat also keine externen Pullups und verwendet auch invertierte Logik (High ist OFF, Low ist ON)  – all dies sind als Parameter für den Button-Konstruktor konfigurierbar! Ich habe den Button mit Pin 4 verbunden, aber du kannst jeden verfügbaren Pin verwenden, den du magst.

Ich hatte wirklich nicht die Zeit und Geduld, Dr. Wattson als neuen Part in Fritzing zu modellieren, also habe ich geschummelt und den Rat von Z-HUT genutzt um ganz einfach ein benutzerdefiniertes Teil ohne viel Umschweife zu zaubern. Ich kann es nur empfehlen, es anzusehen! https://www.youtube.com/watch?v=dfxx8wF3Uhs — danke Z-HUT ! :-)

Der einzige Nachteil ist, dass ich damit zufrieden sein muss, das Steckbrettbild des "generischen IC" -Teils zu verwenden, den ich modifiziert habe, um Dr. Wattson darzustellen. C'est la vie!

Hier ist ein Blick auf die Pins von Dr. Wattson (von links nach rechts):

  • SCL  –  für I2C-Kommunikation, geht zu Arduino Uno A5
  • SDA — für I2C-Kommunikation, geht an Arduino Uno A4
  • ZCD  –  Zero Cross Detection  –  wir verwenden diese Funktion in diesem Beispiel nicht
  • Ereignis — Ereignisanzeige — wir verwenden diese Funktion in diesem Beispiel nicht
  • GND — Mit Arduino GND verbinden
  • VIN — Mit Arduino 5V verbinden
  • 3.3v  – Verbindung mit Arduino 3.3v
  • GND — Mit Arduino GND verbinden (Sie müssen nur einen der GND-Pins anschließen)

Skizze

Ok, jetzt geht es weiter zur eigentlichen Programmierung!

Lassen Sie mich zunächst mit der Erläuterung der Skizze beginnen. In setup() habe ich zuerst die SD-Kartenkommunikation und die Dr.Wattson-Kommunikation eingerichtet, indem ich ihre jeweiligen begin()-Methoden aufgerufen habe.

// prüfen, ob die Karte vorhanden ist und initialisiert werden kann:if (!SD.begin(CHIP_SELECT)) { Serial.println(F("Karte fehlgeschlagen oder nicht vorhanden")); // nichts weiter tun:} wattson.begin(); // Übergeben Sie die entsprechende Adresse. Standardmäßig 0x74 

Ich initialisiere auch den LED-Pin als OUTPUT.

 // den digitalen Pin als Ausgang initialisieren. pinMode (LED, AUSGANG); 

Die Schaltfläche wird global deklariert, sodass ich im Setup für die Schaltfläche nichts tun muss.

#define BUTTON_PIN 4 // Verbinden Sie einen taktilen Tastenschalter (oder etwas Ähnliches) // von Arduino Pin 4 mit Masse. #define PULLUP true // Um ​​die Dinge einfach zu halten, verwenden wir den internen Pullup-Widerstand des Arduino. #define INVERT true // Da der Pullup-Widerstand den Pin hoch hält, es sei denn, der // Schalter ist geschlossen, dies ist eine negative Logik, dh ein High Zustand // bedeutet, dass die Taste NICHT gedrückt ist. (Angenommen ein normalerweise offener Schalter.)#define DEBOUNCE_MS 20 //Eine Entprellzeit von 20 Millisekunden funktioniert normalerweise gut für taktile Tastenschalter.Button myBtn(BUTTON_PIN, PULLUP, INVERT, DEBOUNCE_MS); //Schaltfläche deklarieren 

Meine Datenprotokollierung erfolgt in Dateien mit einem Namen wie DATAXX.CSV, wobei XX eine Zahl ist (von 00 bis 99, also 100 Dateien). Ich überprüfe die SD-Karte auf vorhandene Dateinamen und wähle den neuesten nicht verwendeten Dateinamen aus — zum Beispiel DATA15.CSV

char filename[] ="DATA00.CSV";setup() { ... // eine neue Datei erstellen für (uint8_t i =0; i <100; i++) { filename[4] =i /10 + '0'; Dateiname[5] =i%10 + '0'; if (! SD.exists (Dateiname)) {Serial.print (F ("Datendatei ist")); Serial.println (Dateiname); // nur eine neue Datei öffnen, wenn sie nicht existiert break; // Verlasse die Schleife! filename wird jetzt der gewünschte sein } }...} 

In der Funktion loop () schaltet sie, sobald die Schaltfläche gedrückt wird, die Variable readData um, die steuert, ob ich die Energiedaten lese.

void loop() { ... myBtn.read(); //Taste lesen if (myBtn.wasReleased()) {//Wenn die Taste losgelassen wurde, ändern Sie den LED-Zustand readData =!readData; digitalWrite (LED, Daten lesen); } if (readData) { ... // Daten lesen und auf SD-Karte speichern usw. ......} 

Sobald readData umgeschaltet ist, lese ich die Energiedaten von Dr. Wattson und zeichne auch die Zeit auf:

 UpbeatLabs_MCP39F521_FormattedData fData; int readMCPretval =wattson.readMCP39F521(&data, NULL); unsigned long currentMillis =millis(); 

und schreiben Sie es auf die SD-Karte:

 // wenn die Datei verfügbar ist, schreibe in sie:File dataFile =SD.open(filename, FILE_WRITE); if (dataFile) { dataFile.print (currentMillis); dataFile.print(","); dataFile.print (fData.currentRMS); dataFile.print(","); dataFile.print (fData.activePower); dataFile.print(","); dataFile.print (fData.reactivePower); dataFile.print(","); dataFile.println(fData.apparentPower); // auch auf den seriellen Port drucken:dataFile.close(); } // Wenn die Datei nicht geöffnet ist, wird ein Fehler angezeigt:else { Serial.print (F ("Fehler beim Öffnen")); Serial.println (Dateiname); }  

Wenn die Schaltfläche erneut umgeschaltet wird, beende ich das Lesen/Aufzeichnen der Daten.

Aktion!

Nachdem ich die Skizze kompiliert und auf meinen Arduino hochgeladen hatte, war es ziemlich einfach, Energiedaten zu erhalten.

Ich habe die Last meiner Wahl angeschlossen – eine CFL-Lampe. Ich wollte den Strom- und Energieverbrauch sowohl aus Kaltstartsicht als auch aus Warmstartperspektive sehen. Ich habe die Lampe angeschlossen, aber nicht eingeschaltet.

Ich drückte den Knopf an meinem Stromkreis, um die Energiemessungen zu starten — während der Aufzeichnung sagte mir die ROTE LED es! Dann schaltete ich die CFL-Lampe ein und wartete, bis ich dachte, ich hätte genug Daten erhalten — Sie sehen, die CFL verbraucht beim Starten mehr Energie als angegeben (in meinem Fall eine 14-W-CFL-Glühbirne) und beruhigt sich dann schließlich auf etwa 14W. Ich wartete, bis sich die Messwerte beruhigt hatten. Ich habe dann die Taste gedrückt, um das Lesen auszuschalten.

Ich konnte jetzt meine SD-Karte auswerfen und mir die Daten ansehen!

PS — Um Daten von zusätzlichen Geräten zu protokollieren, müssen Sie nur das Arduino zurücksetzen — es wird die nächste verfügbare DATAXX.CSV auswählen, um die Daten einzuloggen, sodass Sie die Daten einfach getrennt halten können.

Hinweis: Anstatt den Arduino Serial Monitor zu verwenden, verwende ich den integrierten Befehl "screen" auf meinem Mac-Terminal als serielles Terminal. In meinem Sketch drucke ich die Energiedaten auf Serial und gebe auch einen "clearscreen"-Befehl aus, damit sich die Ausgabe nicht bewegt

Serial.write("\x1B" "c"); // Bildschirm auf einem normalen Terminal löschen wattson.printMCP39F521Data(&data); 

Dies funktioniert nur auf einem normalen Terminal, das Terminalbefehle wie die oben genannten akzeptieren kann, und funktioniert leider nicht auf dem Arduino Serial Monitor. Wenn Sie es jedoch versuchen, Bildschirm , Sie werden möglicherweise nie wieder zu Arduino Serial Monitor zurückkehren!

Der Befehl sieht in etwa so aus:

$ screen /dev/tty.usbmodem1411 9600 

wobei der erste Parameter der "serielle Port" ist und der zweite die Geschwindigkeit, die Sie für Ihre serielle Verbindung in Ihrem Arduino-Skizze konfiguriert haben.

Daten in Excel grafisch darstellen

Da die Datei im CSV-Format vorliegt, war das Laden und Plotten in Excel ziemlich einfach. Ich werde hier nicht auf die Details eingehen, da es viele Tutorials zum Erstellen eines Diagramms in Excel gibt. Ich habe eine Zeile eingefügt, die die Spaltenüberschriften enthält

Zeitstempel, StromRMS, aktive Leistung, Blindleistung, Scheinleistung 

(Anmerkung an mich selbst — dies wird eine zukünftige Verbesserung meiner Skizze sein — um die Spaltenüberschriften direkt in die CSV-Datei einzufügen!)

Ich habe die obigen Datenpunkte zum Protokollieren und Plotten ausgewählt. Der Stromverbrauch im Zeitverlauf ist natürlich interessant. Warum Aktiv-, Blind- und Scheinleistung? Basierend auf den elektrischen Eigenschaften des Geräts kann es sich um eine ohmsche Last, eine Blindlast oder irgendwo dazwischen handeln, und die drei Leistungsparameter sagen uns somit seine Gesamteigenschaften und auch, ob sie sich im Laufe der Zeit ändern. Zumindest denke ich…

Schauen wir uns meine Ergebnisse für eine CFL-Lampe bei einem Kaltstart an:

Der Strom erreicht seinen Spitzenwert bei etwa 0,21 Ampere, bevor er sich schließlich auf etwa 0,18 Ampere einpendelt.

Die Wirkleistung erreicht ihren Spitzenwert bei etwa 17 Watt, bevor sie sich schließlich auf etwa 14,2 Watt einpendelt.

Nachdem es sich beruhigt hatte, schaltete ich die CFL aus und wartete eine Weile, bevor ich sie wieder einschaltete (daher der Stromabfall in der obigen Grafik). Sie können sehen, dass sich eine CFL, sobald sie „aufgewärmt“ ist, schnell auf ihren stationären Verbrauch einstellt.

Fazit

Es gibt viele interessante Daten und Experimente, die Sie mit Energiedaten Ihrer Geräte und Geräte machen können. Ich war aufgeregt, einige Daten in die Hände zu bekommen und sie mit Ihnen zu teilen!

Mein Ziel mit Dr. Wattson ist es, hochwertige Energiedaten für den Maker bereitzustellen und zugänglicher zu machen, damit Sie sie als Baustein für Ihre wilden und verrückten Ideen verwenden können.

Dr. Wattson ist so konzipiert, dass es sicher zu verwenden ist (insbesondere mit dem Gehäuse), wird kalibriert geliefert (damit Sie sofort hochwertige Energiedaten erhalten), bietet jedoch auch komplexere Funktionen für den ernsthaften Benutzer

  • Kalibrierungsroutinen
  • ZCD (Nulldurchgangsdetektor)
  • Ereignisbenachrichtigung (Überstrom-, Überlast-, Spannungseinbruchs-/Überspannungsereignisse)
  • die Möglichkeit, den Messbereich anzupassen (durch Modifizieren der Bürdenwiderstände und/oder des Stromwandlers und Neukalibrierung mit den oben genannten Kalibrierroutinen),
  • Verwendung mehrerer Dr. Wattsons zusammen mit einer einzigen MCU (durch Ändern der konfigurierbaren I2C-Adressierung).

Wenn Sie an Energiemonitoring interessiert sind und Dr. Wattson mögen, melden Sie sich bitte unter (https://upbeatlabs-wattson.launchrock.com/) an, um über Neuigkeiten und Updates auf dem Laufenden zu bleiben!

Prost,

Sridhar

Hier ist die gesamte Skizze als Referenz! Sie finden es und die Dr. Wattson-Bibliothek zusammen mit einer Vielzahl anderer Beispiele auch im drwattson GitHub-Repository von Upbeat Labs.

/******************************************** ********************************** Dies ist eine Beispielskizze für Upbeat Labs Dr. Wattson Energy Monitoring Breakout --> https://www.tindie.com/products/UpbeatLabs/dr-wattson-energy-monitoring-board-2/ Dieses Beispiel zeigt das Abrufen von Energiedaten von Dr. Wattson und das Schreiben auf eine SD-Karte mit Komma getrennt (CSV)-Format. Über eine Schaltfläche wird die Datenerfassung umgeschaltet, sodass Sie die Daten protokollieren können, wenn Sie bereit sind. Wenn die Schaltfläche die Messung umschaltet, beginnt die Skizze, das Modul nach Energiedaten abzufragen und auszudrucken. Um die Werte leichter zu sehen, verwenden Sie einen programmähnlichen Bildschirm, um die serielle Ausgabe anzuzeigen. Die Serie schreibt die zum Löschen des Bildschirms erforderlichen Zeichen auf einem normalen Terminal, was bedeutet, dass die serielle Ausgabe an Ort und Stelle bleibt und im Laufe der Zeit nur aktualisiert wird. Schalten Sie die Eingangsleistung ein, um den Spannungseffektivwert zu sehen, die Netzfrequenzwerte ändern sich auf die entsprechenden Werte. Schalten Sie die an Ihrem Ausgang angeschlossene Last ein, um die Änderungen der aktuellen RMS-, Leistungsfaktor-, Wirk-, Blind- und Scheinleistungswerte zu sehen. Alle diese Werte werden im CSV-Format auf die SD-Karte geschrieben, die dann mit einem Programm wie Excel zum Anzeigen / Plotten der Daten verwendet werden kann. Der Dateiname hat die Form DATAnn.CSV. Beim Setup wird ein neuer Dateiname gewählt, der noch nicht existiert, also lauten die Dateien DATA00.CSV, DATA01.CSV, DATA02.CSV usw. Die Protokollierung rotiert in neue Dateien bis DATA99.CSV. Die Kommunikation erfolgt über I2C. Für die Schnittstelle werden 2 Pins benötigt. Es gibt 4 auswählbare I2C-Adressmöglichkeiten pro Platine (auswählbar über zwei Lötjumper (die jeden Pin auf High oder Low auswählen). Basierend darauf gibt es 4 mögliche Adressen:I2C-Adresse SJ1 SJ2 0x74 LOW LOW 0x75 LOW HIGH 0x76 HIGH LOW 0x77 HIGH HIGH Dr. Wattson hat zwei Ausgänge, ZCD oder Event, die für Benachrichtigungen verwendet werden und wird daher normalerweise mit einem extern unterbrechbaren Pin (wie Pin2 oder Pin3 bei Arduino Uno) verbunden.In diesem Beispiel sind ZCD und Event nicht Taste wird an Pin 4 angeschlossen. * SD-Karte wie folgt an SPI-Bus angeschlossen:** MOSI - Pin 11 ** MISO - Pin 12 ** CLK - Pin 13 ** CS - Pin 10 LED wird an Pin 9 angeschlossen Geschrieben von Sridhar Rajagopal für Upbeat Labs LLC. BSD-Lizenz. Der gesamte obige Text muss in jeder Weiterverteilung enthalten sein*/#include #include "UpbeatLabs_MCP39F521.h"#include #include  //https://github.com/JChristensen/Button#define BUTTON_PIN 4 // Schließen Sie einen taktilen Tastenschalter (oder etwas Ähnliches) an // von Arduino Pin 4 to ground.#define PULLUP true // Um ​​die Dinge einfach zu halten, verwenden wir den internen Pullup-Widerstand des Arduino. #define INVERT true // Da der Pullup-Widerstand den Pin hoch hält, es sei denn, der // Schalter ist geschlossen, dies ist eine negative Logik. dh ein hoher Zustand // bedeutet, dass die Taste NICHT gedrückt ist. (Angenommen ein normalerweise offener Schalter.)#define DEBOUNCE_MS 20 //Eine Entprellzeit von 20 Millisekunden funktioniert normalerweise gut für taktile Tastenschalter.Button myBtn(BUTTON_PIN, PULLUP, INVERT, DEBOUNCE_MS); // Deklarieren Sie die Taste #define LED 9 // Verbinden Sie eine LED (über einen 220 Ohm Widerstand) von Pin 9 (Anode) mit GND (Kathode). #define CHIP_SELECT 10UpbeatLabs_MCP39F521 wattson =UpbeatLabs_MCP39F521();bool readData =false;char filename[] ="DATA00.CSV";void setup() { Serial.begin(9600); // serielle Kommunikation einschalten Serial.println (F ("** Upbeat Labs Dr. Wattson Beispielskizze **")); Serial.println (F ("Upbeat Labs Dr. Wattson Energy Data SD Card Logging Beispielskizze")); Serial.println (F("******************************************** **********************")); // Initialisieren Sie den digitalen Pin als Ausgang. PinMode (LED, AUSGANG); pinMode (CHIP_SELECT, OUTPUT); // prüfen, ob die Karte vorhanden ist und initialisiert werden kann:if (!SD.begin (CHIP_SELECT)) { Serial.println (F ("*** SD-Karte fehlgeschlagen oder nicht vorhanden ***")); // nichts weiter tun:} wattson.begin(); // Übergeben Sie die entsprechende Adresse. Standardwert 0x74 // eine neue Datei erstellen für (uint8_t i =0; i <100; i++) { filename[4] =i/10 + '0'; Dateiname[5] =i%10 + '0'; if (! SD.exists (Dateiname)) {Serial.print (F ("Datendatei ist")); Serial.println (Dateiname); // nur eine neue Datei öffnen, wenn sie nicht existiert break; // Verlasse die Schleife! Dateiname wird jetzt der gewünschte sein}} Serial.println(F("**Initialisierung abgeschlossen.**"));}void loop() { myBtn.read(); //Taste lesen if (myBtn.wasReleased()) {//Wenn die Taste losgelassen wurde, ändern Sie den LED-Zustand readData =!readData; digitalWrite (LED, Daten lesen); } if (readData) { UpbeatLabs_MCP39F521_Data Daten; UpbeatLabs_MCP39F521_FormattedData fData; int readMCPretval =wattson.read(&data, NULL); unsigned long currentMillis =millis(); if (readMCPretval ==UpbeatLabs_MCP39F521::SUCCESS) {// Zeug aus Serial.write("\x1B" "c"); // Bildschirm auf einem normalen Terminal löschen wattson.convertRawData(&data, &fData); printMCP39F521Data(&fData); // wenn die Datei verfügbar ist, schreiben Sie in sie:Datei dataFile =SD.open(filename, FILE_WRITE); if (dataFile) { dataFile.print (currentMillis); dataFile.print(","); dataFile.print (fData.currentRMS); dataFile.print(","); dataFile.print (fData.activePower); dataFile.print(","); dataFile.print (fData.reactivePower); dataFile.print(","); dataFile.println(fData.apparentPower); // auch auf den seriellen Port drucken:dataFile.close(); } // Wenn die Datei nicht geöffnet ist, wird ein Fehler angezeigt:else { Serial.print (F ("Fehler beim Öffnen")); Serial.println (Dateiname); }} sonst {Serial.print (F ("Fehler!")); Serial.println (readMCPretval); } }}void printMCP39F521Data (UpbeatLabs_MCP39F521_FormattedData *data) {Serial.print (F("Voltage =")); Serial.println (Daten-> SpannungRMS, 4); Serial.print (F ( "Current =")); Serial.println (Daten-> currentRMS, 4); Serial.print (F("Linienfrequenz =")); Serial.println (data-> lineFrequency, 4); Serial.print ( "Analoge Eingangsspannung ="); Serial.println (Daten->analogInputVoltage, 4); Serial.print (F ("Leistungsfaktor =")); Serial.println (data-> powerFactor, 4); Serial.print (F ("Wirkleistung =")); Serial.println (Daten-> activePower, 4); Serial.print (F ("Blindleistung =")); Serial.println (data-> reactivePower, 4); Serial.print (F ( "Scheinleistung =")); Serial.println(data->apparentPower, 4);} 

Code

  • Code-Snippet Nr. 1
  • Code-Snippet #3
  • Code-Snippet Nr. 4
  • Code-Snippet Nr. 5
  • Code-Snippet #7
  • Code-Snippet #11
Code-Snippet Nr. 1Nur-Text
// sehen, ob die Karte vorhanden ist und initialisiert werden kann:if (!SD.begin(CHIP_SELECT)) { Serial.println(F("Karte fehlgeschlagen oder nicht vorhanden")); // nichts weiter tun:} wattson.begin(); // Übergeben Sie die entsprechende Adresse. Standardmäßig 0x74
Code-Snippet #3Kurztext
#define BUTTON_PIN 4 // Verbinden Sie einen taktilen Tastenschalter (oder etwas Ähnliches) // von Arduino Pin 4 mit Masse. #define PULLUP true // Um ​​die Dinge einfach zu halten, verwenden wir den internen Pullup-Widerstand des Arduino. #define INVERT true // Da der Pullup-Widerstand den Pin hoch hält, es sei denn, der // Schalter ist geschlossen, dies ist eine negative Logik, dh ein High Zustand // bedeutet, dass die Taste NICHT gedrückt ist. (Angenommen ein normalerweise offener Schalter.)#define DEBOUNCE_MS 20 //Eine Entprellzeit von 20 Millisekunden funktioniert normalerweise gut für taktile Tastenschalter.Button myBtn(BUTTON_PIN, PULLUP, INVERT, DEBOUNCE_MS); //Schaltfläche deklarieren
Code-Snippet #4Nur-Text
char filename[] ="DATA00.CSV";setup() { ... // eine neue Datei erstellen für (uint8_t i =0; i <100; i++) { filename[4] =i/10 + '0'; Dateiname[5] =i%10 + '0'; if (! SD.exists (Dateiname)) {Serial.print (F ("Datendatei ist")); Serial.println (Dateiname); // nur eine neue Datei öffnen, wenn sie nicht existiert break; // Verlasse die Schleife! filename wird jetzt der gewünschte sein } }...}
Code-Snippet #5Klartext
 myBtn.read(); //Taste lesen if (myBtn.wasReleased()) {//Wenn die Taste losgelassen wurde, ändern Sie den LED-Zustand readData =!readData; digitalWrite (LED, Daten lesen); } if (readData) { ... // Daten lesen und auf SD-Karte speichern, etc ....
Code-Snippet #7Kurztext
 // wenn die Datei verfügbar ist, schreibe in sie:File dataFile =SD.open(filename, FILE_WRITE); if (dataFile) { dataFile.print (currentMillis); dataFile.print(","); dataFile.print (data.currentRMS); dataFile.print(","); dataFile.print (data.activePower); dataFile.print(","); dataFile.print (data.reactivePower); dataFile.print(","); dataFile.println(data.apparentPower); // auch auf den seriellen Port drucken:dataFile.close(); } // Wenn die Datei nicht geöffnet ist, wird ein Fehler angezeigt:else { Serial.print (F ("Fehler beim Öffnen")); Serial.println (Dateiname); } 
Code-Snippet #11Kurztext
/************************************************ ***** Dies ist eine Beispielskizze für Upbeat Labs Dr. Wattson Energy Monitoring BreakoutDie Kommunikation erfolgt über I2C. Für die Schnittstelle werden 2 Pins benötigt. Es gibt 4 wählbare I2C-Adressmöglichkeiten pro Platine (wählbar über zwei Lötjumper (die jeden Pin als High oder Low auswählen). Basierend darauf gibt es 4 mögliche Adressen:I2C-Adresse SJ1 SJ2 0x74 LOW LOW 0x75 LOW HIGH 0x76 HIGH LOW 0x77 HIGH HIGHDr. Wattson hat zwei Ausgänge, ZCD oder Event, die für Benachrichtigungen verwendet werden und wird daher normalerweise mit einem extern unterbrechbaren Pin (wie Pin2 oder Pin3 bei Arduino Uno) verbunden.In diesem Beispiel werden ZCD und Event nicht verwendet .Button ist mit Pin 4 verbunden. * SD-Karte wie folgt an SPI-Bus angeschlossen:** MOSI - Pin 11 ** MISO - Pin 12 ** CLK - Pin 13 ** CS - Pin 10 LED ist an Pin 9 angeschlossen Geschrieben von Sridhar Rajagopal für Upbeat Labs LLC. BSD-Lizenz. Der gesamte obige Text muss in jeder Weiterverteilung enthalten sein */ #include #include "MCP39F521.h"#include #include / /https://github.com/JChristensen/Button#define BUTTON_PIN 4 // Schließen Sie einen taktilen Tastenschalter (oder etwas Ähnliches) an // von Arduino Pin 4 an Masse . #define PULLUP true // Um ​​die Dinge einfach zu halten, verwenden wir den internen Pullup-Widerstand des Arduino. #define INVERT true // Da der Pullup-Widerstand den Pin hoch hält, es sei denn, der // Schalter ist geschlossen, dies ist eine negative Logik, dh ein High Zustand // bedeutet, dass die Taste NICHT gedrückt ist. (Angenommen ein normalerweise offener Schalter.)#define DEBOUNCE_MS 20 //Eine Entprellzeit von 20 Millisekunden funktioniert normalerweise gut für taktile Tastenschalter.Button myBtn(BUTTON_PIN, PULLUP, INVERT, DEBOUNCE_MS); // Deklarieren Sie die Taste #define LED 9 // Verbinden Sie eine LED (über einen 220-Ohm-Widerstand) von Pin 9 (Anode) mit GND (Kathode). #define CHIP_SELECT 10MCP39F521 wattson =MCP39F521();bool readData =false;char filename[ ] ="DATA00.CSV";void setup () { Serial.begin (9600); // serielle Kommunikation einschalten Serial.println (F ("** Upbeat Labs Dr. Wattson Beispielskizze **")); // Initialisieren Sie den digitalen Pin als Ausgang. PinMode (LED, AUSGANG); pinMode (10, AUSGANG); // sehen, ob die Karte vorhanden ist und initialisiert werden kann:if (!SD.begin (CHIP_SELECT)) { Serial.println (F ("Karte fehlgeschlagen oder nicht vorhanden")); // nichts weiter tun:} wattson.begin(); // Übergeben Sie die entsprechende Adresse. Standardmäßig 0x74// eine neue Datei erstellen für (uint8_t i =0; i <100; i++) { filename[4] =i/10 + '0'; Dateiname[5] =i%10 + '0'; if (! SD.exists (Dateiname)) {Serial.print (F ("Datendatei ist")); Serial.println (Dateiname); // nur eine neue Datei öffnen, wenn sie nicht existiert break; // Verlasse die Schleife! Dateiname ist jetzt der gewünschte } } Serial.println(F("**Initialisierung abgeschlossen.**")); }// So sieht MCP39F521Data als Referenz aus!//typedef struct MCP39F521Data {// uint16_t systemStatus;// uint16_t systemVersion;// uint16_t voltageRMS;// uint16_t lineFrequency;// uint16_t analogInputVoltage;//Factor;//Factor;/_t / uint32_t currentRMS;// uint32_t activePower;// uint32_t ReactivePower;// uint32_t Scheinleistung;//} MCP39F521Data; Void Schleife () { myBtn.read (); //Taste lesen if (myBtn.wasReleased()) {//Wenn die Taste losgelassen wurde, ändern Sie den LED-Zustand readData =!readData; digitalWrite (LED, Daten lesen); aufrechtzuerhalten. Wenn (readData) { MCP39F521Data Daten; int readMCPretval =wattson.readMCP39F521(&data, NULL); unsigned long currentMillis =millis(); if (readMCPretval) {// Drucken Sie Sachen aus Serial.write ("\x1B" "c"); // Bildschirm auf einem normalen Terminal löschen wattson.printMCP39F521Data(&data); // wenn die Datei verfügbar ist, schreibe in sie:Datei dataFile =SD.open(filename, FILE_WRITE);if (dataFile) { dataFile.print(currentMillis); dataFile.print(","); dataFile.print (data.currentRMS); dataFile.print(","); dataFile.print (data.activePower); dataFile.print(","); dataFile.print (data.reactivePower); dataFile.print(","); dataFile.println(data.apparentPower); // auch auf den seriellen Port drucken:dataFile.close(); } // Wenn die Datei nicht geöffnet ist, wird ein Fehler angezeigt:else { Serial.print (F ("Fehler beim Öffnen")); Serial.println (Dateiname); } } Else {Serial.println (F ( "Fehler!")); } }}
Github
https://github.com/JChristensen/Buttonhttps://github.com/JChristensen/Button
Upbeat Labs Dr. Wattson Energy Monitoring Board-Bibliothek
Bibliotheken zur Verwendung mit dem Dr. Wattson Energy Monitoring BoardDr. Wattson ist ein Breakout-Board zur Energieüberwachung für Arduino, Raspberry Pi und andere herstellerfreundliche Mikrocontroller. Integrieren Sie einfach hochwertige AC-Energiemessungen in Ihr nächstes Projekt!Basierend auf dem MCP39F521, einem einphasigen Leistungsüberwachungschip von Microchip, ist die Platine so konzipiert, dass sie einen großen Spannungsbereich toleriert, was bedeutet, dass sie auch mit den Raspberry Pi oder andere 3,3-V-MCUs genauso einfach. Das Gerät wird vorkalibriert geliefert (ermöglicht Messungen von 1 mA bis 4 A), damit Sie mit nur wenigen einfachen Befehlen sofort Qualitätsmessungen durchführen können. Sie benötigen kein zusätzliches CT oder andere Komponenten. Wenn Sie ein fortgeschrittener Benutzer sind, steht Ihnen eine breite Palette von Funktionen aus der umfangreichen Bibliothek zur Verfügung sowie die Möglichkeit, die Hardware an Ihre Bedürfnisse anzupassen und mithilfe der Bibliothek.https://github.com/upbeatlabs/drwattson

Schaltpläne


Herstellungsprozess

  1. Cloud und wie sie die IT-Welt verändert
  2. So erstellen und optimieren Sie einen vorbeugenden Wartungsplan
  3. So bauen Sie einen Variations-Autoencoder mit TensorFlow
  4. Temperatur- und Feuchtigkeitsdatenlogger
  5. Arduino-Temp. Monitor und Echtzeituhr mit 3.2 Display
  6. So liest man Temperatur und Luftfeuchtigkeit auf Blynk mit DHT11
  7. Heimmonitor
  8. Intelligenter Energiemonitor basierend auf Arduino
  9. GPS-Datenlogger, Echtzeitkurve, maximale Höhe und maximale Geschwindigkeit
  10. So erstellen Sie einen Kompass mit Arduino und Processing IDE