Mehrere Messdaten von Arduinos über Ethernet auf den PC bringen

#7085985
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.
Moderator (Firma: Titel) Persönliche Seite #7085992
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.
Gast #7086006
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.
#7086051
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.
Gast #7086691
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.
(Firma: Q3) #7086708
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 ...
#7086835
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
Gast #7086862
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/
Gast #7086880
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.
Gast #7086897
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!
Gast #7086903
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...
Gast #7086907
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.
Gast #7086949
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.
Gast #7089240
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren