/** este código funciona casi perfecto pero... el monitor serie hay que configurarlo en 11520 baudios
GeekFactory - "INNOVATING TOGETHER"
Distribucion de materiales para el desarrollo e innovacion tecnologica
www.geekfactory.mx
EJEMPLO SENCILLO PARA LECTURA DE TEMPERATURA CON TERMISTOR NTC. EL PROGRAMA
ESTÁ DISENADO PARA TERMISTORES NTC DE 10K NOMINALES A 25 GRADOS CENTIGRADOS.
EL TERMISTOR DEBE SER CONECTADO A LA ENTRADA DEL ADC MEDIANTE UN ARREGLO DE
DIVISOR RESISTIVO REALIZADO CON RESISTENCIA DE 10K Y EL TERMISTOR EN SERIE.
EL ALGORITMO UTILIZADO PARA OBTENER LA TEMPERATURA A PARTIR DE LA RESISTENCIA
DEL TERMISTOR ES UNA IMPLEMENTACIÓN DE LA ECUACIÓN DE STEINHART-HART
*/
#include <Arduino.h>
#include <math.h>
// configurar el pin utilizado para la medicion de voltaje del divisor resistivo del NTC
#define CONFIG_THERMISTOR_ADC_PIN A0
// configurar el valor de la resistencia que va en serie con el termistor NTC en ohms
#define CONFIG_THERMISTOR_RESISTOR 9900l
/**
* @brief Obtiene la resistencia del termistor resolviendo el divisor resistivo.
*
* @param adcval Valor medido por el convertidor analógico a digital.
* @return int32_t Resistencia electrica del termistor.
*/
int32_t thermistor_get_resistance(uint16_t adcval)
{
// calculamos la resistencia del NTC a partir del valor del ADC
return (CONFIG_THERMISTOR_RESISTOR * ((1023.0 / adcval) - 1));
}
/**
* @brief Obtiene la temperatura en grados centigrados a partir de la resistencia
* actual del componente.
*
* @param resistance Resistencia actual del termistor.
* @return float Temperatura en grados centigrados.
*/
float thermistor_get_temperature(int32_t resistance)
{
// variable de almacenamiento temporal, evita realizar varias veces el calculo de log
float temp;
// calculamos logaritmo natural, se almacena en variable para varios calculos
temp = log(resistance);
// resolvemos la ecuacion de STEINHART-HART
// http://en.wikipedia.org/wiki/Steinhart–Hart_equation
temp = 1 / (0.001129148 + (0.000234125 * temp) + (0.0000000876741 * temp * temp * temp));
// convertir el resultado de kelvin a centigrados y retornar
return temp - 273.15;
}
void setup()
{
// preparar serial
Serial.begin(115200);
while (!Serial)
;
Serial.println(F("----------------------------------------------------"));
Serial.println(F("EJEMPLO DE LECTURA DE TEMPERATURA CON TERMISTOR NTC "));
Serial.println(F(" https://www.geekfactory.mx "));
Serial.println(F("----------------------------------------------------"));
}
void loop()
{
// variable para almacenar la temperatura y resistencia
float temperatura;
uint32_t resistencia;
// calcular la resistencia electrica del termistor usando la lectura del ADC
resistencia = thermistor_get_resistance(analogRead(CONFIG_THERMISTOR_ADC_PIN));
// luego calcular la temperatura segun dicha resistencia
temperatura = thermistor_get_temperature(resistencia);
// imprimir resistencia y temperatura al monitor serial
Serial.print(F("Resistencia del NTC: "));
Serial.print(resistencia);
Serial.print(" Temperatura: ");
Serial.println(temperatura, 1);
// esperar 5 segundos entre las lecturas
delay(1000);
}
No hay comentarios:
Publicar un comentario