Bonjour à tous,
je me suis lancé dans un petit projet de chauffage autonome.
Pour se faire, j'ai effectué un premier prototype avec un Arduino Uno commandant un MOSFET IRLB8743, lui même régulant la tension d'une résistance chauffante. Cette partie est alimentée par une batterie LiPO 3,7V. J'utilise un capteur DS18B20 pour connaitre la température de la résistance et avoir une information d'entrée pour mon PID.
Après quelques tests (des dizaines
), j'ai enfin trouvé des paramètres de PID qui me conviennent et je suis donc en train d'essayer de remplacer l'Arduino Uno par un AtTiny85 afin d'avoir un système entièrement autonome et dont l'electronique consomme peu.
Mon problème actuellement est que la régulation ne s'effectue pas. Avec l'arduino j'avais une variation de tension aux bornes de la résistance puis une stabilisation à environ 0,89V pour 40°C (température cible) et maintenant avec l'AtTiny85 la tension varie entre 2,20 et 2,40, comme si il n'y avait pas de régulation.
Voici mon code d'AtTiny85 (directement dérivé de celui pour l'Arduino, seul les numéros des PINs changent) ainsi que le schéma électronique:
#include <OneWire.h>
#include <DallasTemperature.h>
#include <PID_v1.h>
#define ONE_WIRE_BUS 4 // Broche 3 sur AtTiny85
#define HEATER_PIN 0 // Broche 5 sur AtTiny85, qui est une broche PWM
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
double Setpoint, Input, Output;
double lastValidTemperature; // pour stocker la dernière température valide
// Paramètres du PID
double Kp=10, Ki=0.7, Kd=0.3;
PID myPID(&Input, &Output, &Setpoint, Kp, Ki, Kd, DIRECT);
void setup(void)
{
pinMode(HEATER_PIN, OUTPUT);
sensors.begin();
Setpoint = 40;
myPID.SetMode(AUTOMATIC);
lastValidTemperature = 0.0; // initialiser avec une valeur raisonnable
}
void loop(void)
{
sensors.requestTemperatures();
double currentTemperature = sensors.getTempCByIndex(0);
if(currentTemperature != -127.00) {
lastValidTemperature = currentTemperature; // mettre à jour la dernière température valide
}
Input = lastValidTemperature; // utiliser la dernière température valide pour le PID
myPID.Compute();
analogWrite(HEATER_PIN, Output);
delay(500);
}
Je précise que c'est la première fois que je programme un AtTiny donc peut-être y a-t-il des aberrations ou des paramètres de bases à effectuer.
Je téléverse avec une fréquence de 16MhZ (qui est celle par défaut de l'ARduino il me semble). Je suspecte les librairies d'être peut-être incompatibles je ne sais pas comment le vérifier...
Toute aide et critique est la bienvenue.
Merci


