Forum: Projekte & Code Temperatursensor KTY81 am ATmega328 (Arduino UNO), 1-6 Kanäle


von M. N. (Gast)


Angehängte Dateien:

Lesenswert?

Das Schaltbild zeigt eine minimale Beschaltung von bis zu sechs 
Temperatursensoren KTY81 an einem ATmega328 bzw. Arduino UNO. Das 
Programm 'KTY_Temperatur.ino' läßt sich direkt in der Arduino IDE oder 
mit einem Texteditor öffnen.

An anderer Stelle findet sich schon eine nähere Beschreibung des 
Messverfahrens mit PT1000-Sensor nebst einem .C-Programm, sodaß hier nur 
die Ergänzungen für den KTY beschrieben werden. Für Arduino Anwender 
dürfte die .ino-Datei ein leichter Einstieg sein; C-Programmierer werden 
in der Lage sein, sich den Quellcode passend zusammenzustellen: 
Beitrag "PT1000, einfache Auswertung mit AVR (ATmega328)"

Das Programm ermittelt den Widerstand des Sensors mit ratiometrischer 
Messung und berechnet den Temperaturwert anhand einer Tabelle. Diese ist 
speziell für den KTY81/110 ausgelegt (siehe Datenblatt) und muß bei 
KTY83 bzw. anderen Sensoren angepaßt werden. Ohne Tabellenänderung kann 
man aber auch die Bestückung z.B. mit dem KTY81/210 mischen. Dieser hat 
statt der 1000 Ohm einen Nennwiderstand von 2000 Ohm. Wichtig dabei ist 
nur, daß der zugehörige Referenzwiderstand ebenfalls auf 2000 Ohm 
angepaßt wird.

Gegenüber einem PT1000 ist die Empfindlichkeit eines KTY81 etwa doppelt 
so hoch, aber nicht so berauschend hoch, als daß man eine sinnvolle 
Nachkommastelle ausgeben könnte. Ein KTY81 ist kostengünstiger, aber der 
Temperaturbereich nach oben ist begrenzt.
Wer es braucht, kann aber auch beide Sensortypen am selben µC betreiben, 
sofern passend zum ADC-Kanal auch die entsprechende Tabelle verwendet 
wird.

Sofern man den ATmega328 direkt verwendet (ggf. nur mit ext. Quarz wegen 
der stabilen Baudrate) und KTY81/110  Sensoren nimmt, kommt man bei 
sechs Kanälen auf eine kostengünstige Lösung.
Beispiele für Sensoren: 
http://www.reichelt.de/index.html?ACTION=3;ARTICLE=9594;SEARCH=KTY%2081-110
http://www.reichelt.de/PCA-1-1505-10/3/index.html?&ACTION=3&LA=446&ARTICLE=85054&artnr=PCA+1.1505+10&SEARCH=platin

von Noob (Gast)


Lesenswert?

Moin,

das Beispiel funktioniert nicht.
Sowohl die Schaltung als auch das Programm sind dementsprechend für 
Arduino NANO, UNO und MEGA nicht einsetzbar.

Der AREF Pin sollte auf der Referenzspannung liegen mit der der zu 
verwendende Spannungsteiler versorgt wird.

Das ist ein Eingang mit dem gemessen wird, weil es eben Spannungsabfälle 
gibt, wie groß die Spannung tatsächlich ist, die dem Spannungsteiler 
zugefügt wird.

Aus dem Grund ist AREF auf +5 Volt zu legen.

In dem Programm sind alle digitalWrite auf VREF_PIN (HIGH und LOW) und 
das Setzen des VREF_PIN auf OUPUT zu entfernen.

Will man erreichen was der Autor erreichen möchte, nämlich, dass der 
KTY81 nicht permanent unter Spannung steht, dann sollte man den KTY81 
über einen der digitalen Pins einschalten und mit Strom versorgen und 
von dem eine Leitung nach AREF legen.

Wenn ich das Ganze wie hier vorgestellt verwende wird als Temperatur 
9998 angezeigt. Meine Modifikationen führen dazu, dass eine 
Raumtemperatur von 23° angezeigt wird und berühren des Sensors diese 
relativ zügig auf über 30 Grad verändert.

Ob die Methode der Temperaturberechnung grundsätzlich brauchbar ist habe 
ich nicht untersucht. Ich verwende ein anderes Verfahren, das sehr gute 
Ergebnisse bringt und der Realität deutlich näher kommt. Zur Zeit ist 
die Raumtemperatur hier 19 Grad und meine Köpertemperatur 36,7 Grad und 
ich bin mit meinem Verfahren in der Lage dieses auch recht zuverlässig 
zu messen.

Der Beitrag sollte noch korrigiert werden. Er ist zumindest nicht 
Arduino kompatibel. Ebenso sind die Bezeichnungen der Pins irreführend.


Greetings
Ein Noob

von Michael B. (laberkopp)


Lesenswert?

Noob schrieb:
> Aus dem Grund ist AREF auf +5 Volt zu legen.

Natürlich nicht.

> Will man erreichen was der Autor erreichen möchte, nämlich, dass der
> KTY81 nicht permanent unter Spannung steht, dann sollte man den KTY81
> über einen der digitalen Pins einschalten und mit Strom versorgen und
> von dem eine Leitung nach AREF legen.

Genau das tut er.

Allerdings wartet er nicht, bis die 100nF aufgeladen sind.

Besser also ohne C.

Noob schrieb:
> Ebenso sind die Bezeichnungen der Pins irreführend.

Nächstes mal aufmerksamer lesen.

von Johannes S. (Gast)


Lesenswert?

Michael B. schrieb:
> Allerdings wartet er nicht, bis die 100nF aufgeladen sind.

die intrinsischen Delays im Arduino Framework werden reichen :)

von M. N. (Gast)


Lesenswert?

Michael B. schrieb:
> Allerdings wartet er nicht, bis die 100nF aufgeladen sind.

Dafür liest er den Eingang 2 x nacheinander ein:
    analogRead(ad_eingang);               // ADC in Betrieb nehmen
    ADC_wert = analogRead(ad_eingang);    // und Kanal messen

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.