TMP35 oder TMP36

Die beiden Temperatursensoren TMP36 und LM35 sind von außen sehr ähnlich und werden auch gleich am Arduino angeschlossen. Dennoch unterscheiden sie sich in den Messwerten und im Wertebereich.

Man muss also stets darauf achten, welchen von den beiden man gerade angeschlossen hat.

Der TMP 36 und der LM35  haben jeweils  drei Anschlüsse: links für 5V, rechts für GND und in der Mitte wird der Sensor an einen analogen Port angeschlossen. 

Der LM35

Der Temperaturssensor LM35 DZ gibt bei 0 °C eine Spannung von 0V und bei 100 °C  eine Spannung von 1 V aus. Dazwischen soll sich der Sensor linear ($T(U) = 100 \cdot U$) verhalten. 10mV entsprechen 1 Kelvin.

Mit der Verhältnisgleichung $ {X \over 1023} = {U \over 5}$  folgt die Umrechung $T(X) = X \cdot {5 \over 1023} \cdot 100$.

Der berechnete Temperaturwert t muss noch kalibriert werden, da nicht immer genau 5 V anliegen.

Verwendet man ein Ethernet-Shield, so scheint der A0 Port blockiert zu sein: man muss einfach einen der Ports A2- A5 benutzen.

Spannungsschwankungen kann man durch eine Mittelwertbildung ausgleichen.

Auslesen des Sensors

Temperatursensor

/*
AnalogReadSerial - modefied for use with an LM35
 
 This example code is in the public domain.
 */
#define ref_voltage 4.93
#define volt2temp 100

// the setup routine runs once when you press reset:
void setup() {
  // initialize serial communication at 9600 bits per second:
  Serial.begin(9600);
}

// the loop routine runs over and over again forever:
void loop() {
  // read the input on analog pin 5:
  int sensorValue = analogRead(A5);

  // print out the value you read:
  Serial.println(sensorValue * ref_voltage * volt2temp / 1024 );
  delay(100); // delay in between reads for stability
}
Auslesen des Sensors und auf SD-Karte schreiben

Daten vom LM35 auf SD-Karte schreiben

#include <SD.h>

const int chipSelect = 4;
#define ref_voltage 4.93
#define volt2temp 100

void setup()
{
  Serial.begin(9600);
  Serial.print("Initializing SD card...");
  pinMode(10, OUTPUT);
  
  if (!SD.begin(chipSelect)) {
    Serial.println("Fehler beim Erkennen der Karte.");
    return;
  }
  Serial.println("Karte OK.");
}

void loop()
{
  String dataString = "";
  char TempChar[10];
  float Temp = 1.0;

  int SensorWert = analogRead(A5);  // nicht A0 oder A1 benutzen 
  long zeit = millis();  // Zeit in Millisekunden nach Start
  dataString = dataString + String(zeit);
  
  Temp = SensorWert * ref_voltage * volt2temp / 1024 ; //Umrechnung in Celsius

  dtostrf(Temp, 5, 2, TempChar); // wandelt float in char um (Länge 5 , Nachkommazahlen 2)
  dataString = dataString +";"+ TempChar;
  

  File dataFile = SD.open("datalog.txt", FILE_WRITE);
  if (dataFile) {
    dataFile.println(dataString);
    dataFile.close();
    Serial.println(dataString);
  }  
  else {
    Serial.println("Fehler beim Lesen der Datei");
  }
  delay(100);
}
Auslesen eines analogen Ports und auf SD-Karte schreiben

Daten von A5 auf SD-Karte schreiben

#include <SD.h>

const int chipSelect = 4;

void setup()
{
  Serial.begin(9600);
  Serial.print("Initializing SD card...");
  pinMode(10, OUTPUT);
  
  if (!SD.begin(chipSelect)) {
    Serial.println("Fehler beim Erkennen der Karte.");
    return;
  }
  Serial.println("Karte OK.");
}

void loop()
{
  String dataString = "";
 
  int SensorWert = analogRead(A5);  // nicht A0 oder A1 benutzen 
  long zeit = millis();  // Zeit in Millisekunden nach Start
  dataString = String(zeit) +";"+ String(SensorWert);
  File dataFile = SD.open("datalog.txt", FILE_WRITE);
  if (dataFile) {
    dataFile.println(dataString);
    dataFile.close();
    Serial.println(dataString);
  }  
  else {
    Serial.println("Fehler beim Lesen der Datei");
  }
  delay(100); // Messung alle 100 Millisekunden 
}

Der TMP36

Der Sensor liefert Spannungen zwischen 0 und 2 V, wobei 0V einer Temperatur von -50 Grad Celsius und 2V einer Temperatur von 150 Grad Celcius mit einer Genauigkeit von ca. 2 Kelvin entsprechen soll.

2 V entsprechen bei einer Gesamtspannung von 5 V einem Messwert von 409. (${X \over 1023} = {2 \over 5}$. Die Temperaturwerte lassen sich aus dem Messwert mit Hilfe der Geradengleichung $ T(X) = {200 \over 409} \cdot X - 50$ berechnen.

 

http://funduino.de/nr-9-temperatur-messen

http://www.instructables.com/id/How-to-use-the-TMP36-temp-sensor-Arduino-Tutorial/