#include <DHT.h>
#include <PID_v1_bc.h>
#define DHTPIN 4 // Pino ao qual o DHT22 está conectado
#define DHTTYPE DHT22 // Tipo de sensor DHT
DHT dht(DHTPIN, DHTTYPE);
// Parâmetros PID
double Setpoint = 37.0; // Temperatura de referência
double Input, Output;
double Kp = 2.0; // Ganho proporcional
double Ki = 5.0; // Ganho integral
double Kd = 1.0; // Ganho derivativo
PID myPID(&Input, &Output, &Setpoint, Kp, Ki, Kd, DIRECT);
// Pino do MOSFET para controlar o aquecedor
const int mosfetPin = 15;
void setup() {
Serial.begin(9600); // Inicializa o monitor serial
dht.begin();
pinMode(mosfetPin, OUTPUT);
analogWrite(mosfetPin, 0); // Desliga o aquecedor no início
// Configura o PID
myPID.SetOutputLimits(0, 255); // Limite de saída PWM entre 0 e 255
myPID.SetMode(AUTOMATIC);
myPID.SetSampleTime(1000); // Tempo de amostragem em milissegundos (1 segundo)
}
void loop() {
// Leitura da temperatura
Input = dht.readTemperature();
// Controle PID
myPID.Compute();
// Ajuste da potência do aquecedor usando PWM
int heaterPower = Output;
analogWrite(mosfetPin, heaterPower);
// Exibir dados no monitor serial
Serial.print("Temperatura: ");
Serial.print(Input);
Serial.print(" °C | Potência do Aquecedor: ");
Serial.print(heaterPower);
Serial.println(" (0-255)");
// Aguarde um intervalo antes de realizar a próxima leitura e cálculo PID
delay(1000);
}