Resultado extraño ADC (Arduino Micro) Termistor KTY 10-6

¿Dónde está el error en el siguiente circuito/código?

Hace algún tiempo conseguí varios sensores. Uno de ellos fue el kty 10-6 (3 piezas). Al principio no pude encontrar ninguna hoja de datos o ejemplos sobre este sensor de temperatura. Así que obtuve un LM35 que era muy simple de configurar ya que es lineal. Ahora, después de varios meses, finalmente encontré la hoja de datos adecuada y la ecuación matemática para obtener los valores de resistencia adecuados.

KTY 10-6 (este es el enlace de la hoja de datos)

Circuito

Descubrí que es similar al kty81-210

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

Como no tengo una resistencia de 2.7k Ω, usé una resistencia de 2200 ohm .

el condensador es 100nf, creo: IJ63 está en la parte superior del gabinete. ¿correcto?

esquemático

simular este circuito : esquema creado con CircuitLab

Código

Como este termistor no es lineal y siempre quise usar la fórmula matemática adecuada para calcular la temperatura, esta es la mejor solución. Según lo que leí en la hoja de datos de kty10-6, cambié algunos valores como la resistencia y el valor beta (a). el alfa (b) .00788 parece ser el mismo en ambos sensores.

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 ;

¿Es correcto el cálculo?

Pregunto porque incluso si hace mucho calor en estos días... no creo que haya 132-135°Celsius. La fórmula es para Celsius.

Incluso si no uso esta fórmula pero uso otros cálculos más simples (lineales) siempre obtengo más de 130-140 °Celsius

fuente1 fuente2 fuente3

notas

Si toco el sensor, la lectura aumenta... como se esperaba.

Probé en todos los pines analógicos.

Yo uso el arduino micro.

Lo uso con un i2cLCD.

Es alimentado por USB.

No hay nada más conectado.

Si mido la resistencia en la placa prototipo cuando todo está apagado, lo leo como 1200 ohm... ¿la tapa?

¿Por qué obtengo 120 a 140 como valor de temperatura?


Opcional

Acabo de cerrar una publicación sobre la pila de componentes electrónicos que describe cómo aumentar la resolución de los termistores con resistencias. Lo encontré

Si alguien sabe cómo cambiar mi circuito para leer temperaturas de -10/-20 a +40/+50, sería muy feliz. esto duplicaría la resolución. Creo que en mi zona las temperaturas nunca bajarán de -20 ni superarán los +50 °C.

Compré 3 de esos, sé que son baratos. Conozco el agradable sensor de temperatura DS##### que es perfecto para los microcontroladores. Pero quiero que este funcione también.

No se pudo encontrar ninguna información - extraño. Puse Thermistor KTY 10-6 y obtuve esto de inmediato pollin.de/shop/downloads/D180003B.PDF
cuando comencé a usar microcontroladores... hace unos meses busqué algo como el KIT 10... ya que el texto de esos sensores de temperatura está muy degradado. de todos modos, sí, lo encontré... es un infineon... también agregué el enlace en la publicación. Es el primer enlace solo para estar seguro de que si alguien lee esto, tiene fácil acceso a él.
aparte de ese buen enlace, ¿tiene alguna idea de qué podría haber hecho mal? no soy ingeniero electronico
Se agregó "este es el enlace de la hoja de datos" a la publicación si alguien más lo pierde
Al observar la resistencia a 25 grados, debe obtener una resistencia de aproximadamente 2000 ohmios que proporcione aproximadamente 2,4 V en el sensor. Una revisión rápida con un voltímetro debería verificar esto. Esto debería producir una lectura de alrededor de 490 en el adc. Ingrese este valor en su cálculo y trabaje MANUALMENTE a través de su programa (lápiz y papel). ¿Qué valor de temperatura da? (la respuesta correcta debe ser alrededor de 25) - Si no es así, entonces su fórmula/programa es incorrecto
la lectura en una escala de 1023max fue de alrededor de 495-500. por lo que es probablemente correcto ya que había alrededor de 28-32 ° C.
y la fórmula es incorrecta. como dije, la lectura fue la misma en todos los pines analógicos...
¿Qué pasa con la alfa beta? ¿Son correctos los valores que puse? 0.00001937 y 0.00788?
el enlace "fórmula" dentro de la descripción del código muestra dónde lo obtuve. su ejemplo funciona en un sensor kty diferente. Si bien parece que, en mi opinión, las líneas de código son las mismas, puedo perder algo o poner valores incorrectos en...
Y así también se ve la fórmula dentro de la hoja de datos. incluso si tengo dificultades (grandes) para leer fórmulas escritas de esa manera. parece ser el mismo que en el código c++.
Si toco el sensor... que está alrededor de 129-133 después de las matemáticas a una temperatura de 28-32 grados... sube lentamente a 134 135 136... Como podría hacer: "resultado -100". .. pero por supuesto que está mal.
y sí... el valor real de la resistencia que uso es 2160-2170... así que puse 2170 en ese campo y no 2200. Pero esa es otra historia.

Respuestas (1)

Sabemos que las lecturas analógicas variarán entre 0 (=0V) y 1023 (5V).

El primer paso es convertir la lectura del valor analógico (de voltaje) en un valor de resistencia real.

ingrese la descripción de la imagen aquí

Nuevo programa sugerido (no lo he probado, por lo que se agradecen los comentarios/correcciones)

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!
Debe considerar desarrollar el hábito de evitar los flotadores siempre que sea posible.