Temperatursensor aus dem Electronic Brick Starterkit

Hallo, ich arbeite mit dem Arduino MegaADK(http://www.watterott.com/de/Arduino-ADK-Rev3) und nutze die Bauteile aus dem Electronik Brick Starterkit(http://www.watterott.com/de/Electronic-brick-Starter-kit). Momentan möchte ich gerne den Temperatursensor aus dem eben genannten Starter Kit verwenden um die Raumtemperatur zu messen. Leider habe ich kein Datenblatt zum Sensor gefunden, so dass ich weder den Messbereich noch die Einheit kenne. In meinem Arbeitszimmer ist der Returnwert des analogread(temperature) zurzeit 44. Da ich im T-shirt angenehm hier sitze nehme ich mal an die Tempearatur liegt zwischen 20 und 25 °C. Wie muss ich die 44 umrechnen um auf die genaue Temperatur in °C zu kommen? Kann mir evtl. jemand die Umrechnung erklären?

Gruß

Micke

Micke: Leider habe ich kein Datenblatt zum Sensor gefunden, so dass ich weder den Messbereich noch die Einheit kenne. In meinem Arbeitszimmer ist der Returnwert des analogread(temperature) zurzeit 44.

Wenn ich mir die beiden Beispiel-Sketche zum "Electronic Brick Starterkit" ansehe, kommen da mit 44 als Messwert Temperaturen im Starkfrostbereich heraus statt Zimmertemperatur.

Hast Du denn dasselbe Temperature-Brick mit denselben Komponenten drauf wie z.B. in http://tronixstuff.files.wordpress.com/2010/04/brickbook-word-v1-03.pdf abgebildet?

Hat der Widerstand auf dem Modul exakt dieselbe Farbringkennzeichnung?

Hast Du das Modul auch nicht so auf einer leitenden Fläche abgelegt, dass es an der Platinenunterseite einen Kurzschluss gibt?

Hast Du mal eine Sichtprüfung der Lötstellen des Moduls mit einer Lupe gemacht, ob auch kein Kurzschluß zwischen Kontakten oder Leiterbahnen ab Werk eingelötet worden ist?

Was ist das für ein achtpoliger IC auf dem Modul, kannst Du eine Bauteilebezeichnung ablesen?

Hallo,

ja, der Temperature Brick ist der selbe.

Der wert 44 war allerdings von mir verfälscht wie ich mittlerweile gemerkt habe. Der nun richtige Wert lautet 465. Wie ich von der 465 zu einer angemessenen Temperatur komme ist mir allerdings immernoch unklar.

Laut der von jurs verlinkten Dokumentation addierst du zu deinem Messwert 252, ziehst dann 500 ab und dividierst durch 10 (Lesson 7). Es müssten demnach 21,7 °C in deinem Zimmer sein.

Micke: Wie ich von der 465 zu einer angemessenen Temperatur komme ist mir allerdings immernoch unklar.

Wieso? Hast Du Dir den von mir oben geposteten Link und das Tutorial nicht genau angesehen?

Da steht dieser Sketch drin:

/*
 Lesson Seven
*/
void setup() 
{
 Serial.begin(9600); // opens serial port, sets data rate
//to 9600 bps
}
float temperature = 0; // this stores the value from the 
 // temperature sensor brick
void loop() 
{
 temperature = analogRead(5); // store value of temp brick
 temperature = temperature +252-500; // some maths to
 temperature = temperature / 10; // convert to Celsius
 delay (100); // wait for 100 milliseconds
 Serial.print("Temperature = ");
 Serial.print(temperature);
 Serial.println(" degrees Celsius.");
 delay(500); // wait half a second
}

/*
The thermistor is not accurate “out of the box” so to speak, so you
will need to have another thermometer with you. Adjust the value
of -500 in the sketch above until your PC readings are as close as
possible to your other thermometer. 
*/

Und mein Google findet problemlos sogar noch einen weiteren:

// Project Seven - temperature
//

int a;
int del=1000; // duration between temperature readings
float ctemperature;
float ftemperature;
int B=3975; 
float resistance;

void setup()
{
  Serial.begin(9600);  
}

void loop()
{
  a=analogRead(0);
  resistance=(float)(1023-a)*10000/a; 
  ctemperature=1/(log(resistance/10000)/B+1/298.15)-273.15;
  ftemperature=ctemperature*9/5+32;
  Serial.print(ctemperature);
  Serial.write(186);
  Serial.print("C ");
  Serial.print(ftemperature);
  Serial.write(186);
  Serial.println("F");
  delay(del);
}

Die genaue Kalibrierung der Werte, also dass die Temperatur exakt passt, mußt Du bei analogen Bauteilen immer selbst mit passenden Kalibrierwerten machen. Einpunktkalibrierung durch Anpassung der "500" im ersten Sketch. Zweipunkt- oder Dreipunktkalibrierung, je nachdem, wenn die Anforderungen an Genauigkeit über den Meßbereich etwas größer sind.

Das ist ja schließlich kein ab Werk vorkalibrierter digitaler Sensor.

vielen Dank, ich denke die Temperatur kommt damit hin. Momentan ist mir die Genauigkeit noch unwichtig, es hapert noch an anderen Ecken des Projekts. Kann ich dieses Thema irgendwie schließen? Mein Problem habt ihr mir ja nun erklärt und es ist behoben.

Evtl. könnt ihr mir ja auch bei meinem anderen problem helfen, welches in diesem neuen Thema zu finden ist http://arduino.cc/forum/index.php/topic,153794.0.html . Nochmals vielen Dank für eure Hilfe. Wie schließe ich dieses Thema hier?

Lock this Topic bei Additional Options?

Eine Bitte habe ich noch falls jemand Zeit hat. Ich würde gerne nicht nur die Formeln aus dem Beispiel kopieren und mich darüber freuen das es klappt. Mein Elektrotechnisches Verständnis ist allerdings eher gering.

Kann mir jemand erklären wieso das genauso so gerechnet wird?

temperature = temperature +252-500; // some maths to
temperature = temperature / 10; // convert to Celsius

woher kommt die 252 bzw die 500?

int B=3975;
resistance=(float)(1023-a)*10000/a; 
ctemperature=1/(log(resistance/10000)/B+1/298.15)-273.15;

Wofür steht das B und warum genau 3975? Woher weiß man das? In der zweiten Zeile wird wohl der Widerstand des Sensors berechnet, warum der Widerstand genau so berechnet wird ist mir unklar, aber immerhin erkenne ich das der Widerstand berechnet wird. Die letzte Zeile sagt mir garnichts.

Wofür steht das B und warum genau 3975? Woher weiß man das?

Das ist eine Materialkonstante und kommt aus dem Datenblatt des Sensors (hoffentlich).

Die letzte Zeile sagt mir garnichts.

Hier wird die Nicht-Linearität des Sensors herausgerechnet.

Micke: Kann mir jemand erklären wieso das genauso so gerechnet wird?

Der erste Sketch ist nur eine Milchmädchenrechnung, wo dabei ausgegangen wird: Ein Unterschied von 1 im ADC-Messwert entspricht 0,1°C Temperaturänderung. Durch Angleichung der Konstanten 500 soll der Wert so verschoben (kalibriert) werden, dass es bei bei ungefähr Zimmertemperatur passt. Dieser Sketch genügt keinerlei Genauigkeitsanforderungen, brauchbar ist das quasi nur für eine Thermostatfunktion, bei der genau auf den Temperaturwert geregelt werden soll, auf den kalibriert wurde. Je weiter die Temperatur sich von diesem Kalibrierpunkt entfernt, desto ungenauer wird die Angabe.

Der zweite Sketch entspricht der üblichen Berechnungsweise, bei der die tatsächlichen Schaltungsdaten wie Vorwiderstand und Widerstandskurve des NTC-Widerstands möglichst genau berücksichtigt werden.

Die Konstanten ergeben sich aus den Daten der verbauten Bauteile und den physikalischen Zusammenhängung bei der Messung, insbesondere dem Ohmschen Gesetz. Die Konstante B ist beispielsweise ein Datenblattwert, der für NTC Widerstände im Datenblatt des Bauteils angegeben wird. Wenn kein Datenblatt vorliegt, man aber dafür eine sehr exakt messende Laborausrüstung zum Messen von Widerständen und Temperaturen hat, kann man sich den Wert der Konstanten B auch selbst ermitteln. Die krummen Zahlenwerte beruhen auf der Umrechnung zwischen der absoluten Temperaturskala in Kelvin und der Angabe in Grad Celsius. -273.15°C ist der absolute Temperatur-Nullpunkt, 298.15K entspricht 25°C, was offenbar der Temperaturwert ist, bei dem der Nennwiderstand des NTC-Widerstands vom Hersteller angegeben wird.

Vielen Dank. Jetzt ist mir die Rechnung zumindest etwas einleuchtender.