Inhaltsverzeichnis:
- Schritt 1: Geschichte dahinter…
- Schritt 2: Wie es funktioniert
- Schritt 3: Material & Werkzeuge
- Schritt 4: Dinge zusammen reparieren
- Schritt 5: Dinge zusammen verdrahten
- Schritt 6: Anschließen der Sensoren
- Schritt 7: Controller-Software
- Schritt 8: Fazit
Video: Fehlertoleranter Temperatursensor-Netzwerkcontroller - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:20
Dieses Instructable zeigt Ihnen, wie Sie ein Arduino Uno-Board in einen Einzweck-Controller für einen Satz DS18B20-Temperatursensoren umwandeln, die zur automatischen Isolierung fehlerhafter Sensoren fähig sind.
Der Controller kann mit Arduino Uno bis zu 8 Sensoren verwalten. (Und vieles mehr mit Arduino Mega oder mit einer leichten Software-Modifikation.)
Schritt 1: Geschichte dahinter…
Vor ein paar Jahren habe ich im Gewächshaus meines Vaters ein DS18B20 Temperatursensornetzwerk für meinen Pi-basierten Heizungsregler eingerichtet. Leider war die Zuverlässigkeit des Controllers hauptsächlich aufgrund häufiger Sensorausfälle schlecht. Ich habe mehrere Setups ausprobiert - Parasitenstrom, Direktstrom, Verbindung des Netzwerks mit Pi sowie Verbindung mit einer Atmega-basierten benutzerdefinierten Platine (der Hauptzweck war der Antrieb von Ventilmotoren).
Schlimmer noch, die Zuverlässigkeit des Sensornetzwerks sank hauptsächlich in Winternächten, während es im Sommer fast keine Probleme gab! Was zum Teufel ist hier los?
Um zu untersuchen, welcher Sensor das Problem verursacht, entstand die Notwendigkeit, sie einzeln ein- und auszuschalten oder eine beliebige Kombination davon zu aktivieren.
Schritt 2: Wie es funktioniert
DS18B20 (der Temperatursensor) verwendet ein proprietäres 1-Draht-Protokoll, das es mehreren Sensoren ermöglicht, eine gemeinsame Datenverbindung (diesen einen Draht) zu teilen. Diese gemeinsame Datenverbindung ist mit einem der GPIO-Pins von Arduino und über einen Pull-up-Widerstand mit + 5 V verbunden - nichts ungewöhnliches, viele Anleitungen decken dieses Setup ab.
Der Trick besteht darin, dass die Stromkabel jedes Sensors mit eigenen (dedizierten) GPIO-Pins verbunden sind, sodass sie separat ein- und ausgeschaltet werden können. Wenn beispielsweise ein Sensor ein Vcc-Kabel mit Pin #3 und GND mit Pin #2 verbunden hat, versorgt das Setzen von Pin #3 auf HIGH den Sensor mit Strom (keine Überraschung), während das Setzen von Pin #2 auf LOW Masse liefert (eine kleine Überraschung für mich). Wenn beide Pins in den Eingabemodus versetzt werden, werden der Sensor und seine Verkabelung (fast) vollständig isoliert – egal, welcher Fehler (z. B. ein Kurzschluss) darin auftritt, er stört die anderen nicht.
(Fair zu sagen, dass das Verbinden des Datenkabels mit etwas anderem, das irgendwie mit Arduino verbunden ist, tatsächlich zu Störungen führt, aber in meinem Setup ist es fast unmöglich).
Beachten Sie, dass DS18B20 bis zu 1,5 mA verbraucht, während ein Arduino-Pin bis zu 40 mA erzeugen / senken kann, sodass es absolut sicher ist, Sensoren direkt über GPIO-Pins mit Strom zu versorgen.
Schritt 3: Material & Werkzeuge
Material
- 1 Arduino UNO-Platine
- 3 Buchsenleisten: 1×4, 1×6 und 1×6 (oder länger – ich schneide sie aus einer 1×40-Leiste)
- ein Kleber
- ein Stück blanker Kupferdraht (mindestens 10 cm)
- ein Isolierband
- Lötverbrauchsmaterialien (Draht, Flussmittel…)
Werkzeuge
- Lötausrüstung (Eisen, Halter, …)
- kleine Schneidezange
Schritt 4: Dinge zusammen reparieren
Kleben Sie die Buchsenleisten auf die Arduino-Platinenleisten:
- 1×4 Stiftleiste neben "analoger" Stiftleiste, Seite an Seite mit Pins A0–A4
- 1×6-Stiftleiste neben der ersten digitalen Stiftleiste, Seite an Seite mit Pins 2–7
- 1×6-Stiftleiste neben zweiter digitaler Stiftleiste, Seite an Seite mit Pins 8–13
Beachten Sie, dass meine Header etwas länger sind … es hat keine Nachteile und keine Vorteile, nehme ich an.
Schritt 5: Dinge zusammen verdrahten
Verdrahtung der 1-Draht-Busleitung:
- Verbinden Sie alle Anschlüsse der geklebten Stiftleisten auf der "digitalen" Seite (neben den Pins 2-13), indem Sie ein Stück blanken Draht daran anlöten
- Löten Sie das Ende dieses Drahtes an die SCL-Stiftleitung (intern verbunden mit A5)
- Verbinden Sie alle Anschlüsse des geklebten Headers auf der "analogen" Seite (Pins A0-A3), indem Sie ein Stück blanken Draht anlöten
- Löten Sie das Ende dieses Drahtes an A4- und A5-Leitungen (ich habe A5 und A6 verwendet, weil ich eine Platine mit A6 und A7 habe)
- Löten Sie einen 4k7-Widerstand zwischen dem anderen Ende dieses Drahtes und der +5-V-Stiftleitung
Anmerkungen:
- Die Pins A0–A5 können, obwohl sie als "analog" gekennzeichnet sind, auch als digitale GPIO-Pins verwendet werden.
- SCL-Pin auf "digitaler" Seite ist intern mit A5 auf "analoger" Seite verbunden; mit den Headern verbunden, bildet dies die 1-Draht-Busleitung
- A4 (als Analogeingang verwendet) misst die Spannung des Busses zu Diagnosezwecken. Aus diesem Grund ist es direkt an den Bus angeschlossen.
- Ich habe A6 anstelle von A4 verwendet, weil ich ein Board mit A6 und A7 habe; Ursprünglich wollte ich A7 als 1-Wire-Busmaster verwenden, aber diese beiden Pins können nicht als digitale GPIOs konfiguriert werden.
- Um ein falsches Anschließen der Sensorstecker zu vermeiden, können Sie den unbenutzten Kontakt (nicht mit einem Draht verbunden) von jedem Stecker weglassen / ausschneiden und in das entsprechende Loch in der aufgeklebten Stiftleiste stecken.
Schritt 6: Anschließen der Sensoren
Sie haben gerade ein Array von acht 2×2-Sockets erstellt. Sie können 2×2 Dupont-Stecker an Sensorkabel anlöten und konfektionieren und an diese Buchsen anschließen. Die Software konfiguriert die Pins so, dass gerade Pins GND-Pins und ungerade Pins Vcc-Pins sind. Für jeden Sensor ist der Vcc-Pin nur GND-Pin + 1. Einer der anderen beiden Pins der 2 × 2-Buchse (einer von diesen beiden im geklebten und gelöteten Header) ist für die Datenleitung des Sensors. Es spielt keine Rolle, welche Sie verwenden.
Schritt 7: Controller-Software
Die SerialThermometer-Skizze führt den Controller aus. Sie finden es auf github. Öffnen und hochladen mit Arduino IDE.
Schritt für Schritt:
- Öffnen Sie Ihre Arduino-IDE und installieren Sie die DallasTemperature-Bibliothek und alle ihre Abhängigkeiten über Sketch | Bibliothek einschließen | Bibliotheken verwalten.
- Git-Repository klonen. Wenn Sie mit Git nicht vertraut sind, laden Sie diese Zip-Datei herunter und entpacken Sie sie irgendwo auf Ihrem Computer.
- Öffnen Sie die SerialThermometer-Skizze in Ihrer Arduino-IDE.
- Verbinden Sie Ihr modifiziertes Arduino-Board per USB-Kabel mit Ihrem Computer (Standardweg)
- Laden Sie die Skizze mit Ihrer Arduino IDE hoch
- Öffnen Sie den Serial Monitor über Tools | Serieller Monitor
- Sie sollten eine Diagnoseausgabe sehen, die mehrere physikalische Messungen gefolgt von Temperaturmessungen enthält – jede Sensorbuchse auf einer einzigen Leitung. Wenn die Sensoranzahl beim getrennten Einschalten und beim gemeinsamen Einschalten unterschiedlich ist, werden Diagnoseschleifen bis zur Auflösung durchgeführt. Aber keine Sorge, auch die Diagnose liefert Temperaturmessungen!
Weitere Informationen zur Diagnoseausgabe finden Sie im kommentierten Bild.
Schritt 8: Fazit
Ich habe das starke Gefühl, dass meine Sensornetzwerkausfälle durch die hohe Kapazität meiner langen Verkabelung verursacht wurden – etwa 10 m LIYY 314 (3 × 0,14 mm²) Kabel für jeden Sensor. Meine Experimente haben gezeigt, dass die Kommunikation abbricht, wenn eine Kapazität von etwa oder mehr als 0,01 μF zwischen dem 1-Draht-Bus und Masse vorhanden ist, denke ich, weil der 4k7-Pull-up-Widerstand den Bus nicht schnell genug auf + 5 V ziehen kann, um die Protokollgrenzen einzuhalten.
In meinem Setup passiert es, wenn mehr als 3 Sensoren miteinander verbunden sind. Dann durchläuft der Controller einen Diagnosezyklus und misst die Temperatur Sensor für Sensor (was auch cool ist …)
Aber auch der 5. Sensor (28:ff:f2:41:51:17:04:31) sieht ziemlich schlecht aus (vielleicht falsche Lötung), also kann ich weiter nachforschen!
Empfohlen:
Temperatursensor (Arduino): 8 Schritte
Temperatursensor (Arduino): Dieses Projekt ist perfekt für Fortgeschrittene und Anfänger. Die Einrichtung ist sehr einfach. Es gibt einen Chip namens LM35 (Link für zusätzliche Erklärung), der es dem Arduino ermöglicht, die Temperatur der Umgebung zu bestimmen