Aller au contenu

Messages recommandés

Posté (modifié)

UPDATE 1 du 19/11/2014:

Voir message #2 pour toutes les infos.

 

Olivier

 

Bonjour à tous,

 

habitant en Normandie, nous avons eu quelques jours de soleil récemment qui ont donné envie de sortir le matos!

Tout allé bien jusqu'à ce que..... la buée montre le bout de son nez.

J'avais bien vu que l'air allait être très humide, j'avais donc anticipé en pointant les Pléiades, pas trop haut sur l'horizon...

Munie de son par buée, j'ai dû finalement me résoudre à tout ranger au bout d'une heure... grrrr!! déjà que les belles nuits sont rares... cela augmente considérablement la frustration.

 

J'avais par le passé fabriqué un petit système de chauffage automatique qui depuis est devenu quelque peu obselète, mais qui avait le mérite de n'être pas cher du tout.

Les solutions modernes coutants relativement cheres, et c'est peu dire, ont de plus un inconvénient majeur: ces solutions supposent que vous soyez à coté de l'instrument assez souvent pour augmenter / diminuer manuellement la puissance de chauffe.

Et si le matériel est trempé, il en va de même pour le bonhomme (ou la femme ^^) à coté!!

 

J'ai dans un tiroir quelques arduino nano, des petites sondes DS18B20, des MOSFETS et quelques petites autres bricoles.

Je me décide à me lancer dans une nouvelle réalisation de chauffage, mon cahier des charges est le suivant:

- utilisation en poste fixe (donc pas de travail de recherches quand à la limitation de la consommation de courant)

- utilisation des composants à ma dispo: sondes de température, mosfet type NPN, led, fils, arduino nano

- le système devra pouvoir chauffer 2 instruments indépendament l'un de l'autre (j'ai une lulu principale + une lulu guide)

- système complètement automatique, sans intervention humaine donc

 

C'est surtout sur ce dernier point que va porter ce post.

La réalisation électrique est rudimentaire:

Cela consiste simplement à utiliser une source en 12V dont la variation de puissance se fera en modulant la sortie d'un arduino qui controlera un MOSFET.

image.png.d4b24923aa12ef636144dfc3b8cd1532.png Ne Pas tenir compte des références pour les 2 MOSFETS 'c'est pour l'exemple.

 

coté composants les sondes de températures doivent être assez petites afin d'être "fixées" directement sur le barrilet de mon triplet (dans mon cas). J'ai des petites DS18B20 parfaites pour cela.

image.png.ecf569a6888ec88bc7adae641e88830b.png

Pour le MOSFET un modèle pilotable en 5V fera parfaitement l'affaire.

Enfin 2 led indiqueront l'état du fonctionnement de chaque sortie.

La led variera progressivement en fonction de la puissance de chauffe. Si une sonde est defectueuse (ou non connectée) alors la led clignotera toutes les secondes.

 

Enfin, le coeur du système, le code!

Avant tout chose je dois expliquer mon raisonement sur un point: j'ai volontairement ecarté le fait d'utiliser comme valeur la température de rosée. Je suis parti du principe que si l'élément chauffé avait la même température que la température ambiante locale, alors il n'y aurai pas de buée mais il n'y aurai pas non plus de turbulances visibles sur le système (du moins pas plus que si je devais chauffer au hasard par rapport à une solution toute faite). Cela dit le code est flexible et permet de très facilement ajouter cela si quelqu'un le souhaite.

 

Pour rendre le système complètement automatique nous pouvons envisager 2 scénarios:

1) soit on décide arbitrairement de choisir des valeurs seuils qui enclencheront un seuil de puissance. Par exemple, 1 degrés sous la température ambiante déclenche 25% de puissance, 2° en dessous 50% etc..

2) soit on décide de partir sur un système plus joli et plus efficace à partir d'une régulation en utilisant un PID

 

Je suis parti sur ce deuxième point. Le premier point à l'avantage d'être très facile à mettre en oeuvre (quelques lignes de code tout au plus) mais le deuxième à clairement un meilleur avantage quand à la régulation!!! en effet, sans rentrer dans les détails, un système PID est un système prédictif qui permet de ne pas chauffer trop mais anticipe la baisse et envoie les justes corrections à apporter pour maintenir la bonne température.

 

Comme expliquer plus haut, le but est donc qu'en cas de chute de température de l'élément à chauffer, la puissance sera augmentée pour eviter une future baisse, cela determiné par les valeurs déjà acquises ou en cours d'acquisition.

 

Le problème, et oui toujours!!, c'est que pour qu'un système de ce type soit efficace il faut lui fournir 3 coefficients dont peut de gens auront envie de la mettre en oeuvre ( moi y compris ^^ ).

C'est la que l'arduino entre en jeu: des gens biens ( et intelligents) ont crée des bibliothèques permettant de calculer automatiquement ces coefficients. Ah le bonheur.

 

J'ai donc implémenter toute cette logique afin d'avoir un système réellement automatique et autonome!!

 

concretement, que fait le programme:

 

Lors de la première initialisation (Voir procédure plus loin), le programme va lancer un "auto tune" afin de calculer les bons coefficients (un peu comme sur les imprimantes 3D qui utilise ce système sur leur hot end).

Une fois fini les coefficients sont stockés dans l'eeprom et seront ensuite utilisés comme base pour la régulation. C'est le point fort!! ca le fait pour vous :) , une fois fois pour toute.

 

Une fois lancé, le programme prends des mesures toutes les 10 secondes (valeur que l'on peut changer dans le fichier de configuration config.h).

Ces valeurs vont agrémenter le PID qui calculera la nouvelle puissance à appliquer.

Bien entendu le déclenchement du chauffage ne se fera que si l'élément chauffé voit sa valeur passer sous la température de l'air ambiante. Initule de chauffer pour rien non plus ^^

 

Programme:

 

Attention, il faut installer les librairies suivantes:

- "DallasTemperature" et "PID_v1_bc" depuis l'IDE,

- "PID_AutoTune_v0" depuis le github: https://github.com/br3ttb/Arduino-PID-AutoTune-Library/tree/master

 

Lors de l'ouverture du fichier arduino, tous les paramètres modifiables sont dans le fichier "config.h"

Il faudra y apporter les corrections suivantes:

Modifier les adresses des sondes de températures sont uniques. Je joins un scanner d'adresse que vous pouvez utiliser pour connaitre les votres.

Si vous ne disposez pas de deux instruments comme moi (lunette principale + lunette guide) vous pouvez commenter la ligne" #define GUIDE " qui ne gardera donc que la partie telescope.

 

L'affichage des températures sera visible dans le moniteur série. Il est important de mettre à 0 les valeurs des corrections des sondes dans le config.h: à l'achat celles ci pourraient ne pas indiquer la même valeur de température.

Il suffit de les mettre dans un endroit à la même température et de relever les écarts et de modifier les coefficients de correction afin qu'elles donnent toutes les mêmes valeurs :) 

 

 

----------------------------------------------------------------------------------------Procédure Auto tune:--------------------------------------------------------------

 

Pour obtenir un auto-tuning efficace et des coefficients PID bien adaptés au système de chauffage pour l'élément à chauffer, voici quelques recommandations spécifiques :

 

- Stabiliser la Température Ambiante Avant l’Auto-Tune :

Pour minimiser les interférences dues à des fluctuations extérieures, assurez vous que le système est dans un environnement stable. Les variations de température ambiante affecteront moins l’auto-tune si vous le lancez dans des conditions proches de celles où ton télescope sera utilisé la plupart du temps (par exemple, une nuit sans changement brutal de température).

 

- Initialiser le Système à une Température d’Équilibre :

L’auto-tune sera plus précis si le télescope commence à une température proche de celle de l’air. Cela garantit que le chauffage soit principalement responsable des variations de température, sans effets perturbateurs dus à des changements rapides de température naturelle ou au refroidissement initial.

 

- Éviter les Courants d'Air et les Sources de Chauffage Parasites :

Un courant d'air froid ou une source de chaleur peut créer des perturbations thermiques parasites. Place le système dans une zone abritée, sans flux d'air direct, pour éviter que le PID ajuste mal ses paramètres.

 

- Ajuster le Paramètre LookbackSec :

Actuellement, aTune.SetLookbackSec(10); impose une fenêtre d’observation de 10 secondes, ce qui pourrait être trop court pour un système lent comme pour certain (fonction du diamètre, épaisseur ...). Essayez une valeur plus longue, par exemple 30 secondes ou même 60 secondes, pour permettre à l’auto-tune de mieux capter la réponse du télescope, surtout si la chauffe et le refroidissement sont lents.

 

- Optimiser le OutputStep (puissance d’impulsion) :

L’auto-tune utilise SetOutputStep(50); pour chaque impulsion, équivalent à une puissance de 50 unités PWM (soit 20 % de la puissance totale de 255). Si les variations de température sont lentes, augmenter ce paramètre, par exemple à 70 ou 80, pourrait accélérer le processus en provoquant des oscillations plus marquées, mais attention à ne pas surchauffer.

 

- Éviter d’Interrompre l’Auto-Tune :

L’auto-tune prend un certain temps, mais il est essentiel de le laisser aller jusqu’au bout pour obtenir des valeurs précises. Interrompre l'auto-tune ou forcer un recalcul pourrait conduire à des valeurs PID imprécises, ce qui réduirait l’efficacité du système par la suite.

 

----------------------------------------------------------------------------------------FIN Procédure Auto tune:--------------------------------------------------------

 

Voilà les grosses lignes.

 

J'espère qu'il pourra servir à d'autres passionnés bien embétés par la buée!!

Je fournis aussi un petit programme simpliste de chauffage basé sur des seuils (que j'avais initialement conçu avant de passer à la régulation par PID) scenario 1 plus haut!

 

- le programme simpliciste se nomme RC_automatique

- le scanner pour les sondes: scanner_1_wire

- le programme avec régulation PID: AutotuneRC.

 

N'hésitez pas si vous avez des questions ou besoin d'aide.

 

Olivier

 

scanner_1_wire.zip

Modifié par astrolivier
  • Merci / Quelle qualité! 2
Posté (modifié)

UPDATE 1:

 

Bonjour à tous,

Pas très satisfait dont se passaient les choses avec la version précédente j'ai préféré supprimer les deux firmwares.

J'ai retravaillé les codes et je suis parti sur un nouveau format.

Initialement je voulais que le code final intègre un autotune lors du premier démarrage.

Cela fonctionnait mais je n'ai pas réellement trouvé convainquant les valeurs des PID calculées.

Je suis donc parti sur une nouvelle librairie et une nouvelle philosophie que je vais exposé ci dessous.

 

NOTICE D'INSTRUCTION POUR L'UTILISATION DES CODES

 

Pour commencer, il convient que le matériel, et donc les 3 sondes de températures, soient dans un équilibre thermique uniforme.

Pour mes essais j'ai donc placé l'ensemble de mon matériel dans une pièce durant plusieurs heures.

 

Etape 0: recherche des adresses I2C des sondes de températures:

Via le firmware fourni au post 1, il faut brancher tour à tour les différentes sondes de température et reporter les adresses trouvées. On attribuera à chaque sonde (et donc adresse) sa destination finale.

 

Etape 1: Calibration des sondes:

Connectez les sondes sur l'arduino et televersez le programme "CalibrationRC". Vous devrez renseigner dans le fichier config.h les différentes adresses des sondes, exemple pour moi:

image.png.8b254383605ac0d7c75d81de22d2d2f7.png

Mettez les valeurs de correction à 0.

Choissisez maintenant une résolution de mesure de la température ici:

image.png.29561b01e63eb4392d03738b52a67b5f.png

Pour ma part je suis parti avec une resolution de 0,125°C soit une valeur 11.

Televersez le code et ouvrez le moniteur série.

Il y a fort à parier que les valeurs affichées ne soient pas les mêmes pour les différentes sondes.

A ce moment plusieurs raisonnement possibles: Soit vous avez un thermomètre étalonné que vous utilisez comme référence soit vous choisissez une des sondes comme référence. N'ayant pas de thermomètre ultra précis je suis parti sur la deuxième solution.

De toute façon ici le système ne sert pas à mesurer la température réelle mais bien de voir une variation de la température. Donc pas de soucis ici tant que les sondes sont calibrées entre elles.

Par exemple, dans mon cas perso:

Avant correction:

image.png.33f73613154f3178557ee78fa7a87a00.png

 

Après correction:

image.png.1d201eb7f594706bad8fed67a2425e55.png

 

Voilà maintenant nos sondes sont calibrées et indiquent donc toutes la même température.

 

Etape 2: Auto Tune des coefficient PID:

L'une des étapes les plus délicate de ce projet est bien la determination de ces fameux coefficients. Ce sont en effet ces paramètres qui vont faire que la régulation du chauffage soit la plus efficace possible.

Charger le programme AutotunePIDRC et aller dans le fichier config.h.

Comme pour le précédent fichier, modifier les valeurs des adresses des sondes.

Regler aussi la valeur de la résolution précédement choisie.

Pour que l'auto tune soit le plus efficace dans la recherche de ces paramètres il faut régler 2 choses de plus dans le code:

- D'une part le temps d'un tour de PID. C'est le délai entre deux tours de calcul des coefficients. Si le délai est trop court, sur des telescope où les temps de réaction sont très lents, le programme ne verra pas de fluctuation. A l'inverse, avec un delai trop long, le programme ne detectera pas les variations minines.

Cette valeur est à paramètrer ici:

 image.png.eacf1445e401caeaa655a1e1f3c82517.png

Dans l'exemple j'ai mis 30 secondes. Le meilleur moyen de savoir quelle valeur mettre, lancer un auto tune avec une valeur par défaut de 1s. lancer un chrono. Les températures vont s'afficher toutes les secondes dans le moniteur série. Arrêtez le chorno dès lors que vous observez une variation positive de la température. Mettez cette valeur à la place du 1 (ou 30 sur l'image).

Avant de relancer un auto tune avec cette nouvelle valeur il faudra attendre de nouveau que le système se restabilise en température. Televersez un code basique (par exemple un simple blink dans les exemples) pour désactiver les sorties des resistances chauffantes.

 

- D'autre part, une autre valeur moins importante est à régler. Il s'agit du delta de température positif que vous souhaitez atteindre pour calculer les coefficients du PID. En effet, on va simuler la réaction du système en lui demande d'atteindre une certaine température. Dans le fichier config.h il s'agit de ce paramètre:

image.png.117ba1c509301b7271dffec57b8a5998.png

Dans l'exemple j'ai mis une température de 5°.

Concretement, cela implique les choses suivantes une fois que le code est televersé et le moniteur série ouvert:

l'autotune va mettre une puissance de 100% sur la sortie jusqu'à atteindre la consigne, ici une température de l'air + 5°.

Une fois la consigne atteinte la sortie passe à 0% jusqu'à ce que la température passe sous la consigne et recommence ainsi de suite.

Après un certains nombre de cycles, les coefficients determinés par le programme s'affichent sur le moniteur série.

Si vous avez activez un "GUIDE" comme moi, alors les PID sont effectués en parallèles.

Notez ces coefficients pour la dernière étape, la plus simple :)

Attention: le delta choisi ne doit pas être trop grand. En effet, par exemple 5°C ici, il faut que le système de chauffe puisse arriver à suffisament chauffer pour que la consigne soit atteinte. Si la puissance de chauffe n'est pas suffisante le système ne pourra pas atteindre la consigne et l'auto tune sera forcément faux.

Une valeur de 3°C pour commencer semble être la plus part du temps un bon compromis. A vous de voir si vous avez la puissance suffisante!

 

Etape 3: Execution du programme final

Ouvez le fichier  RCAutoPID et aller dans le fichier config.h

Une fois de plus il vous faudra changer les adresses des sondes de températures et indiquer la resolution des mesures choisie à l'étape 1.

Il faut aussi modifier les valeurs suivantes:

image.png.d995a811e7247a657679b9708b6a622c.png

A la place de 1 seconde mettez ici la valeur du chrono trouvée à l'étape 2 ou une valeur inférieure.

renseignez les divers coefficients des Kp Ki et Kd trouvés à l'étape 2 pour le telescope et le guide si vous l'avez utilisé.

image.png.ee25a4e6d6da76b22290e6fcd6c7251a.png

ne pas tenir compte de mes valeurs qui sont issus d'une simulation.

 

Etape 3 bis: Simulation du programme final

Pour tester le bon fonctionnement vous pouvez tricher en modifiant le code.

Normalement, le but final sera de faire en sorte que la température du système soit toujours celle de l'air ambiante. Pour simuler nous pouvons faire croire au système que le telescope est plus "froid" que l'air ambiant et cela aura pour conséquence de délencher la résistance chauffante.

Exemple pour le telescope :Pour ce faire modifier la ligne 89 du porgamme de

image.png.aa0d3497a1d95b50d689e71b561d5588.png en image.png.1ed54e830f054574d328cea3ec0e20d8.png

où 3 a été arbitrairement choisi ici mais vous pouvez reprendre la valeur défini à l'étape 2.

Televersez le code et vous verrez la puissance de sortie augmenter. Si tout va bien, les températures devraient restées aux alentours de la consigne ici température air + 3°C, par exemple:

image.png.4c7f61c5a9977ec1172ae5b698fea51f.png

Ici on voit bien la consigne de 3°C de plus que l'air ambiant, une puissance de 0% car la consigne est atteinte. Une tolérence de 2 * la résolution du capteur est ajoutée afin de ne pas chauffer inutilement, soit ici on ne chauffe que si la température telescope estt inférieure à 18,625°C (18.875°C - 2*0,125°C).

 

Si on voit que la température est maitrisée alors c'est que les coefficients trouvés avec l'autotune sont les bons.

 

On a plus qu'à modifier le programme pour enlever ces 3°C qu'on a simuler et televerser le code final.

 

Et voilà, c'est fini.

 

Je joins en plus des différents programme un fichier zip contenant les librairies nécessaires au bon fonctionnement des codes.

Il faut extraire ces librairies dans "Documents/arduino/libraries" et lancer seulement après l'IDE arduino.

 

N'hésitez pas en cas de besoin.

 

Olivier

 

image.png

AutotunePIDRC.zip calibrationRC.zip libraries_RCPID.zip RCAutoPID.zip

Modifié par astrolivier
  • Merci / Quelle qualité! 1
Posté

Il y a quelques années, un membre du club nous avait conçu un régulateur thermiques pour 2 résistances et leur sondes sondes de température. Coût de revient 35€.

Fonctionnement manuel, comme un PWM, sur point de rosée ou sur sonde de température.

J'en avais pris un, que je n'ai jamais utilisé ! J'ai toujours utilisé un PWM, que je règle à un niveau et j'y touche plus. Je sais c'est grossier mais c'est simple et efficace.

Le mieux serait-il l'ennemi du bien ?

Que cela n'empêche pas les créatifs de réaliser leurs projets.

Posté
il y a 5 minutes, rmor51 a dit :

Le mieux serait-il l'ennemi du bien ?

C'est ce que je dis au premier message.

Le soucis c'est qu'entre les nuits d'hiver et d'été ce ne sont pas les mêmes conditions dans ma Normandie ^^

trop puissant pour l'un et pas assez pour l'autre.

Et quand on oublie de modifier la puissance ca turbule sévère devant le scope ^^.

Honnetement, prix de revient ici de seulement quelques euros si on a déjà les resistances chauffantes!!

Rejoignez la conversation !

Vous pouvez répondre maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous pour poster avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

  • En ligne récemment   0 membre est en ligne

    • Aucun utilisateur enregistré regarde cette page.
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.