Forum: Mikrocontroller und Digitale Elektronik Drahtlose Übertragung von Messwerten mehrerer "Slaves"


von Benny H. (bennyhankister)


Lesenswert?

Guten Tag zusammen,

es gibt sehr viele Tutorials und Bücher über "eine" drahtlose Verbindung 
zwischen zwei Schaltungen, allerdings suche ich eine Lösung für folgende 
Aufgabenstellung:

Es müssen mehrere Sensoren (ca. 5) kontinuierlich und drahtlos durch 
einen "Master" (vllt Arduino) abgefragt werden. Pro Sensor werden ca. 32 
Bit pro Intervall abgefragt. Es sollen alle Sensoren je mindestens 25 
mal pro Sekunde abgefragt werden, also ca. 125 Abfragen pro Sekunde im 
Falle von 5 Sensoren. Multipliziert mit 32 Bit ergibt das eine Rate von 
500 Bytes/s.

Erste Frage: Macht es Sinn die Sensoren kontinuierlich senden zu lassen 
und nur reihum abzufragen (Senden auf unterschiedlichen Frequenzen? 
Senden auf der gleichen Frequenz abwechselnd zu bestimmten Zeitslots? 
(Synchronisierung erforderlich!)) oder ist es sinnvoller die Daten 
explizit anzufordern, per ISR evtl., sodass nur ein Sensor pro Abruf 
aktiv ist?

Ohne nun genau um eine Lösung zu bitten, möchte ich hier gerne fragen in 
welche Richtung meine Recherche gehen soll: Bluetooth? Zigbee? WLAN? 
NRF24L01?

Für erste Denkanstöße und Wegweiser wäre ich sehr dankbar!

Gruß!
Benny

: Bearbeitet durch User
von Wolfgang (Gast)


Lesenswert?

Benny H. schrieb:
> Es müssen mehrere Sensoren (ca. 5) kontinuierlich und drahtlos durch
> einen "Master" (vllt Arduino) abgefragt werden.

Muss das sein? Das erhöht den Datenverkehr deutlich.

Was soll passieren wenn Daten mal nicht ankommen? Muss dann wiederholt 
werden?

Können sich die Slaves gegenseitig sehe?

Dann wäre vielleicht CSMA/CA eine vernünftige Strategie.

von Klugscheisser (Gast)


Lesenswert?

Benny H. schrieb:
> Es sollen alle Sensoren je mindestens 25
> mal pro Sekunde abgefragt werden, also ca. 125 Abfragen pro Sekunde im
> Falle von 5 Sensoren. Multipliziert mit 32 Bit ergibt das eine Rate von
> 500 Bytes/s.

Das ist zu einfach gedacht. Du hast immer Protokolloverhead, denn eine 
Übertragung (über Funk) besteht nie allein aus den Nutzdaten.

Benny H. schrieb:
> Ohne nun genau um eine Lösung zu bitten, möchte ich hier gerne fragen in
> welche Richtung meine Recherche gehen soll: Bluetooth? Zigbee? WLAN?
> NRF24L01?

Umgebungsbedingungen? Entfernungen?

von Benny H. (bennyhankister)


Lesenswert?

Wolfgang schrieb:
> Benny H. schrieb:
>> Es müssen mehrere Sensoren (ca. 5) kontinuierlich und drahtlos durch
>> einen "Master" (vllt Arduino) abgefragt werden.
>
> Muss das sein? Das erhöht den Datenverkehr deutlich.

Ja schon, das muss sein. Die Sache ist recht zeitkritisch.

>
> Was soll passieren wenn Daten mal nicht ankommen? Muss dann wiederholt
> werden?

Nein, das ist nicht schlimm, solange kein Ausfall über mehrere Zyklen 
geschieht. Eine unvollständige Transmission wird einfach verworfen 
werden können.

>
> Können sich die Slaves gegenseitig sehe?

Das ist nicht vorgesehen. Wenn das aber bzgl. einer Synchronisation 
notwendig ist, kann man drüber nachdenken. :)

>
> Dann wäre vielleicht CSMA/CA eine vernünftige Strategie.

Danke! Ich seh's mir an!

von Benny H. (bennyhankister)


Lesenswert?

Klugscheisser schrieb:
> Benny H. schrieb:
>> Es sollen alle Sensoren je mindestens 25
>> mal pro Sekunde abgefragt werden, also ca. 125 Abfragen pro Sekunde im
>> Falle von 5 Sensoren. Multipliziert mit 32 Bit ergibt das eine Rate von
>> 500 Bytes/s.
>
> Das ist zu einfach gedacht. Du hast immer Protokolloverhead, denn eine
> Übertragung (über Funk) besteht nie allein aus den Nutzdaten.

Stimmt, daran hatte ich naiverweise nicht gedacht. Allerdings denke ich, 
dass selbst eine doppelt so hohe Datenrate für ein geeignetes System 
keine Schwierigkeit darstellen wird. Soweit zu einer weiteren naiven 
Annahme. :)

>
> Benny H. schrieb:
>> Ohne nun genau um eine Lösung zu bitten, möchte ich hier gerne fragen in
>> welche Richtung meine Recherche gehen soll: Bluetooth? Zigbee? WLAN?
>> NRF24L01?
>
> Umgebungsbedingungen? Entfernungen?

Im Freien, aber nicht zwangsläufig "LOS". Entfernung max 10 m.

Danke schonmal und Gruß!

von Wolfgang (Gast)


Lesenswert?

Benny H. schrieb:
> Ja schon, das muss sein. Die Sache ist recht zeitkritisch.

Warum kann nicht jeder Slave selbständig sein Ding tun und unabhängig 
von "der Sache" die Daten übertragen.

Vielleicht erzählst du einfach mal, worum es geht.

Benny H. schrieb:
>> Können sich die Slaves gegenseitig sehe?
>
> Das ist nicht vorgesehen. Wenn das aber bzgl. einer Synchronisation
> notwendig ist, kann man drüber nachdenken. :)

Falls die Slave gegenseitig in Funkreichweite sind und den selben 
Funkkanal benutzen, können sie sich sehen. Dann muss man da nicht 
vorsehen.

Und wenn die Slaves nicht den selben Funkkanal benutzen, bauen sie 
unabhängig ihren Punkt-zu-Punkt Verbindung zum Mast auf. Dann ist das 
völlig egal, ob das 1 oder 5 Slaves tun.

von Benny H. (bennyhankister)


Lesenswert?

Wolfgang schrieb:

> Warum kann nicht jeder Slave selbständig sein Ding tun und unabhängig
> von "der Sache" die Daten übertragen.

Das verstehe ich nicht ganz. Inwiefern "sein Ding tun"? Die Sensoren 
sollen Werte erfassen und mittels eines kleine Controllers an den Master 
per Funk übertragen. Die Auswertung der Daten soll dann der Master 
übernehmen. Wahrscheinlich wird das ein Pad sein, also eine App, genauer 
gesagt.

>
> Vielleicht erzählst du einfach mal, worum es geht.

Ich bitte um Verständnis, wenn ich da nicht 100%ig ausführlich berichten 
kann. Aber ich werde gerne etwas genauer. :) Es sollen Bewegungsdaten 
(Accelerator- & Gyroscope-Daten) erhoben werden von ca. 5 Teilnehmern, 
die sich innerhalb eines Radius von max. 5 m bewegen. Diese 
Bewegungsdaten sollen zentral ausgewertet werden und anschließend 
graphisch repräsentiert werden. (Letzteres ist aber keine Sache mehr für 
dieses Forum.) Zeitkritisch ist das deshalb, weil die Bewegungen 
ziemlich genau und quasi-parallel erfasst und ausgewertet werden sollen. 
Man stelle sich da zB Synchronschwimmen vor.

> Falls die Slave gegenseitig in Funkreichweite sind und den selben
> Funkkanal benutzen, können sie sich sehen. Dann muss man da nicht
> vorsehen.

Das ist der Fall. Sie sind definitiv in Funkreichweite.

>
> Und wenn die Slaves nicht den selben Funkkanal benutzen, bauen sie
> unabhängig ihren Punkt-zu-Punkt Verbindung zum Mast auf. Dann ist das
> völlig egal, ob das 1 oder 5 Slaves tun.

Ist sicher auch eine Alternative. Die bessere? Das muss ich noch 
herausfinden...

von Wolfgang (Gast)


Lesenswert?

Benny H. schrieb:
> Inwiefern "sein Ding tun"?
Damit meinte ich "messen und übertragen alle 40ms", unabhängig von einer 
Aufforderung durch den Master

> Zeitkritisch ist das deshalb, weil die Bewegungen
> ziemlich genau und quasi-parallel erfasst und ausgewertet werden sollen.

Was heißt "quasi", ausgedrückt in Millisekunden? Wie genau gleichzeitig 
muss das sein?

Wenn es auf sauber synchronisierte Abtastung ankommt, könnte der Master 
ein Triggersignal senden, dass alle Slaves empfangen. Anschließend 
könnten die Slaves ihre Daten per CSMA übertragen, ohne dass sich der 
Master da weiter einmischen muss.

von Benny H. (bennyhankister)


Lesenswert?

Wolfgang schrieb:

>> Zeitkritisch ist das deshalb, weil die Bewegungen
>> ziemlich genau und quasi-parallel erfasst und ausgewertet werden sollen.
>
> Was heißt "quasi", ausgedrückt in Millisekunden? Wie genau gleichzeitig
> muss das sein?
>

Die Daten der 5 Sensoren sollen "grafisch" gleichzeitig beim Master 
angezeigt werden, also in einer App. Für eine flüssige Darstellung nahm 
ich zunächst 25 Messungen pro Sekunde pro Slave an. Wir kommen damit auf 
125 Messungen pro Sekunde. Damit steht jedem Slave ein Slot von maximal 
8 ms zur Verfügung um ca. 32 Bit (netto, also plus header) zu 
übertragen.

> Wenn es auf sauber synchronisierte Abtastung ankommt, könnte der Master
> ein Triggersignal senden, dass alle Slaves empfangen. Anschließend
> könnten die Slaves ihre Daten per CSMA übertragen, ohne dass sich der
> Master da weiter einmischen muss.

Interessant. Allerdings müsste doch dann jeder Slave "warten bis er dran 
ist", richtig? Wenn alle direkt nach dem Trigger senden, gibt's 
Kollisionen. Lieg ich richtig? Man müsste also eine individuelle 
Wartezeit festlegen, sodass die Messungen nacheinander gesendet werden. 
Also Trigger -> Sensor1.send(), Sensor2.wait(10) -> Sensor2.send(), 
Sensor3.wait(20) -> Sensor3.send() usw... Dafür müssten aber allesamt 
den Trigger wirklich zeitgleich empfangen bzw. darauf reagieren...

von Georg (Gast)


Lesenswert?

Benny H. schrieb:
> Für eine flüssige Darstellung nahm
> ich zunächst 25 Messungen pro Sekunde pro Slave an.

Deine Augen und dein Gehirn sind also in der Lage, 25 Messwerte pro 
Sekunde abzulesen und zu erfassen? Gratuliere zu deiner Mutation zum 
Übermenschen. Ich schaffe eher so 5.

Georg

von Benny H. (bennyhankister)


Lesenswert?

Georg schrieb:
> Benny H. schrieb:
>> Für eine flüssige Darstellung nahm
>> ich zunächst 25 Messungen pro Sekunde pro Slave an.
>
> Deine Augen und dein Gehirn sind also in der Lage, 25 Messwerte pro
> Sekunde abzulesen und zu erfassen? Gratuliere zu deiner Mutation zum
> Übermenschen. Ich schaffe eher so 5.
>
> Georg

Lieber Georg,

für einen evtl. vorhandenen Frust, der Dich dazu ermutig solch 
destruktive und nutzlose Kommentare zu verfassen, kann ich leider 
nichts. Daher mit aller Höflichkeit: lass es einfach. Wenn Du nichts 
konstruktives dazu beitragen kannst, mach was anderes. Schau 
Tierbabyvideos, entspann Dich, geh joggen, o.ä..

Um nun mit gutem Willen die eigentliche Frage, die hinter dem Quatsch 
steckt, den Georg gepostet hat, zu beantworten: Es sollen 25 Messwerte 
pro Sekunde erfasst werden um damit GRAFISCH (wie vorher beschrieben) 
die Auswertung der mittels eines Algorithmus sinnvoll bearbeiteten 
Messwerte anzuzeigen. Somit erhalte ich ein flüssiges Feedback der 
Bewegungen in "Echtzeit". Das soll aber nicht Thema dieses Threads sein.

von dunno.. (Gast)


Lesenswert?

Benny H. schrieb:
> Dafür müssten aber allesamt
> den Trigger wirklich zeitgleich empfangen bzw. darauf reagieren...

Wenn man interruptgesteuert arbeitet und sauber programmiert, ist das 
bis auf einen gewissen jitter bestimmt drin.

Brauchst du ja eh, auch damit deine messwerte zueinander passen, es darf 
nur sehr geringe jitter geben. wann dann der messwert wirklich beim 
master eintrifft ist ja egal, solange du deine zykluszeit nicht 
überschreitest.

ist bei 40ms sicher sportlich.. ich denke da zuerst mal an WLAN, habe 
aber keine erfahrung wie ein jitter da aussehen würde..

muss das ganze in echtzeit passieren, oder reichts wenn du die daten 
halt zugeordnet bekommst?

idee: 40ms trigger über funk, datensammeln erstmal auf den slaves?

von H.Joachim S. (crazyhorse)


Lesenswert?

Würde auch WLAN nehmen.
Im passenden Zeitraster die Daten sammeln und zwischenspeichern und dann 
im Paket verschicken, vielleicht jede Sekunde. Alles kommt an, ohne dich 
drum kümmern zu müssen. Damit wirst du unabhängig von Latenzen im 
Funkkanal.

von Jack (Gast)


Lesenswert?

Eigentlich hatte ich eine längere Antwort vorbereitet. Dann habe ich die 
letzte Antwort des Fragestellers gesehen und meine vorbereitete Antwort 
gelöscht.

Das ganze ist wieder ein Klassiker :( Fragesteller verrät nichts, lässt 
sich Würmer aus der Nase ziehen, aber wird sofort pampig und erhebt 
Ansprüche wenn jemand etwas in seinen Andeutungen übersieht.

von Axel S. (a-za-z0-9)


Lesenswert?

Benny H. schrieb:
> Es sollen Bewegungsdaten
> (Accelerator- & Gyroscope-Daten) erhoben werden von ca. 5 Teilnehmern,
> die sich innerhalb eines Radius von max. 5 m bewegen. Diese
> Bewegungsdaten sollen zentral ausgewertet werden und anschließend
> graphisch repräsentiert werden. (Letzteres ist aber keine Sache mehr für
> dieses Forum.) Zeitkritisch ist das deshalb, weil die Bewegungen
> ziemlich genau und quasi-parallel erfasst und ausgewertet werden sollen.

Es gibt da im wesentlichen zwei Ansätze.

1. Du läßt jeden Slave auf seiner eigenen Frequenz senden und baust 5 
unabhängige Empfänger in den Master. Dann können die Slaves ganz 
unabhängig voneinander senden und der Master muß die Empfänger nur 
schnell genug pollen um keine Daten zu verpassen.

Mit einem einzelnen Empfänger, der reihum auf die Frequenzen der 5 
Slaves getuned wird, wirst du eher nicht glücklich werden, weil du dann 
die Slaves auch wieder mit dem Master synchronisieren müßtest. Dann 
kannst du auch gleich 2. machen:

2. Alle senden auf der gleichen Frequenz, aber nacheinander. Am 
einfachsten ist die Synchronisation, wenn der Server den Slaves der 
Reihe nach Redeerlaubnis gibt. Da es sowieso ein festes Zeitraster geben 
soll, reicht es ja aus wenn der Master reihum jedem Slave einen Zeitslot 
zuteilt.

Variante 2 ist weniger Hardware-Aufwand und skaliert vermutlich besser. 
Kommt darauf an, wieviel Nutzbandbreite man hat und wieviel Slots man 
braucht. Dafür ist die Softwareseite aufwendiger.

von Oliver S. (oliverso)


Lesenswert?

Die ganzen Antworten sind müßig, solange diese Frage

Wolfgang schrieb:
> Was heißt "quasi", ausgedrückt in Millisekunden? Wie genau gleichzeitig
> muss das sein?

nicht beantwortet ist. Und bei der bisherigen Argumentation zum Thema 
Abtasthäufigkeit wirds mit der Antwort wohl auch nichts werden.

Also frag einfach mit einem Funkssystem deines geringsten Mißtrauens die 
Sensoren irgendwie irgendwann ab...

Oliver

von Karsten B. (kastenhq2010)


Lesenswert?

WLAN? Ist das nicht dezent übertrieben? Warum nicht einfach Bluetooth 
und zyklisch die Werte abfragen?

von Axel S. (a-za-z0-9)


Lesenswert?

Oliver S. schrieb:
> Die ganzen Antworten sind müßig, solange diese Frage
>
> Wolfgang schrieb:
>> Was heißt "quasi", ausgedrückt in Millisekunden? Wie genau gleichzeitig
>> muss das sein?
>
> nicht beantwortet ist.

Quatsch. Echte Gleichzeitigkeit ist gar nicht verlangt. Das wurde nur 
von ein paar Leuten in die (sicherlich etwas unglücklich formulierte) 
Frage des TE hineininterpretiert. Er hat einfach 5 asynchrone 
Datenquellen, die ca. 25 mal pro Sekunde Meßwerte produzieren und will 
diese Meßwerte an seinen Master senden. Vermutlich ist es ihm auch egal, 
wenn die Slaves immer 25 Meßwerte zusammen verschicken - so lange die 
zeitliche Auflösung reicht.

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


Lesenswert?

Ich würde es mit folgender Strategie versuchen:

Der Master fordert nicht jeden Slave einzeln zum Senden auf, sondern 
gibt ein für alle geltendes "Startsignal" und die Slaves senden danach 
mit einer individuell eingestellten Verzögerung nacheinander.

Zur Sicherheit sollte jeder Slave zu den Messwerten eine Kennung und 
eine Prüfsumme dazupacken.

von Blackbird (Gast)


Lesenswert?

... und einen Timestamp.

Blackbird

von Blackbird (Gast)


Lesenswert?

... relativ zum Startsignal.

Sorry, vergessen.

Blackbird

von c-hater (Gast)


Lesenswert?

Benny H. schrieb:

> Erste Frage: Macht es Sinn die Sensoren kontinuierlich senden zu lassen

Nein, natürlich nicht. In aller Regel sind ja die in der Fläche 
verteilten Sensoren gerade die Stellen, an denen es besonders 
energieeffizient zugehen sollte, weil sie durch eben diese Verteilung 
halt (oft) nicht netzversorgbar sind.

> Ohne nun genau um eine Lösung zu bitten, möchte ich hier gerne fragen in
> welche Richtung meine Recherche gehen soll: Bluetooth? Zigbee? WLAN?
> NRF24L01?

Die Entscheidung darüber wird i.d.R. durch andere Randbedingungen 
gefällt, nämlich die erforderliche Reichweite, Datenrate und 
Datensicherheit. Je höher die Anforderungen bei diesen drei Aspekten 
sind, desto höher ist tendenziell auch der Energieverbrauch.

von Wolfgang (Gast)


Lesenswert?

Axel S. schrieb:
> Vermutlich ist es ihm auch egal,
> wenn die Slaves immer 25 Meßwerte zusammen verschicken - so lange die
> zeitliche Auflösung reicht.

Sicher?

Benny H. schrieb:
> Die Daten der 5 Sensoren sollen "grafisch" gleichzeitig beim Master
> angezeigt werden, also in einer App. Für eine flüssige Darstellung nahm
> ich zunächst 25 Messungen pro Sekunde pro Slave an.

Wie soll die Darstellung flüssig werden, wenn die Slaves ihre Daten in 
Blöcken verschicken?

von Karsten B. (kastenhq2010)


Lesenswert?

Eine Sekunde verzögert grafisch darstellen?

von Axel S. (a-za-z0-9)


Lesenswert?

Wolfgang schrieb:
> Axel S. schrieb:
>> Vermutlich ist es ihm auch egal,
>> wenn die Slaves immer 25 Meßwerte zusammen verschicken - so lange die
>> zeitliche Auflösung reicht.
>
> Sicher?

Aber sicher sicher.

Wobei das auch nur ein Beispiel war. Je nachdem wieviel Bruttokapazität 
der Kanal hat, wird man sich entscheiden müssen wie kurz man die Slots 
machen kann. Denn zur Vermeidung von Kollisionen muß man immer ein wenig 
Zeit zwischen den Slots lassen. Je weniger Daten pro Slot übertragen 
werden, desto mehr schlagen diese Kunstpausen auf die Netto-Datenrate 
durch. Das Prinzip sieht man überall, wo Daten in Paketen übertragen 
werden. Bei Ethernet macht man Jumbo-Frames um die nutzbare Datenrate zu 
erhöhen. Bei Filesystemen schraubt man die Blocksize hoch. etc.

> Benny H. schrieb:
>> Die Daten der 5 Sensoren sollen "grafisch" gleichzeitig beim Master
>> angezeigt werden, also in einer App. Für eine flüssige Darstellung nahm
>> ich zunächst 25 Messungen pro Sekunde pro Slave an.
>
> Wie soll die Darstellung flüssig werden, wenn die Slaves ihre Daten in
> Blöcken verschicken?

Dann stellt die App die Daten halt mit einer Sekunde Verzögerung dar. 
Der Flüssigkeit tut das keinen Abbruch.

von Nosnibor (Gast)


Lesenswert?

Axel S. schrieb:
> Variante 2 ist weniger Hardware-Aufwand
Eigentlich nicht.
Bei Variante 1 braucht man für jeden Slave einen Sender (beim Slave) und 
einen Empfänger (beim Master)
Bei Variante 2 braucht man auch für jeden Slave einen Sender (beim 
Slave) und einen Empfänger (auch beim Slave, damit er die Frage vom 
Master hören kann). Und zusätzlich noch einen Sender und einen Empfänger 
beim Master.

Aber da heutzutage Sender und Empfänger kombiniert in einem 
Bauteil/Modul kaum teurer sind als ein Sender alleine, ist Variante 2 
wohl die bessere: der Master sendet ein Startsignal, und jeder Slave 
antwortet nach einer Verzögerung, die seiner Adresse entspricht, so daß 
der Master die Daten nacheinander empfängt.

von Wolfgang E. (Firma: janeeisklar) (whattheheck)


Lesenswert?

Benny H. schrieb:
> Es sollen Bewegungsdaten
> (Accelerator- & Gyroscope-Daten) erhoben werden von ca. 5 Teilnehmern,
> die sich innerhalb eines Radius von max. 5 m bewegen. Diese
> Bewegungsdaten sollen zentral ausgewertet werden und anschließend
> graphisch repräsentiert werden. (Letzteres ist aber keine Sache mehr für
> dieses Forum.) Zeitkritisch ist das deshalb, weil die Bewegungen
> ziemlich genau und quasi-parallel erfasst und ausgewertet werden sollen.

Sag doch gleich, dass du einen Drohnen-Schwarm steuern willst ;-)

von X4U (Gast)


Lesenswert?

Benny H. schrieb:
> Erste Frage: Macht es Sinn die Sensoren kontinuierlich senden zu lassen
> und nur reihum abzufragen (Senden auf unterschiedlichen Frequenzen?
> Senden auf der gleichen Frequenz abwechselnd zu bestimmten Zeitslots?
> (Synchronisierung erforderlich!)) oder ist es sinnvoller die Daten
> explizit anzufordern, per ISR evtl., sodass nur ein Sensor pro Abruf
> aktiv ist?

Würde ich im Erstversuch mit 5 Bluetooth Verbindungen auf verschiedenen 
Kanälen machen. Dann brauchst du zwar insgesamt 10 Module (statt 
mindestens 6), aber du hast die Daten unabhängig voneinander am 
Prozessor und kannst Sie mit full speed abfragen.

Der ganze Protokolloverhead entfällt und die Diskussion ob es nun 
Zeitschlitz-, Synchron- oder Kollisionstechnologie sein soll auch. Sie 
sind auch viel einfacher zu Identifizieren (z.B. mit nem Handy) weil 
jedes seinen Namen sofort sendet.

Die Module sind zudem relativ günstig und einfach zu bedienen und wenn 
ich mich recht erinnere ist es auch egal ob du Sie zwischen den 
Telegrammen einfach abschaltest da die Verbindung eine Zeit lang 
bestehen bleibt.

von Benny H. (bennyhankister)


Lesenswert?

Vielen Dank für die ganzen Kommentare und die konstruktive Hilfe! Ich 
bin derzeit etwas eingespannt als junger Vater, daher bleibt nicht viel 
Zeit für andere Dinge. Der ein oder andere wird's kennen...

@ dunno
>muss das ganze in echtzeit passieren, oder reichts wenn du die daten
>halt zugeordnet bekommst?

Nein, das muss wirklich Echtzeit sein, da die Bewegungen live beobachtet 
und ausgewertet werden sollen. Und die Daten müssen später auch noch 
abrufbar sein zu einer Analyse. Das ist aber eher etwas für's 
Speichermanagement. Das passt nicht unbedingt auf diese Baustelle hier.

Wenn ich Deine Idee richtig verstehe, dann werden erstmal die Daten auf 
den Slaves gesammelt und bei einem Trigger des Masters, senden alle 
Slaves nacheinander ihre Daten an den Master, richtig? Müsste man 
ausprobieren. Ich weiß, dass man z.B. bei den ZigBee Modulen 
verschiedene Kanäle einrichten kann. Ob dann ein "gleichzeitiger" 
Versand infrage kommt, weiß ich nicht... Oder aber man verzögert den 
Versand mit einer ausreichenden Zeit. Eben n*40 ms mit n=0,1,2,3,4 bei 5 
Teilnehmern. So als Idee...

@Joachim: Diese Sekunde macht mir Bauchschmerzen. Das hieße doch auch, 
dass die Visualisierung mindestens 1 Sekunde Latenz aufweist, richtig? 
Das wäre schlecht. Latenz wird's sicherlich geben, keine Frage. Aber 1 
Sekunde ist schon sehr viel, finde ich.

@ Jack:

>Fragesteller verrät nichts
falsch
>lässt sich Würmer aus der Nase ziehen
weil ich nur soviel wie nötig darüber reden möchte.
>aber wird sofort pampig und erhebt Ansprüche wenn jemand etwas in seinen 
>Andeutungen übersieht
Pampig? Ich habe dem Georg lediglich Alternativen zu seinen nutzlosen 
Kommentaren aufgezählt. Oder erschienen seine Glückwünsche bzgl. meines 
übermenschlichen Daseins als annähernd hilfreich oder höflich?

@ Axel: Deine 2. Variante finde ich klasse. So habe ich mir das auch 
vorgestellt. Ich muss immer wieder auf den ZigBee Standard zurückkommen, 
da er mir wirklich ideal dafür vorkommt. Ich kann damit sicherlich solch 
ein Zeitmanagement bzgl. der "Redeerlaubnis" einrichten, oder? Oder galt 
Deine Anspielung auf die doch etwas aufwendigere Softwarearbeit der Idee 
das alles selbst zu implementieren? Das scheint mir allerdings dann doch 
wie das Rad neu erfinden zu wollen, oder täusch ich mich? Danke nochmal!

Zu Deinem zweiten Kommentar: Klar, es ist sicherlich eine 
Definitionssache, was nun mit Echtzeit gemeint ist. Natürlich ist eine 
Echtzeit im Sinne von Gleichzeitigkeit unmöglich. Es geht nur darum die 
Messwerte mit einer Rate abzufragen, auszuwerten und darzustellen, die 
eine Echtzeit für das menschliche Auge suggeriert.

von Der Andere (Gast)


Lesenswert?

Benny H. schrieb:
> Pampig? Ich habe dem Georg lediglich Alternativen zu seinen nutzlosen
> Kommentaren aufgezählt.

Nö, deine Angaben sind so völlig überzogen.
Man kann keine 5 Signale 25mal pro Sekunde als Mensch in Echtzeit 
auswerten, weder als Diagramm, noch als Grafik oder Zahlenkolonne. Du 
schaffst höchstens 10 - 20 mal weniger.
Also brauchst du diese Datenmenge gar nicht in Echtzeit, höchstens für 
die spätere:

Benny H. schrieb:
> Und die Daten müssen später auch noch
> abrufbar sein zu einer Analyse.

Also ist dises Beharren auf "Echtzeit" ein völlig unnötiges Feature, 
ausser du hast nur die Hälfte des Problems erzählt und es gibt weitere 
Randbedingungen.

Übrigens ist dein Beispiel Synchronschwimmen ganz prima, weil die 
meisten Sendemodule durch das Wasser wohl so stark gedämpft werden dass 
sie unter Wasser gar nichts liefern.
Soviel zu Echtzeit.

von Benny H. (bennyhankister)


Lesenswert?

Noch so einer...

Der Andere schrieb:
> Man kann keine 5 Signale 25mal pro Sekunde als Mensch in Echtzeit
> auswerten, weder als Diagramm, noch als Grafik oder Zahlenkolonne. Du
> schaffst höchstens 10 - 20 mal weniger.

Man soll auch nicht alle 5 Signal gleichzeitig per Auge auswerten... Und 
auf die 25 Werte komme ich, damit es flüssig dargestellt werden kann. 
Weniger kann ich immer noch realisieren, falls ich doch nur 5 Werte pro 
Sekunde pro Sender brauche und anschließend die darzustellenden Werte 
per Interpolation ausgebe, um sie ruckelfrei zu visualisieren. Das 
allerdings geht zu Lasten der Auflösung, die m.M. nach schon mindestens 
20 Werte pro Sekunde betragen soll, weil es sich um schnelle 
Bewegungsabläufe handelt.

> Also ist dises Beharren auf "Echtzeit" ein völlig unnötiges Feature,
> ausser du hast nur die Hälfte des Problems erzählt und es gibt weitere
> Randbedingungen.

Zum Thema "Echtzeit" hab ich sicherlich genug geschrieben. Und wenn 
Bewegungen live über Sensoren erfasst grafisch aufbereitet dargestellt 
werden sollen (vielleicht noch besser vergleichbar mit motion 
capturing), dann weiß ich nicht wie Du darauf kommst, das als "völlig 
unnötiges Feature" abzustempeln... keine Ahnung...

> Übrigens ist dein Beispiel Synchronschwimmen ganz prima, weil die
> meisten Sendemodule durch das Wasser wohl so stark gedämpft werden dass
> sie unter Wasser gar nichts liefern.
> Soviel zu Echtzeit.

Ja? Ganz prima? Das freut mich sehr. Bevor ich komplett ausfallend 
werde, weil mich diese Sorte von Kommentaren einfach nur anko**en, hier 
nochmal eine kurze sachliche Erklärung dazu: Es ging dabei nur um eine 
Analogie. Dann nimm eben Synchronsprinter - über Wasser! Wie ich anfangs 
geschrieben habe, befinden sich die Module bzw. die Antennen "im 
Freien".

von Benny H. (bennyhankister)


Lesenswert?

Ich danke nochmal allen, die hilfreiche Kommentare gegeben habeen. Ich 
denke, dass ich mit den XBee Modulen recht gut fahren werden, um die 
Aufgabe zu realisieren.

von Benny H. (bennyhankister)


Lesenswert?

Da fällt mir doch glatt auf, dass ich gar nicht alle Antworten gelesen 
habe... sorry dafür!

X4U schrieb:

>
> Würde ich im Erstversuch mit 5 Bluetooth Verbindungen auf verschiedenen
> Kanälen machen.

Ok, Danke! Interessant. Kann den mein Master (in meinem Fall wohl eine 
App auf einem Tablet) 5 Bluetooth Verbindungen parallel aufbauen? (Das 
kann ich natürlich recherchieren, aber naiv gefragt geht's schneller. :) 
) Das müsste so sein, da nicht bei jeder Abfrage der Slaves die 
Verbindung wieder neu hergestellt werden kann, wenn das "pairen" lange 
dauert.

von Draco (Gast)


Lesenswert?

Benny H. schrieb:
> Ok, Danke! Interessant. Kann den mein Master (in meinem Fall wohl eine
> App auf einem Tablet)

Bis jetzt war ich nur stiller Mitleser. Aber wie willst du denn ein 
Zigbee Modul bzw. mehrere an ein Tablet bekommen?!

Zum Thema Motion Capturing: das wird auch nicht in Echtzeit dargestellt. 
Die Daten werden gesammelt, verarbeitet und dann dargestellt. Beim 
Motion Capturing nimmt man ja keine Bewegungssensoren sondern ein 
Kamerasystem.

Dein ganzer Aufbau kommt einer Drohnen-Snycro relativ nahe. Da wird dies 
so gehandhabt: die Absolute Position wird mit Kamerasystemen ermittelt, 
ähnlich des der Motion Capturing, die Soll Ansteuerung wird meist per 
Funk realisiert und zwar jeder Client nacheinander. Das ist auch die 
übliche Verfahrensweise bei Sensoren, sei es Temperatur oder whatever. 
Master sendet eine Anforderung an Client N und Client N antwortet mit 
seinem aktuell gespeicherten Wert. Da fällt es auch nicht ins Gewicht ob 
er in dem aktuellen Frame gerade nicht fertig mit der aktuellen 
Auswertung ist, sondern er sendet den letzten aktuelle Messwert. Wenn es 
denn unbedingt an ein Tablett gehen muss ein MC mit USB CDC-HID und das 
Tablett dann mit USB-OTG die seriellen Daten empfangen lassen.

von Benny H. (bennyhankister)


Lesenswert?

Hi Draco, oder Benny. :)


> Bis jetzt war ich nur stiller Mitleser. Aber wie willst du denn ein
> Zigbee Modul bzw. mehrere an ein Tablet bekommen?!

Über Umwege sicherlich, aber ich stelle mir vor eine UART2USB Lösung zu 
nutzen. Die Daten sollen natürlich drahtlos am Koordinator empfangen, 
evtl. gepuffert und anschließend über UART an die App gesendet werden, 
bzw. die App liest die Daten aus (so ungefähr: 
http://www.allaboutcircuits.com/projects/communicate-with-your-arduino-through-android/). 
Aber das ist noch Zukunftsmusik...
>
> Zum Thema Motion Capturing: das wird auch nicht in Echtzeit dargestellt.
> Die Daten werden gesammelt, verarbeitet und dann dargestellt. Beim
> Motion Capturing nimmt man ja keine Bewegungssensoren sondern ein
> Kamerasystem.
Sorry, aber wir reiten zu lange auf dem Begriff Echtzeit rum. Lassen wir 
den Begriff einfach weg. Natürlich wird gepuffert und bearbeitet bevor 
etwas angezeigt werden soll. Das nimmt Zeit in Anspruch. Mir geht es nur 
darum, dass die Daten nicht einfach gesammelt und irgendwann mal 
bearbeitet und dargestellt werden sollen, sondern dass das so zeitnah 
wie möglich passieren soll.
>
> Dein ganzer Aufbau kommt einer Drohnen-Snycro relativ nahe. Da wird dies
> so gehandhabt: die Absolute Position wird mit Kamerasystemen ermittelt,
> ähnlich des der Motion Capturing, die Soll Ansteuerung wird meist per
> Funk realisiert und zwar jeder Client nacheinander. Das ist auch die
> übliche Verfahrensweise bei Sensoren, sei es Temperatur oder whatever.
> Master sendet eine Anforderung an Client N und Client N antwortet mit
> seinem aktuell gespeicherten Wert. Da fällt es auch nicht ins Gewicht ob
> er in dem aktuellen Frame gerade nicht fertig mit der aktuellen
> Auswertung ist, sondern er sendet den letzten aktuelle Messwert. Wenn es
> denn unbedingt an ein Tablett gehen muss ein MC mit USB CDC-HID und das
> Tablett dann mit USB-OTG die seriellen Daten empfangen lassen.

Das klingt gut, danke. Und Du beantwortest ja auch Deine Frage von oben 
bzgl. Darstellung auf einem Tablet. :) Ein Drohnen-Synchro wird's nicht, 
aber bleiben wir doch einfach bei dem Beispiel. Ich will versuchen das 
mal zu wiederholen, in etwas abstrakterer Form:

Ich habe 5 Sensoren, die je ca. 20 Messwerte/s erfassen. Diese 
ermittelten Messwerte werden gepuffert. Ein Master teilt den Slaves 
nacheinander mit ihre Werte zu übermitteln. Die gesammelten Werte werden 
in Paketen per serieller Schnittstelle an ein auswertendes Gerät (z.B. 
Tablet bzw. App) gesendet bzw. von diesem abgerufen. Im weiteren Verlauf 
werden diese Werte grafisch "hübsch" dargestellt, sodass etwas über die 
Synchronizität der 5 Teilnehmer bzgl. der Beschleunigung gesagt werden 
kann (vllt mithilfe von scichart.com o.ä.).

Für mich klingt das erstmal realisierbar aber ich bin sehr dankbar für 
den Erfahrungsschatz eines jeden Mitlesers, falls ich's mir zu einfach 
vorstelle oder Stolperfallen übersehe.

Wenn ich mir über collision avoidance keine Gedanken machen möchte, dann 
macht es doch Sinn "fertige" Lösungen einzusetzen, so etwas wie die 
ZigBee Module, die entsprechend konfiguriert werden, richtig? Bevor ich 
solche Sachen selbst schreibe, meine ich...

Danke erstmal bis hierhin! Ich bin sehr froh über den Austausch.

von Reiner O. (elux)


Lesenswert?

Hallo,
hier mal meine 2 Cents zur Übertragung:

Nehmen wir mal an, Du verwendest zur Übertragung so etwas wie die 
bekannten RFM12. Die benötigen in der späteren Ausführung ein frei 
wählbares "Magic Byte", damit der Empfänger überhaupt zuhört.

Ich würde alle Slaves auf den selben Kanal setzen und Jedem eine Nummer 
zuordnen (Device ID) Solche Features wie Listen before Talk erst mal 
aussen vor.
Somit können sich alle Slaves sehen.
Der Zeitslot ist 8 ms.
Das Protokoll sähe in etwa so aus: Magic Byte, Sync (z.B. 0x55), Device 
ID, Daten, Time Stamp, Prüfsumme, Endbyte...

Wenn der erste Slave seine Daten sendet, empfangen alle Anderen in einer 
ISR die ersten 2 Byte, das Magic Byte braucht der Empfänger um die Luke 
runterzulassen. In den anderen Slaves wird in der ISR erst mal ein 8 ms 
Timergestoppt, die Adresse ausgewertet und der 8 ms Timer wieder neu 
gestartet. Wenn der Dev 1 sendet, setzt Dev 2 in der ISR ein Sendeflag 
und nach Ablauf des Timers ist er mit Senden dran usw.
Damit der Ausfall eines Slaves nicht das Ganze zum Stehen bringt, muss 
noch eine Fehlerbehandlung eingebaut werden a la "...jetzt erwarte ich 
eine Sendung von Dev X. Und wenn die nicht kommt, dann zähle ich die ID 
hoch und warte weiter auf meinen Slot zum Senden..."
In der Timer ISR prüfst Du das Sendeflag und wenn gesetzt, wird 
gesendet.
Wenn der Timer (den der Slave ja zwangsläufig erst nach Empfang und 
Auswertung der Dev-ID und somit später startet) abläuft und keine 
Empfangs-ISR vorher zuschlägt und das Sendeflag nicht gesetzt ist, hat 
der vorhergehende Slave nicht gesendet. Also ID hochzählen und Timer neu 
starten.
Der Master braucht nur zuzuhören und die Daten zu empfangen.
Zur Übertragung von Steuerkommandos vom Master zu den Slaves würde ich 
dann den Sync ändern, z.B. in 0xAA oder so..

Ist nur eine sehr grobe Skizze, aber so in diese Richtung würden meine 
Überlegungen wohl gehen...

Gruss

Elux

: Bearbeitet durch User
von Draco (Gast)


Lesenswert?

Eigentlich gute Idee, aber:

- Was ist wenn der Wert eines Sensors zufällig mit dem MagicByte / 
Syncbyte übereinstimmt. Wie verhält sich dann der zugehörige Client?

- Was ist wenn der Client nun aber 10ms für die Wandlung braucht und 
aber über die 8ms kommt?

- Wenn der Master anfordert, spart man sich den TimeStamp des Clients, 
da der Master ja den TimeStamp setzen kann.

- Sechs verschiedene Zeitbasen im gesamten System halte ich gegenüber 
einer einzelnen Zeitbasis wesentlich unsicherer.


Aber das die Clients sich selbst nacheinander "beauftragen" is keine 
schlechte Idee. Hat aber auch den Nachteil das man dann in allen 
entsprechenden Clients jedesmal die Reihenfolge ändern muss wenn man nun 
doch einen anderen Wert vorher braucht. Bei der Sternförmigen 
Anforderung braucht man bloß im Master die Reihenfolge ändern.

von Thomas H. (flaretom)


Lesenswert?

Hallo,

Dann gäbe es ja noch die nRF24 mit ihrem "Enhanced Shockburst" und dem 
"Automatic Acknowledgement with Payload", d.h. man kann bis zu 6 Slaves 
mit einem Master verbinden, wobei die Slaves nur ihre Acknowledgement 
Buffer mit den Sensordaten füllen müssen. Der Master fragt einen Slave 
nach dem anderen ab, indem er ein leeres Packet verschickt. Der 
Slave-nRF24 bestätigt dies mit dem Acknowledge, welches die Sensordaten 
enthält. Im Slave gibts einen IRQ, der dafür sorgt, das neue Daten 
gemessen werden. So geht es dann zyklisch weiter.
Der Master muss die empfangenen Daten nur noch bündeln und z.B. über ein 
Bluetoothmodul an PC etc. weiterreichen.

Ist schnell, billig und auch die Reichweite sollte locker passen (evt. 
die Module mit ext. Antenne nehmen).

Beste Grüße, Tom

von Stephan H. (stephan-)


Lesenswert?

irgendwie muss dann aber definiert sein wievile Clints es überhaupt 
gibt, bzw. muss bei einer Erweiterung der Anzahl das System angepasst 
werden. es muss ja mal "genullt" werden um den Ringelpietz von vorn zu 
beginnen. aber wer war denn nun der letzte der jetzt wieder anfangen 
muss ?

von Draco (Gast)


Lesenswert?

Naja, es gibt ja kein Bedarf für ein dynamisches Sensorarray. Es ist ja 
auf fünf begrenzt. Und wenn ein sechstes / siebtes hinzugefügt werden 
soll dann teilt man das dem Master halt mit.

von Benny H. (bennyhankister)


Lesenswert?

Draco schrieb:

> Aber das die Clients sich selbst nacheinander "beauftragen" is keine
> schlechte Idee. Hat aber auch den Nachteil das man dann in allen
> entsprechenden Clients jedesmal die Reihenfolge ändern muss wenn man nun
> doch einen anderen Wert vorher braucht. Bei der Sternförmigen
> Anforderung braucht man bloß im Master die Reihenfolge ändern.

Eine sternförmige Anordnung ist sicherlich sinnvoll, behaupte ich mal. 
Und es kommt höchstwahrscheinlich keiner hinzu, wenn es mal installiert 
ist. Ob es bei 5 bleibt, weiß ich nicht. Können auch 10 werden. Mehr 
aber nicht. :)

> Dann gäbe es ja noch die nRF24 mit ihrem "Enhanced Shockburst" und dem
> "Automatic Acknowledgement with Payload", d.h. man kann bis zu 6 Slaves
> mit einem Master verbinden, wobei die Slaves nur ihre Acknowledgement
> Buffer mit den Sensordaten füllen müssen. Der Master fragt einen Slave
> nach dem anderen ab, indem er ein leeres Packet verschickt. Der
> Slave-nRF24 bestätigt dies mit dem Acknowledge, welches die Sensordaten
> enthält. Im Slave gibts einen IRQ, der dafür sorgt, das neue Daten
> gemessen werden. So geht es dann zyklisch weiter.
> Der Master muss die empfangenen Daten nur noch bündeln und z.B. über ein
> -Bluetoothmodul an PC etc. weiterreichen.

Sehr interessant, weil einfach und effizient, finde ich. Falls es doch 
mehr als 6 Clients werden, müsste man zwei solcher Netze aufbauen und 
nacheinander im Wechsel abfragen. Also z.B. 8 Clients, je 4 in einem 
NRF24-Netz. Zwei MCUs als Master, von dem einer die Daten des anderen 
erhält und zusammen mit seinen Daten an den MasterMaster (die App des 
Tablets) weiterreicht. Könnte klappen, erscheint mir aber auch etwas von 
hinten durch die Brust ins Auge, oder so ähnlich... Aber könnte man es 
so machen? Kann man ja einfach ausprobieren. Die Module erscheinen mir 
auch ein klein wenig günstiger als der ZigBee Kram.

Stephan H. schrieb:
> irgendwie muss dann aber definiert sein wievile Clints es überhaupt
> gibt, bzw. muss bei einer Erweiterung der Anzahl das System angepasst
> werden. es muss ja mal "genullt" werden um den Ringelpietz von vorn zu
> beginnen. aber wer war denn nun der letzte der jetzt wieder anfangen
> muss ?

Ja, es ist schon definiert, wieviele Clients es gibt, bzw. wird es 
definiert sein. Nach meiner Vorstellung liegt dem Master ein Array mit 
den Adressen der einzelnen Clients vor, fest programmiert. Ein 
dynamisches Array ist, wie Draco schon sagte, nicht vorgesehen.

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.