Différences entre les versions de « Déterminer l'équation d'un Capteur analogique »

De GCE Electronics
Aller à la navigation Aller à la recherche
Ligne 189 : Ligne 189 :
[[Fichier:Calc_tendance2.png]]
[[Fichier:Calc_tendance2.png]]


==Conclusion==


D’autres types de courbes peuvent être satisfaisants, il convient d’utiliser celui qui aura l’équation la plus facile à paramétrer dans l’IPX et qui aura le meilleur coefficient de détermination (le coeff doit être supérieur à 0.70)
D’autres types de courbes peuvent être satisfaisants, il convient d’utiliser celui qui aura l’équation la plus facile à paramétrer dans l’IPX et qui aura le meilleur coefficient de détermination (le coeff doit être supérieur à 0.70)
Ligne 200 : Ligne 199 :


(Graphiques réalisés avec Microsoft Excel 2010 et Open Office 4.1.4)
(Graphiques réalisés avec Microsoft Excel 2010 et Open Office 4.1.4)
==Connexion du Capteur à l'IPX==
Maintenant que nous avons déterminé les caractéristiques de notre capteur, nous allons le connecter à l'IPX800 V4.
Ce capteur doit être alimenté en 5 volts. Nous utiliserons une alimentation externe. Pour le montage, j'ai utilisé une alimentation USB.
Avant de brancher le capteur à l'IPX, il faut vérifier que la tension de sortie de dépasse pas les limites admises par l'entrée analogique de notre automate.
[[Fichier:Sharp GP2Y0A controle.JPG|center]]
La sortie analogique ne délivre pas de tension supérieure à 3.3 V, nous n'aurons donc pas besoins de mettre un pont diviseur en place pour protéger l'entrée analogique de l'IPX.
Voici le schéma de connexion :
[[Fichier:Sharp_GP2Y0A_branchement.JPG|center]]
==Paramétrage de l'entrée analogique"==
Le capteur émettant une tension sur sa sortie, il suffit de paramétrer l'entrée analogique comme un voltmètre.
[[Fichier:Sharp GP2Y0A analogique1.JPG[center]]
Il suffira alors de placer un widget de type "Entrée analogique" sur le Dashboard pour visualiser la tension de sortie.
[[Fichier:Sharp_GP2Y0A_widget1.JPG|center]]
[[Fichier:Sharp_GP2Y0A_widget1b.JPG|center]]
==Conversion de la tension en distance==
Il va de soit que ce n'est pas réellement la tension en sortie de notre capteur qui nous intéresse, mais la distance mesurée.
Nous allons faire la conversion grâce à un widget HTML, celui-ci contiendra un peu de javascript.
Mais pour cela, nous devons d'abord créer une source de données.
Sur le Dashboard, créons la source STATUS
[[Fichier:Sharp_GP2Y0A_source.JPG|center]]
Créons maintenant notre widget HTML et insérons un peu de code
<nowiki>
function bruteToDistance(brute) {
  d = Math.floor(63.37 * Math.pow(brute * 0.000050354,-1.143));
    if (d < 20 || d > 150) {
        return "";
    }else{
        return d + " cm";
    }
}
var distance = bruteToDistance(datasources["STATUS"]["response"]["analog0"]);
return `
<style>
.content {
  position: absolute;
  bottom: 0;
  left: 0;
  height: 100%;
  width: 300px;
  background-color: #333;
  overflow: hidden;
}
.circle {
  width: 5px;
  height: 5px;
  background-color: transparent;
  position: absolute;
  left: 50%;
  margin-left: -2.5px;
  top: 50%;
  margin-top: -2.0px;
  border-radius: 50%;
  border: 2px solid #3C14;
  animation: radar 5s infinite;
  -webkit-animation: radar 5s infinite;
  -webkit-transition: all ease-in-out;
  transition: all ease-in;
}
@keyframes radar {
  1% {
    width: 5px;
    height: 5px;
    margin-left: 0;
    margin-top: 0px;
    border: 2px solid #3AA65E;
    opcity:0.9
  }
  100% {
    width: 800px;
    height: 800px;
    margin-left: -400px;
    margin-top: -400px;
    border: 12px solid #055E23;
    opacity:0.0;
   
  }
}
</style>
<center>
  <div class="content" height=100%> <div valign=middle style="color:#fff;font-size: 20px;"> ${distance}</div> <div class="circle">
  </div>
</div>
</center>
`;
</nowiki>
Au début du code, vous pouvez remarquer la fonction bruteToDistance().
La source de données (status.xml)renvoie la valeur brute du capteur. Il convient donc, dans un premier temps de traduire cette valeur en Volts.
La valeur brute est alors multipliée par 0.000050354. Pour de plus amples explications, je vous invite à consulter cette page.
La valeur convertie en volts sera finalement transformée par la formule de notre capteur, déterminée plus haut avec notre tableur.
La distance retournée par notre fonction ne pourra excéder 150, ceci étant la limite de la plage de mesure du capteur.
De même, elle ne pourra être inférieure à 20 cm.
Voici notre widget :
[[Fichier:SharpGP2Y0A.gif|center]]

Version du 13 novembre 2017 à 01:04

Equation d'un Capteur

Excel tendance.png
Nom Equation d'un Capteur
Famille IPX800 V4
Wiki créé le 06/11/2017
Wiki mis à jour le 06/11/2017

Préambule

Beaucoup de fabricants de capteurs analogiques ne communiquent pas l'équation permettant d'utiliser leur matériel sur IPX800.

j’avais écrit quelques articles afin de vous aider à déterminer l’équation d’une courbe en sortie de capteur. La méthode consistait à essayer de superposer une parabole à la courbe donnée par le fabricant. L’équation de la parabole était alors calculée en fonction des coordonnées de 3 points relevés sur la courbe fournie.

Si la méthode vous intéresse, vous pouvez suivre le fil à partir d’ici

Cette méthode laissait malgré tout une marge d’erreur plus ou moins confortable, car la courbe d’origine n’était pas forcément parabolique (polynomiale d’ordre 2), elle pouvait être de type linéaire, exponentielle, logarithmique ou autre. Il me fallait trouver une solution plus "universelle".

But

Ce tutoriel va vous permettre d’établir l’équation de votre graphique, grâce à l’ajout d’une courbe de tendance (aussi appelée courbe de régression) , certains fabricants ne donnant pas l’équation pour leur produit.

Cas pratique

Pour commencer, prenons l’exemple d’un capteur de distance (télémètre) à infra-rouges (SHARP GP2Y0A02)

GP2Y0A02.png

Voici son abaque :

GP2Y0A02 abaque.png

Méthode

Le relevé

La première étape consiste à faire un relevé des données, de la manière la plus précise possible. Nous nous intéresserons à l’intervalle [20 ; 150] puisque cela correspond à la plage de mesure du capteur. Pour cela, je conseille d’agrandir le graphique, puis de relever chaque point à la règle en recalculant ses coordonnées grâce à la règle de trois basée sur l’échelle.

Pour la courbe ci-dessus, le relevé donnerait ceci (aux arrondis près):

Distance (cm) Tension (m)
20 2.5
30 2
40 1,571428571
50 1,257142857
60 1,071428571
70 0,928571429
80 0,814285714
90 0,728571429
100 0,685714286
110 0,6
120 0,557142857
130 0,528571429
140 0,5
150 0,471428571

Les données sur tableur

La deuxième étape consiste à recopier le relevé de données dans un tableur et construire le graphique correspondant

Excel

1er Graphique : La tension en fonction de la distance

Sélectionnez les données saisies,cliquez dans l’onglet Insertion, cliquez sur Nuages afin d’insérer un graphique en nuage de points.

C’est à mon sens celui qui donne de meilleurs résultats.

Excel construit graphe.png

2nd Graphique : La distance en fonction de la tension

Nous aurons besoin d’un second graphique pour déterminer la deuxième équation.

Nous allons donc recopier notre colonne Distance juste après notre colonne Tension

(Cela permettra de conserver les 2 graphiques actifs simultanément sur la feuille)

Il conviendra ensuite d’insérer un graphique type Nuages sur la nouvelle sélection de données.

OpenOffice Calc

Sélectionnez les données saisies,cliquez sur Diagramme afin d’insérer un graphique.

Puis dans le formulaire, sélectionnez le type XY (Dispersion) pour un graphique en nuage de points.

Validez par terminer

Calc construit graphe.png

Calc Select Graphe.png

Les graphiques générés

Nous venons de générer des graphiques de type nuages de points.

Voici le 1er graphique généré sous excel:

Excel graphe1.png

et le second :

Excel graphe2.png

Il est à noter que les graphiques sous OpenOffice Calc sont identiques.

La courbe de tendance

Nous avons réussi à reproduire l'abaque de notre fabricant en reproduisant une grille de données dans notre tableur. Maintenant, nous devons établir l'équation de la courbe obtenue. Pour cela, Excel et OpenCalc permettent l’ajout de courbes de tendances sur un graphique. Nous n'aurons donc pas besoins de faire les calculs fastidieux avec la méthode du moindre carré ou toute autre méthode permettant de calculer une courbe de régression.

Sur le graphique obtenu dans le tableur, vous pouvez cliquer sur la courbe avec le bouton droit de la souris, puis dans le menu contextuel,sélectionner l’option Ajouter une courbe de tendance…

Ajout d’une courbe de tendance sur Excel :

Calc Ajout tendance.png

et sous OpenOffice :

Calc Ajout tendance 2.png


Par défaut, les tableurs ajoutent une courbe de tendance linéaire

Excel :

Excel defaut lineaire2.png

OpenOffice Calc :

Calc defaut lineaire.png

Sur les 2 logiciels, vous pourrez alors rechercher la courbe de tendance appropriée par simples clics. Pour notre exemple, la courbe la plus proche a une équation exprimée en puissances de x

N’oubliez pas de cocher l’option “afficher l’équation sur le graphique”.

Excel :

Excel puissance.png

OpenOffice Calc :

Calc puissance.png

Sur Excel, la courbe de tendance en rouge se superpose parfaitement et le coefficient de détermination est excellent (0.996)

Excel tendance.png

de même sur OpenOffice Calc :

Calc tendance.png

Nous venons de déterminer l’équation de Tension=f(Distance)

Suivant le même procédé, nous déterminerons l’équation de Distance=f(Tension)

sur Excel :

Excel tendance2.png

Calc tendance2.png


D’autres types de courbes peuvent être satisfaisants, il convient d’utiliser celui qui aura l’équation la plus facile à paramétrer dans l’IPX et qui aura le meilleur coefficient de détermination (le coeff doit être supérieur à 0.70)

Ces 2 formules serviront à renseigner l’entrée analogique de l’IPX

Analog -> Digital ou Digital->Analog

Dans certains cas, il faudra paramétrer l’entrée analogique avec le type "Volt" la tension sera alors “lue” par IPX, la formule sera ensuite appliquée uniquement dans un widget HTML associé à un petit script Javascript (lecture dans une source de données)

(Graphiques réalisés avec Microsoft Excel 2010 et Open Office 4.1.4)

Connexion du Capteur à l'IPX

Maintenant que nous avons déterminé les caractéristiques de notre capteur, nous allons le connecter à l'IPX800 V4.

Ce capteur doit être alimenté en 5 volts. Nous utiliserons une alimentation externe. Pour le montage, j'ai utilisé une alimentation USB.

Avant de brancher le capteur à l'IPX, il faut vérifier que la tension de sortie de dépasse pas les limites admises par l'entrée analogique de notre automate.

Sharp GP2Y0A controle.JPG

La sortie analogique ne délivre pas de tension supérieure à 3.3 V, nous n'aurons donc pas besoins de mettre un pont diviseur en place pour protéger l'entrée analogique de l'IPX.


Voici le schéma de connexion :

Sharp GP2Y0A branchement.JPG


Paramétrage de l'entrée analogique"

Le capteur émettant une tension sur sa sortie, il suffit de paramétrer l'entrée analogique comme un voltmètre.

[[Fichier:Sharp GP2Y0A analogique1.JPG[center]]

Il suffira alors de placer un widget de type "Entrée analogique" sur le Dashboard pour visualiser la tension de sortie.

Sharp GP2Y0A widget1.JPG


Sharp GP2Y0A widget1b.JPG

Conversion de la tension en distance

Il va de soit que ce n'est pas réellement la tension en sortie de notre capteur qui nous intéresse, mais la distance mesurée. Nous allons faire la conversion grâce à un widget HTML, celui-ci contiendra un peu de javascript. Mais pour cela, nous devons d'abord créer une source de données.

Sur le Dashboard, créons la source STATUS

Sharp GP2Y0A source.JPG

Créons maintenant notre widget HTML et insérons un peu de code


function bruteToDistance(brute) {
  d = Math.floor(63.37 * Math.pow(brute * 0.000050354,-1.143));
    if (d < 20 || d > 150) {
        return "";
    }else{
        return d + " cm";
    }
}

var distance = bruteToDistance(datasources["STATUS"]["response"]["analog0"]);

return `
<style>
.content {
  position: absolute;
  bottom: 0;
  left: 0;
  height: 100%;
  width: 300px;
  background-color: #333;
  overflow: hidden;
}

.circle {
  width: 5px;
  height: 5px;
  background-color: transparent;
  position: absolute;
  left: 50%;
  margin-left: -2.5px;
  top: 50%;
  margin-top: -2.0px;
  border-radius: 50%;
  border: 2px solid #3C14;
  animation: radar 5s infinite;
  -webkit-animation: radar 5s infinite;
  -webkit-transition: all ease-in-out;
  transition: all ease-in;
}
@keyframes radar {
  1% {
    width: 5px;
    height: 5px;
    margin-left: 0;
    margin-top: 0px;
    border: 2px solid #3AA65E;
    opcity:0.9
  }
  100% {
    width: 800px;
    height: 800px;
    margin-left: -400px;
    margin-top: -400px;
    border: 12px solid #055E23;
    opacity:0.0;
    
  }
}

</style>

<center>
  <div class="content" height=100%> <div valign=middle style="color:#fff;font-size: 20px;"> ${distance}</div> <div class="circle">
  </div>

</div>
</center>
`;

Au début du code, vous pouvez remarquer la fonction bruteToDistance(). La source de données (status.xml)renvoie la valeur brute du capteur. Il convient donc, dans un premier temps de traduire cette valeur en Volts. La valeur brute est alors multipliée par 0.000050354. Pour de plus amples explications, je vous invite à consulter cette page. La valeur convertie en volts sera finalement transformée par la formule de notre capteur, déterminée plus haut avec notre tableur. La distance retournée par notre fonction ne pourra excéder 150, ceci étant la limite de la plage de mesure du capteur. De même, elle ne pourra être inférieure à 20 cm.

Voici notre widget :

SharpGP2Y0A.gif