Forum: Mikrocontroller und Digitale Elektronik Mehrere Messdaten von Arduinos über Ethernet auf den PC bringen


von Luky S. (luky)


Lesenswert?

Für ein Bastelprojekt eines Kollegen brauche ich möglichst einfach 4 
Arduinos, die mit ca. 100ksps eine Spannung messen und diese dann über 
Ethernet (W5500 sollte da ausreichen) an einen PC schicken.
Dazu sind aber noch ein paar Fragen aufgetaucht: Was ist die übliche 
Methode, um die Daten sicher vom Arduino an den PC zu senden und dort 
auch möglichst einfach zu verarbeiten? Der Kollege möchte in C# 
programmieren ( VisualStudio).
Und wie schafft man es am einfachsten, die Daten der 4 Arduinos im 
Netzwerk zu synchronisieren? Ich habe da jetzt nicht übertriebene 
Anforderungen, brauche aber schon einen Zeitstempel mit ca. 0.1s 
Genauigkeit bei den Messwerten.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Luky S. schrieb:
> die mit ca. 100ksps eine Spannung messen
Auf wieviele Bits genau?

> einen Zeitstempel mit ca. 0.1s Genauigkeit
Fehlt da was? Denn in dieser Zeit kannst du entweder 9999 Messwerte 
verwerfen oder du hast 10000 Messwerte mit dem selben Zeitstempel...

BTW: Falls man so eine Aufgabe mit einem Arduino nicht oder nur "mit 
eingesprungenem Handstand mit Klatschen" hinbekommt, dann gibt es auch 
recht potente µC bei anderen Herstellern.

: Bearbeitet durch Moderator
von Wolfgang (Gast)


Lesenswert?

Lothar M. schrieb:
> BTW: Falls man so eine Aufgabe mit einem Arduino nicht oder nur "mit
> eingesprungenem Handstand mit Klatschen" hinbekommt, dann gibt es auch
> recht potente µC bei anderen Herstellern.

So schwachbrüstig ist ein SAM3X8E nun auch nicht.

von Moskito (Gast)


Lesenswert?

Ich würde das mit MQTT machen.
Stell einen Server ins Netzwerk, der als MQTT-Broker arbeitet.

Der PC schickt über den Broker eine Nachricht samt Counter an die 
Arduinos, dass sie eine Messung machen sollen bzw. Messergebnisse 
übertragen sollen.
Die Arduinos fragen per NTP die Zeit vom Server ab und schicken eine 
Nachricht mit Zeit, Counter und Messwert an den Broker. Der PC holt sich 
die Nachricht vom Broker und verarbeitet den String.
Über den Counter erkennt das Programm, welche Messergebnisse 
zusammengehören und über den Zeitstempel erkennt er, von wann die 
Ergebnisse sind.

MQTT ist sehr verbreitet und relativ einfach. Und im Gegensatz zu UDP 
kannst du sicherstellen, dass eine Nachricht genau einmal (nicht mehr 
und nicht weniger) übertragen wird.

von Luky S. (luky)


Lesenswert?

Ich hätte da eher an einen SAMD21 ("Arduino Zero") gedacht, der sollte 
ein paar ksps schon schaffen und hat einen brauchbaren 12Bit ADC.

von Wendels B. (wendelsberg)


Lesenswert?

Luky S. schrieb:
> ca. 100ksps eine Spannung messen

Luky S. schrieb:
> Zeitstempel mit ca. 0.1s
> Genauigkeit bei den Messwerten

Dann liegt eine Messreihe u.U. um 1000 Werte versetzt zur anderen.

von Cyblord -. (cyblord)


Lesenswert?

Luky S. schrieb:
> Was ist die übliche
> Methode, um die Daten sicher vom Arduino an den PC zu senden und dort
> auch möglichst einfach zu verarbeiten? Der Kollege möchte in C#
> programmieren ( VisualStudio).
> Und wie schafft man es am einfachsten, die Daten der 4 Arduinos im
> Netzwerk zu synchronisieren? Ich habe da jetzt nicht übertriebene
> Anforderungen, brauche aber schon einen Zeitstempel mit ca. 0.1s
> Genauigkeit bei den Messwerten.

Die Antwort auf diese Fragen ist: SKILL.

Man muss es halt können. Wissen, Erfahrung usw. Du weißt doch was Können 
ist oder? Eventuell lebst du in einer Welt in der jeder alles kann oder 
alle nichts? Man weiß es nicht.
Mit 2 Tipps aus dem Forum und einem youtube Video gehts eben nicht.

: Bearbeitet durch User
von Sebastian (Gast)


Lesenswert?

Wenn von Zeit zu Zeit Ergebnisse auch mal verloren gehen dürfen würde 
ich UDP Unicast verwenden. Der PC würde den Messknoten regelmässig über 
UDP die aktuelle Millisekunde mitteilen, die Messknoten würden die 
Messergebnisse sammeln und mit geeigneter Häufigkeit über UDP versenden.

LG, Sebastian

von Luky S. (luky)


Lesenswert?

Ergebnisse sollten eher nicht verloren gehen, verzögert ankommen ist 
aber kein Problem.

von Stefan F. (Gast)


Lesenswert?

Moskito schrieb:
> Ich würde das mit MQTT machen.

mit 400.000 Events pro Sekunde - really?

von Stefan F. (Gast)


Lesenswert?

Luky S. schrieb:
> Und wie schafft man es am einfachsten, die Daten der 4 Arduinos im
> Netzwerk zu synchronisieren? Ich habe da jetzt nicht übertriebene
> Anforderungen, brauche aber schon einen Zeitstempel mit ca. 0.1s
> Genauigkeit bei den Messwerten.

Luky S. schrieb:
> Ergebnisse sollten eher nicht verloren gehen, verzögert ankommen ist
> aber kein Problem.

Zum Synchronisieren von Uhren wurde das NTP Protokoll erdacht.

Luky S. schrieb:
> Was ist die übliche Methode, um die Daten sicher vom Arduino
> an den PC zu senden und dort auch möglichst einfach zu verarbeiten?
> Der Kollege möchte in C# programmieren ( VisualStudio).

Im Prinzip hast du dich ja schon auf Ethernet festgelegt, was ich nicht 
verkehrt finde. Kläre aber die Performance der Netzwerkschnittstelle. Im 
Mikrocontroller sind nämlich effektive Bitraten weit unter 10 Mbit 
üblich. Wenn dann noch Übertragungsfehler mit notwendigen Wiederholungen 
auftreten kann es bei deinem Datenvolumen rasch eng werden.

Vielleicht ersparst du dir eine Menge Stress, indem du einen kleinen PC 
basierten Computer verwendest und den ADC über SPI an diesen anbindest. 
Oder du verwendest ein fix und fertiges Messgerät für PC (USB Logic 
Analyzer, oder so). Die gibt es ja auch analog.

von Lutz (Gast)


Lesenswert?

Was ist das ûberhaupt für ein hochdynamisches System, welches 100 ksps 
erfordert?

von PittyJ (Gast)


Lesenswert?

So ein Arduino Zero hat 6 Analog Sample Kanäle. OK, die sind 
gemultiplext. Aber würde das nicht trotzdem reichen? Macht auch die 
Sache mit Synchronisation einfacher.
Mit einigen meiner Arduinos kommuniziere ich über USB. Vielleicht reicht 
das ja auch, wenn das Kabel nicht zu lang sein muss.

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Je ein Messwert pro Ethenet-Frame ist m.E. reichlich ineffektiv, und das 
auch noch 100.000 mal pro Sekunde. Wie groß ist ein Frame mindesten? So 
um die 63 Byte.

100.000 x 63 x 8 = 50400000, also gut 50 MBit

Meines Wissens können die Ethernet-Shields für Arduino max. 10 MBit.

Eine Möglichkeit wäre es, wenn der Arduino jeweils eine bestimmte Anzahl 
an Messwerten sammel und diese gemeinsam in einen Frame packt. 
Spekulieren wir mal mit 2 Byte je Messung. Das sind bei ca. 1500 Byte 
Payload als schon mal 700 Messungen in einem Frame ... DAS hört sich 
schon wesentlich entspannter an ...

von Rolf M. (rmagnus)


Lesenswert?

Stefan ⛄ F. schrieb:
> Moskito schrieb:
>> Ich würde das mit MQTT machen.
>
> mit 400.000 Events pro Sekunde - really?

Warum willst du denn jeden Wert einzeln senden?

von Stefan F. (Gast)


Lesenswert?

Rolf M. schrieb:
> Warum willst du denn jeden Wert einzeln senden?

Will ich nicht. Auf den Knackpunkt haben auch andere hingewiesen. Lass 
uns mal abwarten, was der TO dazu sagt.

von Luky S. (luky)


Lesenswert?

Wie gesagt: Verzögerung ist egal, es sollten nur alle Daten ankommen, 
vollständig sein, zwischen den 4 im Haus verteilten Geräten so halbwegs 
synchron und zuordenbar sein, damit die Auswirkungen des zu erfassenden 
Events zuordenbar sind

von Hans (Gast)


Lesenswert?

Luky S. schrieb:
> damit die Auswirkungen des zu erfassenden
> Events zuordenbar sind

Jetzt werde doch mal konkret: Was für ein "Event" soll das im Haus sein, 
dass mit so hoher, zeitlicher Auflösung erfasst werden soll?

von OMG (Gast)


Lesenswert?

Hans schrieb:
> Jetzt werde doch mal konkret:

Luky S. schrieb:
> Für ein Bastelprojekt eines Kollegen

Das ist nicht Wischi-Waschi, das ist doch voll konkret, oder?

Mein Vorhersage lautet: 4 mal 1 Sample alle 0.1 Sekunden genügen.
Wenn nicht noch weniger ...

von DerEinzigeBernd (Gast)


Lesenswert?

Luky S. schrieb:
> zwischen den 4 im Haus verteilten Geräten so halbwegs
> synchron und zuordenbar sein

Und was willst Du "im Haus" mit dieser Samplerate erfassen? Die 
Raumtemperatur?

von Luky S. (luky)


Lesenswert?

Es geht um Infra- bis Ultraschall für ein ....spezielles... Projekt

von Dergute W. (derguteweka)


Lesenswert?

Luky S. schrieb:
> Es geht um Infra- bis Ultraschall für ein ....spezielles...
> Projekt

M+P beim Pimpern belauschen? scnr.

Es gibt einigermassen unexotische Moeglichkeiten "audio"-Signale ueber 
Ethernet z.b. via RTP/UDP zu streamen. Da sind dann z.b. Timestamps mit 
dabei, es muessen also die verschiedenen Sender z.b. per NTP 
synchronisiert sein. Wenn dein Ethernet daheim so kacke ist, dass 
Paketverluste auftreten und du nicht in der Lage bist das zu fixen, 
gibts zusaetzlich zur RTP Uebertragung auch noch FEC (Forward Error 
Correction)...
Aber das scheint mir fuer Arduinos etwas - hrm - ambitioniert...

Gruss
WK

von STK500-Besitzer (Gast)


Lesenswert?

Dergute W. schrieb:
> M+P beim Pimpern belauschen? scnr.

oder die Nachbarn.

Dergute W. schrieb:
> Aber das scheint mir fuer Arduinos etwas - hrm - ambitioniert...

gibt ja auch arm-Controller auf Arduinoboards...

Oder man verwendet Salamischeiben für die Übertragung.

von Luky S. (luky)


Lesenswert?

Der DI (FH, eh klar) will unter die Geisterjäger gehen. In der Pandemie 
ist ihm eine Sicherung durchgebrannt....
Aber das grundsätzliche Problem bleibt: Wie streamt man Messdaten vom 
Arduino auf den PC?

von Stefan F. (Gast)


Lesenswert?

Luky S. schrieb:
> Aber das grundsätzliche Problem bleibt: Wie streamt man Messdaten vom
> Arduino auf den PC?

Indem man einen TCP Kanal öffnet und dann die Daten darüber sendet. Dein 
Arduino wäre dabei der Client, und der PC der Server (oder anders 
herum).

https://docs.arduino.cc/hardware/ethernet-shield-rev2#tutorials
https://www.arduino.cc/reference/en/libraries/ethernet/

von Dergute W. (derguteweka)


Lesenswert?

Moin,

STK500-Besitzer schrieb:
> Oder man verwendet Salamischeiben für die Übertragung.

Das koennte gehen, wenn man z.b. die Fettkloetzchen in der Salami zu 
QR-Codes zusammensetzt.

Gruss
WK

von PittyJ (Gast)


Lesenswert?

Wir machen gerade so etwas ähnliches, mit Messwertaufnahme an mehreren 
verteilten Orten.

Allerdings wird man ohne synchronisierte Echtzeituhr die Daten nicht 
passend zuordnen können. Die Pakete trudeln über UDP irgendwann ein, 
aber die Samples passen nicht in den 100KHz zusammen.
Wir benutzen Echtzeituhren und Timestamps, und die Rechner sind über NTP 
auf Mikrosekunden genau synchronisiert. Da geht aber wieder nicht mit 
einem Arduino, da braucht man schon mehr Leistung und ein OS darunter 
für NTP.

von Anti Glasses Gang (Gast)


Lesenswert?

Luky S. schrieb:
> Es geht um Infra- bis Ultraschall für ein ....spezielles... Projekt

Willst du die Fette aus dem vierten Stock tracken?

Ja?

Wieso suchst du nicht einfach fertige Projekte? Wieso muss das Rad 
zwingend neu erfunden werden?

https://www.seismocloud.com/the-seismometer/


Einfach "seismometer open source" in die Suche werfen und staunen!

von Hans (Gast)


Lesenswert?

Dergute W. schrieb:
> Das koennte gehen, wenn man z.b. die Fettkloetzchen in der Salami zu
> QR-Codes zusammensetzt.

Ja, die Idee ist nicht schlecht, aber: Wäre das nicht invertiert?

Also, normalerweise ist QR-Code doch dunkle (schwarz) Blöcke auf hellem 
(weiß) Untergrund.

Also müsste man doch eher eine Fett-Wurst nehmen in der einige 
"Fleisch-Klötzchen" zu einem QR-Code zusammengesetzt sind, oder?

Habe ich aber beim Metzger um die Ecke noch nie gesehen und stelle ich 
mir kulinarisch auch nicht so dolle vor...

von Wolfgang (Gast)


Lesenswert?

PittyJ schrieb:
> Wir benutzen Echtzeituhren und Timestamps, und die Rechner sind über NTP
> auf Mikrosekunden genau synchronisiert. Da geht aber wieder nicht mit
> einem Arduino, da braucht man schon mehr Leistung und ein OS darunter
> für NTP.

Für 100kSa/s braucht man keine µs.
Mit GPS bekommt man eine vernünftige Zeitreferenz ganz ohne OS und NTP.

von DerEinzigeBernd (Gast)


Lesenswert?

Wolfgang schrieb:
> Für 100kSa/s braucht man keine µs.

Der zeitliche Abstand zweier Samples beträgt 10 µs.

von Rolf M. (rmagnus)


Lesenswert?

Wolfgang schrieb:
> Mit GPS bekommt man eine vernünftige Zeitreferenz ganz ohne OS und NTP.

Dafür braucht dann jedes der Geräte einen GPS-Receiver mit PPS-Ausgang, 
und es muss Empfang haben.

von Anti Glasses Gang (Gast)


Lesenswert?

Wolfgang schrieb:
> Mit GPS bekommt man eine vernünftige Zeitreferenz ganz ohne OS und NTP.

Wolfgang betreibt GPS Empfänger preiswert in Gebäuden.

Seid so wie Wolfgang!

Spart 10ct am µC und packt ein 50€ GPS daneben damit ihr ja nicht 10ct 
mehr für den µC ausgeben müsst!

Sodala ich geh jetzt einmal NFT kaufen, tschüsss.

von PittyJ (Gast)


Lesenswert?

Wolfgang schrieb:
> PittyJ schrieb:
>> Wir benutzen Echtzeituhren und Timestamps, und die Rechner sind über NTP
>> auf Mikrosekunden genau synchronisiert. Da geht aber wieder nicht mit
>> einem Arduino, da braucht man schon mehr Leistung und ein OS darunter
>> für NTP.
>
> Für 100kSa/s braucht man keine µs.
> Mit GPS bekommt man eine vernünftige Zeitreferenz ganz ohne OS und NTP.

Ja. An jedem der Arduinos wird noch ein GPS-Receiver angeschlossen. Plus 
eine extra Antenne, weil das normalerweise im Haus nicht funktionert...
So etwas habe ich alles schon mal gemacht, für ein verteiltes 
Seismik-Projekt.

Aber nicht mit einem 30 Euro Arduino. Da müßte man zumindest auf einen 
Raspi gehen. Der kann NTP. Dann reicht eine Zeitrefenz im Netz.

von Lutz (Gast)


Lesenswert?

Soll das etwa der verzweifelte Versuch einer Ortung werden?

von Wolfgang (Gast)


Lesenswert?

Lutz schrieb:
> Soll das etwa der verzweifelte Versuch einer Ortung werden?

Bei einer Genauigkeit des Zeitstempels von 0.1s?

Luky S. schrieb:
> Ich ... brauche aber schon einen Zeitstempel mit ca. 0.1s Genauigkeit
> bei den Messwerten.

von Lutz (Gast)


Lesenswert?

Deswegen frage ich ja...
Wozu braucht man eine Schallmessung mit engem Zeitbezug?

von 123 (Gast)


Lesenswert?

Frank E. schrieb:
> Meines Wissens können die Ethernet-Shields für Arduino max. 10 MBit.

Zeit für einen STM32H7, der kann 100MBit/s.

von Bränko (Gast)


Lesenswert?

Luky S. schrieb:
> Aber das grundsätzliche Problem bleibt: Wie streamt man Messdaten vom
> Arduino auf den PC?

Via USB Serial

von Stefan F. (Gast)


Lesenswert?

>> Aber das grundsätzliche Problem bleibt: Wie streamt man Messdaten vom
>> Arduino auf den PC?

> Via USB Serial

Ehrlich gesagt verstehe ich die Frage nicht. Ist das nicht 
offensichtlich? Das ganze Arduino System baut darauf auf!

von c-hater (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:

> Ehrlich gesagt verstehe ich die Frage nicht. Ist das nicht
> offensichtlich? Das ganze Arduino System baut darauf auf!

Nein. Das eigentliche Arduino-System baut natürlich vor allem auf die 
Dummheit der Benutzer auf.

Das Konzept ist einfach: Stelle alles es so dar, als könnte jeder Idiot 
alles damit tun. Verkaufe allen diesen Idioten Boards und Shields.

Und, nunja, vieles wird tatsächlich funktionieren. Zumindest auf 
bestimmten Boards und soweit sich nicht allzu viele Shields ins Gehege 
kommen...

Das IST die objektive Realität.

von Stefan F. (Gast)


Lesenswert?

c-hater schrieb:
> Dummheit der Benutzer

Oh Mann, du kannst es nicht lassen!

von Jobst M. (jobstens-de)


Lesenswert?

Per S/P-DIF an 4 Eingänge (Soundkarten) im PC.
Mit Audacity alle Kanäle gleichzeitig in eine Datei aufnehmen.
S/P-DIF kann mit Anpassung auch problemlos über RJ45/Twisted pair 
übertragen werden.

Gruß
Jobst

von Jobst M. (jobstens-de)


Lesenswert?

Stefan ⛄ F. schrieb:
> Oh Mann, du kannst es nicht lassen!

Tatsächlich ist es in diesem Fall aber wirklich so.
Diese Dauinos wurden für Künstler gemacht, die sich mit Programmierung 
nicht auskennen, aber ihre Kunstwerke zum blinken bringen wollen.

Gruß
Jobst

von Herr Bert (Gast)


Lesenswert?

Lutz schrieb:
> Wozu braucht man eine Schallmessung mit engem Zeitbezug?

Vermutlich um rauszufinden, in welchen Räumen wirklich das gleiche 
Signal zu hören ist.
Das ist aber ebenso streng geheim wie der Rest.

von Luky S. (luky)


Lesenswert?

@Lutz: Ja.
Aber das war ja nicht wirklich die Frage, es ging darum, WIE man 4 
verteilte Signale syncronisiert messen kann.

von Michael M. (Gast)


Lesenswert?

Luky S. schrieb:
> Aber das war ja nicht wirklich die Frage, es ging darum, WIE man 4
> verteilte Signale syncronisiert messen kann.

gib den Affen Zucker sonst gibs nur Schlagworte ;)

Gruß

von Luky S. (luky)


Lesenswert?

4 per Ethernet angeschlossene, mit 100ksps (12Bit) aufnehmende 
Messysteme auf < 0.1s genau synchronisiert müssen die Messdaten 
zuverlässig an einen PC im Netzwerk liefern, wo sie ausgewertet werden.

von Sebastian (Gast)


Lesenswert?

Luky S. schrieb:
> 4 per Ethernet angeschlossene, mit 100ksps (12Bit) aufnehmende
> Messysteme auf < 0.1s genau synchronisiert müssen die Messdaten
> zuverlässig an einen PC im Netzwerk liefern, wo sie ausgewertet werden.

UDP, TCP und MQTT sind vorgeschlagen worden. Wie weit sind denn deine 
Implementierungen schon gediehen?

LG, Sebastian

von Keller (Gast)


Lesenswert?

C hater braucht dringend etwas platonische Liebe

von Manfred (Gast)


Lesenswert?

Luky S. schrieb:
> Aber das war ja nicht wirklich die Frage, es ging darum, WIE man 4
> verteilte Signale syncronisiert messen kann.

Mit der geforderten Abtastrate, per Ethernet und noch Arduino: Garnicht.

von Rolf M. (rmagnus)


Lesenswert?

Keller schrieb:
> C hater braucht dringend etwas platonische Liebe

Wenn man mal das ganze Gebashe weglässt und nur den eigentlichen 
Informationsgehalt übrig lässt, kommt folgendes raus:

c-hater schrieb:
> Und, nunja, vieles wird tatsächlich funktionieren.

> Das IST die objektive Realität.

Er ist also heimlicher Arduino-Fan :)

von Peter D. (peda)


Lesenswert?

Luky S. schrieb:
> brauche ich möglichst einfach 4
> Arduinos, die mit ca. 100ksps eine Spannung messen

Das Datenblatt des ATmega328 sagt aber eindeutig:
Up to 15 kSPS at Maximum Resolution.
Was ist daran nicht zu verstehen?

von Luky S. (luky)


Lesenswert?

SAMD21 ("Arduino Zero")

von Peter D. (peda)


Lesenswert?

Luky S. schrieb:
> SAMD21 ("Arduino Zero")

Kannte ich noch nicht.
Besser die genaue Bezeichnung ausschreiben, das vermeidet 
Mißverständnisse.
Oder einfach verlinken.

von Luky S. (luky)


Lesenswert?

@Peter D. Wenn man einen Thread nicht vollständig durchlesen und 
verstehen kann, sollte man nichts schreiben, vor allem nicht so 
herablassende Bemerkungen!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.