System hängt sich auf: Arduino Uno + 3x MLX + 1x SSD1306

Hallo zusammen,

mit einem Freund habe ich ein kleines Arduino Projekt umgesetzt, welches es ermöglicht drei Temperatur-Sensoren auszulesen und deren Werte auf einem Display anzuzeigen.

Problem:
Im Entwicklungsaufbau (mit kurzen Verbindungsstrecken von Komponenten zu Arduino) läuft unser Projekt ohne Probleme.
Im realen Einsatzszenario müssen die Sensoren und das Display jedoch anhand längerer Kabel mit dem Arduino verbunden werden. Das führt jedoch dazu, dass sich das System unregelmäßig beim Start aufhängt.

Systemkomponenten:

  • Arduino Uno
  • 3x MLX 90614 (5V) Sensoren (Entfernung zum Arduino ca. 80cm)
  • SSD1306 Display (Entfernung zum Arduino ca. 100cm)
  • Verkabelung durch 1x1mm2 H05V-l Einzelader (offen verlegt)

Links zum Projekt (GitHub):

Frage:
Wir sind uns nun nicht sicher, ob:

  • der Kabel-Widerstand zu groß wird (?) > Würde dies dazu führen, dass sich das System aufhängt, weil es eine angeforderte (Sensor-)Adresse nicht findet?
  • eine Anpassung der Software uns weiterhelfen könnte (Restart der Anwendung o.Ä.) (?)
    Hat schon jemand Erfahrung mit dem Verbinden von Sensoren zur Arduino über längere Distanzen sammeln können und kann uns mit Denkanstößen auf die Sprünge helfen?

Vielen Dank für eure Hilfe,

David

Edit 21.03.2017:
Ergänzungen: MLX Spannung, Kabeltyp

Du machst zu wenig Angaben zu dem Hardware-Aufbau.
Was ist das für ein Kabel (abgeschirmt, paarweise verdrillt, kapazität/m)?
Sensoren und Display sternförmig oder in Serie hintereinander geschaltet?
Hast Du die Terminierungs-Widerstände wirklich nicht angeschlossen (fehlen im Schaltplan)?

Vielen Dank für deine wertvollen Fragestellungen!

In der Tat haben wir keine Terminierungs-Widerstände verbaut und so wie es nach etwas Recherche u.a. hier erklärt wird, scheint das tatsächlich ein Problem für uns darzustellen.

Würde sich in unserem Beispiel entsprechend eine AC-Terminierung anbieten?

Wir verwenden folgende Kabel:

  • aktuell verbaut: 1x1mm2 H05V-l Einzelader (offen verlegt)
  • alternativ wurde erfolglos getestet: 4x0,75mm2 JSTY Steuerleitung (geschirmt)

Der Aufbau entspricht 1:1 dem, des hochgeladenen Schaltplans (siehe Anhang TTP_Schaltplan).

Die Entfernungen der Sensoren und die des Displays zum Arduino sind wie folgt (siehe Anhang TTP_Distanzen):

Vom SID Pin des Arduino's geht zunächst ein Kabel 50 mm aus einem Gehäuse heraus. Anschließend wird es aufgeteilt für die Verkabelung des Displays (1) und der Sensoren (2).

  • Das Display-Kabel ist 950 mm lang.
  • Die Hauptverbindung für die Sensoren ist zunächst 75mm lang und teilt sich dann für den MLX 3. Das Verbindungskabel für den MLX 3 ist 150mm lang. Nach weiteren 50mm teilt sich die Hauptverbindung erneut für den MLX 2. Das Verbindungskabel für den MLX 2 ist 100 mm lang. Ab dieser Teilung kommen noch 100 mm bis zum MLX 1.

Viele Grüße
David

TTP_Distanzen.jpg

Gewöhnlich benutzt man 4.7kOhm Widerstände jeweils von SDA und SCL nach VCC (Pullup). Das hängt aber auch von der Leitungskapazität ab. Hier mal ein typisches Setup.

I2C ist allerdings auch als reines Bus-Sytem vorgesehen. Das heißt, die angeschlossen Geräte hängen alle direkt an diesem Bus und nicht (wie bei Dir) mit diesen doch recht langen Abzweigungen. Die Terminierung würde man am letzten angeschlossenen Gerät am Bus vornehmen.
Ob das mit Deiner Verzweigungs-Verkabelung wirklich funktionieren wird, kann ich nicht sagen. Das müsstest Du mit einem Oszilloskop testen, ob da die Flanken noch einwandfrei ankommen.