Calibrer un senseur Yoctopuce

Calibrer un senseur Yoctopuce

De manière générale, nous essayons toujours d'utiliser des capteurs qui ne nécessitent pas de calibration mais, dans certains cas, cette étape est incontournable, notamment si vous avez besoin de compenser une perturbation extérieure. Les senseurs Yoctopuce ont tous la possibilité d'appliquer automatiquement une correction à la valeur retournée par le capteur. Regardons comment cela fonctionne.




Une calibration est utile dans trois situations:

  • Pour compenser une perturbation extérieure. Par exemple, l'effet d'un boîtier sur la mesure de luminosité ou la perturbation induite par le fait de rallonger une sonde de température NTC.
  • Pour compenser l'usure ou la détérioration d'une sonde de mesure. Par exemple, l'usure d'un capteur de gaz branché à un Yocto-4-20mA-Rx.
  • Pour tenir compte de variations entre chaque sonde de mesure. C'est le cas des thermistance qui sont précises en relatif mais nettement moins en absolu.


Dans tous ces cas, une calibration permet d'obtenir une mesure plus précise pour autant que l'on ait une valeur de référence précise.

Tous les modules Yoctopuce qui possèdent un senseur supportent une calibration par interpolation linéaire de 1 à 5 points. Cette calibration est sauvée dans la mémoire flash du module et est appliquée directement lors de la mesure. L'utilisation d'une calibration est donc totalement transparente pour toutes les applications qui utilisent un capteur Yoctopuce et ne nécessite aucune modification de code. C'est aussi valable pour les Callbacks HTTP vers des services comme Emoncms ou Valarm, la calibration est appliquée aux valeurs qui sont postées.

Naturellement, il est possible d'appliquer une calibration différente à chaque senseur d'un module. Il est possible, par exemple, d'appliquer 8 calibrations différentes pour les 8 entrées d'un Yocto-MaxiThermistor.

Interpolation linéaire 1 à 5 points


Comme nous l'avons dit, la calibration utilisée par les modules Yoctopuce utilise une interpolation linéaire basée sur 1 à 5 points de référence. Concrètement, il faut fournir au module 1 à 5 paires (Valeur_mesurée, Valeur_de_référence).

Une seule paire de valeur permet uniquement de corriger un décalage absolu.

Correction de mesures avec 1 point de calibration (5,10).
Correction de mesures avec 1 point de calibration (5,10).



Deux paires permettent d'effectuer à la fois un décalage et une multiplication par un facteur donné entre deux points.

Correction de mesures avec 2 points de calibrations (10,5) et (25,10).
Correction de mesures avec 2 points de calibrations (10,5) et (25,10).



Les autres cas ne sont qu'une généralisation de la méthode à deux points, permettant de ainsi de créer jusqu'à 4 intervalles de correction pour plus de précision.

Exemple de correction avec 3 points de calibrations (10,5), (15,7.5) et (25,10).
Exemple de correction avec 3 points de calibrations (10,5), (15,7.5) et (25,10).



Réaliser des mesures de référence


La première étape pour avoir une calibration pertinente et efficace est d'avoir une série de mesures effectuées avec un appareil de référence et une série de mesures effectués avec le senseur à calibrer.

Ces deux séries de mesures sont très importantes et vont déterminer la qualité de la calibration finale. Assurez-vous donc d'avoir des mesures de référence précises, en effet rien ne sert de calibrer un capteur à l'aide d'une valeur de référence imprécise. Cela a du sens de calibrer un thermocouple ou une thermistance à l'aide d'un PT100, mais pas l'inverse.

Il faut avoir une plage de mesures de référence pertinente. Si vous cherchez à calibrer un thermocouple qui est utilisé lors de la torréfaction du café, il faut avoir des points de référence sur toute la plage de températures (de 0° à 250°C). Si vos points de référence sont compris entre -20 et 50°, vous ne serez pas beaucoup plus précis. Les points en dessous de zéro sont inutiles car ce sont des températures qui ne seront jamais mesurées et la calibration ne servira à rien pour les températures plus grandes que 50°.

Les deux séries de mesures doivent être effectuées dans les mêmes conditions. Par exemple, si vous calibrez une sonde de température, assurez-vous que les deux sondes soient très proches, inutile d'effectuer une calibration si l'une des sondes est à l'ombre et que l'autre est en plein soleil.

Déterminer les points de calibrations


Si notre série de mesures de référence a plus de 5 points, déterminer lesquels choisir n'est pas forcément trivial. Une solution est de choisir le minimum et le maximum, puis d'essayer toutes les combinaisons possible pour les trois points restants.

Pour chaque combinaison, on calcule un score comme ceci:

  1. On simule l'utilisation de cette calibration à toutes les valeurs mesurées.
  2. On calcule pour chaque valeur la différence entre la valeur de référence et la valeur "calibrée".
  3. On calcule le score global en additionnant les différences au carré.


La meilleur combinaison est celle qui a le score le plus petit. Cette approche "force brute" n'est pas la plus élégante mais fonctionne bien.

Pour vous éviter de devoir coder cet algorithme, nous avons réalisé une page web qui vous permet de sélectionner les meilleurs points. Cette page vous permet de poster vos paires (Valeur_mesurée, Valeur_de_référence) et va sélectionner les 5 paires les plus efficaces.
Cette page est disponible ici: http://www.yoctopuce.com/FR/interactive/calibrator.

Appliquer la calibration


Lors que l'on a déterminé les points de calibration, il reste à utiliser la fonction calibrateFromPoints() pour le senseur correspondant. Une solution est d'utiliser l'utilitaire YSensor de la librairie en ligne de commande. Par exemple, pour appliquer au capteur de lumière du Yocto-Light-V3 une calibration basée sur les trois points (10 -> 5), (15 -> 7.5) et (25 -> 10) du graphique plus haut, il faut exécuter:

$ YSensor --save LIGHTMK3-123456.lightSensor calibrateFromPoints 10,15,25 5,7.5,10



Il est aussi possible d'ajouter une fonction "calibration" à une application déjà existante. Par exemple:

function ApplyCalibrationTo(name)
{
        var ValuesBefore =  [10, 15, 25];
        var ValuesAfter  =  [5, 7.5, 10];
        var light = YLightSensor.FindLightSensor(name);
        light.calibrateFromPoints(ValuesBefore, ValuesAfter);
        light.get_module().saveToFlash();
}
...
ApplyCalibrationTo("LIGHTMK3-123456.lightSensor");



Attention dans ce cas à ne pas oublier d'appeler la fonction saveToFlash() pour sauver la calibration dans la mémoire flash du module, sinon la calibration sera perdue dès que le module sera débranché.

Conclusion


Comme nous l'avons vu, l'utilisation de calibration dans les modules Yoctopuce est relativement simple à mettre en place, en tout cas d'un point de vue logiciel. Les difficultés sont d'effectuer des mesures de références précises et ensuite de sélectionner correctement les 5 points de calibration. Pour cette dernière, vous pouvez toujours utiliser notre page web : http://www.yoctopuce.com/FR/interactive/calibrator. Cependant nous ne pouvons pas encore nous téléporter pour effectuer les mesures à votre place :-)

Commenter aucun commentaire Retour au blog












Yoctopuce, get your stuff connected.