const int sensorPin = A0; // Pin analógico donde está conectado el sensor NTC
const int ledPin = 13; // Pin digital donde está conectado el LED rojo
const int potenciometroPin = A8;
const int temperaturaMenorDeseada = 190; // Temperatura menor deseada en grados Celsius
const int temperaturaMayorDeseada = 220; // Temperatura mayor deseada en grados Celsius
const float BETA = 3950; // should match the Beta Coefficient of the thermistor
double integral = 0, dt=1, previo=0;
double temperaturaActual = 0;
double temperaturaDeseada = 0;
double Kp=1, Ki=0.6, Kd=0.02;
double error = 0;
int lecturaAnterior = 0;
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(potenciometroPin, INPUT);
Serial.begin(9600);
temperaturaDeseada = analogRead(potenciometroPin);
Serial.print("temperaturaDeseada: ");
Serial.println(temperaturaDeseada);
}
void loop() {
//valor del sensor - perturbacion posible
int lectura = analogRead(sensorPin);
if(lectura == lecturaAnterior ){
// punto suma
calcularError();
Serial.print("temperaturaActual: ");
Serial.println(temperaturaActual);
Serial.print("error: ");
Serial.println(error);
double valorPID = pid(error);
//actuador
// actuadorDeTemperatura(valorPID);
Serial.print("valorPID: ");
Serial.println(valorPID);
//sensor
//a chequear que hace el sensor
} else {
float temperaturaSensor = 1.5 / (log(1 / (1023. / lectura - 1)) / BETA + 1.0 / 298.15) - 273.15;
temperaturaActual = temperaturaSensor;
lecturaAnterior = lectura;
}
Serial.println("-------------------------------------------------");
delay(3000); // Esperar 1 segundo antes de la próxima lectura
}
void calcularError(){
error = temperaturaDeseada - temperaturaActual;
}
double pid(double error)
{
double proportional = error;
integral += error * dt;
double derivative = (error - previo) / dt;
previo = error;
if (integral > 400)
{
integral = 400;
}
else if (integral < -400)
{
integral = -400;
}
return (Kp * proportional) + (Ki * integral) + (Kd * derivative);
}
void actuadorDeTemperatura(double valorPID){
// Encender el LED si la temperatura está dentro del rango permitido
if (temperaturaActual > temperaturaMenorDeseada && temperaturaActual < temperaturaMayorDeseada) {
Serial.println("Llego a la temperatura deseada");
digitalWrite(ledPin, HIGH);
} else {
if (temperaturaActual <= temperaturaMenorDeseada) {
Serial.print("Temperatura menor al rango establecido: ");
Serial.println(temperaturaActual);
temperaturaActual += 10;
digitalWrite(ledPin, LOW);
} else {
Serial.print("Temperatura mayor al rango establecido: ");
Serial.println(temperaturaActual);
temperaturaActual -= 10;
digitalWrite(ledPin, LOW);
}
}
}
void sensor(int temperaturaActual) {
}