Seltsames Ergebnis ADC (Arduino Micro) Thermistor KTY 10-6

Wo ist der Fehler in der folgenden Schaltung/Code?

Vor einiger Zeit habe ich mir diverse Sensoren zugelegt. Einer davon war der kty 10-6 (3 Stück). Anfangs konnte ich kein Datenblatt oder Beispiele zu diesem Temperatursensor finden. Also habe ich einen LM35 bekommen, der sehr einfach einzurichten war, da er linear ist. Jetzt, nach einigen Monaten, habe ich endlich das richtige Datenblatt und die mathematische Gleichung gefunden, um die richtigen Widerstandswerte zu erhalten.

KTY 10-6 (dies ist der Link zum Datenblatt)

Schaltkreis

Ich fand heraus, dass es dem kty81-210 ähnlich ist

 (Vcc 5+)--+-->2.7k--+-->kty81-110-->(GND)
           |         |
           +->100nF--+-----> ADC0 (Analog Port 0)

Da ich keinen 2,7k Ω Widerstand habe, habe ich einen 2200 Ohm Widerstand verwendet.

der kondensator ist 100nf ich denke: IJ63 ist oben auf dem gehäuse. richtig?

schematisch

Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan

Code

Da dieser Thermistor nicht linear ist und ich immer die richtige mathematische Formel verwenden wollte, um die Temperatur zu berechnen, ist dies die beste Lösung. Basierend auf dem, was ich im kty10-6-Datenblatt gelesen habe, habe ich einige Werte wie den Widerstand und den Beta (a) -Wert geändert. das alpha(b) .00788 scheint bei beiden Sensoren gleich zu sein.

float resistor = 2200; // changed
float temp = analogRead(A5);
float ukty = 5*temp/1023.0;
float a = 0.00001937*1000; // changed
float b = 0.00788*1000;
float c = 1000-resistor*ukty/(5-ukty);
float delta = b * b - 4 * a * c;
float delta1 = sqrt (delta);
float x2 =(-b + delta1)/(2 * a);
float temp1 = x2 + 25 ;

Ist die Berechnung korrekt?

Ich frage, weil es heutzutage wirklich heiß ist. Ich glaube nicht, dass es 132-135 ° Celsius gibt. Die Formel ist für Celsius.

Auch wenn ich diese Formel nicht benutze, sondern andere einfachere Berechnungen (linear) verwende, komme ich immer über 130-140°Celsius

Quelle1 Quelle2 Quelle3

Anmerkungen

Wenn ich den Sensor berühre, erhöht sich der Messwert ... wie erwartet.

Ich habe an allen analogen Pins getestet.

Ich benutze das Arduino-Mikro.

Ich benutze es mit einem i2cLCD.

Es ist USB-betrieben.

Sonst ist nichts angeschlossen.

Wenn ich den Widerstand auf der Protoplatine messe, wenn alles ausgeschaltet ist, lese ich ihn als 1200 Ohm ... die Kappe?

Warum bekomme ich 120 bis 140 als Temperaturwert?


Optional

Ich habe gerade einen Beitrag zum Elektronikstapel geschlossen, in dem beschrieben wird, wie die Auflösung von Thermistoren mit Widerständen erhöht werden kann. fand es

Wenn jemand weiß, wie ich meine Schaltung ändern kann, um Temperaturen von -10/-20 bis +40/+50 zu lesen, wäre ich sehr glücklich. dies würde die Auflösung verdoppeln. Ich denke, in meiner Zone werden die Temperaturen nie unter -20 oder über +50 ° Celsius sinken.

Ich habe 3 davon gekauft, ich weiß, dass sie billig sind. Ich kenne den netten DS##### Temperatursensor, der perfekt für die Mikrocontroller ist. Aber ich möchte diesen auch zum Laufen bringen.

Konnte keine Informationen finden - seltsam. Ich habe den Thermistor KTY 10-6 eingebaut und sofort bekommen pollin.de/shop/downloads/D180003B.PDF
als ich anfing mikrocontroller zu verwenden... vor einigen monaten suchte ich nach so etwas wie KIT 10... da der text auf diesen temperatursensoren sehr schlecht ist. Wie auch immer, ja, ich habe es gefunden ... es ist ein Infineon ... ich habe auch den Link im Post hinzugefügt. Es ist der erste Link, nur um sicher zu sein, dass, wenn jemand dies liest, er einfachen Zugriff darauf hat.
Abgesehen von diesem netten Link, hast du eine Idee, was ich falsch gemacht haben könnte? Ich bin kein Elektroniker.
"Dies ist der Datenblatt-Link" zum Beitrag hinzugefügt, falls ihn jemand anderes vermisst
Wenn Sie den Widerstand bei 25 Grad betrachten, sollten Sie einen Widerstand von etwa 2000 Ohm erhalten, was etwa 2,4 V über den Sensor ergibt. Eine schnelle Überprüfung mit einem Voltmeter sollte dies bestätigen. Dies sollte einen Messwert von etwa 490 im ADC ergeben. Setzen Sie diesen Wert in Ihre Berechnung ein und arbeiten Sie Ihr Programm MANUELL ab (Bleistift und Papier). Welchen Temperaturwert gibt es an? (richtige Antwort sollte ungefähr 25 sein) - Wenn dies nicht der Fall ist, ist Ihre Formel/Ihr Programm falsch
Der Messwert auf einer Skala von 1023max lag bei etwa 495-500. Es ist also ziemlich richtig, da dort etwa 28-32 ° C waren.
und die Formel ist falsch. Wie ich schon sagte, der Messwert war an allen analogen Pins gleich ...
Was ist mit der Alpha-Beta? Sind die Werte, die ich eingegeben habe, richtig? 0,00001937 & 0,00788?
Der Link "Formel" in der Codebeschreibung zeigt, wo ich es her habe. sein beispiel funktioniert auf einem anderen kty-sensor. Während es scheint, dass in meinen Augen die Codezeilen gleich sind, kann ich etwas übersehen oder die falschen Werte eingeben ...
Und so sieht auch die Formel im Datenblatt aus. auch wenn ich (schwere) Schwierigkeiten habe, so geschriebene Formeln zu lesen. es sieht aus wie im C++-Code.
Wenn ich den Sensor berühre ... der nach der Berechnung bei einer Temperatur von 28-32 Grad ungefähr 129-133 beträgt ... steigt er langsam auf 134 135 136 ... Wie ich es gerade tun könnte: "Ergebnis -100". .. aber das ist sicher falsch.
und ja ... der tatsächliche Widerstandswert, den ich verwende, ist 2160-2170 ... also habe ich 2170 in dieses Feld und nicht 2200 eingegeben, aber das ist wieder eine andere Geschichte.

Antworten (1)

Wir wissen, dass analoge Messwerte zwischen 0 (=0 V) und 1023 (5 V) variieren.

Der erste Schritt besteht darin, den Messwert des Analogwerts (der Spannung) in einen tatsächlichen Widerstandswert umzuwandeln .

Geben Sie hier die Bildbeschreibung ein

Vorgeschlagenes neues Programm (nicht getestet, daher Kommentare/Korrekturen willkommen)

float resistorfixed = 2200;
float temp = analogRead(A5);

// calculate sensor resistance value (Rkty)

float Rkty = (resistorfixed * temp) / (1023 - temp);

// From the data sheet the value of the resistance of the sensor 
// @ 25 degrees is 2000 +/- 20 ohmsStart with calculating the measured 
// resistance.

float R25 = 2000;

// We are also given alpha and beta 

float alpha = 7.88 / 1000;
float beta  = 1.937 / 100000; // divide by 10^-5

// Now we need to calculate the temperature factor (KayTee)

float KayTee = Rkty / R25;

// We now have all the information to calculate the actual temperature 
// (AcT)

float AcT = 25 + ((sqrt((alpha * alpha) - (4 * beta) + (4 * beta * KayTee)) - alpha) / (2 * beta));

// Just hope I've got my brackets is the correct place!
Sie sollten erwägen, die Gewohnheit zu entwickeln, Schwimmer nach Möglichkeit zu vermeiden