Control de temperatura PID con relé.

Hola. Saludos. Estoy empezando en el mundo de arduino y actualmente estoy estancado en un proyecto de una maquina selladora de bolsas. Estoy utilizando Arduino Mega 2560 y el proyecto esta completado un 90% pero me hace falta añadirle un control de temperatura PID, ya que hice pruebas con un codigo de esta manera :

	if (temperatura > temperatura_deseada) {   
		digitalWrite(7,LOW);        //Desactiva el rele.
	} else {
		digitalWrite(7,HIGH);

//Activa el rele.

Y la inercia lleva a la temperatura de 15 a 20 grados mas de lo deseado. Igualmente al apagar la resistencia calefactora la temperatura llega a niveles demasiado bajos.

Encontre un codigo para controlar la temperatura con PID pero no logro comprenderlo ni hacerlo funcionar. El codigo es un ejemplo de la libreria <PID_v1.h> para controlar un rele:

/********************************************************
 * PID RelayOutput Example
 * Same as basic example, except that this time, the output
 * is going to a digital pin which (we presume) is controlling
 * a relay.  the pid is designed to Output an analog value,
 * but the relay can only be On/Off.
 *
 *   to connect them together we use "time proportioning
 * control"  it's essentially a really slow version of PWM.
 * first we decide on a window size (5000mS say.) we then
 * set the pid to adjust its output between 0 and that window
 * size.  lastly, we add some logic that translates the PID
 * output into "Relay On Time" with the remainder of the
 * window being "Relay Off Time"
 ********************************************************/

#include <PID_v1.h>

#define PIN_INPUT 0
#define RELAY_PIN 6

//Define Variables we'll be connecting to
double Setpoint, Input, Output;

//Specify the links and initial tuning parameters
double Kp=2, Ki=5, Kd=1;
PID myPID(&Input, &Output, &Setpoint, Kp, Ki, Kd, DIRECT);

int WindowSize = 5000;
unsigned long windowStartTime;

void setup()
{
  windowStartTime = millis();

  //initialize the variables we're linked to
  Setpoint = 100;

  //tell the PID to range between 0 and the full window size
  myPID.SetOutputLimits(0, WindowSize);

  //turn the PID on
  myPID.SetMode(AUTOMATIC);
}

void loop()
{
  Input = analogRead(PIN_INPUT);
  myPID.Compute();

  /************************************************
   * turn the output pin on/off based on pid output
   ************************************************/
  if (millis() - windowStartTime > WindowSize)
  { //time to shift the Relay Window
    windowStartTime += WindowSize;
  }
  if (Output < millis() - windowStartTime) digitalWrite(RELAY_PIN, HIGH);
  else digitalWrite(RELAY_PIN, LOW);

}

En el programa que estoy desarrollando ya tengo definidos la temperatura en Grados Celsius y la temperatura deseada también esta definida, asi que el problema que tengo es para que el codigo de PID utilice esos datos para controlar la temperatura.

Un pid es muy complicado si no sabes la base matemática que hay detrás yo intentaría una estrategia de control más fácil

Coges tu máquina y la enciendes a calentar. Cuando llegues a tu temperatura apagas la resistencia calefactor y esperas a ver que valor alcanza la temperatura

Entonces imagínate que se pasa de 15 grados, sólo tienes que poner

if (temperatura > temperatura_deseada - 15) {   
digitalWrite(7,LOW);

Luego otro tema sería que aumentes la frecuencia con la que haces esta comprobación, sin pasarse por que sino el tele te va durar dos dias