Ma discussion fait suite à un échange précédent (Régulation de température - Français - Arduino Forum).
Je souhaite contrôler la température à l'extrémité d'une barre métallique. Le chauffage se fait grâce à une résistance alimentée avec ~40 W.
Avec les recommandations données dans la précédente discussion, j'alimente la résistance à l'aide d'un transistor branchée sur la broche PWM.
je cherche désormais à asservir à l'aide d'un PI le transistor pour réguler au mieux la température mais je ne vois pas le paramètre le plus pertinent à utiliser comme commande.
Pourriez-vous m'aider à la mettre en oeuvre ?
Merci
J'ai testé le code suivant (j'ai remodelé l'exemple basic) :
/********************************************************
PID Basic Example
Reading analog input 0 to control analog PWM output 3
********************************************************/
//chargement des librairires nécessaires
#include <OneWire.h>
#include <DallasTemperature.h>
#include <PID_v2.h>
//définition des constantes du programme
const unsigned long BAUD = 250000; //débit de la liaison série
#define ONE_WIRE_BUS 7 //broche de connexion des capteurs température
#define TRANSISTOR_PIN 3
//déclaration de l'objet one wire qui permet de gérer le bus one wire
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
// Specify the links and initial tuning parameters
double Kp = 2, Ki = 5, Kd = 1;
PID_v2 myPID(Kp, Ki, Kd, PID::Direct);
void setup()
{
Serial.begin(BAUD);
pinMode(TRANSISTOR_PIN, OUTPUT);
sensors.begin();
myPID.Start(mesureTemperature(), // input
0, // current output
30); // setpoint
}
void loop() {
const double input = mesureTemperature();
const double output = myPID.Run(input);
analogWrite(TRANSISTOR_PIN, output);
}
double mesureTemperature()
{
sensors.requestTemperatures();
double temperature = sensors.getTempCByIndex(0);
Serial.println(temperature);
return temperature;
}
Je pense avoir mis une température de consigne de 30 (setpoint ?) mais cela ne fonctionne pas, la résistance chauffe tout le temps