Maximale Kabellänge LM 35

Hallo zusammen,

evtl. hat der ein oder andere schon Erfahrungswerte und kann mir helfen!
Ich würde gerne mit dem LM35 die Wassertemperatur in unserem Pool messen.
Den Arduino inkl. LAN-Shield möchte ich aber ungern in der Technikhütte platzieren (Temperaturschwankungen/Luftfeuchtigkeit...)
Jetzt stelle ich mir die Frage, wie lang das Anschlusskabel maximal sein darf/könnte um noch einigermaßen vernünftige Werte zu bekommen? Ich schätze mal, dass es ca. 5-6 mtr. lang sein müsste.
Könnte der Arduino in der Technikhütte bleiben könnte das Originalkabel von der Länge reichen!

Freu mich, wie immer, auf Antworten und Hilfe!!

Gruß und Dank
Tom

Nimm digitale Sensoren. Die sind wesentlich problemloser zu handhaben.

Hallo.

Welcher würde sich da dann am besten anbieten??

Gruß
Tom

Prinzipiell ist das machbar.

  • Verwende geschirmtes Kabel zum Sensor
  • verlege das Kabel möglichst nicht prarallel zu Netzkabeln, insbesondere von Motoren, die mit Frequenzumrichtern betrieben werden
  • lege den Schirm einseitig (am Arduino) auf Masse
  • lege zwischen Digital in und Masse einen Folienkondensator von 2,2 µF, das mittelt die Analogspannung elektrisch (Tiefpass)
  • bilde den Mittelwert über ca. 50 Messwerte (Anzahl ist experimentell)

Ich betreibe so einen LM35 an einem 2m Kabel in einem Wärmeschrank und einen Meter verläuft die Messleitung davon parallel zu diversen anderen Kabeln (230V Lüfter, Heizung...)
Ich habe schön ruhige Messwerte, ohne Sprünge und Ausreißer.

Ansonsten als digitaler Sensor bietet sich ein DS18B20 oder von den TSIC's ein TSIC206, 306, 506 an.
Ansonsten, PT100/PT1000 oder Thermoelemente sind zar ebenfalls analog, aber ein Quasi-Industriestandard, da sie sehr niederohmig angekoppelt sind und so weitestgehend immun gegen elektrische Störungen sind. Interfaceschalungen für diese Sensoren solltest du ebenfalls im Netz finden. Für Thermoelemente gibt es da z.B. interessante IC's von Maxim, die es für wenig Geld auf kleinen Platinen vormontiert gibt.

Welcher würde sich da dann am besten anbieten??

DS18B20, den gibt's auch in Version mit Stahl-Ummantelung: Digitaler Temperatur Sensor DS18B20 mit 3m Kabel - Sensoren Temperatur - Boxtec Onlineshop

Dann nimm halt den, der ist bereits wasserdicht und du hast keine Arbeit mehr mit dem abdichten.

Ich habe so einen DS18B20 mit einem Kabel auf 4m verlängert an einem kleinen Webserver laufen >KLICK<.
Dieser läuft seit ca 1,5 Jahren zuverlässig. Mit einem LM35 hatte ich an diesem Webserver zwischenzeitlich ziemliche Probleme von Falschmessungen weshalb ich auf den DS gewchselt bin.
Ich kann den DS mit der Tachhülse nur empfehlen.
Gruß
DerDani

P.S.: Den Sonsor gibt bei Aliexpress im 5er Pack für um 6-8€

Frage dazu an die, welche den Sensor
bereits in der Hand hatten:

Sind die Sensoren in der Stahlhülse eingegossen
oder ist der Schrumpfschlauch mit Kleber?
Also, ist Wasserdicht auch wörtlich zu nehmen?

Stefan

Guten Morgen zusammen und vielen Dank erst mal bis hierher.
OK. Dann werd ich gleich auf den DS wechseln. Danke für den Tipp.

@ volvodani: Würdest du evtl. mal bitte den Sketch deines Webservers zur Verfügung stellen?
Das ist nämlich genau so wie ich es gerne als Endziel hätte :slight_smile:
Danke schon mal dafür.

Schönen Tag euch noch.

Gruß
Tom

StefanBoth:
Sind die Sensoren in der Stahlhülse eingegossen oder ist der Schrumpfschlauch mit Kleber? Also, ist Wasserdicht auch wörtlich zu nehmen?

Ja, die DS18B20 im Stahlmantel sind fest eingegossen. Einer meiner drei verbauten befindet sich seit zwei Jahren im Regenwasser-Tank - bislang ohne sichtbare Korrosion.
Gruß

Ich würde auch sagen es sieht eher nach eingegossen als nach eingeklebt aus.
@TaO mache ich wenn ich zuhause bin evtl heute Abend.
Sketch ist aber alt. :wink:
Gurß
DerDani

@ volvodani: Vielen Dank schon mal.
Na was "altes" muss ja nicht unbedingt schlecht sein.

Jetzt muss ich nur noch abklären, ob der DS18B20 auch Chlorwasserresistent ist :wink:

Gruß und Dank
Tom

Danke für die Info :sunglasses:

@ volvodani: Gestern nicht daheim gewesen?? :wink: :wink: :wink:
Würd mich freuen, wenn das mit dem Sketch noch klappen würde 8)

Schönes Wochenende

Gruß und Dank
Tom

@TaO Das wird noch ;-). Ein bisschen nachsicht ich bin gerade am renoviern so mal eben nach der Arbeit. Dann geht sowas schonmal unter Sorry. Kommt noch ich packe das gleich mal in den Thread.(wenn ich es nicht wieder vergesse)
Gruß
DerDani

Hallo TaO,
hier der Sketch zu dem obigen Webserver.

#include "EEPROM.h"
#include <SPI.h>
#include <Ethernet.h>
#include <OneWire.h>
#include <DallasTemperature.h>

#define ONE_WIRE_BUS 14
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

int tempc = 0;
float tempfloat = 0;
int TempArray[49];
int TempSpeicher1 = 0;
int TempSpeicher2 = 0;
int tempafter = 0;
int tempafter1 = 0;
int tempafter2 = 0;
int rund = 0;
int rundgesamt = 0;
byte rund1 = 0;
byte rund2 = 0;
int runh = 12;
int runm = 13;
int runs = 28;
int ticks = 0;
int offset = 465;    // erster Startwert des Offset mit einem mal gemessenen Wert von 480mV Dioden spannung
unsigned long last_millis1 = 0;
unsigned long last_millis2 = 0;
unsigned long last_millis3 = 1797000;

byte mac[] = {
  0x90, 0xA2, 0xDA, 0x00, 0x2B, 0xEA
};           // MAC Adresse des Arduino Boards
byte ip[] = {
  192, 168, 178, 5
};                              // IP Adresse des Arduino Boards
byte gateway[] = {
  192, 168, 178, 1
};                               // Gateway Fritzbox
byte subnet[] = {
  255, 255, 255, 0
};                             // Subnet Maske (optional)
EthernetServer server = EthernetServer(80);                       // Port Einstellung (Standard 80)

void setup() {
  Ethernet.begin(mac, ip);//, gateway, subnet);   // Ethernet initialisieren
  server.begin();                                 // Auf Clients warten
  pinMode(4, OUTPUT);                             // zum Abwählen der SD karte  auf dem Shield
  digitalWrite(4, HIGH);                          // zum Abwählen der SD karte  auf dem Shield

  rund1 = EEPROM.read(1);                         // -255
  rund2 = EEPROM.read(2);                         // Überlauf 255
  rundgesamt = (rund2 * 255) + rund1;
  rund = rund1;
  for (int i; i < 49; i++) {
    TempArray[i] = 15;
  }
  sensors.begin();
}

void loop() {

  long cur_millis;
  cur_millis = millis();

  if (cur_millis - last_millis1 >= 1000) {       // Für den Laufzeit zähler
    sensors.requestTemperatures(); // Send the command to get temperatures
    tempfloat = (sensors.getTempCByIndex(0));
    tempc = tempfloat * 100.0;
    TempArray[0] = tempfloat;
    runs = runs + 1;
    last_millis1 = cur_millis;
  }
  if (cur_millis - last_millis3 > 1800000) {       // alles 30min wird das array verschoben
    TempArray[0] = tempfloat;
    for (int i = 48; i > 0; i--) {
      TempArray[i] = TempArray[i - 1];
    }
    last_millis3 = cur_millis;
  }
  if (runs >= 60) {
    runm = runm + 1;
    runs = 0;
  }
  if (runm >= 60) {
    runh = runh + 1;
    runm = 0;
  }
  if (runh >= 24) {
    rund1 = rund1 + 1;
    rundgesamt = rundgesamt + 1;
    EEPROM.write(1, rund1);
    runh = 0;
    if (rund1 >= 254) {
      rund2 = rund2 + 1;
      rund1 = 0;
      rund = 0;
      EEPROM.write(2, rund2);
    }
  }


  EthernetClient client = server.available();             // Prüfen, ob Client Seite aufruft
  if (client) {                                   // Seitenaufruf durch User
    server.print("HTTP/1.0 200 OK\r\nServer: arduino\r\nContent-Type: text/html\r\n\r\n");
    server.print("<HTML><HEAD><TITLE>");
    server.print("Arduino Webthermometer");
    server.print("</TITLE>");
    server.print("</HEAD><BODY>");
    server.print("<b> Mein erster Temperatur - Webserver  </b>
");
    server.print("Der ArduinoMEGA laeuft seit ");
    server.print(rundgesamt);
    server.print(" Tagen ");
    server.print(runh);
    server.print(" Stunden ");
    server.print(runm);
    server.print(" Minuten und ");
    server.print(runs);
    server.print(" Sekunden.
");
    server.print("Temperatur draussen auf der Fensterbank:
 ");
    server.print("<img src=\"http://chart.googleapis.com/chart?chxl=0:|-10%C2%B0C|%2B35%C2%B0C");
    server.print("&chxr=0,-15,25&chxt=y&chs=400x250&cht=gm&chco=000000,3072F3|42B542|FF3A00&chds=-10,35&chd=t0:"); //chco=000000
    server.print(tempfloat);
    server.print("&chl=");
    server.print(tempfloat);
    server.print("&chtt=°C+Aussentemperatur+aktuell\"> 
 ");
    server.print("<img src=\"http://chart.googleapis.com/chart?chxl=1:|24|21|18|15|12|9|6|3|0&chxr=0,-10,40|1,48,0");      //chart.googleapis.com
    server.print("&chxs=0,676767,11.5,0,lt,676767&chxt=y,x&chs=500x350&cht=lc&chco=000000&chds=-10,40");
    server.print("&chd=t:");
    int n;
    for (n = 48; n > 0; n = n - 1) {
      server.print(TempArray[n]);
      if (n >= 2 && n <= 48)
        server.print(",");
    };
    server.print("&chdl=Verlauf+Temperatur+letzte+24h&chdlp=b&chg=0,5&chls=2&chtt=Verlauf\"> 
 ");
    server.print("<script language=\"JavaScript\" src=\"http://www.begann.de/uhren/uhr44.js\"></script>");

    delay(100);                                    // Kurz warten, um Daten zu senden
    client.stop();                               // Verbindung mit dem Client trennen
  }
}

Die Libs sind von diversen Dallas One Wire Projekten. Die Darstellung mit google charts gemacht. ist zwar noch aktiv aber nicht mehr mit den damaligen Gauges dokumentiert. Das heißt das der Arduino I-Net Zugang haben muss, aber nicht von außen erreichbar sein muss (Port Forwarding)

Gruß
DerDani