Leistungsdatenerfassung mit Arduino?

Hallo,
vorweg, ich bin absoluter NochNichtAnfänger!

Bin aber sehr geneigt, mit dem Arduino ein Projekt zu realisieren, wenn es denn machbar ist.
Zu meiner Person: gelernter Progger in C, Java, und ein paar weitere Proggersprachen.
Die Programmiersprache für den Arduino erscheint mir recht einfach, und das ist gut so :wink:

Was ich gern machen möchte::
Leistungsdatenerfassung von digitalen Stromzählern mit S0-Ausgang.
Soweit ich in Erfahrung bringen konnte, wird die Leistung in von 1kw in 500er bis 2000er Schritten als Impuls ausgegeben.
Zur Verfügung steht ein 90ms-Impuls auf Basis 24Volt, wenn ich es richtig verstanden habe.
Bei einem Zähler mit 1000 Impulsen für 1kw würde dann ein Impuls 1W ausmachen.

Ich würde gerne bis zu 16 dieser Zähler überwachen, die Leistungspulse erfassen und 5-minütig über Ethernet(evtl. auch WLan) via Ftp übertragen. Zur großen Datenspeicherung und Webausgabe von Graphen soll das Projekt Volkszähler genutzt werden.

So habe ich, bevor ich in den Arduino einsteige erstmal mit Eurer Hilfe abzuklären, ob es möglich ist, diese Impulse sicher zu zählen, zwischenzuspeichern(evtl. auf einem Stick), und alle 5 Minuten per Ftp zu übertragen.

Auch stellt sich für mich die Frage, ob der Arduino gleichzeitig mehrere Jobs erledigen kann, weil alle IOs überwacht werden müssen und zusätzlich noch ein Ftp-Upload laufen kann.
Aber auch ist fraglich, ob Potentialunterschiede Probleme bereiten würden, und ob ein ggf. solchiges Problem einfach gelöst werden kann.

Möglicherweise, falls der Arduino dies nicht zeitunkritisch erledigen könnte, gibt es vielleicht von Euch einen anderen Tip, wie dies angegangen werden könnte?

Nachfolgend, soweit realisierbar, würde auch noch eine Relaissteuerung, für optimierten Eigenverbrauch von Photovoltaikenergie, mit hinzukommen, indem z.B. Releias angesteuert werden, die die Abgabe von Energie entsprechend kanalisiert, sofern noch überschüssige Energie vorhanden ist.

Soweit ich im Forum lesen konnte, ist hier die Fachkompetenz riesig.
Das Forum ist echt beeindruckend.

Freue mich über jede Antwort.
Gruß Joe

Ein paar Impulse zu zählen ist an sich kein Problem. Das macht man generell über Interrupts, so dass man sie immer mitbekommt. 16 davon sind kritischer, da man da an die Grenzen der Interrupt-Logik stößt.

Arduino Mega und Pin-Change Interrupts wären eine Möglichkeit. Da gibt es aber eine Lib dafür (obwohl da dabei steht, dass der Support für den Mega etwas problematisch ist. Weiß nicht ob das inzwischen upgedatet wurde):
http://playground.arduino.cc/Main/PinChangeInt

Man kann es auch per Hand machen, was aber relativ kompliziert ist, da sich immer 8 Pins einen Interrupt-Vektor teilen. Siehe hier:
http://www.kriwanek.de/arduino/grundlagen/182-pin-change-interrupts-grundlagen.html
http://www.kriwanek.de/arduino/grundlagen/183-mehrere-pin-change-interrupts-verwenden.html
(wobei da der meiste Code für die Flanken Erkennung ist. Das Entprellen kann man bei deiner Anwendung weglassen)

Zwar machen nicht alle Pins PC-Interrupts (nur welche die als PCINTx bezeichnet sind), aber zusammen mit den 6 externen Interrupts kommt man vielleicht hin. Das hängt aber sehr davon ab ob man die Pins nicht noch für die restliche Hardware benötigt, da die meisten multiple Funktionen haben.

Siehe hier für die Pin-Belegung des Mega:
http://www.pighixxx.com/pgdev/Temp/ArduinoMega_b.png

Aber wenn man nicht noch 16 ADCs und PWM braucht, sollte es theoretisch gehen.

Das Potential könnte man einfach über einen Spannungsteiler umsetzen, aber es bietet sich hier vielleicht an das über Optokoppler sauber zu trennen.

Vielleicht so als Gedankenanstoss:

Das ist schon zig Jahre her, wo wir in der Firma mal genau so was gemacht haben.
Leider fehlt die genaue Erinnerung, aber das ging in etwa so:

Man nehme einen 12-Bit seriell nach parallel-Wandler mit Latch und hängt dort das entsprechende Gegenstück parallel nach seriell-Wandler wieder drann.
Der S0-Impuls taktet fröhlich vor sich hin - bis 4096 Watt, dann kommt ein Überlauf.

Zwischenzeitlich (nicht zeitkritisch) kann man die gezählten Werte seriell wieder auslesen und den Zähler resetten.
Die einzelnen Werte aufaddiert ergeben dann den aktuellen Zählerstand.

Allerdings müsstest du dir dafür ne kleine Zusatzplatine pro Zähler machen, welche dann jeweils:

  • einen Clock-Eingang
  • einen seriellen Datenausgang
  • eine Reset-Leitung
  • und einen Enable-Anschluß (besser eine Auwahlmatrix 1 aus 16)
    hat.

Am Arduino müsstest du dann entsprechend (nur) vorhalten:

  • einen Clock-Ausgang (sind alle drann parallel geschaltet)
  • einen seriellen Daten-Eingang (dito)
  • eine Reset-Leitung (dito)
  • und 4 Datenleitungen zu adressieren, welchen Zähler du grade lesen willst.

Da brauchts dann keinerlei Interrupt, der Arduino gibt alles vor.
Die Zähler speichern selbst für einen Zeitraum X (4KW = normaler Haushalt ca. 3-6 Stunden).
Ist halt nur ein wenig Bastelei, dafür aber völlig problemlos.

zwischenzuspeichern(evtl. auf einem Stick), und alle 5 Minuten per Ftp zu übertragen.

... wurde vornehm ignoriert ...

Sowohl ein USB-Stick wie FTP sind nicht sehr Arduino.
DataLogger verwenden eine SD-Card, und wenn du diese Daten nicht per Turnschuh-Übertragung austauschen willst, gibt es entweder serielle UART Kommunikation onboard, oder TCP/IP ( evtl. http: ) über ein Ethernet Shield.

Das sollte man mit dem "Volkszähler" Projekt abstimmen ( was ich nicht gemacht habe )

Hallo,
vielen Dank erstmal, für Eure Ideen und Ansätze.

Seit ein paar jahren habe ich einen EMH vom Versorger eingebaut bekommen.
Ist ein 3x230/400 5(100)A 50Hz CL.2 (Allgemein ist Class2 doch eher minderwertig und darf nicht zur Abrechnung benutzt werden?)
Dieer Zähler hat einen Optokopplerausgang S0 mit max 27V und 27mA
RA=250 Impulse je kwH

Nun, da ich mich nicht auskenne, dies kein Öffner und kein Schliesser von einem Relais ist, sondern über einen Optokoppler läuft, müßte man den Anschluß erstmal messen.
Könnte mir vorstellen, das man extern 24V mit 20mA anlegen müßte, und der Impuls zieht die Spannung runter, sodaß der Spannungsabfall den Impuls für 2Watt Verbrauch darstellt. Dann müßte die benötigte Spannung aufgelegt werden.
Andererseits ist beim Impuls die angelegt Spannung nicht unten, sondern wärend der Wartezeit, und die Wartezeit verbraucht also permanent eine kleine Leistung?
Leider ist der Ausgang unter dem verblombten Plexiglas, sodaß ich erstmal nur Mutmaßen kann.
Der Zähler ist auch schon relativ alt und wenig Informativ.
Bei der Ablesung wird der Rollenzählertand abgeschrieben, wird also eine nichtvorhandene Infrarotschnittstelle nicht genutzt.

Muß mir der Versorger diesen Ausgang freigeben? (Lt. Gesetz muß ich ja auf den Impuls oder die Daten live zugreifenkönnen?)

Andere Zähler haben auch einen S0-Ausgang.
Möglicherweise sind die alle an einer vorgegebenen Norm ausgerichtet?

Die Idee mit dem Arduino Mega2560 R3 scheint mir nicht schlecht zu sein, da es auch dafür einen kleinen Touchscreen gibt. Auch ist eine kleine Speicherkarte anschließbar, und Ethernet gibt es auch dafür. Vielleicht läßt sich dort gleichzeitig auch ein kleiner Webserver etablieren, der mir die Daten, nach definierter Anforderung über Parameter, herausgeben kann, die mein Browser dann mittels Javascript als Grafik ausgibt.
Die Daten wären dann auf der Speicherkarte gesichert.

Mal sehn was mir und oder Euch dazu noch einfällt.

Gruß Joe

JoeDorm:
Könnte mir vorstellen, das man extern 24V mit 20mA anlegen müßte, und der Impuls zieht die Spannung runter, sodaß der Spannungsabfall den Impuls für 2Watt Verbrauch darstellt. Dann müßte die benötigte Spannung aufgelegt werden.

Im Prinzip ja, aber du legst da die 5V des Arduino an. Der Sinn ist ja auf die niedrigere Spannung zu kommen und das ganze galvanisch getrennt zu haben.

Andererseits ist beim Impuls die angelegt Spannung nicht unten, sondern wärend der Wartezeit, und die Wartezeit verbraucht also permanent eine kleine Leistung?

Den Strom kann man viel kleiner machen. Die 20mA sind eher der Wert für die LED des Optokopplers und der ist in diesem Fall wohl fest. Am Ausgang gehen locker 10kOhm als Kollektorwiderstand

Die Idee mit dem Arduino Mega2560 R3 scheint mir nicht schlecht zu sein, da es auch dafür einen kleinen Touchscreen gibt. Auch ist eine kleine Speicherkarte anschließbar, und Ethernet gibt es auch dafür.

Beim Touchscreen dann aber etwas nehmen dass z.B. über SPI angesteuert wird und damit so wenig Leitungen wie möglich belegt.

Ethernet Shields gibt es schon mit SD Slots. Ist also nicht unbedingt getrennt nötig. Kommt drauf an was man da nimmt.

Hallo Joe,
Hast du das Projekt umgesetzt? Ich möchte das auch so umsetzen. Ich würde mich freuen wenn du Tips für mich hast wie es geht .....