Hola
Tengo un problema con un control PID , tengo un circuito con un sensor LM35 para medir la temperatura y lo que quiero hacer es que a través del Setpoint lea la temperatura y a partir de los 25 grados para arriba active un sensor con un ventilador y para abajo lo apague pero el problema es que lo hace al revés la ósea apaga cuando se calienta y prende cuando enfría como puedo invertir eso e intentado usar el " ! " para invertir la función y de nada sirve estoy usando una librería de control PID
Es para una tarea de mi universidad
este es el codigo
//Control temperatura con PID
#include <PID_v1.h>
#define PIN_LM35 A0 //pin analogico
#define PIN_OUT 9 //pin de salida pwm
//Define Variables
double Setpoint, Input, Output;
//Iniciar parametros
double Kp=6650, Ki=83, Kd=410;
PID myPID(&Input, &Output, &Setpoint, Kp, Ki, Kd, DIRECT);
unsigned long previousMillis = 0;
const long interval = 2000; //Gráfica cada 2''
void setup(){
analogReference(INTERNAL); //referencia de Arduino a 1v, mejor precision LM35
Serial.begin(9600);
Setpoint = 25; //La temperatura que queremos mantener
myPID.SetMode(AUTOMATIC);
}
void loop(){
unsigned long currentMillis = millis();
int value = analogRead(PIN_LM35); //Valor del LM35
float mv = (1100 / 1024.0) * value; //Valor leido a mV (el "tope" es de 1100mV)
float cel = mv / 10;//Los mV leidos a grados celsius
Input = cel;
myPID.Compute(); //Se hace el calculo por el PID
analogWrite (PIN_OUT, Output);
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
Serial.print(Output/10); //PWM/10 para mejor gráfica
Serial.print(",");
Serial.println(Input); // Linea sensor LM35
}
}