Lectura de señal analógica proveniente de un sensor de temperatura NTC 100 Kohm. Estos valores se muestran en el puerto serial.

Dependencies:   mbed

Tarea: Medición de temperatura usando un termistor NTC 100K.

Introduccion: Existen distintas formas de leer la temperatura, ya sea con sensores digitales como el LM35 o analógicos como el caso de los termistores entre otros. Una correcta medición de la temperatura puede llegar a ser uno de los procesos más críticos en una línea de producción. Por tal razón, es de vital importancia elegir el sensor correcto para tal trabajo.

En nuestro caso, haremos uso de un sensor de temperatura NTC 100K el cual se podría cubrir un rango amplio de aplicaciones debido a sus características. Este sensor disminuye el valor de su resistencia a medida que sube la temperatura, gracias a eso, podemos conectarlo en serie con otro resistor de manera que se forme un divisor de voltaje.

Conexiones:

El divisor de voltaje aplicado se encuentra configurado de la siguiente manera:

https://os.mbed.com/media/uploads/mvillamar/divisor_IcfLIjc.png

La fórmula del circuito está definida por:

Vout=Vin*(Raux/(Rntc+Raux))

Donde: Raux es la resistencia en serie Rntc es la resistencia variable del termistor Vines el voltaje de 3.3Vcc Rvar es un potenciómetro para afinar el valor de Raux a exactamente 100Kohm con el fin de reducir los errores en la lectura.

La salida Vout del divisor se conecta al pin analogio PC_5 del uP STM32 para que se ejecute la lectura.

https://os.mbed.com/media/uploads/mvillamar/coenxiones_termistor.jpg

Para obtener la lectura de la temperatura, es necesario conocer varios parámetros del sensor, los cuales pueden ser provistos por el fabricante del mismo. Para nuestro caso, los parámetros de funcionamiento que tenemos son:

Raux=100000.0; Resisrencia auxiliar para el divisor de voltaje vcc=3.34; voltaje del divisor de tension temp0 = 298.0; temperatua 24C en grados kelvin r0 = 100000.0; resistencia a los 24C Beta=3950.0;

Posteriormente, debemos calcular la resistencia Rntc del termistor. Esto lo obtenemos partiendo de la fórmula del divisor de voltaje despejando la variable Rntc, lo cual nos queda: Rntc=((Raux*Vin)/Vm)-Raux

Finalmente, ingresamos esos valores del termistor en la fórmula (Fórmula Steinhart–Hart) para obtener la temperatura, la cual es:

TemperaturaK=(Beta/(log⁡(Rntc/Ro)+(Beta/To) ))-273

Finalmente el valor es mostrado en el puerto serie.

Conclusion:

El sensor tiene una buena respuesta ante variaciones pequeñas de temperatura y debido a su amplio rango de trabajo puede ser útil en aplicaciones donde existan altas temperaturas.

https://os.mbed.com/media/uploads/mvillamar/img_20200215_033158_-_copia.jpg

main.cpp

Committer:
mvillamar
Date:
2020-02-17
Revision:
0:2a66cff945d2

File content as of revision 0:2a66cff945d2:

/*Lectura de un termistor NTC y mostrar lectura en el puerto serial.
La lectura analogica se realiza cada 1.5s por medio de una
interrupcion
*/

#include "mbed.h"
#include <math.h>
Ticker tempo1;                          //Interrupcion para lectura del NTC

Serial hercules (PA_2,PA_3, 115200);    //configuracion de com serial
AnalogIn ain(PC_5);                     // pin para lectura del termistor
float vm=0;                             //variable con dato analogo proveniente del divisor

/////////Datos de fabrica del termistor////////////////////////////////////////
float Raux=100000.0;                                    // Resisrencia auxiliar para el divisor de voltaje
float vcc=3.34;                                         // voltaje del divisor de tension
float temp0 = 298.0;                                    //temperatua 24C en grados kelvin
float r0 = 100000.0;                                    //resistencia a los 24C
float Beta=3950.0;                                      //constante ntc OBTENIDO de la hoj de datos
float Rntc=0;
float tempC=0.0;
float temperaturaK = 0.0;
//////////DECLARACION DE FUNCIONES//////////////////////////////////////////
void TermistorRead();

int main()
{
    tempo1.attach(&TermistorRead, 1.5);             //caca 1.5 seg se ejecuta la lectura del termistor
    while(1) {
        hercules.printf("Temperatura: %2,2f\r\n");  //solo 2 decimales.
        wait (0.3);
    }
}

void TermistorRead()                                    //lectura de dato analogico proveniente del divisor de voltaje.
{
    vm=ain;                                             //Lectura analogica 
    vm*=3,3;                                            //Para convertir valor analogico a voltios
    Rntc= ((Raux*vcc)/vm)-Raux;                         //despejando Rntc la formula del divisor.
    temperaturaK =Beta/(log(Rntc/r0)+(Beta/temp0));     //formula para encontrar la temperatura
    tempC= temperaturaK - 273;                          //convertir kelvin a C
}