Temperatur mit vielen DS18B20 @ UNO über RS232 am PC sammeln

Wenn eh mal eines Tages in jeden Raum ein Arduino soll, dann verstehe ich nicht, warum du dich mit langen 1wire Leitungen aufhalten willst.

Ich würde bewährte BUS Systeme verwenden, z.B. RS485 oder eben auch CAN.

Aber da das Ziel der Daten ohnehin ein PC sein soll, empfehle ich gleich Arduino mit Ethernet/W5100. Da brauchst dich auf den unteren Layern um gar nichts kümmern (weil vorhanden) und funktioniert. Wenn es eine "morderne" Hausverkabelung gibt sparst du dir viele Stunden/Tage, wenn es diese noch nicht gibt - ist es eh an der Zeit über LAN in jedem Raum nachzudenken :wink:

Wenn Funk - ehrlich - da würde ich auch auf WLAN gehen. Seit dem ESP/WEMOS/NodeMCU Modulen - ist das in Bastlerkreisen imho konkurrenzlos im Preis wenn man nicht auf Battierebetrieb angewiesen ist, was aber im Haus kein Problem darstellen soll. Update Over The Air - kommt dann quasi auch noch gratis mit. Mal so eben vom Schreibtisch aus die NodeMCU's am Dachboden aktualisieren und dann die im Keller - das vereinfacht schon den laufenden Betrieb.

Das mit Temperatur per Leitung ist schon sinnvoll, da ich hier öfter messe und entsprechend oft funken müsste als wenn ich jetzt nur einen Lichtschalter drücke... Ich will keine 50 Temperaturwerje jede Minute rumfunken. WLAN kommt auf keinen Fall in frage, da ich jetzt sogar beim PC auf Ethernet umsteige (PC -> NAS Gigabit und PC -> Fritzbox für Inet). Das einzige Gerät mit WLAN wäre dann nur noch das Smartphone - und das ist gut so. Ich bin jetzt am Rand eines Dorfes wo ich schon so von den fünf umliegenden Häusern WLAN empfange..da muss ich mir nicht in den eigenen Wänden noch unzähliche EM-Strahler aufbauen :wink: Nächster Punkt wäre Stromversorgung - Bis auf die Haupt-Ardus pro Raum sollen die Einzelsensoren mit Eneloops laufen.

Vorteil der nRF24L01 ist ja, dass ich die bei nichtgebrauch abschalten kann. WLAN ist ja nicht mal eben für paar Millisekunden an, Daten raus und aus.. Ist für solche Sachen hier eigentlich optimal.

Lichtschalter z.B. bekommen jeder einen eigenen Ardu mit einem eigenen nRF24L01 - ich müsste ja sonst von dem "Raum-Ardu" zu jedem Gerät und Schalter ein Kabel legen, was ja gar keinen Sinn macht. Und hätte jetzt jedes der Ardus eine echte WLAN Verbindung oder Ethernet verkabelung...neee...

Das Haus ist zur Miete seit wenigen Wochen und wird nur bis irgendwann nächstes Jahr bleiben. D.h. nix mit fester Verlegung. Noch ein Grund für Funk.

An den TO:
Was willst du genau erreichen?
1.) Messwerterfassung von irgendwelchen Sensoren?
2.) Oder auch Licht, Rolladensteuerung usw?

Ich habe 1.) gebaut mit bisher 69 Kanälen u d inzwischen über 30 Mio. Datensätzen. Steuern kann man aber nicht direkt über das System

Lieben Gruß,
Chris

themanfrommoon:
An den TO:
Was willst du genau erreichen?
1.) Messwerterfassung von irgendwelchen Sensoren?
2.) Oder auch Licht, Rolladensteuerung usw?

Aktuell nur Temperaturerfassung. Räume, Außen (Sonne + Schatten) und die Solarkollektoren bzgl. Steuerung (Lüfter) und Ertragberechnung (kW/h). Hier wird also viel gemacht, weshalb ich das nicht via Funk laufen lassen will. Kollektoren muss ich jede paar Sekunden messen, da eine Wolke bei Minusgraden den Kollektor innerhalb wenigen Sekunden soweit auskühlt, dass der Lüfter gestoppt werden muss. Da kommt also viel Traffic zusammen. Die Steuerung wird hier später aber ein eigener Ardu übernehmen, da es zu viel für die Haussteuerung wäre. Dieser würde dann aber mit der Haussteuerung kommunizieren (wenn ich Beispielsweise dann via Smartphone die Wunschtemperatur von Unterwegs aus einstelle).

Als nächstes wäre das Ersetzen der Funksteckdosen durch eigenständige Arduino Mini/Nano mit je einem Funkmodul. Das wäre dann für Licht und sowas wie z.B. Kaffeemaschine oder Dampfgarer (aktuell mit Mechanischer Uhr, welcher ein Display und Arduino verpasst bekommt), welche von der "Zentrale" gechaltet werden sollen. Wobei ich bei den Steckdosen ja theoretisch von Funk weg müsste bzw. evtl. auf 433 Mhz gehen, da hier der Empfang nicht "strahlt". Es läuft ja passiv, solange niemand was sendet. Die nRF24L01 müssen sich ja, wie beim WLAN, zuerst verbinden um etwas zu empfangen oder zu senden. Dies ist ja eher für Lichtschalter oder ähnliches interessanter, wo eine Aktion zur Haussteuerung hin geschickt wird.

D.h.:

  • Lichtschalter
  • Steckdosen
  • Geräte

Das ganze soll dann über Google Assistent via Sprache gesteuert werden (Raspberry 1b + 2b habe ich hier nutzlos rumliegen).

Wenn es rein um die Datenerfassung, Speicherung und Visualisierung (Browser und Android), dann schau dir mal www.volkszaehler.org an.
Läuft bei mir auf einem Raspberry Pi 3 und einer SSD. Da ist das alles mit Datenbank schon fertig. Kann ich nur empfehlen.
Wenn es auch um Steuerung geht suche mal nach Domotics, MQTT und ESPeasy

Dazu gibt's große Communities, es ist verbreitet und bewährt, kostet nix und man bekommt guten Support.

Wozu das Rad neu erfinden?

themanfrommoon:
Dazu gibt's große Communities, es ist verbreitet und bewährt, kostet nix und man bekommt guten Support.

Wozu das Rad neu erfinden?

Danke für die Infos :slight_smile: Banana Pi mit SATA und ne ungenutzte 2,5" Platte hätte ich sogar da.
Neu erfinden nicht direkt - aber wie wollen die z.B. meinen selbst umgebauten Dampfgarer einstellen und starten? Oder den umgebauten Vollautomaten mit dem Wecker synchronisieren, dass der Kaffee 5 Min vor'm Aufstehen fertig ist? Kann man da Protokolle für unbekannte Geräte definieren?

  • aber wie wollen die z.B. meinen selbst umgebauten Dampfgarer einstellen und starten? Oder den umgebauten Vollautomaten mit dem Wecker synchronisieren, dass der Kaffee 5 Min vor'm Aufstehen fertig ist? Kann man da Protokolle für unbekannte Geräte definieren?

Da das alles Open Source ist kannst du alles dazuprogrammieren was du willst. Dem sind keine Grenzen gesetzt.

Ich habe drei Lüftermotoren bei denen ich die Drehzahl logge. Das gab es nicht so wie ich es wollte. An einem ESP8266 hab ich 8 BME280 Sensoren dran. Das ging auch nicht von der Stange. Hab ich auch selbst programmiert. Das ist kein Problem.
Meine Heizung will ich auch noch anzapfen über CAN Bus, damit muss ich mich aber erstmal beschäftigen....

Top! Danke :slight_smile: Stromzähler wäre bei mir das nächste nach Temperatur - ist schon mal so nen modernerer mit LED die je wH aufblitzt. Nen Fototransistor abfragen ist ja ziemlich simpel.

Stromzähler gibts viele verschiedene, aber für alle gibts ne Lösung. Ich habe 2 Stromzähler mit je einem IR Lesekopf

themanfrommoon:
Läuft bei mir auf einem Raspberry Pi 3 und einer SSD. Da ist das alles mit Datenbank schon fertig. Kann ich nur empfehlen.
Wenn es auch um Steuerung geht suche mal nach Domotics, MQTT und ESPeasy

Habe mich die Tage noch weiter mit dem Thema beschäftigt und diverse System angeschaut.
Fest steht:

1, Zentrale = Home Assistant (@ Windows PC aka NAS)

  1. MQTT Broker = Mosquito @ selber PC

  2. Arduino UNO oder Mega mit Ethernet Shield 1:1 mit PC verbunden, welcher von allen Ardus über NRF24L01, 433 Mhz oder 1-wire (DS18B20) die Daten bekommt und diese jeweils als einzelne MQTT-Clients an Broker weiter leitet

Das mit 3 kann so funktionieren? Scheint ja ein einfaches Protokoll zu sein. Solange die Überprüfung des Clients über IP deaktiviert wird am Broker, sollte dieser alle Nachrichten verwalten.

Willst damit nur loggen, z.B. Temperaturen, Stromzähler, Wasseruhr, Lüfterdrehzahl?
Das mach ich mit dem Volkszähler.

Oder willst du auch was steuern, z.B. Licht, Rolladen, usw.?
Das kann der Volkszähler nicht, und ich mache es auch nicht woanders mit. Dafür waren die Stichworte Domotics, MQTT und openHAB

themanfrommoon:
Willst damit nur loggen, z.B. Temperaturen, Stromzähler, Wasseruhr, Lüfterdrehzahl?
Das mach ich mit dem Volkszähler.

Oder willst du auch was steuern, z.B. Licht, Rolladen, usw.?
Das kann der Volkszähler nicht, und ich mache es auch nicht woanders mit. Dafür waren die Stichworte Domotics, MQTT und openHAB

Natürlich beides - die Zentrale soll ja anhand der Temperatursensoren entscheiden was getan werden soll. Unabhängig soll das ja nicht laufen.

Als Zentrale Home Assistant (da nicht Java und iwie netter). Unterstützt ja alles mögliche an fertigen Geräten, falls ich mir ne WLAN Steckdose oder iwelche Lichter holen sollte + ich kann meinen Kram (Temperatur, Feuchtigkeit, Lichtsensoren, Lichtschalter, LEDs, 433er Steckdosen usw) mittels eigenen MQTT Broker einbinden. Solange ich das richtig verstanden habe...

Gut, dann kann ich dir aber nicht mehr helfen, siehe oben.
Ich denke dann bist du hier auch falsch. Du musst dann in ein Domotics, OpenHAB, FHEM oder wie sie alle heissen Forum wechseln. Das ist ja alles kein Arduino Thema mehr.

Lieben Gruß und viel Erfolg,
Chris

themanfrommoon:
Gut, dann kann ich dir aber nicht mehr helfen, siehe oben.
Ich denke dann bist du hier auch falsch. Du musst dann in ein Domotics, OpenHAB, FHEM oder wie sie alle heissen Forum wechseln. Das ist ja alles kein Arduino Thema mehr

Die Hauptarbeit ist ja Arduino - und zwar das Sammeln der ganzen Daten diverser Arduinos über OneWire/2.1Ghz/433Mhz und das Vorgaukeln von einzelnen MQTT Geräte beim MQTT Broker.
Aber das kriege ich schon selber hin - ich programmiere seit 28 Jahren :wink: Mir gings ja hier mehr um die Vorgehensweise. Danke noch mal :slight_smile:

@AlphaRay,
in der Vergangenheit habe ich viele Aufbauten mit dem DS18B20 vorgenommen. Ja, er hat einen 1Wire Bus. Entweder nimmst Du einen USB/One-Wire Converter von Maxim, bzw Dallas. Schau mal beim Fuchs Shop danach. Oder eben einen Arduino.

Anschluß der Sensoren
Die Sensoren müssen im 3 Draht Verfahren angeschlossen werden, wenn lange Entfernungen und/oder viele Sensoren angeschlossen werden. Wichtiger als die Spannungsversorgungsleitung ist, daß die Masseleitung einen großen Aderquerschnitt hat. Jedenfalls dann, wenn Du alle Sensoren zeitgleich messen läßt. Und das machen die Arduino Libraries üblicherweise. Solltet Du den nötigen Pull-Up Widerstand der 1-Wire Datenleitung arduinoseitig vergessen, läuft garnichts. Im Datenblatt des DS18B20 ist der nötige Pull-Up-Strom (von-bis mA) spezifiziert. Bei langen Leitungen, darf es ruhig eher richtung niederohmig gehen. Versehe jeden einzelnen DS18B20 entlang der Leitung mit einem 100nF/ker Kondensator.
Ich sehe gerade, der Sink Current beträgt max. 4 mA, bei auf 0,4Volt. Hieße R = (3,3V -0,4V) / 4 mA = 720 Ohm. Ich würde es mit 820, oder 1000 Ohm versuchen.

Selbsterwärmung
Die Selbsterwärmung steigt mit der Abfragehäufigkeit, der Bitbreite der Temperaturauflösung und der Betriebsspannung. Meine Empfehlung, nimm die 3,3 Volt Stromversorgung für die Sensoren und schalte auch den Pull-Up zwischen DS18B20-Datenleitung und den 3,3Volt. Das habe ich erfolgreich öfter mit dem Arduino Due gemacht, mit über 20, oder 30 Sensoren und 50-80 Meter Flachbandleitung. Gemessen habe ich in der höchsten Auflösung, in 0,0625K.

Kalibrierung
Solltest Du die Sensoren kalibrieren wollen, bieten sich die Alarmregister an. Jeder DS18B20 hat eine ROM. Die ROM erfüllt den Zweck einer MAC, einer Netzwerkarte und macht jeden DS18B20 einzigartig. Die Alarmregister werden im Sensor nicht benötigt und sind nicht flüchtig. Wenn Du magst, schreibe dort Kalibrierwerte hinein. Dann gehen sie auch nicht verloren.

Adressierung
Die üblichen Bibliotheken werden gähnend langsam, wenn viel Sensoren dranhängen, weil sie immer wieder die ROM der angeschlossnen Sensoren ermitteln.
Besser Du ermittelst alle ROM ein mal, legst sie in einem Array ab und addressierst die Sensoren direkt. Idealerweise, wenns die Stromversorgung hergibt, leitest Du die A/D-Wandlung der Temperatur durch den Skiprom Befehl ein. Dieser addressiert alle Sensoren gesammelt, also gleichzeitig. Jeder Sensor legt dann seinen Meßwert im internen Speicher ab. Anschließend wird jeder Sensor einzeln addressiert, um die Daten abzuholen.

Das wars, was mir gerade dazu einfiel.

Achso, wenn Du jeden Sensor auf ein Kupfer-, oder Alublech klebst (Sekundenkleber tuts ausreichend gut), leitest Du die Selbsterwärmung in Teilen ab. Ohne kann es bei sekündlichen Abfragen schonmal 1k zu hohe Temperaturen geben...

Solltest Du etwas gezielter programmieren wollen...
Bei der Ergebnisabfrage muß nicht der ganze String abgewartet werden. Ein Reset ist jederzeit zulässig. Also, wenn die Meßwerte übertragen sind, mußt Du nicht mehr die Alarmregister, die CRC,... abwarten, sondern ein Reset durchführen und zum nächsten Sensor übergehen. Auch geben die Sensoren an, wenn der letzte auf der Leitung mit seiner Konvertierung fertig ist. Dann muß man keinen zeitlichen Sicherheitsabstand von 750ms abwarten, denn die sind alle meist nach 6xx ms fertig.

Viel Spaß mit diesen Feinheiten, wenn Du magst.

Solltest Du einen Windmesser bauen wollen? Das geht kaloriemtrisch mit diesen Sensoren ganz gut. Klebe einfach einen SMD Widerstand auf jeden Sensor und beheize einen Sensor so, daß er immer eine konstante Temperatur (2...5 Kelvin) über der Umgebungstemperatur liegt. Die Umgebungstemperatur mißt Du mit einem 2. Sensor. Der muß die gleichen thermischen Eigenschaften, wie der 1. haben, damit er Temperatugradienten zeitgleich und nur temperaturverschoben folgt. Die Heizleistung verhält sich jetzt proportional zum Luft-Massenstrom. Ref. Kingsche Gleichung. ...Beim ganzen kann man sich gleich darin üben, einen PID-Regler zu programmieren. Für die präzise Heizung gibt ein 16bit PWM die benötigte Auflösung (Servo Bibliothek?)

Viel Spaß...
Und immer mit dem fliesskomma rechnen :wink:

fliesskomma:
@AlphaRay,
in der Vergangenheit habe ich viele Aufbauten mit dem DS18B20 vorgenommen. Ja, er hat einen 1Wire Bus. Entweder nimmst Du einen USB/One-Wire Converter von Maxim, bzw Dallas. Schau mal beim Fuchs Shop danach. Oder eben einen Arduino.

Viel Spaß...
Und immer mit dem fliesskomma rechnen :wink:

Danke für die Ausführlichen Tipps!! :slight_smile: Habe es jetzt erst gesehen...
Komme demnächst endlich zum basteln - bis jetzt keine Zeit gefunden. Gestern ist mein 3D-Drucker angekommen (den ich noch zusammenbauen muss), mit dem ich dann entsprechend schöne Gehäuse für die Sensoren drucken kann! :wink:

Einen Aenometer hätte ich alls Referenz da. Und da ich jetzt endlich einen 3D Drucker habe und diverse alte 5V Lüfter, kann ich mir damit doch nen "richtigen" Windmesser bauen und direkt an Analogeingang vom Ardu anschließen :slight_smile:

postmaster-ino:
Hat es einen Grund, warum den Porsch, den Aud und den Merc nicht richtig ausschreibst?
Ach ja, DAS sollten KFZ-Marken sein, Dein Ardu wird wohl ein Arduino oder ... kompatibler µC sein.

Um die "Ardu"-Abkürzung noch mal aufzunehmen:
ArduMover
ArduRobot
ArduPilot
ArduSensorShield

Uswusw... habe ich mir nicht ausgedacht und ist ganz geläufig. Meine Tools heißen u.a. ArduAlarm (Zeitanzeige mit Wochenwecker) und ArduFridge (Steuerung Kühlung/Heizung).