Arduino Lektion 23: Thermosensor MAX6675

Der Thermosensor MAX6675 wird mit einer Sonde ausgeliefert, welche sehr hohe Temperatur (bis zu 1250 °C)  standhalten kann (laut Hersteller).

Thermosensor MAX6675 mit Sensor und Modul.
Thermosensor MAX6675 mit Sensor und Modul.

Ich habe den Sensor über ebay.de bestellt und ca. 5 € bezahlt. Alternativ kann man den Sensor auch über amazon.de bestellen. Man sollte jedoch darauf achten, dass man beides bestellt, Sensor & Modul, einige bieten für den Preis nur Sensor oder nur Modul an.

Technische Daten

  • Temperaturbereich 0 bis ca. 1024 °C
    • die Auflösung des Temperatursensors liegt bei 0,25 °C
  • Betriebsspannung (Modul) 3 bis 5,5V
  • Umgebungstemperatur (Modul) -20 bis 85 °C
  • Gewicht ca. 4g
  • Größe des Moduls  15 mm x 25 mm x 13 mm

Schaltplan

Das Modul MAX6675 hat zwei Anschlussseiten, einmal zum Mikrocontroller (Bsp. Arduino) und einmal zum Sensor (+ und -).

Modul MAX6675
Modul MAX6675
Modul MAX6675Arduino UNO
 GND (Ground)GND
VCC5V
SCK (Serial Clock) 10
CS (Chip Select) 9
SO (Serial Output) 8
Modul MAX6675Thermosensor
 + rot
 –blau

 Bibliothek

Eine Bibliothek für die Ansteuerung des Moduls ist auf GitHub unter folgendem Link https://github.com/adafruit/MAX6675-library zu finden.

Wie man eine Bibliothek in die Arduino IDE einbindet, habe ich im Tutorial „Arduino IDE, Einbinden einer Bibliothek“ ausführlich beschrieben und möchte daher hier nicht weiter darauf eingehen.

Quellcode

Nachdem die benötigte Bibliothek in die Arduino IDE eingebunden wurde, ist der Rest ein einfaches, da hier das Objekt MAX6675, welches uns die Bibliothek zur Verfügung stellt, genutzt wird.

#include "max6675.h" //Die MAX6675 Bibliothek

int max6675SO = 8; // Serial Output am PIN 8
int max6675CS = 9; // Chip Select am PIN 9
int max6675CLK = 10; // Serial Clock am PIN 10

// Initialisierung der MAX6675 Bibliothek mit 
// den Werten der PINs
MAX6675 ktc(max6675CLK, max6675CS, max6675SO); 

  
void setup() {
  Serial.begin(9600); // Begin der Seriellen Kommunikation mit 9600 Baud
  delay(500); // eine kleine Pause damit der Sensor sich kalibriert 
}

void loop() {
  // Lesen des Temperaturwertes in Grad Celsius
  Serial.print(ktc.readCelsius());
  Serial.println("C"); 

  // Lesen des Temperaturwertes in Grad Fahrenheit
  Serial.print(ktc.readFahrenheit());
  Serial.println("F");

  // 500ms Pause bis zum nächsten Durchlauf
  delay(500);
}

Video

Thermosensor MAX6675

Da die Kerze nur eine Temperatur von ~210 °C schafft, habe ich mir mit meinem Hobo ein kleines Feuerchen gemacht und mal geschaut, ob das etwas mehr bringt.

Temperatursensor MAX6675 Test am offenem Feuer

Aber auch hier sind nur Temperaturen unter 600 °C erreicht worden.

 

Download

Fazit

Ein interessanter Temperatursensor, wobei ich die angegebenen 1024 °C erst einmal testen muss.

23 Kommentare

    1. Hi,

      das wird dann über einen weiteren SPI gelöst. Hier kommt es auf das Board drauf an welches du verwendest.
      Schaue dochmal nach SPI Master / Slave da wirst du fündig.

      Gruß,

      Stefan

      1. Vielen Dank für die Info. Verstehe nicht viel davon, aber das Script ist das gleiche wie oben beschrieben (ausser natürlich die Belegung der PINs)?

        1. Hi,

          ich werde heute Abend mal kurz das ganze mit einem Arduino Nano aufbauen und prüfen. Mein Ergebnis wird dem Tutorial angehängt.

          Gruß,

          Stefan

  1. Ich danke Dir für die Veröffentlichung des Tutorials. Haben das Script so übernommen, aber anscheinend findet der Nano den Thermosensor nicht in der Bbliothek 🙁 Wo liegt da der Hund begraben? Vielen Dank im Voraus für die Antwort. MfG

    1. Hi,

      es kommt darauf an wie diese Sensoren angeschlossen werden. Der UNO hat 6 Analoge und 13 digitale Pins. Wobei von den digitalen 6 PWM Pins sind. Das heißt wenn du über SPI arbeitest kannst du 6 Sensoren über digital ansteuern.

      Gruß,

      Stefan

  2. Hallo,
    Ich möchte 2 Sensoren an einen UNO anschließen!
    Mir ist noch nicht klar, welche Pin’s ich am UNO mit dem zweiten Sensor belegen soll!
    Auch komm ich mit der Konfiguration im Setup nicht klar.
    Könntest Du mir eine kurze Erklärung liefern, damit ich mir die Funktionsweise auch erklären kann?

    Vielen Dank!
    Wolf Ulrich

  3. Hallo,
    vielen Dank für das super Tutorial.
    Eine Frage habe ich noch zum Max6675. Was muss ich machen damit mir im Falle einer Sensorunterbrechung nicht mehr „nan“ sondern der maximale Temperaturwert (1250) des Sensor angezeigt wird. Oder kann ich die Ausgabe nan auch irgendwie in einer if-Abfrage verwenden?
    Vielen Dank für die Unterstützung.

    Gruß,
    Thomas

    1. Hallo Thomas,

      für diesen Fall empfehle ich dir die Funktion isNan(<>). Dieser Funktion übergibst du den Wert aus dem Sensor und als Rückgabewert gibt es ein „true“ wenn der Wert KEINE Zahl ist und ein „false“ wenn es eine Zahl ist.

      Mehr Informationen zu dieser Funktion findest du in der Arduino Reference https://www.arduino.cc/en/Reference/MathHeader

      Gruß,

      Stefan Draeger

  4. Hallo Stefan,
    Ich habe zwei Sensoren auf die von dir oben beschriebene Art angeschlossen. mir ist nur nicht ganz klar wie ich den Code ändern muss damit ich beide Sensoren auslesen kann. Ich denke ich muss zuerst den zweiten CS Pin definieren. Aber wie mache ich das? Und woher weiß das Programm ob mit „ktc.readCelsius()“ dann Sensor 1 oder Sensor 2 gemeint ist? Danke für deine Hilfe!!

    Lieben Gruß,
    Niklas

    1. Hallo Niklas,

      du musst dann bei den Sensoren jeweils den CS (ChipSelect) auf je einen digitalen Pin setzten. Und zu jedem Sensor jeweils ein neues „SensorObjekt“ vom Typ
      „MAX6675 ktc“ erzeugen, zbsp.

      int SO = 8; // Serial Output am PIN 8
      int CLK = 10; // Serial Clock am PIN 10

      int CS1 = 9; // Chip Select des 1. Sensors am PIN 9
      int CS2 = 6; // Chip Select des 2. Sensors am PIN 6

      MAX6675 ktc1(CLK, CS1, SO);
      MAX6675 ktc2(CLK, CS2, SO);

      Serial.print(ktc1.readCelsius());
      Serial.print(ktc2.readCelsius());

      Ich denke damit solltest du ersteinmal weiterkommen.

      Gruß,

      Stefan Draeger

  5. Guten Tag, vielleicht liest hier ja noch jemand.
    Ich habe mit mehreren Sensoren und Fühler getestet, und bekomme immer eine schwankende Temperatur. Die Sprünge betragen +- 0,25 bis 0,5 K. Fehler bei Installation oder Sketch sind ja praktisch unmöglich.

    1. Hi Klaus,

      vielen Dank für dein Kommentar.

      Womit misst du denn die Abweichungen? Die Sensoren haben ja generell nicht so die gute Toleranz.

      Gruß,

      Stefan Draeger

  6. Hallo Stefan,

    ich habe hier die Abfrage eines Max6675 mit Ausgabe des Temperaturwertes in einer Systemvariable (D74):

    if (iomodus_max1 ==1)

    {if (millis() > next_Time[74])
    {next_Time[74] = next_Time[74] +5000; //MAX6675 nicht häufiger als alle 5s abfragen

    MAX6675 thermocouple(thermoCLK, thermoCS, thermoDO);
    thermo_C = thermocouple.readCelsius() -2.5 ; // Sensor Lesen und Korrekturwert

    // Serial.print(„C = „); Serial.println(thermo_C);

    for (int m=0; m (last_value_D[74] + delta_max)) || (thermo_C < (last_value_D[74] – delta_max))
    || complete_loop))

    {befehl="GET /xy.exe?antwort=dom.GetObject('" + hm_systemvariable+"D74"+"').State("+thermo_C+")";
    set_sysvar();
    last_value_D[74] = thermo_C;
    }
    }
    }

    Nun möchte ich parallel dazu einen zweiten Sensor abfragen (inkl. Ausgabe in Systemvariable D75).
    Was muss ich einfügen, um die Abfrage des zweiten Sensors zu starten? Kannst Du die Zeile(n) evtl. gleich einfügen?

    Vielen Dank schonma im Voraus!

    Beste Grüße
    Denis

  7. Hallo Stefan,
    ich habe zwei MAX6675 bei Amazon bestellt. In der Lieferung sind ja bereits Thermoelemente enthalten. Ich habe diese Thermoelemente gegen andere Thermoelement (ebenfalls Typ k) ausgetauscht. Diese Thermoelemente haben eine zusammengeschweißte Spitze (reagieren also sehr schnell).

    Ich habe jedoch eine Abweichung zur Raumtemperatur von ca. 5-6°C.
    Bsp.: Raumtemperatur 23-24°C => Thermoelementtemperatur 29-30°C

    Hast du eine Idee voran es liegt und wie ich diesen Fehler beheben kann?

    Mit freundlichen Grüßen,
    Alex

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert