Thermosäule

Mit einer Thermosäule lasst die Leistung (Energie pro Sekunde) bzw. Intensität (Energie pro Sekunde und pro m²) von Wärmestrahlung bestimmen. Herzstück einer Thermosäule ist ein sog. Peltierelement. Dieses beruht auf der sog. thermo-elektrischen Spannung. Kombiniert man zwei Drahtstücke verschiedener Metalle und bringt die beiden Kontaktstellen auf unterschiedliche Temperatur, so misst man eine sog. Thermospannung. Beim Peltierelement sind viele solcher „Drahtstücke“ hintereinander und abwechselnd angeordnet, um den Effekt zu verstärken.

Strahlt man nun zum Beispiel mit einem Laser auf eine mit Russ geschwärzte Seite des Peltierelements, so wird dessen Strahlung absorbiert und diese Seite erwärmt sich geringfügig. Dadurch kann an den beiden Kabeln des Peltierelements eine ebenfalls sehr kleine Thermospannung U gemessen werden. Diese ist ein Maß für die absorbierte Strahlungsleistung P.

Um den Zusammenhang U = U(P) zu ermitteln, werden auf eine Seite des Peltierelements mehrere SMD-Widerstände in Serie aufgeklebt. Danach legt man an diese Widerstandsreihe eine bestimmte Spannung an, berechnet die elektrisch zugeführte Leistung P und misst die Thermospannung U. In meinem Fall erhielt ich die lineare Beziehung U = (1/11.26) · P. Eine Leistung von z.B. 20 mW erzeugte eine Thermospannung von 1.776 mV. Umgekehrt entspricht eine Spannung von 1 mV einer Strahlungsleistung von 11.26 mW. Diese Beziehung wird für die Bestimmung der Strahlungsleistung P im Arduino-Programm benötigt.

Das Peltierelement besitzt eine Fläche von 40 x 40 mm² = 1600 mm². Um auf die Strahlungsintensität (Leistung pro m²) schließen zu können, muss die am Peltierelement auftreffende Leistung einfach mit dem Faktor (1000000/1600) = 625 multipliziert werden. Beträgt etwa die am Peltierelement auftreffende Leistung 5 mW, so würden auf 1 m² genau 5 · 625 = 3125 mW = 3.125 W auftreffen, was dann einer Intensität von 3.125 W/m² entspricht.

Auf diese Weise kann zum Beispiel die Solarkonstante überprüft werden. Dies ist die Strahlungsintensität, welche die Sonne am Ort der Erde erzeugt. Sie liegt bei rund 1500 W/m². Weiters kann mit einem sog. Lesliewürfel das Stefan-Boltzmann-Gesetz überprüft werden. Ein schwarzer Strahler mit der Temperatur T und der Fläche A strahlt eine Leistung von P = σ · A · T^ 4 ab. Sigma ist die sog. Stefan-Boltzmann-Konstante, wobei gilt: σ = 5.67 · 10^ –8 W/K^ 4·m².

Ist er nicht schwarz, so kommt noch der Emissionskoeffizient epsilon zum Tragen. Es gilt daher abschließend:

P = σ · ε · A · T^ 4

Ein Lesliewürfel besitzt auf seinem Mantel 4 unterschiedliche Oberflächen, z.B. schwarz, spiegelnd weiß usw. Diese besitzen einen unterschiedlichen Emissionskoeffizienten epsilon. Füllt man nun den Lesliewürfel mit heißem Wasser der Temperatur T, so kann man mit der Thermosäule je nach Ausrichtung des Würfels eine zur Strahlungsleistung proportionale Spannung messen. Trägt man U bzw. P gegen T^ 4 – T0^ 4 auf, so müsste man Geraden mit unterschiedlichen Steigungen (entsprechend dem epsilon der Würfelseite) erhalten.

Auch kann man das 1/r ^ 2 Abstandsgesetz der Strahlungsintensität überprüfen, indem man etwa eine Glühbirne im Abstand r von der Thermosäule postiert und dann U bzw. P in Abhängigkeit von r ermittelt.

Da die Ausgangsspannungen der Thermosäule sehr gering sind (im µV-mV Bereich), werden sie zunächst mit einem Operationsverstärker vom Typ AD8551 10-fach verstärkt. Erst dann gelangen sie zum AD-Wandlermodul ADS1115. Schlussendlich wird am Display die Thermospannung (in µV), die auf das Peltierelement insgesamt auftreffende Strahlungsleistung (in mW) und die pro m² auftreffende Strahlungsintensität (= Strahlungsleistung · 625; in W/m²) angezeigt.

Mit einem Taster können die angezeigten Werte auf 0 gesetzt werden, falls eine Spannung/Leistung/Intensität OHNE Strahlungsquelle angezeigt wird (= offset).

Vom Verein AATiS wird eine solche Thermosäule (https://www.aatis.de/content/bausatz/AS516_Thermo%E2%80%90S%C3%A4ule) zu einem sehr günstigen Preis angeboten!

 

 

 


Arduino-Code:

#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <Adafruit_ADS1015.h>
 
//Adafruit_ADS1015 ads1015;  	// Construct an ads1015 at the default address: 0x48
//Adafruit_ADS1115 ads1115(0x49);	// construct an ads1115 at address 0x49

Adafruit_ADS1115 ads1115;  	// Construct an ads1115 at the default address: 0x48

int16_t adc0, adc1, adc2, adc3;

float voltage;
float Leistung;
float Intensitaet;
float offset;

const int buttonPin = 2;     // the number of the pushbutton pin
int buttonState = 1;         // variable for reading the pushbutton status

LiquidCrystal_I2C lcd(0x3F,16,2);  // set the LCD address to 0x27 for a 16 chars and 2 line display. ACHTUNG: Adresse kann auch 0x3F sein !!!

// Anschlüsse:
// GND - GND
// VCC - 5V
// SDA - ANALOG Pin 4
// SCL - ANALOG pin 5


// ===========================
// =======   SETUP   =========
// ===========================

void setup()
   {
    offset = 0.0;     // Initialisierung des offsets
     
    Serial.begin(9600);
    
    pinMode(buttonPin, INPUT);
    
    lcd.init();        // initialize the lcd
    lcd.backlight();
    lcd.setCursor(0,0);
    lcd.print("Thermosaeule");
    lcd.setCursor(0,1);
    lcd.print("uV-Meter");
    
    delay(4000);
    
    lcd.setCursor(0,0);
    lcd.print("             ");
    lcd.setCursor(0,1);
    lcd.print("            ");
    
    //ads1015.begin();  // Initialize ads1015
    ads1115.begin();  // Initialize ads1115
    
    // The ADC input range (or gain) can be changed via the following
    // functions, but be careful never to exceed VDD +0.3V max, or to
    // exceed the upper and lower limits if you adjust the input range!
    // Setting these values incorrectly may destroy your ADC!
    //                                                                ADS1015       ADS1115
    //                                                                -------       -------
    // ads1115.setGain(GAIN_TWOTHIRDS);  // 2/3x gain +/- 6.144V  1 bit = 3 mV     0.1875 mV (default)
    // ads1115.setGain(GAIN_ONE);     // 1x gain   +/- 4.096V  1 bit = 2 mV        0.125 mV
    // ads1115.setGain(GAIN_TWO);     // 2x gain   +/- 2.048V  1 bit = 1 mV        0.0625 mV
    // ads1115.setGain(GAIN_FOUR);    // 4x gain   +/- 1.024V  1 bit = 0.5 mV      0.03125 mV 
    // ads1115.setGain(GAIN_EIGHT);   // 8x gain   +/- 0.512V  1 bit = 0.25 mV     0.015625 mV
    // ads1115.setGain(GAIN_SIXTEEN); // 16x gain  +/- 0.256V  1 bit = 0.125 mV    0.0078125 mV
  
    ads1115.setGain(GAIN_TWO);     // 2x gain   +/- 2.048V  1 bit = 0.0625mV
        
   }


// ===========================
// =======    LOOP   =========
// ===========================

void loop()
   {
    buttonState = digitalRead(buttonPin);    // button for new offset
    
    if (buttonState == LOW)
       {        
        offset = ads1115.readADC_SingleEnded(0) * 1.0;   // Einlesen des aktuellen Wertes = offset
        
        offset = offset * 0.0625;
        
        offset = offset / 10.0;    // offset-Spannung in mV vor der Verstärkung
                
        delay(100);
       }
     
    adc0 = ads1115.readADC_SingleEnded(0);
  
    /*
    adc1 = ads1115.readADC_SingleEnded(1);
    adc2 = ads1115.readADC_SingleEnded(2);
    adc3 = ads1115.readADC_SingleEnded(3);
    */

    voltage = adc0 * 0.0625;               // vom ADS1115 eingelesene Spannung in mV nach der Verstärkung
    
    voltage = voltage / 10.0;              // reale Eingangsspannung in mV vor der Verstärkung (gain = 10) 
    
    Leistung = (voltage - offset) * 11.26;            // Auf den Sensor auftreffende Strahlungsleistung in mW. Kalibrierung hat ergeben: 11.26 mW/mV
    
    Intensitaet = (voltage - offset) * 7.0375;        // Strahlungsintensität in W/m². Kalibrierung hat ergeben: 7.0375 W/m²/mV
    
    Serial.print("AIN0: ");
    Serial.println(adc0);
    Serial.print("   U = ");
    Serial.print(voltage*10.0,2);
    Serial.println(" mV");
  
    /*
    Serial.print("AIN1: "); Serial.println(adc1);
    Serial.print("AIN2: "); Serial.println(adc2);
    Serial.print("AIN3: "); Serial.println(adc3);
    */
        
    lcd.setCursor(0,0);
    lcd.print("U = ");
    lcd.print(voltage,2);
    lcd.print(" mV     ");
    
    lcd.setCursor(0,1);
    lcd.print("I = ");
    lcd.print(Intensitaet,2);
    lcd.print(" W/m2     ");
    
    delay(3000);
    
    buttonState = digitalRead(buttonPin);    // button for new offset
    
    if (buttonState == LOW)
       {        
        offset = ads1115.readADC_SingleEnded(0) * 1.0;   // Einlesen des aktuellen Wertes = offset
        
        offset = offset * 0.0625;
        
        offset = offset / 10.0;    // offset-Spannung in mV vor der Verstärkung
        
        delay(100);
       }
    
    adc0 = ads1115.readADC_SingleEnded(0);
        
    voltage = adc0 * 0.0625;          // vom ADS1115 eingelesene Spannung in mV nach der Verstärkung
    
    voltage = voltage / 10.0;         // reale Eingangsspannung in mV vor der Verstärkung (gain = 10) 
    
    Leistung = (voltage - offset) * 11.26;       // Auf den Sensor auftreffende Strahlungsleistung in mW. Kalibrierung hat ergeben: 11.26 mW/mV
    
    Intensitaet = (voltage - offset) * 7.0375;   // Strahlungsintensität in W/m². Kalibrierung hat ergeben: 7.0375 W/m²/mV
     
    lcd.setCursor(0,0);
    lcd.print("P = ");
    lcd.print(Leistung,1);
    lcd.print(" mW      ");
    
    lcd.setCursor(0,1);
    lcd.print("I = ");
    lcd.print(Intensitaet,2);
    lcd.print(" W/m2     ");
    
    delay(3000);
    
   }