ARDUINO ENERGY METER

10 Schritt:Schritt 1: Erforderliche Teile: Schritt 2: Leistung und Energie Schritt 3: Spannungsmessung Schritt 4: Strommessung Schritt 5: Zeitmessung Schritt 6: Wie ARDUINO Power and Energy berechnen Schritt 7: Videoausgang Schritt 8: Daten-Upload zu xively.com Schritt 9: Xively und ARDUINO Code Schritt 10: Datenerfassung in einer SD-Karte

ARDUINO ENERGY METER

ARDUINO ENERGY METER

ARDUINO ENERGY METER

ARDUINO ENERGY METER

ARDUINO ENERGY METER

ARDUINO ENERGY METER

Alle 7 Artikel anzeigen

Ich gehöre zu einer Dorf Odisha, Indien, wo häufige Stromausfall ist sehr häufig. Es behindert das Leben eines jeden. Während meiner Kindheit weiterführenden Studien nach Einbruch der Dunkelheit war eine echte Herausforderung. Aufgrund dieses Problems Ich entwarf eine Solaranlage für mein Haus auf einer Versuchsbasis. Ich habe ein Solar-Panel von 10 Watt, 6V für die Beleuchtung paar helle LEDs. Nach dem Blick auf viele Schwierigkeiten das Projekt erfolgreich war. Dann habe ich beschlossen, um die Spannung, Strom, Leistung und Energie in das System einbezogen zu überwachen. Dies brachte die Idee der Gestaltung ein ENERGY METER.I verwendet ARDUINO als das Herz dieses Projekt, weil es ist sehr einfach zu Code in seine IDE zu schreiben, und es gibt eine Vielzahl von Open-Source-Bibliothek im Internet zur Verfügung, die nach der verwendet werden kann, requirement.I haben das Projekt für sehr kleine Nenn (10Watt) Sonnensystem experimentiert aber dies kann leicht modifiziert werden, um für höhere Rating-System zu verwenden.

Feature:
Energie-Monitoring durch
1.LCD
2. über das Internet (Xively Upload)
3. Datenprotokollierung in einer SD-Karte
Sie können meine neue instructable ARDUINO MPPT Solarladeregler zu sehen (Version-3.0)
Sie können auch auf meine anderen instructables
ARDUINO Solarladeregler (Version 2.0)
ARDUINO Solarladeregler (Version-1) Schritt 1: Erforderliche Teile:



ARDUINO ENERGY METER

1. ARDUINO UNO (Rev-3)
2. ARDUINO ETHERNET SHIELD
3. 16x2 Zeichen LCD
4. ACS 712 CURRENT SENSOR
4. Widerstände (10k, 330Ohm)
5. Potentiometer (10K)
6. Schaltdrähte
7. Ethernet-Kabel (CAT-5E)
8. BREAD BOARDStep 2: Leistung und Energie


Leistung:
Power ist Produkt von Spannung (Volt) und Strom (Amp)
P = VxI
Einheit der Leistung ist Watt oder KW

Energie:
Energie Produkt von Leistung (Watt) und Zeit (Stunde)
E = Pxt
Energieeinheit ist Watt Hour oder Kilowattstunde (kWh)

Aus der obigen Formel ist klar, dass, um Energie zu messen, müssen wir drei Parameter
1. Spannung
2. Strom
3. Zeit Schritt 3: Spannungsmessung

ARDUINO ENERGY METER

ARDUINO ENERGY METER

ARDUINO ENERGY METER

ARDUINO ENERGY METER

ARDUINO ENERGY METER

Spannung wird durch die Hilfe eines Spannungsteilers gemessen circuit.As die ARDUINO analogen Pin Eingangsspannung
Nur für den 5V Ich entwarf die Spannungsteiler in der Weise, dass die Ausgangsspannung sollte es weniger als für die Speicherung der Energie von der Solarpanel verwendet 5V.My Batterie sein wird 6V gelesen 5.5Ah.So Ich habe zum Rücktritt dieses 6.5 v zu einer Spannung, die niedriger als 5V.
Ich habe R1 = 10k und R2 = 10K. Der Wert von R1 und R2 kann geringer sein, aber das Problem ist, dass, wenn der Widerstand gering höheren Stromfluss durch sie infolge große Energiemenge (P = I ^ 2R) in der Form von Wärme abgeleitet. So verschiedene Widerstandswert kann gewählt werden, sondern sollte darauf geachtet werden, die Verlustleistung an dem Widerstand minimiert wird.

Vout = R2 / (R1 + R2) * Vbat
Vbat = 6,5 bei voller Ladung
R1 = 10k und 10k R2 =
Vout = 10 / (10 + 10) * 6,5 = 3,25 V, die niedriger als 5 V und eignet sich für analoge ARDUINO Stift

NOTIZ
Ich habe gezeigt, 9 Volt Batterie in entblößte Bord Schaltung ist nur zum Beispiel, um die wires.But verbinden die eigentliche Batterie habe ich eine 6 Volt, 5.5Ah Bleibatterie.

Voltage Calibration:
Wenn der Akku vollständig geladen ist (6,5 V), werden wir eine Vout = 3,25 V und niedrigeren Wert für andere niedere Batteriespannung zu erhalten.

AEDUINO ADC konvertiert analoge Signal in entsprechende digitale Annäherung.
Wenn die Batteriespannung ist 6.5V ich 3,25 V von dem Spannungsteiler und sample1 = 696 in serielle Monitor, wo sample1 ist ADC-Wert auf 3,25 V entspricht,

Zum besseren Verständnis habe ich die Echtzeit-Simulation von 123D.circuit zur Spannungsmessung angebracht

Kalibrierung:

3,25 V entspricht 696
1 entspricht 3.25 / 696 = 4.669mv
Vout = (4,669 * sample1) / 1000-Volt-
Die tatsächliche Akkuspannung = (2 * Vout) Volt

ARDUINO Code:

// Unter 150 Proben von Spannungsteiler mit einem Abstand von 2 s und durchschnittliche dann die Proben für Daten gesammelt (int i = 0; i <150; i ++)
{
sample1 = sample1 + analogRead (A2); // Lesen Sie die Spannung von der Teilerschaltung
Verzögerung (2);
}
sample1 = sample1 / 150;
Spannung = 4,669 * 2 * sample1 / 1000;

Schritt 4: Strommessung

ARDUINO ENERGY METER

ARDUINO ENERGY METER

Zur Strommessung verwendete ich eine Hall-Effekt-Stromsensor ACS 712 (20 A) .Es gibt verschiedene Strombereich ACS712-Sensor auf dem Markt verfügbar, so wählen Sie entsprechend Ihrer Anforderung. In Brot Bord Diagramm Ich habe gezeigt, LED als Last, sondern die tatsächliche Belastung ist anders.
ARBEITSPRINZIP :

Der Hall-Effekt ist die Erzeugung einer Spannungsdifferenz (der Hall-Spannung) über einen elektrischen Leiter, die quer zu einem elektrischen Strom in dem Leiter und einem Magnetfeld senkrecht zu dem Strom.
Um mehr über die Halleffekt-Sensor, klicken Sie einfach hier
Das Datenblatt ACS 712 Sensor findet hier

Von Data Sheet
1. ACS 712 Maßnahme positiven und negativen 20 A, entsprechend dem analogen Ausgang 100 mV / A
2. Keine Teststrom durch die Ausgangsspannung VCC / 2 = 5 V / 2 = 2,5 V

Kalibrierung:
Analog Lese erzeugt einen Wert von 0 bis 1023, das entspricht 0V und 5V
So Analog lesen 1 = (5/1024) V = 4.89mv
Value = (4,89 * Analog lesen Wert) / 1000 V
Aber nach Datenblättern Offset ist 2,5 V (bei Stromnull Sie 2,5V aus Ausgang des Sensors zu erhalten)
Istwert = (value-2.5) V
Strom in Ampere = Istwert * 10

ARDUINO Code:

// Unter 150 Proben von Sensoren mit einem Abstand von 2 s und dann der Mittelwert der Proben gesammelten Daten
for (int i = 0; i <150; i ++)
{
sample2 + = analogRead (A3); // Die aktuelle vom Sensor gelesen
Verzögerung (2);
}
sample2 = sample2 / 150;
val = (5,0 * sample2) /1024.0;
actualval = val-2.5; // Offsetspannung 2,5 V
Ampere = actualval * 10; Schritt 5: Zeitmessung


Für die Zeitmessung besteht keine Notwendigkeit einer externen Hardware, ARDUINO selbst eingebauten Timer.

Die Funktion millis () gibt die Anzahl der Millisekunden seit dem Arduino Board begann der Ausführung des aktuellen Programms.

ARDUINO Code:

lang = milisec millis (); // Zeit in Millisekunden berechnen
lange Zeit = milisec / 1000; // Millisekunden bis Sekunden zu konvertieren

Schritt 6: Wie ARDUINO Power and Energy berechnen



totamps = totamps + Ampere; // Gesamt Ampere berechnen
avgamps = totamps / Zeit; // Durchschnittliche Ampere
amphr = (avgamps * time) / 3600; // Amperestunden
Watt = Spannung * Ampere; // Leistung = Spannung * Strom
Energie = (Watt * time) / 3600; Watt-sec erneut konvertieren Watt-Hr durch Division 1 Stunde (3600sec)
// = Energie (Watt * Zeit) / (1000 * 3600); zum Lesen in kWhStep 7: Videoausgang

ARDUINO ENERGY METER

Alle Ergebnisse können in seriellen Überwachungs oder durch Verwendung einer LCD dargestellt werden.
Ich habe ein 16x2 Zeichen LCD, alle in der vorherigen steps.For Schaltpläne siehe oben gezeigt das Brot Bord Schaltung erhalten Ergebnisse anzuzeigen.

Schließen Sie LCD mit ARDUINO als Gebrüll gegeben:

LCD -> Arduino
1. VSS -> Arduino GND
2. VDD -> Arduino + 5V
3. VO -> Arduino GND pin + Widerstand oder Potentiometer
4. RS -> Arduino Pin 8
5. RW -> Arduino Pin 7
6. E -> Arduino Pin 6
7. D0 -> Arduino - Nicht verbunden
8. D1 -> Arduino - Nicht verbunden
9. D2 -> Arduino - Nicht verbunden
10 D3 -> Arduino - Nicht verbunden
11 D4 -> Arduino Pin 5
12 D5 -> Arduino Pin 4
13 D6 -> Arduino Pin 3
14. D7 -> Arduino Pin 2
15. A -> Arduino Pin 13 + Widerstand (Gegenlichtleistung)
16 K -> Arduino GND (Hintergrundbeleuchtung Boden)

ARDUINO Code:

Für Serial Monitor:

Serial.print ("VOLTAGE:");
Serial.print (Spannung);
Serial.println ("Volt");
Serial.print ("CURRENT:");
Serial.print (Ampere);
Serial.println ("Verstärker");
Serial.print ("POWER");
Serial.print (Watt);
Serial.println ("Watt");
Serial.print ("Energieverbrauch:");
Serial.print (Energie);
Serial.println ("Watt-Stunden");
Serial.println (""); // Die nächsten Sätze von Parameter nach einer Leerzeile drucken
Verzögerung (2000);

Für LCD:

Für LCD-Display müssen Sie die "Liquidcrystal" Bibliothek in den Code zuerst importieren.
Um mehr über die LequidCrystal Bibliothek Klicke einfach hier
Für LCD-Tutorial klicken Hier

Der folgende Code ist ein Format, in LCD-Anzeige all die Berechnung für Kraft und Energie

#include <LiquidCrystal.h>
lcd (8, 7, 6, 5, 4, 3, 2);
int Backlight = 9;
Leere setup ()
{
pinMode (Hintergrundbeleuchtung, OUTPUT); // Set Stift 9 als Ausgangs
analogWrite (Hintergrundbeleuchtung, 150); // Steuert die Hintergrundlichtintensität 0-254
lcd.begin (16,2); // Spalten, Zeilen. Größe der Anzeige
lcd.clear (); // Den Bildschirm zu löschen
}
Leere Schleife ()
{
lcd.setCursor (16,1); // Sie den Cursor außerhalb des Anzeigezahl eingestellt
lcd.print (""); // Print leere Zeichen
Verzögerung (600);
////////////////////////////////////////// Druck Kraft und Energie auf einen LCD / ///////////////////////////////////////////////
lcd.setCursor (1,0); // Sie den Cursor an 1. col und 1. Reihe lcd.print (Watt) eingestellt;
lcd.print ("W");
lcd.print (Spannung);
lcd.print ("V");
lcd.setCursor (1,1); // Sie den Cursor an 1. und 2. Reihe col eingestellt
lcd.print (Energie);
lcd.print ("WH");
lcd.print (Ampere);
lcd.print ("A");
} Schritt 8: Daten-Upload zu xively.com

ARDUINO ENERGY METER

ARDUINO ENERGY METER

ARDUINO ENERGY METER

ARDUINO ENERGY METER

ARDUINO ENERGY METER

ARDUINO ENERGY METER

Siehe die obigen Screenshots zum besseren unter Stehen.

Für die Daten Hochladen auf die folgende Bibliothek xively.com zuerst heruntergeladen werden

Httpclient: Klicken Sie hier
Xively: Klicken Sie hier
SPI: Import von Arduino IDE (Skizze -> Import Bibliothek .....)
Ethernet: Import von Arduino IDE ((sketch -> Import Bibliothek .....)
Konto eröffnen mit http://xively.com (früher pachube.com und cosm.com)

Melden Sie sich für ein kostenloses Konto bei Entwickler http://xively.com

Wählen Sie einen Benutzername, Passwort, geben Sie Ihre Adresse
und die Zeitzone usw.
Sie erhalten eine Bestätigung per E-Mail zu empfangen; klicken Sie dann auf
die Aktivierungslink zu aktivieren sie
Konto.
Nach der erfolgreichen Eröffnung des Kontos werden Sie
um Entwicklungs Geräte umgeleitet werden
Seite

Klicken Sie auf + Feld Gerät hinzufügen
Geben Sie einen Namen ein, um das Gerät und die Beschreibung (zB
Energie-Monitoring)

·
Wählen Sie private oder öffentliche Daten (I wählen privat)

·
Klicken Sie auf DeviceAfter Add Hinzufügen des Geräts, das Sie zu einem neuen umgeleitet werden
Seite, wo viele wichtige Informationen gibt es

Produkt ID,
Produkt Secret, Seriennummer, Aktivierungscode

·
ID-Feed, Feed-
URL, API End Point (wird Feed-ID in ARDUINO-Code verwendet)
Hinzufügen Channels (I
Wählen Sie Energie und Kraft, aber Sie können nach Ihrer Wahl wählen)

Gib Einheit und Symbol für den Parameter

·
Fügen Sie Ihr
Lage

·
API-Schlüssel (verwendet
in ARDUINO Code, zu vermeiden, um diese Zahl zu teilen)

·
Trigger (ping ein
Web-Seite, wenn ein Ereignis passiert, wie wenn der Energieverbrauch übersteigt eine gewisse
Grenze)

Schritt 9: Xively und ARDUINO Code



Hier brachte ich den vollständigen Code (Beta-Version) für Energiezähler ohne SD-Karte Datenprotokollierung, die separat in der nächsten Stufe verbunden ist.

/ **
Energie-Monitoring-Daten-Upload zu xively ** / # include # include # include # include
#define API_KEY "xxxxxxxx" // Geben Sie Ihre Xively API-Schlüssel
#define FEED_ID xxxxxxxxx // Geben Sie Ihre Xively Feed ID
// MAC-Adresse Ihres Ethernet-Schild
Byte-mac [] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
// Analog Stift, der wir die Überwachung int sensorPin = 2 (0 und 1 werden vom Ethernet Schild verwendet werden);
unsigned long lastConnectionTime = 0; // Letzte Mal haben wir zu Kosmos verbunden
const unsigned long connectionInterval = 15000; // Verzögerung zwischen den Anschluss an Cosm in Millisekunden
// Initialisierung der Cosm Bibliothek
// Definieren Sie die Zeichenfolge für unsere Datenstrom ID
char SensorID [] = "POWER";
char sensorId2 [] = "Energie";
XivelyDatastream Datenströme [] = {
XivelyDatastream (SensorID, strlen (SensorID), DATASTREAM_FLOAT)
XivelyDatastream (sensorId2, strlen (sensorId2), DATASTREAM_FLOAT)
DATASTREAM_FLOAT)};
// Den Datenstrom in eine Förder Wickeln
XivelyFeed Feed (FEED_ID, Datenströme, 2 / * Anzahl der Datenströme * /);
EthernetClient Client;
XivelyClient xivelyclient (Client);
Leere setup ()
{
Serial.begin (9600);
Serial.println ("Initialisieren Netzwerk");
while (Ethernet.begin (Mac)! = 1)
{
Serial.println ("Fehler beim Abrufen der IP-Adresse über DHCP beziehen, es erneut versuchen ...");
Verzögerung (15000);
}
Serial.println ("Netzwerk-Initialisierung");
Serial.println ();
}
Leere Schleife ()
{
if (millis () - lastConnectionTime> connectionInterval)
{
senddata (); // Daten an xively
getData (); // Lesen der Datenstrom von xively zurück
lastConnectionTime = millis (); // Update Verbindungszeit so, bevor er wieder den Anschluss warten wir
}
}
nichtig senddata ()
{
int sensor1 = Watt;
int sensor2 = Energie;
Datenströme [0] .setFloat (Sensor1); // Leistungswert
Datenströme [1] .setFloat (sensor2); // Energiewert
Serial.print ("Read power");
Serial.println (Datenströme [0] .getFloat ());
Serial.print ("Read Energie");
Serial.println (Datenströme [1] .getFloat ());
Serial.println ("Hochladen auf Xively");
int ret = xivelyclient.put (Futtermittel, API_KEY);
Serial.print ("PUT Rückkehrcode:");
Serial.println (ret);
Serial.println ();
}
// Den Wert der Datenstrom von xively, Ausdruck der Wert, den wir empfangen
nichtig getData ()
{
Serial.println ("Lesen von Daten aus Xively");
int ret = xivelyclient.get (Futtermittel, API_KEY);
Serial.print ("GET Rückkehrcode:");
Serial.println (ret);
if (ret> 0)
{
Serial.print ("Datastream ist:");
Serial.println (Feed [0]);
Serial.print ("Power-Wert ist:");
Serial.println (Feed [0] .getFloat ());
Serial.print ("Datastream ist:");
Serial.println (Futter) [1];
Serial.print ("Energiewert ist:");
Serial.println (Feed [1] .getFloat ());
}
Serial.println (); Schritt 10: Datenerfassung in einer SD-Karte


Für Datenspeicherung in einer SD-Karte, die Sie importieren die SD-Bibliothek haben

Für Tutorial klicken Sie hier
Um mehr über die SD-Bibliothek Klicke einfach hier

Der Code zum Speichern von Daten in auf eine SD-Karte getrennt geschrieben, da ich nicht nach dem Schreiben von Code für die LCD-Anzeige und Daten-Upload xively.com über genügend Speicher in meinem Arduino UNO. Aber ich versuche, die Beta-Version Code so zu verbessern, dass eine einzige Code können alle Funktionen (LCD-Display, Xively Daten Hochladen und Speichern von Daten in einer SD-Karte) enthalten.
Der Code für die Datenprotokollierung ist unten beigefügt.

Wenn jemand einen besseren Code zu schreiben, indem Sie meinen Code bitte mit mir teilen.

Dies ist meine erste technische instructable, Wenn jemand einen Fehler darin zu finden ist, können Sie Kommentare .. so dass ich mich zu verbessern.
Wenn Sie feststellen, Verbesserungsbereiche in diesem Projekt wenden Sie sich bitte Anmerkungen oder Mitteilung ich, um so mehr wird das Projekt sein powerful.I denke, es wird hilfreich für andere als auch für mich.