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.
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
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.
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.
Ich hätte da eher an einen SAMD21 ("Arduino Zero") gedacht, der sollte ein paar ksps schon schaffen und hat einen brauchbaren 12Bit ADC.
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.
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
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
Ergebnisse sollten eher nicht verloren gehen, verzögert ankommen ist aber kein Problem.
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.
Was ist das ûberhaupt für ein hochdynamisches System, welches 100 ksps erfordert?
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.
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 ...
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?
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.
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
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?
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 ...
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?
Es geht um Infra- bis Ultraschall für ein ....spezielles... Projekt
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
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.
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?
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/
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
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.
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!
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...
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.
Wolfgang schrieb: > Für 100kSa/s braucht man keine µs. Der zeitliche Abstand zweier Samples beträgt 10 µs.
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.
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.
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.
Soll das etwa der verzweifelte Versuch einer Ortung werden?
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.
Deswegen frage ich ja... Wozu braucht man eine Schallmessung mit engem Zeitbezug?
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.
Luky S. schrieb: > Aber das grundsätzliche Problem bleibt: Wie streamt man Messdaten vom > Arduino auf den PC? Via USB Serial
>> 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!
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.
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
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
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.
@Lutz: Ja. Aber das war ja nicht wirklich die Frage, es ging darum, WIE man 4 verteilte Signale syncronisiert messen kann.
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ß
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.
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
C hater braucht dringend etwas platonische Liebe
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.
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 :)
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?
Luky S. schrieb: > SAMD21 ("Arduino Zero") Kannte ich noch nicht. Besser die genaue Bezeichnung ausschreiben, das vermeidet Mißverständnisse. Oder einfach verlinken.
@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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.