// Incluimos librería
#include <DHT.h>
#include <PID_v1.h>
#define DHTPIN 2 // Definimos el pin digital donde se conecta el sensor
#define DHTTYPE DHT22 // Dependiendo del tipo de sensor
DHT dht(DHTPIN, DHTTYPE); // Inicializamos el sensor DHT11
double setpoint = 40; // Temperatura deseada
double kp = 10; // Ganancia Proporcional
double ki = 0;
double kd = 0;
double control_signal; // señal de control u(t)
double pwm; // Variable de lectura del pwm
double sensed_output; // lectura del sensor DHT11
double error; // Error
float time_seconds = 0;// Para el contador por segundos
PID myPID(&control_signal, &sensed_output, &setpoint, kp, ki, kd, DIRECT);
void setup() {
Serial.begin(9600); // Inicializamos comunicación serie
dht.begin(); // Comenzamos el sensor DHT
}
void loop() {
delay(3000); // Retraso de lectura debido a las limitaciones del sensor
sensed_output = dht.readTemperature(); // Leemos la temperatura en grados centígrados (por defecto)
time_seconds = (millis()) / 1000;
myPID.Compute();
control_P(); // Funcion del control P
Serial.println(pwm);
Serial.println(sensed_output);
Serial.println(control_signal);
Serial.println("------------");
}
void control_P() {
//error = setpoint - sensed_output;
//control_signal = kp * error;
pwm=map(control_signal,0,1023,255,0); // Escalamiento o mapeo para convertir la señal de control en PWM (0 a 255);
if (pwm >= 255) pwm = 255; //Limitador del control
else if (pwm <= 0) pwm = 0 ;
analogWrite(5, pwm );
}