Go Down

Topic: Temperaturmessung mit dem LM 335 Z Sensor (Read 1 time) previous topic - next topic

elyptikus

Hallo zusammen
In meiner Maturaarbeit beschäftige ich mich mit dem Flug eines Wetterballons auf 25'000 Meter. Der Wetterballon wird mit einer Box ausgerüstet, in der sich eine Kamera, GPS, ein Arduino und bis jetzt zwei LM335Z Temperatursensoren (Es kommt noch ein Barometric Pressure Sensor - BMP085 dazu) befinden werden. Das Arduino wird die Kamera Steuern und mit den Sensoren soll die Temperatur auf eine MicroSD-Karte geschrieben werden. Nun bastle ich schon tagelang an einem Code herum, doch ich krieg es nicht hin, dass die richtige Temperatur auf die Karte geschrieben wird.

Mit folgendem Code berechne ich die Millivolt, die der Sensor ausgibt. Doch wie komme ich von diesen auf Grad Celsius?

Code: [Select]
/*
 SD card datalogger

The circuit:
* SD card attached to SPI bus as follows:
** MOSI - pin 11
** MISO - pin 12
** CLK - pin 13
** CS - pin 4

created  24 Nov 2010
updated 2 Dec 2010
by Tom Igoe

"This example code is in the public domain."

angepasst und übersetzt an Projekt Space Ballon 17.05.2011
by Dominik Frey
*/
//....................................................................................

#include <SD.h>

const int chipSelect = 3;       // SD Karte ist an Pin 3 angeschlossen


//***************************EINSTELLUNGEN***************************
int sensoren = 1;               // Anzahl Sensoren, die verwendet werden
//*******************************************************************


void setup()
{
//****************************KAMERA AUSGANG***************************
 pinMode(2, OUTPUT);          //  Ausgang für den Kamera Auslöser definieren
 pinMode(1, OUTPUT);
 
//***************************SD-KARTE ÖFFNEN***************************
 Serial.begin(9600);
 Serial.print("Initializing SD card...");                  // Statusinformationen zum Serial Monitor am PC (SD-Karte öffnen)
 
//--------------------------------------------------------------------  

 if (!SD.begin(chipSelect))                                // Versuchen, die Karte zu öffnen
 {                            
    Serial.println("card failed, or not present");         // Statusinformationen zum Serial Monitor am PC (Karte öffnen fehlgeschlagen) falls fehlgeschlagen
    return;
 }
 
//--------------------------------------------------------------------  

 Serial.println("card initialized.");                      // Statusinformationen zum Serial Monitor am PC (Karte geöffnet) falls erfolgreich
}
//*********************************************************************


void loop()

//***************SENSOREN LESEN UND AUF KARTE SCHREIBEN****************
{
 String dataString = "";                                  // erstellt einen Sting (Buchstabenfolge), den man auf die SD-Karte speichern kann
 
//--------------------------------------------------------------------  

 for (int analogPin = 0; analogPin < sensoren; analogPin++) // Anzahl Sensoren festlegen mit der Variable "sensoren" aus den EINSTELLUGEN
 {
   int sensor = analogRead(analogPin);                      // Sensoren lesen (ANALOG)
   int temperatur=(sensor*4.9);                             // Wert 0-1023 in Millivolt umrechnen
   dataString += String(temperatur);                        // gelesene Daten in dataString einfügen
 
 if (analogPin < (sensoren-1)) {                            // schauen ob es noch mehr Sensoren gibt
   dataString += ",";          }                            // Daten der verschiedenen Sensoren trennen durch ein Komma (wenn nötig)
 }

//--------------------------------------------------------------------  

 File dataFile = SD.open("datalog.txt", FILE_WRITE);       // Auf der SD-Karte wird eine TXT-Datei geöffnet oder erstellt falls sie noch nicht vorhanden ist

 if (dataFile)                                             // ausführen sobald die Datei geöffnet ist
 {
   dataFile.println(dataString);                           // den dataString in die Datei hineinschreiben (println)
   dataFile.close();                                       // Datei schliessen

   Serial.println(dataString);                             // Daten auch in den Serial Monitor schreiben zur Überwachung
 }  
 
 
else {                                                    // falls die Datei nicht geöffnet werden konnte Fehlermeldung in den Serial Monitor schreiben
   Serial.println("error opening datalog.txt");
}
//************************AUSLÖSEN DER KAMERA**************************
digitalWrite(2, HIGH);
delay(300);
digitalWrite(1,HIGH);
delay(300);
digitalWrite(2,LOW);
digitalWrite(1,LOW);
delay(15000);
}                                                        
//*********************************************************************


Vielen Dank für die schnelle Antwort!

Gruss Elyptikus

markbee

Der LM335 gibt laut Datenblatt 2.98 Volt bei 25°C und Ir=1mA aus. Veränderung pro 10mV = 1K. Rest ist Gehirnschmalz ;)

Noch ein paar Gedanken zur Nutzung vom LM335: http://lookmanowire.blogspot.com/2011/04/lm-335-issues.html und Alternativen.

markbee
XBee blog: http://lookmanowire.blogspot.com/

elyptikus

Meine Werte stimmen leider überhaupt nicht mit dem überein. Im Vergleich mit einem genauen Thermometer kam folgendes heraus:

LabPro   Arduino

13.8°C     3562 mV

21.7°C        3572 mV

50.1°C     3635 mV

Was mache ich falsch?

markbee

#3
Jul 27, 2011, 04:18 pm Last Edit: Jul 27, 2011, 04:20 pm by markbee Reason: 1
Wie ist denn der LM 335 beschaltet?

markbee

P.S.: Das Datenblatt zeigt den "bottom view" für die Pinbelegung, das kann man gerne mal verwechseln.
XBee blog: http://lookmanowire.blogspot.com/

elyptikus

So habe ich es angeschlossen! Der Pin ganz links vom Sensor ist nicht belegt. Der Widerstand hat einen Wert von 2 kOhm.
Stimmt die Belegung so?

markbee

Das sieht gut aus. Sicher mit dem 2kOhm Widerstand? Abgebildet ist imho ein 20k, das wäre dann zu wenig Steuerstrom.

markbee
XBee blog: http://lookmanowire.blogspot.com/

elyptikus

Ich habe den Widerstand nachgemessen. Es sind 2 kOhm!
Hast du eine Idee was sonst noch das Problem sein könnte?

markbee

Vielleicht ist der LM335 einfach kaputt. Hast Du einen anderen, den Du ausprobieren kannst?

markbee
XBee blog: http://lookmanowire.blogspot.com/

Gurkengraeber

Hallo elyptikus !

Warum nimmst du nicht den LM35 ?  Gibt es viele Programmier-Beispiele.

2,50 Euro bei Reichelt.de oder ähnlichen...

MfG

Go Up