Compensation en température d'une cellule de charge

Bonjour à tous,

Je vous fait part de la méthode que j'emploie pour compenser la dérive en température d'une cellule de charge.

Premièrement, ce que je veux faire. J'ai développé divers systèmes de pesons pour volailles. Ils fonctionnent très bien, donnent de très bons résultats d'après le retour des éleveurs. Je tiens à préciser que je ne suis pas confronté aux problèmes de dérives pour plusieurs raisons : soit la température de l'environnement est relativement stable, soit je travaille en différentiel ou soit j'effectue des tares régulières.

Pour "m'amuser " je me suis dit qu'il serait intéressant de faire une balance pour ruche. Je me renseigne en farfouillant sur le net et je vois que le principal problème est la dérive due à la température. Je décide de regarder cela d'un peu plus près .

Le matériel : j'ai fait dans le classique : une double structure en H. La cellule de charge utilisée en une NAVIN N1 d'une capacité de 60Kg.

L'électronique : j'utilise le célèbre circuit intégré HX711 mais pas sur un module. En gros j'ai mon propre PCB sur lequel je reproduis le circuit classique du HX711 en remplaçant uniquement la partie alimentation de la cellule de charge par une référence de tension style MCP1525 (pour une meilleure stabilité). Sur le PCB, j'intègre aussi une sonde de température DS18B20.

Les premiers essais :

Je me dis que la première chose à faire est de constater s'il y a bien une dérive de la mesure de la masse en fonction de la température. Je positionne mon système sur mon balcon. J'étalonne ma balance et je lui fais mesurer toutes les minutes une masse de 1kg ainsi que la température. Voilà donc mon constat.

On peut en effet constater une dérive de la mesure en relation avec la température.

Le problème est donc de compenser la mesure en fonction de la température pour avoir une variation moindre de la mesure de la masse. Ma méthode sera sans doute vue par certains puristes comme une méthode artisanale, ne se basant pas sur sur des calculs scientifiques avec des équations différentielles du second ordre, donc dénuée de valeur. C'est vrai et je le revendique : je ne veux pas avoir à recourir à des doctorants en mathématiques ou en physique pour résoudre mes problèmes. Je vais plutôt me baser sur des solutions simples, compréhensibles et logiques pour le commun des mortels !

Première constatation : les mesures brutes de la masse fluctuent beaucoup. On va commencer par lisser tout cela. Voila la méthode que j'emploie : toutes les minutes, je fais douze mesures de la masse, et je les additionne. Dans ces douze mesures je détermine la mesure maximale et la mesure minimale. Je les soustraie de mon addition et je divise le reste par 10. En résumé, je fais douze mesures, j'enlève la plus grande et la plus petite et je fais la moyenne du reste. Ça commence à s'améliorer mais c'est encore largement « instable ».

Pour vraiment lisser la mesure j'utilise un filtre numérique :
MesureLisée(t) = MesureLisée(t-1) * (1-C) + C * MesureRéelle(t)
C étant un coefficient << à 1. Dans mon cas je choisis C=0,05.

Voila le résultat : on constate bien que la mesure est lissée. En contrepartie cela induit un léger décalage dans la réactivité ( en fait on a fait un filtre numérique passe-bas). Nous avons donc maintenant une bonne base de travail concernant la mesure effective de la masse.

Je vais m’arrêter là pour cette première partie qui est déjà assez longue.

Si cela vous intéresse, j'écrirai la suite. J'attends vos retours.

Merci de ce début de partage, c'est intéressant - continuez !

(si vous partagez le schéma de votre PCB ce sera aussi intéressant)

Oui, c'est intéressant (bien que ça manque un peu d'équation différentielle à mon avis :sunglasses:)
Il faudrait ajouter des liens vers les produits que tu utilises (peson, composants, capteur de température, etc).

Salut !
Bravo, c'est sympa ! Continuez :smiley: !

Bonne journée - ici TRÈS chaud...

Amitiés
Pandaroux007

+1...

sans nécessairement faire un simple copier-coller, c'est toujours intéressant de voir comment les utilisateurs arrivent à se passer des modules tout-fait pour se rapprocher d'une solution pro.

Pour répondre à J-M-L, voilà la partie du schéma qui concerne le HX711.


En fait, j'achète des modules HX711 (ebay, ali-express...) et je dessoude la puce HX711 au pistolet à air chaud que je la ressoude sur mes circuits. Aussi paradoxalement que cela puisse paraitre, je ne trouve pas la puce HX711 chez les distributeurs classiques (RS, farnell, Mouser, TME ...) !
Pour le capteur de température, j'utilise un DS18B20 de ce style :
image
Pour la cellule de charge :
image

Je précise que tout cela est gérer par un ESP32

Chacun voit midi à sa porte, mais si je peux me permettre, tu as déjà eu recours à des doctorants et autre sachant voir puriste intégriste lorsque tu utilises un µC, des capteurs ou autre composant électronique, logiciel, donc un peu plus ou un peu moins :laughing:

La question serait plus si ce puriste, faut-il encore le trouver ici, peut te sortir la formule à utiliser :rofl:

Sinon comme les autres, sujets très intéressant, merci pour le partage :+1:

La deuxième étape est de quantifier la dérive de la mesure du poids en fonction de la température. En pratique c'est mesurer que pour une variation de x°C, nous avons une variation de y grammes. Je vais donc avoir une coefficient qui représentera la dérive de la cellule de charge en gramme par degré Celsius (g/°C). On retrouve normalement ce coefficient sur la doc technique de la cellule de charge, mais j'ai préféré le quantifier moi-même. Pour faire cela, j'ai fait des relevés sur plusieurs jours. Je mesure l'amplitude maximum de variations des mesures de poids ainsi que l'amplitude des variations de température. Les variations étant inversées nous avons donc un coefficient négatif. Dans mon cas, j'ai pris un coefficient de -1.6g/°C (je précise que j'avais calculé ce coefficient avant la canicule !) .

Nous commençons à nous approcher du but : lors de la tare de la cellule de charge, je mesure la température qui servira de température de référence (la tare ne vaut qu'à cette température de référence) .

La première solution que j'ai appliqué, a été de bêtement mettre en œuvre ce coefficient lors d'une mesure. Je mesure le poids et la température. Je calcule la différence de température par rapport à ma température de référence. Je multiplie cette différence par mon coefficient (unité g/°C) et j'obtiens donc une valeur en gramme à appliquer à ma mesure. C'est déjà pas mal mais je m'attendais à mieux ! Pourquoi ? J'ai alors pensé qu'il devait y avoir une certaine inertie entre la température de l'air et la température du bloc d'aluminium qui constitue la cellule de charge. En d'autres termes, la température de la cellule de charge n'évolue pas aussi rapidement que la température de l'air. La prochaine étape va donc être d'évaluer la température interne de la cellule de charge.

PS : juste pour préciser mes propos. J'ai le plus grand respect pour les personnes ayant fait de grandes études. Ils sont détenteur d'un savoir que je n'ai pas. Dans la pratique, une telle personne va vouloir modéliser le système afin de trouver la meilleur solution. Cette solution, et surtout la méthode employée pour y arriver, je ne la comprendrai pas. Je me rabat donc sur mes connaissances, plus guidé par la pratique que par le coté théorique (d'où l'absence d'équation différentielle du second degré :wink:)

Juste pour rajouter, que pour ma pars, tu n'a pas a te justifier, ta démarche est tout a fait respectable :slight_smile:
C'était plus pour dire que tu pourrais aussi utiliser l'outil mathématique, tout comme tu le fait avec un microcontrôleur.
Si quelqu'un te fournissait bien sûre cet outil.

Sinon, du coup, tu va prendre un capteur de température de surface(je ne sais pas comment cela s'appel) pour déterminer la température de tes capteurs ?

Une question surement très idiote mais dans tes graphiques, je ne vois pas ou tu as le poids pondérés?
J'ai l'impression de lire deux fois le même graphique.

Bonjour terwal,
Oui, la sonde de température est placé juste à coté de la cellule de charge.
Pour les graphiques que j'ai déjà montré, je n'ai fait apparaitre que la température de ma sonde de température (en vert) et le poids mesuré (la mesure brute en orange et la mesure lissée en bleu).
Je mets ici un zoom pour bien montré la différence entre les deux courbes :


Je travaille avec les mesures lissées du poids (la courbe bleue)
J'ai caché les autre courbes. Je les montrerai après les explications.

Salut, je suis le puriste masqué ! :sunglasses:

A défaut d'équation différentielle, tournons-nous vers les lois fondamentales de l'univers, et ses outils quasi divins, parmi lesquels Excel.
Si on regarde les courbes, on voit que lorsque la température passe en dessous de 22 (°C je suppose), la masse reste à peu près constante à 1505 grammes. Donc, on va dire que c'est la bonne valeur (bien que tu aies parlé d'un kg dans ton texte) et on va compenser les mesures sur cette valeur. Mais seulement si la température dépasse 22°C.

Je relève les valeurs suivantes :

T M
22 1505
50 1481
40 1485
35 1487
30 1490
25 1500

Si je prends comme référence la première ligne et que je trace les points d'abscisse T -22 et d'ordonnée m - 1505, j'obtiens ça (avec une courbe de tendance logarithmique)

Le coefficient R² n'est pas fameux, il devrait valoir 1 idéalement. La correction ne sera pas bonne entre 22 et 25 °C.
Pour appliquer cette correction, il suffit de faire :

float nouvMasse;
if (temperature > 22) {
  float deltaT = temperature - 22;
  float correction = 3.5088 - 8.319 * log(deltaT);
  nouvMasse = masse - correction
}

Pour la zone de 22 à 25°C, autant faire une correction linéaire.

float nouvMasse;
float deltaT = temperature - 22;
if (temperature > 25) {
  float correction = 3.5088 - 8.319 * log(deltaT);
  nouvMasse = masse - correction
} else if (temperature > 22) {
  float correction = deltaT * 5 / 3;
  nouvMasse = masse + correction
} else
  nouvMasse = masse;

Mais ça n'a rien de physique et il faudra le vérifier sur plus de données... C'est juste une idée de principe.

Ok, c'est moi qui n'avais pas bien compris, je pensais que tu avais déjà pondéré le poids, pour avoir tes 1kg, du coup je ne comprenais pas pourquoi tu avais entre 1,550 et 1,450 :see_no_evil:

je voulais dire pour le capteur de température, si tu avais déjà un capteur de surface à placer directement sur la surface d'un des capteurs de charge et pas de l'air, un peu comme on peut le faire avec les pt100 des multimètre

OK, je vois le le qui-propos : j'ai parlé d'une masse d'1 kg et j'ai fais une copie de mes derniers graphes ou j'avais rajouté 500gr pour voir l'évolution. Par la suite je monterai les graphes avec 1kg !

Pour la sonde de température, je n'avais que celle là sous la main. Une Pt100 directement sur la cellule de charge serai peut-être plus judicieux mais je ne sais pas si le fait de toucher la sonde de température et la cellule de charge peut influencer la mesure du poids

Oui effectivement, peut être que cela peut influencer.

Pour évaluer la température interne de la cellule de charge, je vais partir de la température ambiante auquel je vais appliquer le même style de filtre que j'ai utilisé auparavant : TemperaturePeson(t)=TempératurePeson(t-1)*(1-C)+C * MesureTemperature(t). C étant toujours un coefficient << à 1. Cette fois ci, je choisis C=0.01, ce qui a pour conséquence d'amener une plus grande inertie dans le résultat final. (J'ai choisi cette valeur de manière arbitraire, peut-être qu'une autre valeur serait mieux appropriée). Voila le résultat en graphique :

Légende :

  • vert foncé : température réelle mesurée
  • vert clair : température estimée de la cellule de charge

Je vais donc me baser sur cette température estimée pour calculer la correction à apporter à la mesure du poids de la même manière que lors de mes premiers essais : mesure du poids et de la température, calcul la différence de température par rapport à ma température de référence et multiplication de cette différence par mon coefficient de dérive (unité g/°C). La valeur obtenue est la compensation à additionner (ou soustraire ) à la mesure du poids.
En finale, voilà mes résultats en graphique :


Légende :

  • vert foncé : température réelle mesurée
  • vert clair : température estimée de la cellule de charge
  • orange : mesure réelle de la cellule de charge
  • bleu : mesure lissé de la cellule de charge
    et en rouge la mesure compensée de la cellule de charge.

Voilà , j'en ai fini. J'espère que cela pourra être utile à des membres. Merci pour votre attention et vos remarques
Si vous avez des améliorations à apporter, je suis preneur.

c'est quoi l'échelle de gauche ? ce ne serait pas les °C plutôt que des grammes ?

pour qu'on s'amuse aussi, pourriez vous donner le fichier des échantillons

{date | température réelle mesurée | mesure réelle de la cellule de charge}

oui, j'ai été un peu vite quand j'ai fait le graphique et j'ai oublié de mettre en gramme ( je ne pensais pas que j'allais le partager)

Data.zip (32.0 KB)

1 Like