Verbinden vieler (5+) BNO055 IMU Sensoren per Daisy Chain

Ich versuche, die Kabel in meinem System von 6 IMU Sensoreinheiten(BNO055, Datenblatt: https://cdn-shop.adafruit.com/datasheets/BST_BNO055_DS000_12.pdf) über 2 Meter auf ein Minimum zu reduzieren (idealerweise 4 Kabel: VCC, GND + 2 Kommunikationskabel) und würde daher gerne die 6 Adafruit BNO055 per daisy chain verbinden.
Mein Problem ist, dass die Sensoren normalerweise über I2C kommunizieren, aber leider haben sie nur 2 verschiedene Adressen, so dass ein direktes Daisy Chaining mit nur 4 Kabeln (Vcc, GND, SDA, SCL) nicht möglich ist und ich möchte wirklich vermeiden, dass ich zusätzliche Kabel für die Auswahl der Sensoren benötige.

Eine interessante Option, die ich im Internet gefunden habe, ist die Verwendung einer zusätzlichen MCU (siehe Bild), die das I2C-Signal in SPI umwandelt.
Sieht das für euch nach einer praktischen Lösung aus? Falls ja Habt ihr eine Empfehlung für einen geeigneten Chip, der billig, klein und gut für diesen Zweck geeignet ist?

Screenshot Sensor node
(ganzer Artikel zum Bild: Wearable Sensor Clothing for Body Movement Measurement during Physical Activities in Healthcare - PMC)

ATTiny88 ?

1 Like

Danke Combie! Der sieht top aus um das Schema aus dem Bild nachzubauen.
Über andere kreative Lösungsansätze, die mir vielleicht doch den Einsatz eines extra Mikrocontrollers ersparen, freue ich mich trotzdem weiterhin :slight_smile:

Ein PCA9548A spart 8 dieser Tinys ein

1 Like

Stimmt, spart Tinys aber leider keine Kabel (Auf dem Weg zu den Sensoren)...

ich kann mir nicht helfen. "Kabel" auf einem I2C Bus das kann doch nicht ein Argument sein. Für mich ist I2C ohnehin nur ein Bus innerhalb einer PCB bzw. wirklich nur kürzeste Kabel um vieleicht ein Display an die Frontplatte zu bringen. Du hast da doch hoffentlich nicht mehrere Meter I2C Leitungen.

Warum setzt du nicht auf ein Bus-System das für lange Kabel ausgelegt ist? RS485, CAN?

Noch besser, zeig mal eine schematische Zeichnung von deinem Aufbau aus dem man grobe Entfernungen ableiten kann.

Verstehe nicht wieso Du 6 Positionssensoren in Deinem System brauchst.
Erklähr das mal. Vieleicht kannst Du einige durch andere Sensoren ersetzen.
Grüße Uwe

Mit den IMUs wird die Bewegung des Arms, der Hand und eines Daumengelenks getrackt, folglich ergeben sich dafür menschenübliche Abmessungen der Leitungen von bis zu maximal 1m.
Ein anderes Bus-System ist natürlich eine Option, allerdings sind die Sensoren die ich verwenden muss nur mit i2c ausgestattet (und nur zwei Adressen) weshalb ich das ganze natrülich am liebsten irgendwie per i2c lösen würde. bzw. wie oben geschrieben mit möglichst wenig Aufwand auf ein anderes Bussystem umsteigen wollen würde.

Siehe Bild für Schematischen Aufbau.

  1. Der Controller muß nicht auf der Schulter oder am Gürtel plaziert sein sondern kann am Unterarm nahe dem Ellebogen plaziert werden und somit verkürzen sich die Kabel auf ca 50cm.
  2. Man kann mehrere I2C Devices mit gleichen Adressen mittels eines I2C Multiplexer ansteuern. Wie combie bereits vorgeschlagen hat kannst Du zB den PCA9548A verwenden.
    Datenblatt: https://www.nxp.com/docs/en/data-sheet/PCA9548A.pdf
    Und ein Ardu-Beispiel zum Multiplexer:
    https://create.arduino.cc/projecthub/tarantula3/tca9548a-i2c-multiplexer-module-with-arduino-and-nodemcu-3d3313
    Grüße Uwe
1 Like
  1. Leider muss der Controller noch mehrere andere Sensoren und Aktoren am Rücken and der Schulter und am Arm ansteuern, deswegen ist die ungünstige Position da oben, eigentlich recht fix aber villeicht sollte ich das doch nochmal überdenken...
  2. Danke, dass du gleich ein Beispielprojekt verlinkt hast. Aus der Notwendigkeit des Multiplexers schließe ich aber, dass mir das wohl wirklich nicht viel übrig bleibt als 4 Leitungen (GND,Vcc, SCL, SDA) pro Sensor (bzw. pro zwei Sensoren wenn ich wenigstens die zwei existierenden Adressen verwende) zu akzeptieren.
    .. oder eben einen ATTiny an jede Sensoreinheit dranbaue der I2C in ein anderes Bussystem wandelt.
    Danke euch beiden auf jeden Fall für die Hilfe.
    Beste Grüße,
    Paul

Bist Du Dir da ganz sicher?
Die Sensoren können auch UART 115200 8N1. Steht in dem von Dir verlinkten Datenblatt.

Damit umgehst Du mögliche Probleme des I2C bei gleicher Leitungslänge. Wenn der Controller eh auf'm Rücken ist, dann kann der auch mehrere UART bedienen....

Das mit dem UART habe ich verschwiegen weil ich dachte, dass man UART nicht als BUS verwenden kann, somit würde das die Anzahl meiner Kabel (mein Grundproblem) also auch nicht veringern, oder liege ich da falsch?

Du kannst das schon als Bus benutzen...
Die Verwendung eines kleinen µC bleibt Dir da aber auch nicht erspart.
Mir ging es nur darum das diese Verbindung längere Leitungen besser wegsteckt, als ein I2C, der evtl. gänzlich blockiert.
Wenn Du jeden Sensor separat verkabelst ist das eine Option.

Wenn Du das als Bus machen willst mit 4 Leitungen, kannst Du Dir ein eigenes Protokoll schreiben. Jeder Sensor bekäme dann einen Attiny der lauscht und antwortet.
Auch wäre RS485 oder CAN eine Variante. Dann bekäme jeder Sensor einen µC mit entsprechender Schnittstelle. Aber vielleicht fällt ja jemandem noch was anderes ein....

1 Like

wenn das Ding UART TTL hat fein. Weis nur noch nicht wie man 5 Sensoren gut auslesen könnte.
Auch am Mega müsste man da vermutlich Leitungen umschalten.

Aber meine bevorzugte Variante wäre vermutlich ein RS485 Bus
je dezentrale Auswertung:

  • ein ATTiny (?) / ProMini/was auch immer klein und billig zu bekommen ist
  • ein MAX485
  • jeweils für maximal zwei Sensoren (zwei I2C Adressen).

Also z.B. die Hand ein Controller für zwei Sensoren.
Dort wo man nur einen Sensor braucht (im Ellbogen) halt nur mit einem Sensor.

1 Like
  1. Der Pro Mini ist ein kleiner UNO ohne USB. Da laufen alle Bibliotheken wie beim UNO, also eine Alternative zum ATtiny. Zusätzlich benötigt man einen USB TTL Adapter.
  2. Die Bibliothek SoftwareWire bietet mehrere I²C-Schnittstellen an beliebigen Pins. Mit zwei I²C-Schnittstellen und zwei Adressen kannst Du vier Sensoren ansprechen.
  3. Den µC auf dem Unterarm plazieren und mittels RS485 mit dem Haupt-µC verbinden. Eventuell SoftwareSerial verwenden.

Nur so Ideen :slightly_smiling_face:

1 Like

Gibt es sowas wie MCP2551 als adressierbare Chips?

sorry, ist nicht so meine Welt...

Evtl. über slope-Control in sleep setzen - aber nur nach kurzem Blick ins DB geraten.

Gruß Tommy

1 Like

Den hatteich noch nicht mal genommen.
Das mit dem RS...
Na mal sehen...

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.