Étape 2: Les maths
En fait, je travaillais à l’époque sur ce projet de girouette analogique, qui est essentiellement un potentiomètre continu avec une petite « zone morte » au nord. Au départ, le projet a été truffé de ces lectures bruyants familiers jusqu'à ce que j’ai regardé de plus près à la résistance.
Tout d’abord, j’ai tracé la courbe de résistance réelle dans Microsoft excel, qui est la résistance totale créée par la combinaison de la girouette et la charge... et je l’ai appelé « Total (R,T) ». Au début, j’ai été déçu car je ne pouvais pas voir toute la courbe du tout, donc, puis j’ai changé les deux axes à log10. Hé hop ! Je peux voir une courbe ! (La courbe bleue sur la gauche sur le schéma ci-dessus).
La résistance totale est donnée par cette formule bien connue :
RT = (Rw * R L ) / (Rw + RL)
- où :
- RT est la résistance totale
- RW est la résistance de l’essuie-glace
- RL est la résistance de charge
OK, bien - pas trop compliqué ?
Ensuite, j’ai voulu voir comment ma nouvelle courbe fantaisie regardé côte à côte avec une courbe linéaire tout droit ennuyeuse, comme si les résultats n’étaient pas en fait une courbe du tout, mais une ligne droite. La formule c’est :
RLIN = (R,w * RTMAX) / RWMAX
- où :
- RLIN est la résistance linéique hypothétique (la résistance « imaginaire »)
- RW est la résistance de l’essuie-glace
- RTMAX est la valeur maximale de la résistance totale
- RWMAX est la valeur maximale de la résistance de l’essuie-glace
C’est bien beau, mais où allons-nous obtenir la valeur de la résistance totale de ? Je pensais vraiment que cela allait être plus facile que cela, mais alors réalisé que nous avons déjà calculé cette valeur ci-dessus, c’est juste la valeur maximale de RT . Mais juste pour clarifier, voici la formule :
RTMAX = (RWMAX * R L ) / (RWMAX + RL)
- ainsi, maintenant, si nous substituer à RTMAX on obtient :
RLIN = (RW * RTMAX) / RWMAX = (RW / RWMAX) * (RWMAX * RL) / (RWMAX + R,L) = (RW * RL) / (RWMAX + RL)
Maintenant, nous pouvons tracer notre linéaire « courbe » (en rouge) et voir si elle est sensiblement différente de la courbe sinueuse... et oui... aussi longtemps que nous trichons en utilisant log10, nous pouvons voir la différence. Si nous ouvrons le fichier excel, nous pouvons modifier la valeur de la résistance de charge à quelque chose de petit bêtement et obtenir quelques courbes assez fous produites.
Enfin, j’ai réalisé que nous pourrions ensuite soustraire la courbe non linéaire de la courbe linéaire et obtenir un résultat final : la linéarité non réelle, ou la « différence » entre les résultats linéaires et non linéaires. C’est la courbe joli bleue sur la droite et est donnée par :
RDIFF = RT - RLIN = (RW * RL) / (RW + RL) - (RW * RL) / (RWMAX + RL)
Cette équation peut être encore réduite, mais l’arduino nano va déjà se battre avec certains des gros chiffres produits (nous travaillons en collaboration avec 16 bit convertisseurs a/n), donc nous avons besoin pour l’aider au long d’un petit peu.
Finalement, la formule se traduite dans le code de l’arduino :
Vous verrez que le code n’est plus « maladroit » que la formule et j’ai eu à diviser par 5 pour réduire la taille de certains des chiffres. Mais ça marche !
Si tout va bien, j’ai maintenant également prouvé non que seulement que les mathématiques peuvent être amusant mais aussi pertinent dans le monde réel ? Mais qu’ont-ils réellement tout ce travail ?
Si l'on se souvient de tout à l’heure, la résistance de la charge minimale recommandée est de 100K, mais si nous réduisons ces ohms nous pouvons faire des lectures nettement plus stable près de la zone morte. J’ai essayé beaucoup de différentes permutations et, à l’aide de la formule ci-dessus pour réduire à néant la non linéarité, j’ai fini par utiliser un super précis (+ - 0,1 %) Résistance 30K et ai toujours bonnes lectures à due Sud, qui, selon notre schéma d’excel, où se produira la plupart non-linéarité.