Der Thermosensor MAX6675 wird mit einer Sonde ausgeliefert, welche sehr hohe Temperatur (bis zu 1250 °C) standhalten kann (laut Hersteller).
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.
Hinweis von mir: Die mit einem Sternchen (*) markierten Links sind Affiliate-Links. Wenn du über diese Links einkaufst, erhalte ich eine kleine Provision, die dazu beiträgt, diesen Blog zu unterstützen. Der Preis für dich bleibt dabei unverändert. Vielen Dank für deine Unterstützung!
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. 4 g
- 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 | Arduino UNO |
---|---|
GND (Ground) | GND |
VCC | 5V |
SCK (Serial Clock) | 10 |
CS (Chip Select) | 9 |
SO (Serial Output) | 8 |
Modul MAX6675 | Thermosensor |
---|---|
+ | 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
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.
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.
Hallo, danke super erklärt, Hast du auch noch eine Lösung wenn ich 2 Temperatursensore auswerten möchte?
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
Hallo,
Mein Sohn möchte den temparatusensort an einen Arduino Nano ankoppeln. Ist die Vorgehensweise dieselbe? Vielen Dank im Voraus
Hi,
der Arduino Nano hat andere PINs für SCK (D13), CS (D10) und SO (D12).
Gruß,
Stefan
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)?
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
Hallo,
wie erwähnt habe ich nun unter https://draeger-it.blog/arduino-lektion-23-thermosensor-max6675-am-arduino-nano/ ein kleines Tutorial abgelegt wie der Thermosensor MAX6675 an den Arduino Nano angeschlossen wird.
Gruß,
Stefan
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
Hi,
hast du die benötigte Bibliothek auch in die Arduino Die eingebunden?
https://github.com/adafruit/MAX6675-library
Hast du eine Fehlermeldung von der Arduino IDE erhalten? Wenn Ja bitte sende mir diese.
Gruß,
Stefan
Hallo Stefan,
wie viele Sensoren sind maximal an einem UNO möglich?
Besten Dank+Grüße,
marlon
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
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
Hallo Wolf,
um zwei SPI Sensoren an einem Arduino UNO zu betreiben muss du beide Sensoren über den gleichen SCK, SO Pin versorgen, jedoch muss jeweils für den CS Pin ein anderer gewählt werden.
Hier ein kleines Schaubild https://draeger-it.blog/wp-content/uploads/2017/09/Aufbau_MasterSlaveSPI.png , dieses ist zwar mit einem RFID und SDCard Modul jedoch ist die Funktion die selbe.
Gruß,
Stefan Draeger
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
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
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
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
Hallo Stefan,
danke das hat mir sehr geholfen.
Prima!
Achim
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.
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
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
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