Daten zwischen zwei Arduinos ohne mechanische Bindung austauschen

Hi,

ich möchte ein Projekt beginnen, bei dem zwischen einem Stator und einem (langsamen, < 30 RPM) Rotor Daten ausgetauscht werden.

Die Stromversorgung des Rotors soll (voraussichtlich) mittels Schleifkontakten erfolgen.
Der Rotor wird sich nicht ständig bewegen, eine Bewegung von mehr als frei Umdrehungen eher sehr selten, dafür aber Teildrehungen in wechselnde Richtungen.

Der "statische" Arduino soll die Steuerung des gesamten Systems übernehmen und Subaufgaben (Steuerung bestimmter Elemente und Sensoren) an den Arduino des Rotors übergeben können bzw. auch Rückmeldungen von diesem erhalten.

Stator und Rotor sind über Kugellager miteinander verbunden.
In der Mitte, dem "Auge" sozusagen, könnte ein Austausch erfolgen, ich dachte an etwas wie Optokoppler (Senderdiode / Empfangsdiode), sofern die nicht zu träge sind.

Da der Arduino im Rotor ja einiges an Arbeit übernehmen kann, kann das Datenaufkommen weitestgehend minimiert werden, so dass vermutlich wenige Zeichen pro Sekunde reichen sollten.

WiFi und Bluetooth fallen auf Grund von Störanfälligkeit (hohe "Vermüllung" im 2,4GHz-Bereich sowie Störung anderer Komponenten) aus.

Wie eingangs erwähnt: bisher nur Vorüberlegungen, die allerdings nicht unerhebliche Auswirkungen auf das Projekt haben werden.

Anregungen oder Tipps nehme ich gerne demütig und lernwillig entgegen.

Danke

Dirk

Wenn du die Motoren nur ein- und ausschalten möchtest,bzw. nur "einfache Daten" übertragen möchtest, könntedir das [Funk-Fernschalter-Set HD2RX online kaufen | Pollin.de] vielleicht weiterhelfen. Sonst fällt mir auch nichts ein...

Eine SendeLED / Phototransistor - Kombi ist jedenfalls nicht zu träge.
Fragt sich nur ob die Mechanik der Licht-Übertragung nicht komplizierter als ein weiterer Schleifring ist ...

Keine Ahnung oder praktische Erfahrung : Wie wäre es Induktiv ?

Bluetooth / Funk wäre meine erste Idee gewesen.

michael_x:
Keine Ahnung oder praktische Erfahrung : Wie wäre es Induktiv ?

Demnach wie viel Leistung der Motor hat oder wie gut er abgeschirmt ist würde ich von der induktiven Übertragung die Finger lassen.

Was ist das denn für ein Motor/Antrieb?

Gruß

Erst mal Danke für eure Antworten.

Rotor und Stator sind in diesem Fall 2 gegeneinander drehbare Gehäuseteile, das Ganze ist kein Motor.
Der Rotor wird allerdings durch einen Motor (noch zu definieren) angetrieben. Im Prinzip ein statisches Gehäuse mit aufgesetzter drehbarer Sensoreinheit.

Einen weiteren Schleifring hatte ich in Erwägung gezogen, aber ich bin nicht sicher, ob es da nicht im Laufe der Zeit zu Kontaktaussetzern kommt (Störimpulse), bei der Spannung dürfte das egal sein (aussiebbar).

Induktiv könnte gehen, wenn der Träger hochfrequent genug ist um die Drehung selbst zu ignorieren.

Mir gefällt Sende-LED<->Phototransistor bisher am besten, evtl auch mit 2 Modulationen und Wellenlängen, um Hin- und Rückkanal parallel nutzen zu können.

Hat jemand so einen Datentransfer zwischen zwei Arduinos schon mal gemacht?

Liebe Grüße

Dirk

Hat jemand so einen Datentransfer zwischen zwei Arduinos schon mal gemacht?

So nicht, nur statisch und nicht zwischen 2 Arduinos sondern zwischen einem Arduino und einem anderen Controller (dessen Protokoll vorgegeben ist), jeweils IR-LED und Phototransistor zur seriellen Kommunikation mit 4800 Bd. -> Optolink Eigenbau Adapter
Schnell genug ist das.

Keine Ahnung wie man das mechanisch einfach hinkriegt.

Hallo Dirk,

wie wäre denn mit etwas in der Art hier (läuft im 70 cm Band statt auf 2,4 GHz): Link

Selber getestet habe ich so ein Setup noch nicht, sondern nur mal für eine Telemetrieanwendung angesehen, die sich dann aber doch erledigt hatte.

Viele Grüße

Lukas

Also um die Mechanik der Verbindung mach ich mir wenig Gedanken.
Ein "Tunnel" genau in der Achse sollte gehen, dass sich dann eine Seite dreht sollte die Verbindung wenig beeinflussen.
Mit dem Funk hab ich wieder das Problem EMV und ich bräuchte auch davon 2 Systeme (bidirektional).
Aber mit 4800 Baud oder auch nur 1200 Baud kann ich locker leben, das reicht.

Also Protokoll ausdenken ...
Die OptoLink sehen nach einem Ansatz aus.

Hier ist einer sehr gute Einleitung für eine serielle Verbindung über Infrarot:

Coole Anleitung, danke für den Link.
Nur muss ich das trotzdem irgendwie hinbekommen.
Weil:

  • bidirektional (verschiedene Wellenlängen und Impulsfrequenzen vielleicht?)
  • die Arduinos machen auch noch andere Sachen ... Kommunikationsfenster einplanen?

Aber die Ansätze klingen vielversprechend.

Du brauchst halt Sender und Empfänger auf beiden Seiten.

Und dann irgendwie dafür sorgen dass man das nicht an sich selbst schickt. Verschiedene Frequenzen sind eine Option wenn man es nicht schafft das räumlich zu trennen (hier sind vielleicht Reflexionen ein Problem). Die TSOP Empfänger gibt es von 30 bis 56kHz. Dann muss man halt die Frequenz von Timer1 entsprechend anpassen.

Den Empfang kann man nicht verpassen. Das hängt an der seriellen Schnittstelle und die Serial Klasse puffert das. Sende-seitig brauchst du aber etwas Zeit während der man nichts anderes machen kann.

Nur mal ein paar Gedanken zu der Problematik.

Wenn die optische Übertragung in einem "Tunnel" stattfinden kann, ist es wahrscheinlich auch möglich die beiden Übertragungsstrecken gegeneinander durch eine Trennwand abzuschirmen. Dann können die sich nicht gegenseitig beeinflussen.

Wenn die optische Übertragung in einem "Tunnel" stattfinden kann, wird es wahrscheinlich auch möglich sein die beiden Übertragungsstrecken gegen Fremd- und Störlicht abzuschirmen.

Wenn es möglich ist Fremdlicht fernzuhalten, kann man auch auf die 36kHz Modulation des Senders verzichten. Die aufwändige Softwarelösung zur Erzeugung des 36kHz Signals kann entfallen und die Sendediode(n) direkt mit dem Tx Pin des Arduinos, über einen Transistor, geschaltet werden.

Als Empfänger kann dann der TSOP1736 entfallen. An seine Stelle tritt ein einfacher Fototransistor.

Probleme sehe ich aber in der Drehbewegung. Dadurch stehen sich Sender und Empfänger nicht immer gegenüber. Hier kann man vielleicht mit mehreren Sendedioden die ringförmig angeordnet sind Abhilfe schaffen.

Gruß
Peter

Stimmt. Wobei man die das reine Träger-Signal auch besser als in dem Code erzeugen kann. Nämlich komplett in Hardware. Timer1 im CTC Modus passt soweit, aber statt bei jedem Compare Match einen Interrupt auszulösen stellt man den Timer so ein, dass er automatisch einen der Timer Pins toggelt (OC1A/OC1B, d.h. Pin 9 oder 10). Den Pin auf Low zu lassen geht mit den gleichen zwei Bits (im TCCR1A Register). Dann wird nicht alle paar µs ein Interrupt ausgelöst.

Darauf dann die Daten zu modulieren braucht allerdings immer noch Software.

Moin,
ich habe gestern bei Ebay mehrpolige Schleifringverbindungen gefunden.
Die sind angeblich geeignet für 300U/min.
Darüber könntest Du auch die Datenverbindung machen.

Wenn Interesse besteht, melde Dich.

Gruss
Kurti

@kurti: ja, wäre interessant.

Ich hatte sowieso vor, die Arduinos reine serielle RX/TX machen zu lassen und den Rest in Hardware zu gießen. Das Trägersignal zu modulieren ist ja eigentlich trivial.

@peter_de: Ich dachte an einen "Tunnel" im inneren der Drehachse. Da eine Seite sich dann dreht und andere nicht ist eine Trennung nur durch eine weitere "Röhre in der Röhre" möglich. Macht es, glaube ich, komplizierter.

Mit entsprechender Modulation auf nicht interferierende Frequenzen sollte ich pro Seite einfach nebeneinander liegende Sender und Empfänger nehmen können.

Die Info, dass seriell puffert, war mir bisher nicht bewusst, hab seriell kaum genutzt (nur für Debugging).
Das macht's dann richtig einfach. Werte lesen, in Routine auswerten.
Und hin und wieder mal senden. Geht gepufferter Empfang während des Sendens?

Danke