I2C Sensoren über längere Kabel (~10m) anschließen

Hallo Leute,
das Problem bei längeren Kabeln am i2C dürfte wohl hinlänglich bekannt sein.
Wie kann man mehrere I2C Sensoren am besten an einer Zentrale anschließen? Funk kommt hier nicht in Frage.
Pro Sensor einen µC (Arduino Pro Mini) mit verbauen und die Daten seriell mit einer Sensor-ID an die Zentrale schicken?

Ich stehe da gerade etwas auf dem Schlauch.

Kabelgebunden: RS485, CAN oder LAN

Seriell (UART) wird ein Problem, da du einen Bus brauchst.
Oder du verwendest für I2C die Bus-Extender.
Bei richtiger Kabelauswahl und sauberer Konfiguration geht das auch über 10m.

Es gibt einen I2C Extender

Läuft bei mir über normales geschirmtes Telefonkabel ca. 15m.

Du solltes den Bustakt auf 32 kHz reduzieren. Wire.setClock(32000);

RS485 ist ein Industriestandard, von dem ich schon viel gelesen, aber noch nie in der meiner Hobbythek eingesetzt habe. Was braucht man dafür wieder? Bestimmt Sensoren und Peripherie, die RS485 können und damit verdammt teuer sind.
Ich habe von 2000 bis 2005 in einem Konstruktionsbüro im Maschinenbau gearbeitet. Da wurden nur Sensoren von Balluff, Siemens usw. verbaut. Da kostet jeder Sensor über 100€. So extrem teuer soll meine Steuerung jetzt auch nicht werden.
Mir ist schon klar, dass man mit 1.99€ Sensoren aus der Bucht keinen Mercedes bauen kann.

@HotSystems
Wie komme ich bei der Auswahl "vernünftiger Kabel" unter die Grenze von 40pF.
Ich hätte noch einige 100m CAT5 Kabel rumliegen.
Braun als SDA, Braun-Weiß gegen GND, Grün als SCL, Grün-Weiß gegen GND?
Orange als VCC, Blau als GND und alle verbleibenden Adern gegen GND?

RS485 ist ein Industriestandard, von dem ich schon viel gelesen, aber noch nie in der meiner Hobbythek eingesetzt habe. Was braucht man dafür wieder? Bestimmt Sensoren und Peripherie, die RS485 können und damit verdammt teuer sind.

Angst ist kein guter Ratgeber!

10 Stück für 3,08€
(nur ein Beispiel)

Ein µC, welcher UART spricht, und Sensoren lesen kann, sollte auch für ca 1€ zu haben sein.
(evtl ein Pro Mini klon)

Kosten also eher 2€ pro Sensor.
Nicht 100€ pro Sensor

Hi

Wenn externe Arduino, meine Wahl: CAN
Dort ist direkt die ‘Wer darf jetzt’ und die Fehler-Korrektur enthalten - Das musst Du sonst nämlich selber erst zusammen bekommen.
Kleiner Wermutstropfen: Die Nachrichtenlänge ich auf 8 Byte begrenzt.
Auch ist Es hier ‘anders’ - man schickt die Nachricht NICHT an einen Empfänger, sondern man sendet sie Nachricht nur als eindeutiger ABSENDER ab - Wer Die haben will, muß Die halt mitlesen.
Diese Absender-Kennung MUSS Einzig sein - allerdings kann jeder Knoten (heißen die Teilnehmer beim CAN) beliebig viele Kennungen benutzen - aber eben jede Kennung nur auf EINEM Sender.
… man setzt somit die Absender-Kennung als eine Art ‘Was bin ich’ - alle gesendeten Temperaturen haben eine ‘verwandte’ Kennung - so kann ein Empfänger Diese einfach ausfiltern (so weit bin ich aber noch nicht) und muß nicht den ganzen Quatsch mitlesen, um die Temperatur-Werte erkennen zu können.
Gleiches für andere Werte - im Auto springen zig Temperaturen rum, aber auch Drehzahl-Sensoren ect.pp.
Die Höhe der Kennung entscheidet auch, ‘Wer darf, wenn mehrere wollen’ - so kann man wichtige Signale bevorzugt versenden lassen - die Anderen ‘verlieren’ einfach, wenn mehrere gleichzeitig versendet werden sollen - Die müssen dann Ihr Glück ‘etwas später’ erneut probieren.
DAS nimmt Dir der CAN-Kontroller aber ebenfalls ab.
Das, was aus dem CAN-Kontroller raus kommt, passt normal.

MfG

Noch mal auf Anfang:
wie bekomme ich jetzt z.B. einen BME280 dazu, dass er RJ485 kann?
Sensor + Arduino + RJ485 Schild?

Asynchrone serielle Kommunikation (Serial) geht nicht ohne Controller und/mit UART an beiden Enden.

SPI ist nicht so anspruchsvoll, da können die Leitungen direkt an die Sensoren angeschlossen werden, oder mit Leitungstreibern für RS-485 o.ä. auch verlängert werden.

Bei I2C machen die bidirektionalen Leitungen Probleme, da kann man nicht einfach die üblichen unidirektionalen Leitungstreiber zum Verlängern benutzen.

Uff, das wird heftig.
6 Sensoren, 1 Rührwerk, eine Pulverdosierung und eine Wasserpumpe in feuchter Umgebung und dann noch die Datenübertragung.
Ich werde es wohl so angehen:
Die Sensoren senden ihre Daten an eine kleine Sub-Steuerung, die dann wiederum per LAN mit der zentralen Steuerung verbunden ist.

Was soll das werden: Eine Kälbertränke mit Tiererkennung und Milchpulvermischanlage.
Könnte jetzt jeder sagen: Kauf die Scheiße bei Westfalia für 20.000€ und Ruhe is.
Ich will meinen Kumpels mit ihren kleinen Bauernhöfen (50-80 Kühe) etwas unter die Arme greifen und durch kleine Technik Zeit und Geld sparen helfen.

Dein Problem verlangt nach mehreren Experten:

  • Hardware: Sensoren und Aktoren, Stromversorgung und Verkabelung
  • Software für die Erkennung und Ablaufsteuerung
  • Software für die Kommunikation mit einem Server
  • Datenbank auf dem Server?
  • UI/GUI für die Überwachung der Anlage - Smartphone App?

Wenn dabei irgendwas schief geht, wirst Du für Dein Engagement wenig Dank von Deinen Freunden ernten.

… sollten dann nicht Deine Kumpels den Kram für 10’000€ kaufen? feix

Hier - ist doch kein Ding - dafür spielen wir mit Elektronik - wenn man nebenbei sogar ein echtes Problem erschlagen kann - top!

Für mich klingt Das aber so, daß Du Außen einen eigenen Arduino stationieren kannst, Der den Betrieb (mehr oder minder) autark meistert.

‘per LAN mit der zentralen Steuerung’ … wenn Diese nicht ebenfalls ein Arduino mit ‘Alles mein Programm’ ist, könnte hier ein Stolperstein liegen.

Wenn die Geschwindigkeit der Datenübertragung Innen<->Außen keine größere Rolle spielt, kannst Du auch schnarch lahm größere Distanzen überwinden.
Mit den von combie verlinkten RS485-Umsetzern kannst Du die vom Arduino gegebene RS232 auf RS485 und auf der Gegenseite wieder auf RS232 auf Arduino umsetzen - der RS485-Teil kann dabei einiges an Länge ab (differenzielle Datenübertragung).
(Die Umsetzer werden ‘umgeschaltet’ zwischen Empfangen und Senden)

Was soll überhaupt von Innen bedient werden können?
Werden die Daten noch wo Anders gebraucht?

MfG

PS: Den Passung aka ‘Undank ist der Welten Lohn’ unterschreibe ich aber auch.
Solange Alles klappt, bist Du gerne gesehener Gast - wenn’s Probleme gibt oder gar Ausfälle, bis Du bestenfalls ein Ärgernis oder Empfänger der Post des Anwalt …

freddy64:
Noch mal auf Anfang:
wie bekomme ich jetzt z.B. einen BME280 dazu, dass er RJ485 kann?
Sensor + Arduino + RJ485 Schild? RS485

Ja: Sensor + Arduino + Buselektronik + Leitung + Buselektronik + Arduino

RS485 ist eine serielle Schnittstelle wie UART oder RS232, aber mit einem Differenzsignal, weshalb sich elektromagnetische Störungen idealerweise neutralisieren. Außerdem kann aus einer Punkt-zu-Punkt-Verbindung ein Bus werden. Wenn der Sensor nicht RS485 “spricht”, brauchst Du einen Arduino (Nano, ProMini) als Übersetzer.

freddy64:
Eine Kälbertränke mit Tiererkennung und Milchpulvermischanlage.

Wegen der eingebauten Plausibilitätsüberprüfung, die Du sonst in Software realisieren mußt, empfehle ich CanBus. MCP2515 CAN Bus Modul

Nick Gammon RS485

Nick Gammon I2C

UNO - Mega - Teensy mittels CAN-Bus verbinden

Die Sache mit dem Undank kenne ich aus eigener Erfahrung. Da kann ich nur zu glasklaren Absprachen raten, sonst endest Du als der Depp ohne Freunde.

HotSystems:
Oder du verwendest für I2C die Bus-Extender.
Bei richtiger Kabelauswahl und sauberer Konfiguration geht das auch über 10m.

Ja, das würde ich auch damit machen. Die kosten kleines Geld, und es läuft.

Franz

Franz54:
Ja, das würde ich auch damit machen. Die kosten kleines Geld, und es läuft.

Bisher war ich immer davon überzeugt.

Allerdings das was der TO damit vor hat (Post#10), ist das keine optimale Lösung.
Da gibt es mit RS485 oder CAN bessere Lösungen.

Au ja, das ist eine andere Dimmension. Da muss die Kommunikation schon extrem sicher sein. Ist auch eine Sache der Kommunikations-Software. Aber eine seeeehr interessante Sache ist das schon. :o

Wäre noch interessant welche 6 Sensoren da noch mitspielen, und deren Entfernung zum Arduino.

Dein Ziel macht mich zu Deinem Verbündeten… - Ich hab’ auch ein paar BME280 bei Zucht-Gärtnern verbaut, die sich auf deren Funktion verlassen (müssen), und auch meiner nachgelagerten Klimasteuerung vertrauen.

= Ich habe I²C in verschiedenen Umgebungen auch über Distanzen in Bus- und Sternform eingesetzt. Jeweils zuverlässig.

In Deinem - soweit ja sehr durchdachten - Aufbau vermute ich als “Übeltäter” eine einzelne störanfällige Bus-Strecke.

Könnte hier Feuchtigkeit eine Rolle spielen? Oder Induktionen durch nicht ordentlich geschirmte Kabel?

An Deiner Idee jedenfalls ist nichts auszusetzen, und das ist mit den von Dir vorgeschlagenen Komponenten auch machbar. Du hast ja wenige Sensoren und Aktoren an jeweils einer Futterstelle, I²C KANN das auf jeden Fall; wenn’s bei Dir nicht geht, hast Du ein mechanisches vor einem elektronischen Problem.

Da würde ich Dich bitten, das nochmal genauestens zu prüfen und vielleicht auch die einzelnen Sensor- und Aktorgeräte genauer anzuschauen.

Meine Lösung wäre, die punktuelle Futterstelle mit einem einzigen µC zu versorgen, und dann alleine die UART-Verbindung zum Host “artgerecht anzupassen”, also entweder per TTL oder RS485.