SD Temperaturlogger

Mit einem kleinen Arduino und einem SD-Kartenmodul lassen sich ganz einfach über einen längeren Zeitraum Messdaten wie Temperatur aufzeichnen, um diese später auszuwerten zu können.

VERSUCHSAUFBAU TEMPERATURMESSUNG
VERSUCHSAUFBAU TEMPERATURMESSUNG

Mit einem Arduino und einem NTC-Thermistor lassen sich Temperaturen über längere Zeit messen und anzeigen. Dieses Projekt kombiniert ein I2C-LCD-Display zur Live-Anzeige mit der Möglichkeit, Messwerte zu speichern. Ideal für Temperaturüberwachung in Räumen, Gewächshäusern oder bei Experimenten.

Materialien

Pinbelegung

KomponenteArduino
Thermistor (Spannungsteiler Mitte)A0
LCD SDAA4 (oder SDA)
LCD SCLA5 (oder SCL)
LCD VCC, GND5V, GND

Schaltung

Der Thermistor bildet mit dem 100 kΩ Widerstand einen Spannungsteiler. Die Spannung an A0 hängt von der Temperatur ab – über die Steinhart-Hartley-Gleichung wird daraus die Temperatur berechnet.

Die loop-Funktion nutzt einen Timer, um in regelmäßigen Abständen die Temperatur zu messen und auf dem LCD anzuzeigen. Über die serielle Schnittstelle kann mit dem Kommando t der EEPROM-Inhalt ausgelesen werden. Die Funktion Thermistor() mittelt mehrere Analog-Samples für eine stabilere Anzeige.

/* Libraries */
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

#include <EEPROM.h> // required for EEPROMAnything.h
#include "./EEPROMAnything.h"

/* Display Adresse und Connections setzen */
 LiquidCrystal_I2C lcd(0x3F, 20,4); // I2C adress, Cols, Rows

#include "./Timer.h"
Timer updateLCD(1*TIMER_SECONDS);
Timer storeValue(15*TIMER_SECONDS);
 
// Thermistor data
#define THERMISTORPIN A0        // which analog pin to connect      
#define THERMISTORNOMINAL 100000 // resistance at 25 degrees C
#define TEMPERATURENOMINAL 25   // temp. for nominal resistance (almost always 25 C)
#define NUMSAMPLES 5            // how many samples to take and average, more takes longer but is more 'smooth'
#define BCOEFFICIENT 3950       // The beta coefficient of the thermistor (usually 3000-4000)
#define SERIESRESISTOR 100000    // the value of the 'other' resistor
int samples[NUMSAMPLES];

int storePos = -1;

void setup() {
  lcd.begin(); //Display initialisieren
  lcd.backlight(); // backlight anlassen
  
  lcd.setCursor(0,0); //Zeilen und Spalten starten mit 0 -> Spalte 1 Zeile 1
  lcd.print("Temp.:");

  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }
}

void loop() {
  if(updateLCD.check()){
    int tmp = Thermistor();

    if(storePos==-1){
      
    }else if(storePos>=0 && storeValue.check()){
      
    }

    lcd.setCursor(7,0); //Spalte 8, Zeile 1
    lcd.print("   ");// reset
    lcd.setCursor(7,0); //Spalte 8, Zeile 1
    lcd.print(tmp);
   
  }
  if(Serial.available()){
    if(Serial.read()=='t'){ // Speicher auslesen und uebertragen
      for(int i=0; i<EEPROM.length(); i++){
        Serial.print(EEPROM.read(i));
        Serial.print(" ");
      }
    }
  }
}

float Thermistor(void){
  uint8_t i;
  float temp;
  for (i=0; i< NUMSAMPLES; i++) { // take N samples in a row, with a slight delay
   samples[i] = analogRead(THERMISTORPIN);
   delay(10);
  }
  temp = 0; // average all the samples out
  for (i=0; i< NUMSAMPLES; i++) {
     temp += samples[i];
  }
  temp /= NUMSAMPLES;
  temp = 1023 / temp - 1; // convert the value to resistance
  temp = SERIESRESISTOR / temp; // now temp contains the resistor
  Serial.print("Resistor "); 
  Serial.print(temp);
  Serial.println(" Ohm");
  temp = temp / THERMISTORNOMINAL;        // (R/Ro)
  temp = log(temp);                       // ln(R/Ro)
  temp /= BCOEFFICIENT;                   // 1/B * ln(R/Ro)
  temp += 1.0 / (TEMPERATURENOMINAL + 273.15); // + (1/To)
  temp = 1.0 / temp;                      // Invert
  temp -= 273.15;                         // convert to C
  return temp;
}

Die Funktion Thermistor liest mehrere Samples ein, mittelt sie und berechnet über den Widerstandswert die Temperatur in °C.

float Thermistor(void) {
  uint8_t i;
  float temp;
  for (i = 0; i < NUMSAMPLES; i++) {
    samples[i] = analogRead(THERMISTORPIN);
    delay(10);
  }
  temp = 0;
  for (i = 0; i < NUMSAMPLES; i++) {
    temp += samples[i];
  }
  temp /= NUMSAMPLES;
  temp = 1023 / temp - 1;
  temp = SERIESRESISTOR / temp;
  temp = temp / THERMISTORNOMINAL;
  temp = log(temp);
  temp /= BCOEFFICIENT;
  temp += 1.0 / (TEMPERATURENOMINAL + 273.15);
  temp = 1.0 / temp;
  temp -= 273.15;
  return temp;
}

Download SD Temperaturlogger (TempLogger.ino)

3D DRUCKER HEIZBLOCK
3D DRUCKER HEIZBLOCK
SCHOKOLADEN SCHMELZTIEGEL
SCHOKOLADEN SCHMELZTIEGEL
VERSUCHSAUFBAU TEMPERATURMESSUNG
VERSUCHSAUFBAU TEMPERATURMESSUNG
LCD ANZEIGE
LCD ANZEIGE
VERSUCHSAUFBAU TEMPERATURMESSUNG
VERSUCHSAUFBAU TEMPERATURMESSUNG
TEMPERATURVERLAUF MESSDATEN
TEMPERATURVERLAUF MESSDATEN

Kommentare

Zum Absenden den Slider nach rechts ziehen


Weitere Artikel

Gefällt dir die Webseite? Unterstütz die werbefreie Seite mit einer Spende.

© Veit Götz 2012 - 2026
Impressum
Datenschutz
Statistiken