Liste der Anhänge anzeigen (Anzahl: 1)
Projekt vorgestellt: Strommessung im Haushalt bis 30A mit Arduino
Hallo,
ich möchte hier kurz mein ("fertiges") Projekt vorstellen. Vielleicht kann der Ein oder Andere es nutzen.
Kurz gesagt möchte ich den Strom von Verbrauchern(bis 30A) im Haus messen und an einen PC senden.
Wichtig ist mir ein übersichtlicher und günstiger Aufbau(ca 5 Euro/Messung).
Der grobe Aufbau besteht aus einem Stromwandler(wird über das zu messende Kabel gesteckt und kann bis 30A messen), einem AD-Wandler und einem Arduino der über USB/virtueller Comport die Messergebnisse an den PC sendet.
Wer Interesse hat, kann nun die ausfühliche Beschreibung lesen:
Ich war auf der Suche, nach einer Wechselstrommessung, welche ich einfach an meine zukünftige Hausautomatisierung anschließen kann. Hintergrund der Messung ist es einen groben Überblick über die Stromaufteilung(großer Messbereich) im Haus zu haben und ein bisschen Komfort, wenn die Waschmaschine im Keller unter einen bestimmten Stromwert(kleiner Messbereich) geht, ist sie wohl fertig…
Hier meine Kriterien:
-günstige Hardware
-großer Messbereich
-hohe Genauigkeit
-wenig Hardware
-Arduino als Datensammler „vorerst“ für 10 Sensoren
-einfache Schnittstelle zur Hausautomatisierung(PC)
-mindestens einen umgerechneten Messwert pro Sekunde und pro Wandler(10 Sensoren=10 errechnete Werte / Sekunde)
Stromsensor:
Bei der Auswahl der Stromsensoren bin ich immer wieder bei Stromtrafos gelandet, da diese unschlagbar günstig und relativ genau sind. Ich verwende einen ZMCT118F mit einem Messbereich von 30A. 30A AC im Eingang entsprechen 30mA AC am Ausgang.
Um die Linearität und Genauigkeit zu testen, habe ich Halogenlampen (50-3000W) an einen Stelltrafo angeschlossen. Den Strom habe ich zum Vergleich mit einem „METRAHIT X-tra“ (kalibriert) gemessen.
Wandlung des Stromwandlers:
Begeistert von der Messgenauigkeit, habe ich mich an die AD Wandlung des Sensors gemacht. Da der auf dem Arduino verbaute AT-Mega „nur“ eine 10Bit Auflösung hat, habe ich nach externen AD-Wandlern gesucht. Auch hier ist es nicht ganz leicht günstige und vor allem schnelle Wandler zu finden. Schnell aus folgendem Grund: Die Sinusperiode hat bei 50Hz = 20mS. Damit ich bei Phasen an-/abschnitt noch sinnvoll messen kann, peile ich ca 400 Messungen / 20mS an. Das ergibt ca 20000 Messungen pro Sekunde.
An dieser Stelle vielen Dank an Bernhard, der mich noch rechtzeitig darauf aufmerksam gemacht hat, dass der Wandler, den ich zuerst im Auge hatte, nur 860 Messungen/Sek. schafft.
Ich habe mich für den AD Wandler MCP 3301 entschieden. Dieser hat eine 13Bit Auflösung bei einer Abtastrate von 100ksps und wird über SPI an den Arduino angeschlossen. Der AD-Wandler kann natürlich nicht direkt den Strom vom Wandler messen, sondern misst die Spannung, die über einen Messwiederstand abfällt. Bei dieser Auflösung ist es wichtig eine genaue Spannungsreferenz zu haben. Im Datenblatt vom MCP 3301 wird als Spannungsreferenz der MCP 1525 genutzt. Dieser bietet eine sehr genaue Spannung von 2,5V (näheres im Datenblatt). Aus diesem Grund ist es sehr wichtig, dass der Messwiederstand eine Genauigkeit von 0,1% hat.
Um den Wandler mit 30A auszunutzen, habe ich einen Messwiderstand von 56 Ohm eingesetzt, d.h. der Messbereich geht theoretisch von 10,9 mA bis 30000 mA. Wem die 10,9mA zu groß sind, kann als Messwidertand auch 100 Ohm nutzen. Dann ist der Messbereich von 6,1mA bis 16100 mA, was ja für die meisten Verbraucher ausreichend ist. Da die Werte der verbauten Messwiederstände im Programm angegeben werden müssen, kann der Messbereich so „beliebig“ angepasst werden. Natürlich muss es auch Sinn machen, denn die Genauigkeit hängt ja auch noch mit anderen Faktoren zusammen: Referenzspannung, Quarzgenauigkeit, 50,000000 Hz der Netzspannung…
Programm im Arduino:
Ich habe zwar schon einige AT-Mega programmiert, aber noch nicht mit der Arduinosoftware. Deshalb vielen, vielen Dank an Jürgen, der mir diese Arbeit abgenommen hat und den Code zur freien Verfügung stellt. DANKE!!!
Eine Beschreibung ist im Programm selber.
Ich nutze einen Ardino NANO, aber es geht auch mit diversen anderen. Das Programm ist auf 10 Sensoren ausgelegt und bei jedem Wandler wird 4 mal pro Sekunde je eine Periode gemessen und aus dem Messergebnissen der RMS Wert gebildet. Jede Sekunde sendet der Arduino über USB/ Virtueller Comport 10 Messwerte; also einen pro Wandler.
Um die Ausgabe „hübscher“ zu gestalten, wurde die Bibliothek „Streaming“ verwendet die in das Installationsverzeichnis kopiert werden muss.
Hinweise:
Die Leitung SCK und MISO führen immerhin 1 MHz Signale, da wirken sich parasitäre Kapazitäten sehr schädlich aus, also nach Möglichkeit kurze Leitungen verwenden. Und natürlich nicht mit Kondensatoren sparen – dicht an den ICs.
Zum Abschluss habe ich noch ein paar Vergleichsmessreihen aufgezeichnet. Generell kann man sagen dass die Abweichung zwischen dem geeichten Messgerät und „meiner“ günstigen Messung bis 500mA bei 1% liegt, zum Teil darunter. Ab 500mA liegt die Abweichung deutlich unter 1%. Bei kleinen Strömen wirkt sich eine Ungenauigkeit von einem Bit natürlich sehr viel höher aus, als bei großen Strömen.
Kosten:
Den Arduino Nano gibt es günstig auf bekannten Internetseiten
AD Wandler MCP 3301 liegt bei ca 3,50 Euro
Spannungsreferenz MCP 1525 ca 1 Euro
Messwiederstand ca 0,50 Euro
Stromsensor ZMCT118F im 10ner Pack incl. Versand bei 1$ pro Stück
Also kann man grob sagen, dass jede (weitere) Messung ca 5 Euro kostet
Nachbau:
Nur zur Sicherheit...
Der Nachbau ist natürlich auf eigene Gefahr. Da hier mit lebesgefährlicher Netzspannung gearbeitet wird, müssen alle einschlägigen Richtlinien, Bestimmungen... (VDE!!!) beachtet werden.
Also nur nachbauen, wenn man weiß, was man macht und darin auch Erfahrung hat...
Für Kritik, Verbesserungen, Vorschläge bin ich immer offen. Davon lebt ein Forum!
Viel Spaß,
Tobias
Anhang 32542
Liste der Anhänge anzeigen (Anzahl: 1)
Umbau Strommessung auf I2C
Hallo,
hier noch eine Erweiterung zum Strommessung.
Alle 10 Messwerte werden nun über I2C an den Master gesendet.
Viel Spaß,
Tobias
Anhang 32824
Liste der Anhänge anzeigen (Anzahl: 1)
ich habe deine Schaltung mit 3 Wandler nachgebaut und sie funktioniert auch. Die Meßergebnisse sind auf allen Eingängen gleich, allerdings wird nie 0mA angezeit wenn keine Last vorhanden ist. Je nachdem welchen ADC ich anschließe, ich habe 6 Stück probiert, wird mir ein Strom von 12 bis 109mA in Leerlauf angezeigt. Bis 48mA Ruhestrom (ohne Last gemessen) sind die Messergebnisse (268mA) bei 60W gleich, liegt der Ruhestrom höher stimmt auch das Ergebenis nicht. Sind jetzt die Wandler zu billig oder woran kann das liegen.
- - - Aktualisiert - - -
Alles auf eine Platine aufgebaut
Liste der Anhänge anzeigen (Anzahl: 1)
Liste der Anhänge anzeigen (Anzahl: 6)
LEISTUNGSMESSUNG für 9 Sensoren
Hallo,
ich war lange nicht hier und habe auch keine Benachrichtigungen bekommen dass sich hier was tut...
Grundsätzlich zu den Wandlern: die können nicht nur ohmsche, sondern auch kappazitive und induktive Lasten messen. Man muss die nur richtig auswerten...
In der Zwischenzeit bin ich mehrfach gefragt worden aus der STROMESSUNG eine LEISTUNGSMESSUNG zu machen.
Der erste Versuch ist fertig und sieht so aus:
9x Strommessungen und 1x Spannungsmessung. Also vorerst die Leistungsmessung nur für alle Verbraucher einer Phase z.B. L1.
Funktionsbeschreibung SOFTWARE:
Ein µC misst 200-mal pro Periode Spannung und Strom, multipliziert beides und addiert diese Werte für eine Halbwelle auf. Anschließend wird die Summe durch die Anzahl der Messungen geteilt. Das Ganze passiert 4-mal, wird aufsummiert und durch 4 geteilt. Also ein Mittelwert über 4 Messungen. Anschließend wird das Ergebnis mit den Umrechnungs- und Korrekturfaktoren zum endgültigen Messwert umgerechnet und 1-mal pro Sekunde ausgegeben/angezeigt (I²C).
Funktionsbeschreibung HARDWARE:
Der Strom wird berührungslos über eine Spule gemessen, durch die das zu messende Stromkabel geführt wird. Da die Spule/der Wandler einen Strom ausgibt, wird noch ein Messwiderstand angeschlossen. Der Spannungsabfall wird mit dem Analog/Digitalwandler „MCP3301“ gemessen und an den µC weitergegeben. Der MCP1525 ist ein Spannungswandler, der eine Referenzspannung von 2,5V zur Verfügung stellt.
Anhang 33755
Die 230VAC Spannung wird mit einem Trafo auf 6VAC transformiert und über einen Spannungsteiler mit dem Analog/Digitalwandler „MCP3301“ gemessen.
Anhang 33756
Hier die Platine mit Arduino und 10 A/D-Wandlern
Anhang 33758
Der aktuelle Stand ist, dass die Leistung ohmscher Verbraucher problemlos gemessen werden kann. Bei induktiven und kapazitiven Verbrauchern stimmen die Werte nicht.
Und genau hier benötige ich Unterstützung aus dem Forum. Vielleicht kann mir jemand sagen wo der Fehler ist, ODER wie ich den Fehler einkreisen kann. Ich bin der Meinung, dass das Messverfahren für alle Verbraucher richtig ist. Also muss hardwaremäßig ein Problem / Fehler vorliegen um induktive / kapazitive Lasten zu messen.
Eine Idee ist, dass durch den Trafo für die Spannungsmessung eine Phasenverschiebung entsteht. Nun wäre die Möglichkeit, diese Phasenverschiebung softwaremäßig zu korregieren.
Als Versuch habe ich mir mal alle Strom und Spannungswerte pro Halbwelle einzeln ausgeben lassen und in Excel kopiert. Eine Spalte Strom und eine Spalte Spannung. Nun habe ich die Stromwerte soweit verschoben, dass die errechnete Leistung passt. Leider kann ich nicht sagen, dass ich die Stromwerte IMMER um 5 Werte verschieben muss, damit die Leistung passt, sondern es sind auch mal z.B. 10. -> so kann ich keinen Korrekturfaktor festlegen.
Natürlich werden Strom und Spannung NICHT 100%ig gleichzeitig gemessen sondern erst der Strom und 30 uS später die Spannung. Das sollte aber nicht so ins Gewicht fallen, da bei 209 Messungen je Vollwelle nur alle 95,7uS gemessen wird.
Wenn ich Strom und Spannung auf dem Oszilloskop anzeige, stelle ich sogar bei der 60W Glühlampe eine Phasenverschiebung fest. In etwa 22° was einem CosPhi von 0,92 entspricht. Oszilloskop natürlich hinter der eben beschriebenen Hardware(Trafo, Stromwandler…)
Anhang 33757
In der Messung sind 2 Spulen eingebaut(Trafo für Spannungsmessung und der Strommesswandler). Kann dadurch eine weitere Verschiebung stattfinden? Dann wäre es vielleicht möglich einen Korrekturfaktor einzurechnen…?
Auch wäre es eine Möglichkeit, dass durch Sättigungseffekte des Trafokerns der sinusförmige Verlauf (oder auch ein schon netzseitig etwas verformter Sinus) verfälscht auf die Sekundärseite abgebildet wird.
Das könnte man umgehen, wenn man den Trafo durch ein Kondensatornetzteil ersetzt - ist allerdings etwas aufwändiger, da einiges durch Optokoppler galvanisch getrennt werden muss...
Bitte Vorschläge um den Fehler einzugrenzen...
Hier noch der Schaltplan in eagle
Anhang 33759
und natürlich das Programm für den Arduino:
Anhang 33760
Gruß, stfan