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
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
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.
Michael B. schrieb: > Allerdings wartet er nicht, bis die 100nF aufgeladen sind. die intrinsischen Delays im Arduino Framework werden reichen :)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.