NTC 3950 V6 alta temperatura

Buenas tengo un Arduino Promini una pantalla 16x2 con I2C un relé doble y un sensor NTC 3950 de 100k que mide hasta 350°, hice la conexión y busque sobre como programarlo, llegue hacer funcionar todo la medición de temperatura en Grados y la activación del relé dependiendo la temperatura pero tengo un problema con la medición, por ejemplo esta midiendo 20° y de golpe sube 3° ósea 23° y baja de golpe a 20 me refiero que va midiendo bien tranquilo pero fluctúa mucho con 2 o 3 grados tanto para arriba como para abajo y eso hace que el relé se vuelva loco alguno sabe como puedo hacer para que la medición no se dispare de esa forma

#include <LiquidCrystal_I2C.h>
#include <Wire.h>
LiquidCrystal_I2C lcd(0x27,16,2);

//sensor  ************************************************************************************************* sensor
#include <math.h>

//Valores fijos del circuito
float rAux = 100000.0;
float vcc = 5.0;
float beta = 3950.0;
float temp0 = 298.0;
float r0 = 100000.0;

//Variables usadas en el cálculo
float vm = 0.0;
float rntc = 0.0;
float temperaturaK = 0.0;
//sensor  ************************************************************************************************* sensor

//rele  ************************************************************************************************* rele
int RELE = 7;
//rele  ************************************************************************************************* rele

void setup() {
  lcd.init();
  lcd.backlight();
//rele  ************************************************************************************************* rele
  pinMode (RELE, OUTPUT);
//rele  ************************************************************************************************* rele
}

void loop() {
  //temperatura
  vm=(vcc / 1024)*( analogRead(0) );                //Calcular tensión en la entrada
  rntc = rAux / ((vcc/vm)-1);                       //Calcular la resistencia de la NTC
  temperaturaK = beta/(log(rntc/r0)+(beta/temp0));  //Calcular la temperatura en Kelvin
  temperaturaK = temperaturaK - 273;
  //temperatura
  lcd.setCursor(0,0);
  lcd.print("O_O");
  lcd.setCursor(0,1);
  lcd.print(temperaturaK);
  delay(1000);
  if (temperaturaK < 20){
    digitalWrite(RELE, LOW);
  }else{
    digitalWrite(RELE, HIGH);
  }
}

There is some noise, some random fluctuation in the temperature readings. Maybe this can't be avoided. Add some hysteresis to the value you compare it to. Switch the relay off if the temp is below 20, but don't switch the relay on unless the temp is above, maybe, 24.

He trasladado su tema de una categoría de idioma inglés del foro a la categoría International > Español @lerollf.

En adelante por favor usar la categoría apropiada a la lengua en que queráis publicar. Esto es importante para el uso responsable del foro, y esta explicado aquí la guía "How to get the best out of this forum".
Este guía contiene mucha información útil. Por favor leer.

De antemano, muchas gracias por cooperar.

Agrega histeresis o sea, que el dispositivo no corte a un valor determinado sino que lo haga a un valor en un sentido y a otro desplazado en histeresis expresado en grados en el otro.

#include <LiquidCrystal_I2C.h> // Debe descargar la Libreria que controla el I2C
#include<Wire.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);

//sensor  ************************************************************************************************* sensor
#include <math.h>

//Valores fijos del circuito
float rAux = 100000.0;
float vcc   = 5.0;
float beta  = 3950.0;
float temp0 = 298.0;
float r0    = 100000.0;

//Variables usadas en el cálculo
float vm    = 0.0;
float rntc  = 0.0;
float temperaturaK = 0.0;
float histeresis  = 1.5;
//sensor  ************************************************************************************************* sensor

//rele  ************************************************************************************************* rele
int RELE = 7;
//rele  ************************************************************************************************* rele

void setup() {
  lcd.init();
  lcd.backlight();
//rele  ************************************************************************************************* rele
  pinMode (RELE, OUTPUT);
//rele  ************************************************************************************************* rele
}

void loop() {
  //temperatura
  vm=(vcc / 1024)*( analogRead(0) );                //Calcular tensión en la entrada
  rntc = rAux / ((vcc/vm)-1);                       //Calcular la resistencia de la NTC
  temperaturaK = beta/(log(rntc/r0)+(beta/temp0));  //Calcular la temperatura en Kelvin
  temperaturaK = temperaturaK - 273;
  //temperatura
  lcd.setCursor(0,0);
  lcd.print("O_O");
  lcd.setCursor(0,1);
  lcd.print(temperaturaK);
  delay(1000);
  if (temperaturaK < 20){
    digitalWrite(RELE, LOW);
  }else{
    if (temperaturaK > (20 + histeresis)){
        digitalWrite(RELE, HIGH);
    }
  }
}

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.