// Definición de pines
const int sensorPin = A0; // Pin analógico donde está conectado el potenciómetro
const int outputPin = 9; // Pin PWM donde está conectado el LED
// Variables del PID
double setpoint = 50.0; // Valor deseado de temperatura (en grados Celsius)
double input; // Valor actual de temperatura (simulada por el potenciómetro)
double output; // Salida del PID (controla el PWM del LED)
// Parámetros PID
double kP = 1.0; // Coeficiente proporcional
double kI = 1; // Coeficiente integral
double kD = 1; // Coeficiente derivativo
// Variables para el control PID
double previousError = 0.0;
double integral = 0.0;
void setup() {
pinMode(outputPin, OUTPUT);
Serial.begin(9600);
}
void loop() {
// Leer el valor del potenciómetro y mapearlo a un rango de 0 a 100
int sensorValue = analogRead(sensorPin);
input = map(sensorValue, 0, 1023, 0, 100);
// Calcular el error
double error = setpoint - input;
// Calcular la parte integral
integral += error;
// Calcular la parte derivativa
double derivative = error - previousError;
// Calcular la salida del PID
output = kP * error + kI * integral + kD * derivative;
// Limitar la salida a un rango de 0 a 255 (PWM)
if (output > 255) {
output = 255;
} else if (output < 0) {
output = 0;
}
// Escribir la salida al pin PWM
analogWrite(outputPin, output);
// Guardar el error actual para la próxima iteración
previousError = error;
// Imprimir los valores para monitoreo
Serial.print("Input: ");
Serial.print(input);
Serial.print(" Setpoint: ");
Serial.print(error);
Serial.print(" Output: ");
Serial.println(output);
// Esperar 100 ms antes de la próxima iteración
delay(100);
}