- Raspberry Pi Smart Energy Meter Blockschaltbild
- Erforderliche Komponenten
- Pi vorbereiten
- Schaltplan des Pi-Energiezählers
- Python-Code für Pi Energy Meter
- Demo
Energiemonitore, unabhängig davon, ob sie die gesamte Wohnung abdecken oder nur ein Gerät überwachen, bieten Ihnen die Möglichkeit, Ihren Verbrauch zu verfolgen und die erforderlichen Anpassungen vorzunehmen. Während sie zunehmend auf dem Markt erhältlich sind, hält es der Hersteller in mir immer noch für eine großartige Idee, eine DIY-Version zu bauen, die auf bestimmte persönliche Anforderungen zugeschnitten werden kann. Aus diesem Grund werden wir für das heutige Tutorial einen Raspberry Pi-Stromverbrauchsmonitor erstellen, mit dem der Energieverbrauch ermittelt und auf Adafruit.io hochgeladen werden kann.
Sie können sich auch den IoT-Energiezähler auf Arduino-Basis und den Prepaid-GSM-Energiezähler ansehen, die wir zuvor gebaut haben.
Raspberry Pi Smart Energy Meter Blockschaltbild
Ein Blockdiagramm, das die Funktionsweise des Systems zeigt, ist unten dargestellt.
.Die Einheiten nacheinander auswählen;
Stromerfassungseinheit : Die Stromerfassungseinheit besteht aus dem Stromsensor SCT -013, der je nach gekaufter Version bis zu 100 A messen kann. Der Sensor wandelt den durch den Draht, an dem er festgeklemmt ist, fließenden Strom in einen kleinen Strom um, der dann über ein Netzwerk von Spannungsteilern in den ADC eingespeist wird.
Spannungserfassungseinheit: Während ich nicht in der Lage war, ein Spannungssensormodul in die Hand zu nehmen, werden wir einen DIY-Transformator ohne Transformator bauen, der die Spannung nach dem Prinzip der Spannungsteiler misst. Der DIY-Spannungssensor umfasst die Spannungsteilerstufe, in der die Hochspannung in einen Wert umgewandelt wird, der für die Eingabe in den ADC geeignet ist.
Verarbeitungseinheit: Die Verarbeitungseinheit besteht aus dem ADC und dem Himbeer-Pi. Der ADC nimmt das analoge Signal auf und sendet es an den Himbeer-Pi, der dann die genaue verbrauchte Strommenge berechnet und an eine bestimmte Gerätewolke sendet. Für dieses Tutorial verwenden wir Adafruit.io als unsere Geräte-Cloud. Wir haben auch andere gebaut
Haftungsausschluss: Bevor wir beginnen, ist es wichtig zu erwähnen, dass dieses Projekt den Anschluss an eine Wechselstromversorgung beinhaltet, die gefährlich ist und tödlich sein kann, wenn sie nicht sicher gehandhabt wird. Stellen Sie sicher, dass Sie Erfahrung mit AC haben, bevor Sie dies versuchen.
Bereit? Lass uns eintauchen.
Erforderliche Komponenten
Die folgenden Komponenten sind erforderlich, um dieses Projekt zu erstellen.
- Raspberry Pi 3 oder 4 (der Vorgang sollte für das RPI2 mit einem WiFi-Dongle der gleiche sein)
- ADS1115 16bit I2C ADC
- YHDC SCT-013-000
- 2,5 A 5 V MicroUSB-Netzteil
- 2W 10K Widerstand (1)
- 1 / 2W 10K Widerstand (2)
- 33 Ohm Widerstand (1)
- 2W 3,3k Widerstand (1)
- IN4007 Diode (4)
- 3,6 V Zenerdiode (1)
- 10k Potentiometer (oder Voreinstellung) (1)
- 50v 1uf Kondensator
- 50v 10uf Kondensator (2)
- Brotbrett
- Überbrückungsdraht
- Anderes Zubehör für die Verwendung von Raspberry Pi.
Neben den oben aufgeführten Hardwarekomponenten erfordert das Projekt auch einige Softwareabhängigkeiten und Bibliotheken, die wir im weiteren Verlauf installieren werden.
Während dieses Tutorial unabhängig vom verwendeten Himbeer-Pi-Betriebssystem funktioniert, verwende ich das Raspberry Pi-Buster-Betriebssystem, das auf einem Pi 3 ausgeführt wird (sollte auch auf einem Pi 4 funktionieren), und ich gehe davon aus, dass Sie mit dem Einrichten des Himbeer-Pi vertraut sind das Raspbian Buster-Betriebssystem (fast der gleiche Prozess wie in den Vorgängerversionen), und Sie wissen, wie Sie mit einer Terminalsoftware wie hyper SSH-fähig machen. Wenn Sie Probleme damit haben, finden Sie auf dieser Website unzählige Raspberry Pi-Tutorials, die Ihnen helfen können
Pi vorbereiten
Bevor wir mit der Verkabelung der Komponenten und der Codierung beginnen, müssen wir einige einfache Aufgaben am Himbeer-Pi ausführen, um sicherzustellen, dass wir bereit sind.
Schritt 1: Aktivieren des Pi I2C
Im Mittelpunkt des heutigen Projekts steht nicht nur der Himbeer-Pi, sondern auch der ADS1115 16-Bit-I2C-basierte ADC. Mit dem ADC können wir analoge Sensoren an den Raspberry Pi anschließen, da der Pi selbst keinen eingebauten ADC hat. Es nimmt die Daten über seinen eigenen ADC auf und leitet sie über I2C an den Himbeer-Pi weiter. Daher müssen wir die I2C-Kommunikation auf dem Pi aktivieren, damit er mit ihm kommunizieren kann.
Der I2C-Bus des Pi kann über die Konfigurationsseite des Himbeer-Pi aktiviert oder deaktiviert werden. Klicken Sie zum Starten auf das Pi-Symbol auf dem Desktop und wählen Sie die Einstellungen und anschließend die Raspberry-Pi-Konfiguration aus.
Dies sollte die Konfigurationsseite öffnen. Aktivieren Sie das aktivierte Optionsfeld für das I2C und klicken Sie auf OK, um es zu speichern, und starten Sie den Pi neu, um die Änderungen zu übernehmen.
Wenn Sie den Pi im Headless-Modus ausführen , können Sie auf die Raspbian-Konfigurationsseite zugreifen, indem Sie sudo raspi-config ausführen.
Schritt 2: Installieren der ADS11xx-Bibliothek von Adafruit
Als zweites müssen wir die Python-Bibliothek ADS11xx installieren, die Funktionen und Routinen enthält, die es uns erleichtern, ein Python-Skript zum Abrufen von Werten aus dem ADC zu schreiben.
Führen Sie dazu die folgenden Schritte aus.
- Aktualisieren Sie Ihren Pi, indem Sie ausführen. sudo apt-get update gefolgt von sudo apt-get update Dadurch wird der pi aktualisiert, um sicherzustellen, dass keine Kompatibilitätsprobleme für neue Software auftreten, die Sie installieren möchten.
- Führen Sie als Nächstes den Befehl cd ~ aus, um sicherzustellen, dass Sie sich im Ausgangsverzeichnis befinden.
- Installieren Sie als Nächstes die Build-Essentials, indem Sie ausführen. sudo apt-get install build-essentielles python-dev python-smbus git
- Klonen Sie anschließend den Adafruit-Git-Ordner, der die ADS-Bibliothek enthält, indem Sie ihn ausführen. Git-Klon https://github.com/adafruit/Adafruit_Python_ADS1x15.git
- Wechseln Sie in das Verzeichnis der geklonten Datei und führen Sie die Setup-Datei mit aus. cd Adafruit_Python_ADS1x1z gefolgt von sudo python setup.py install Nachdem
dies erledigt ist, sollte die Installation nun abgeschlossen sein.
Sie können die Bibliotheksinstallation testen, indem Sie den ADS1115 wie im Abschnitt "Schaltpläne unten" gezeigt anschließen und den mit der Bibliothek gelieferten Beispielcode ausführen, indem Sie zuerst in den Ordner wechseln. CD-Beispiele und Ausführen des Beispiels mit; python simpletest.py
Schritt 3: Installieren Sie das Adafruit.IO Python-Modul
Wie in den Einführungen erwähnt, veröffentlichen wir Messwerte von den Spannungs- und Stromsensoren in der Adafruit IO Cloud, von der aus sie auf der ganzen Welt angezeigt oder mit IFTTT verbunden werden können, um die gewünschten Aktionen auszuführen.
Das Adafruit.IO-Python-Modul enthält Unterprogramme und Funktionen, die wir nutzen werden, um Daten einfach in die Cloud zu streamen. Führen Sie die folgenden Schritte aus, um das Modul zu installieren.
- Führen Sie die CD ~ aus , um zum Ausgangsverzeichnis zurückzukehren.
- Führen Sie als Nächstes den Befehl aus. sudo pip3 installiere adafruit-io . Es sollte das Adafruit IO-Python-Modul installieren.
Schritt 4: Richten Sie Ihr Adafruit.io-Konto ein
Um Adafruit IO verwenden zu können, müssen Sie zunächst ein Konto erstellen und einen AIO-Schlüssel erhalten. Dieser AIO-Schlüssel wird zusammen mit Ihrem Benutzernamen von Ihrem Python-Skript verwendet, um auf den Adafruit IO-Clouddienst zuzugreifen. Um ein Konto zu erstellen, besuchen Sie; https://io.adafruit.com/, klicken Sie auf die Schaltfläche Erste Schritte kostenlos und geben Sie alle erforderlichen Parameter ein. Wenn die Anmeldung abgeschlossen ist, sollte rechts auf Ihrer Startseite die Schaltfläche AIO-Schlüssel anzeigen angezeigt werden.
Klicken Sie darauf, um Ihren AIO-Schlüssel zu erhalten.
Nachdem der Schlüssel kopiert wurde, können wir loslegen. Um das Senden von Daten an den Cloud-Dienst zu vereinfachen, können Sie jedoch auch die Feeds erstellen, an die Daten gesendet werden. (Weitere Informationen zu AIO-Feeds finden Sie hier). Da wir im Grunde genommen den Stromverbrauch senden, werden wir einen Feed für den Strom erstellen. Um einen Feed zu erstellen, klicken Sie oben auf der AIO-Seite auf „Feeds“ und dann auf Neuen Feed hinzufügen.
Geben Sie ihm einen beliebigen Namen, aber um die Dinge einfach zu halten, werde ich ihn Energieverbrauch nennen. Sie können auch Feeds für Spannung und Strom erstellen und den Code anpassen, um Daten für diese zu veröffentlichen.
Mit all dem sind wir jetzt bereit, mit dem Aufbau des Projekts zu beginnen.
Schaltplan des Pi-Energiezählers
Die Schaltpläne für das Raspberry Pi Energy Monitor- Projekt sind relativ komplex und umfassen den Anschluss an eine Wechselspannung, wie bereits erwähnt. Stellen Sie bitte sicher, dass Sie alle erforderlichen Vorkehrungen treffen, um einen Stromschlag zu vermeiden. Wenn Sie mit dem sicheren Umgang mit Wechselspannungen nicht vertraut sind, lassen Sie die Freude, diese auf einem Steckbrett zu implementieren, ohne es mit Strom zu versorgen, zufriedenstellend sein.
Die Schaltpläne beinhalten das Anschließen der Spannungs- und Stromsensoreinheit an den ADC, der dann die Daten von den Sensoren an den Raspberry Pi sendet. Um das Verfolgen der Verbindungen zu vereinfachen, werden die Schaltpläne für jede Einheit einzeln dargestellt.
Stromsensor Schema
Schließen Sie die Komponenten für den Stromsensor wie in den folgenden Schaltplänen gezeigt an.
Der in diesem Projekt verwendete Stromwandler ist unten dargestellt, wie Sie sehen können, haben wir drei Drähte, nämlich Masse, Cout und 3,3 V.
Spannungssensor-Schaltpläne
Schließen Sie die Komponenten für den Spannungssensor wie in den folgenden Schaltplänen gezeigt an.
Verarbeitungseinheit Schema
Verbinden Sie alles mit dem ADC (ADS1115), der an den Himbeer-Pi angeschlossen ist, und dem Ausgang der Strom- und Spannungssensoren, die an Pin A0 bzw. A1 des ADS1115 angeschlossen sind.
Stellen Sie sicher, dass die GND-Pins beider Sensoreinheiten mit dem GND des ADC oder des Himbeer-Pi verbunden sind.
Um die Dinge etwas wackeliger zu machen, habe ich die Spannungs- und Stromsensoren auf einem Protoboard implementiert. Es wird auch nicht empfohlen, einen Wechselstromkreis auf dem Steckbrett aufzubauen. Wenn Sie dasselbe tun, sieht Ihr endgültiges Setup möglicherweise wie im Bild unten aus.
Nachdem die Verbindungen hergestellt sind, können wir nun den Code für das Projekt schreiben.
Python-Code für Pi Energy Meter
Wie bei unseren Himbeer-Pi-Projekten üblich, werden wir den Code für das Projekt mit Python entwickeln. Klicken Sie auf dem Desktop auf das Himbeer-Pi-Symbol, wählen Sie die Programmierung aus und starten Sie die gewünschte Python-Version. Ich werde Python 3 verwenden und einige der Funktionen in Python 3 funktionieren möglicherweise nicht für Python 2.7. Wenn Sie Python 2.7 verwenden möchten, müssen Sie möglicherweise einige wesentliche Änderungen am Code vornehmen. Ich werde den Code in kleine Schnipsel aufteilen und am Ende den vollständigen Code mit Ihnen teilen.
Bereit? Cool.
Der Algorithmus hinter dem Code ist einfach. Unser Python-Skript fragt den ADS1115 (über I2C) nach Spannungs- und Strommesswerten ab. Der empfangene Analogwert wird empfangen, abgetastet und der quadratische Mittelwert der Spannung und des Stroms wird erhalten. Die Leistung in Kilowatt wird berechnet und nach bestimmten Intervallen an den Adafruit IO-Feed gesendet.
Wir starten das Skript, indem wir alle Bibliotheken einschließen, die wir verwenden werden. Dies schließt eingebaute Bibliotheken wie die Zeit- und Mathematikbibliothek und die anderen Bibliotheken ein, die wir zuvor installiert haben.
Importzeit Importieren Sie Adafruit_ADS1x15 aus Adafruit_IO. Importieren * Importieren von Mathematik
Als Nächstes erstellen wir eine Instanz der ADS1115-Bibliothek, mit der der physische ADC künftig adressiert wird.
# Erstellen Sie eine ADS1115 ADC (16-Bit) -Instanz . Adc1 = Adafruit_ADS1x15.ADS1115 ()
Geben Sie als Nächstes Ihren Adafruit-E / A-Benutzernamen und den AIO-Schlüssel an.
Benutzername = ' Geben Sie Ihren Benutzernamen zwischen diesen Anführungszeichen ein' AIO_KEY = 'Ihr AIO-Schlüssel' aio = Client (Benutzername, AIO_KEY)
Bitte bewahren Sie den Schlüssel sicher auf. Es kann verwendet werden, um ohne Ihre Erlaubnis auf Ihr Adafruit Io-Konto zuzugreifen.
Als nächstes erstellen wir einige Variablen wie die Verstärkung für den ADC, die Anzahl der gewünschten Abtastwerte und legen die Rundung fest, die definitiv nicht kritisch ist.
GAIN = 1 # mögliche Werte finden Sie in der Dokumentation zu ads1015 / 1115. Samples = 200 # Anzahl der aus ads1115 Stellen entnommenen Samples = int (2) # Set Rounding
Als Nächstes erstellen wir eine while-Schleife, um Strom und Spannung zu überwachen und die Daten in Intervallen an Adafruit io zu senden. Die while-Schleife beginnt mit dem Setzen aller Variablen auf Null.
während True: # Variablen zurücksetzen count = int (0) datai = datav = maxIValue = 0 #max Stromwert innerhalb der Probe maxVValue = 0 #max Spannungswert innerhalb der Probe IrmsA0 = 0 #root mittlerer quadratischer Strom VrmsA1 = 0 # wurzeln mittlere quadratische Spannung AmpereA0 = 0 # StromspitzenspannungA1 = 0 # Spannung Kilowatt = Schwimmer (0)
Da wir mit Wechselstromkreisen arbeiten, ist der Ausgang von SCT-013 und der Spannungssensor eine Sinuswelle. Um den Strom und die Spannung aus der Sinuswelle zu berechnen, müssen wir die Spitzenwerte erhalten. Um die Spitzenwerte zu erhalten, werden sowohl Spannung als auch Strom (200 Abtastwerte) abgetastet und die höchsten Werte (Spitzenwerte) ermittelt.
für Anzahl im Bereich (Stichproben): datai.insert (Anzahl, (abs (adc1.read_adc (0, Verstärkung = GAIN)))) datav.insert (Anzahl, (abs (adc1.read_adc (1, Verstärkung = GAIN))))) # Überprüfen Sie, ob Sie einen neuen maxValue- Druck (datai) haben, wenn datai> maxIValue: maxIValue = datai, wenn datav> maxVValue: maxVValue = datav
Als nächstes standardisieren wir die Werte, indem wir sie von den ADC-Werten in den tatsächlichen Wert umwandeln. Danach verwenden wir die Root Mean Square-Gleichung, um die Effektivspannung und den Effektivstrom zu ermitteln.
# Berechnen Sie den Strom anhand der abgetasteten Daten. # Der verwendete sct-013 ist für einen 1000-mV-Ausgang bei 30 A kalibriert. IrmsA0 = float (maxIValue / float (2047) * 30) IrmsA0 = rund (IrmsA0, Orte) ampsA0 = IrmsA0 / math.sqrt (2) ampsA0 = rund (ampsA0, Orte) # Spannung berechnen VrmsA1 = float (maxVValue * 1100 / float (2047)) VrmsA1 = rund (VrmsA1, Orte) VoltA1 = VrmsA1 / math.sqrt (2) VoltA1 = rund (VoltA1, Orte) print ('Spannung: {0}'. Format (VoltA1)) print ('Strom: {0} '. Format (ampsA0))
Damit wird die Leistung berechnet und die Daten auf adafruit.io veröffentlicht
# Leistung berechnen = rund (AmpereA0 * VoltA1, Orte) drucken ('Leistung: {0}'. Format (Leistung)) # Daten an adafruit.io senden EnergyUsage = aio.feeds ('EnergyUsage') aio.send_data (' EnergyUsage ', Leistung)
Für kostenlose Konten verlangt adafruit, dass zwischen Anfragen oder dem Hochladen von Daten eine gewisse Zeitverzögerung liegt.
# Warten Sie, bevor Sie die Schleifenzeit wiederholen. Schlaf (0)
Der vollständige Code für das Projekt ist unten auf dieser Seite verfügbar
Demo
Wenn der Code vollständig ist, speichern Sie ihn und klicken Sie auf die Schaltfläche Ausführen in der Python-IDE. Stellen Sie zuvor sicher, dass der Pi über WLAN oder LAN mit dem Internet verbunden ist und Ihr AIO-Schlüssel und Benutzername korrekt sind. Nach einer Weile sollten Sie beginnen, die Energiedaten (Leistung) zu sehen, die im Feed auf Adafruit.io angezeigt werden. Mein Hardware-Setup während der Demo war so
Um weiter zu gehen, können Sie auf adafruit.io ein Dashboard erstellen und eine Diagrammkomponente hinzufügen, um eine grafische Ansicht der Daten zu erhalten, wie in der folgenden Abbildung dargestellt.
Das war's, Leute, Sie können jetzt Ihren Energieverbrauch von überall auf der Welt aus überwachen. Es ist wichtig anzumerken, dass definitiv noch viel mehr Feinabstimmungen und Kalibrierungen erforderlich sind, um daraus eine wirklich genaue Lösung zu machen, aber ich glaube, dies gibt Ihnen fast alles, was Sie brauchen, um fortzufahren.
Fühlen Sie sich frei, mir Fragen über das Projekt über den Kommentarbereich zu schießen. Ich werde versuchen, so viele wie möglich zu beantworten. Bis zum nächsten Mal.