Poll
Question: a
a - 0 (0%)
a - 0 (0%)
Total Voters: 0

Pages: [1]   Go Down
Author Topic: Temperaturmessung mit dem LM 335 Z Sensor  (Read 1436 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
/*
  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
Logged

Hamburg, Germany
Offline Offline
Sr. Member
****
Karma: 6
Posts: 291
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

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

markbee
Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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?
Logged

Hamburg, Germany
Offline Offline
Sr. Member
****
Karma: 6
Posts: 291
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
« Last Edit: July 27, 2011, 09:20:10 am by markbee » Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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?


* frizing.png (52.18 KB, 503x510 - viewed 52 times.)
Logged

Hamburg, Germany
Offline Offline
Sr. Member
****
Karma: 6
Posts: 291
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

markbee
Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Hamburg, Germany
Offline Offline
Sr. Member
****
Karma: 6
Posts: 291
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

markbee
Logged


Gurkengraeber
Guest
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo elyptikus !

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

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

MfG
Logged

Pages: [1]   Go Up
Jump to: