AtTiny85 contrôle de température

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 :sweat_smile: ), 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

Bonsoir,
les attiny sont livrés a 1 MHz il faut donc flasher les fuses pour du 16 Mhz.
pour ca regler dans les param 16 MHz et faire un flash du bootloader qui en même temps positionne les fuses.
je dis pas que c'est ca mais si c'a n'a pas été fait c'est possible.

PS : bien choisir 16 Mhz en horloge interne ... sinon bahhh plus qu'a trouver un quartz pour recup l'attiny

Bonjour, ok merci je vais tester ça et aussi tester avec 2 programmes similaires et modifier les vitesses d'horloge interne pour voir ce qu'il se passe (histoire de comprendre un peu :slight_smile:
Merci pour votre réponse je reviens vers vous lorsque la modification a été faites.

Bonsoir, effectivement après flash cela fonctionne.

Je me posais la question, quelles utilité pour un attiny85 de lui mettre un quartz? Plus précis?

Par ailleurs, étant donné que je vais certainement devoir le faire basculer en 8 MHz, savez vous comment facilement adapter le code ou faut-il refaire tous les tests pour le PID par exemple?

Merci

Bonjour
avec un quartz on peut effectivement avoir plus de précision sur certains trucs critique mais on perd des E/S.
Normalement qq1 qui crée une lib dépendante de la fréquence prévoit dans tenir compte dans la lib et fait ce qu il faut ... après parfois ça marche ou pas mais en général il le précise en commentaire. la le problème venait surement de onewire.
Pour le pid c'est surtout une affaire de calcul donc pas sur que ce soit important.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.