Calculer un output en volt avec un input diffèrent en volt

Signaler
-
Messages postés
7231
Date d'inscription
lundi 31 janvier 2011
Statut
Contributeur
Dernière intervention
23 avril 2021
-
Bonjour,
je débute en python et j'apprend et dans le cadre de mon travail il y un programme que j'aimerais faire
en gros j'ai un potentiomètre qui va de 0% (0.66v) a 100%(4.04v)
et un servomoteur qui va de 0%(0.68) a 100%(4.02)
le potentiomètre serais mon input et le servomoteur mon output
et j'aurais besoins que mon programme calcule pour que en fonction de la position de mon potentiomètre en pourcentage mon servomoteur s'ouvre exactement du meme pourcentage.
Je ne demande pas forcement la juste le calcul pour réaliser cela j'aimerais bien avoir des explication qui vont avec ou un lien menant sur l'explication de ce type de calcul car je ne sais pas comment nommée ce calcul :)

5 réponses

Messages postés
15856
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
23 avril 2021
695
Bonjour

c'est des maths ton problème pas du python.
Pour commencer à t'aider, j'ai besoin de savoir ce qu'il se passe quand la tension en sortie de ton potentiomètre est en dehors de la gamme du servomoteur [0.66; 0.68[ et ]4.02; 4.04]
Messages postés
32149
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
23 avril 2021
3 415
Bonjour
C'est même davantage de l'électronique que des maths pur.
Déjà tout dépend du type de potentiomètre : linéaire ou logarithmique
Après c'est des calculs à partir de la loi d'Ohm....
:-)
Messages postés
15856
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
23 avril 2021
695 >
Messages postés
32149
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
23 avril 2021

Salut,
vu qu'il a la gamme de tension de sortie par rapport au pourcentage de déplacement, la loi d'Ohms n'est pas utile.
Par contre, oui c'est certain, il faut savoir si c'est linéaire ou algorithmique.
enfaite pour être plus explicite je suis mécano moto et la poignet d'accélérateur est électronique et commande l'ouverture des papillons de gaz le fil qui sort de ma poignet de gaz
affiche une tension en volt:
(fil sortant de la poignet )pour 0° d'ouverture /la tension est de 0.66v /pour 0% d'ouverture
pour 84.5° d'ouverture /la tension est de 4.04v /pour 100% d'ouverture

(fil allant a la commande des papillons de gaz) pour 2° d'ouverture /la tension est de 0.68v /pour 0% d'ouverture
pour 85° d'ouverture /la tension est de 4.02v /pour 100% d'ouverture

j'espère que ces un peux plus claire.
il me faudrait une formule qui pour 50%d'ouverture de la poignet ouvre a 50% les papillon de gaz.
car le calculateur lui ouvre les papillon plus lentement pour les norme de pollution.
je n'ai aucune idée du type de potentiomètre utilisé j'ai simplement les valeur venant de la poignet de gaz et la valeur allant a la commande électronique des papillon de gaz.
Messages postés
7231
Date d'inscription
lundi 31 janvier 2011
Statut
Contributeur
Dernière intervention
23 avril 2021
1 734
Bonjour,

Votre problème me paraît très intéressant car il permettrait d'utiliser une carte à microcontrôleur comme système de 'asservissement de fluides.

Je n'ai malheureusement pas le temps en comment de me consacrer à une étude complète, sans compter les compétences pour y parvenir.

Je voudrais juste faire quelques suggestions.

1) il s'agit, de mon point de vue d'établir deux tableaux de données avec correspondance précise de l'un en entrée vers l'autre en sortie. Pour ce faire, il faut un code suffisamment rapide pour commander le passage du capteur vers le servo-moteur de commande du papillon des gaz. Et établir une sorte de map (tableaux coordonnés) avec limites conditionnelles correspondant aux seuils de déclenchement et d'arrêt de la commande.

Il est donc impératif d'utiliser un environnement dit "embarqué" pour résoudre les contraintes de temps de réaction des composants de la carte (mémoires de programme et de traitement, registres notamment).

En général, ces contraintes impliquent de travailler en langage C voire en assembleur, plutôt même qu'avec le langage dit arduino.

2) Vous serez peut-être amené à choisir une carte de la série teensy, compatible arduino mais offrant des performances et capacités mémoire supérieures, ce qui pourrai éviter le critique apprentissage du C.

https://www.pjrc.com/teensy/
https://www.locoduino.org/spip.php?article24
https://www.hackster.io/teensy

3) mon troisième point devrait être mon premier, car comme indiqué, il faudrait, dans mon hypothèse, établir ce deuxième tableau, en inscrivant les données correspondant au maximum de points possible à traiter dans l'unité de temps compatible avec cette régulation "dans le monde réel".

A défaut dune formule mathématique qu'un "scientifique" serait sans doute capable de définir, je jetterais un œil sur le site wolfram mathematica, qui permet aux non-spécialistes de trouver des solutions à des problèmes de ce type.

https://www.wolfram.com/mathematica/index.html.fr?footer=lang

Vous trouverez sans doute des pistes dans cette réalisation:

http://www.yoctopuce.com/FR/article/enregistrer-l-angle-d-une-moto-dans-un-virage

J'espère que ces suggestions vous seront utiles et que même si vous trouvez des solutions plus directes vous reviendrez nous en faire part.

Cordialement
Messages postés
15856
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
23 avril 2021
695
Georges je pense que est allé un peu trop loin.

Sacl
Ce que je comprends, c'est que tu aimerais que ton programme te dise que les papillons sont ouvert à X% quand la poignée est tournée à 30°.
Et à Y% pour 50° et ainsi de suite.

Si c'est bien ça. Afin d'établir une "loi" de transfert, il faut plus de points de comparaison.
Actuellement tu donnes 2 points tout ouvert et tout fermé, mais il y a une infinité de façon de relier ces 2 points.

Si tu pouvais faire des mesures à 15°, 30° 45° et 60° ça serait un bon début pour estimer la loi la plus appropriée.

On va aussi essayer d'utiliser des termes clairs pour tout le monde et sans équivoque.
Dans ces phrases
(fil sortant de la poignet )pour 0° d'ouverture /la tension est de 0.66v /pour 0% d'ouverture
pour 84.5° d'ouverture /la tension est de 4.04v /pour 100% d'ouverture

(fil allant a la commande des papillons de gaz) pour 2° d'ouverture /la tension est de 0.68v /pour 0% d'ouverture
pour 85° d'ouverture /la tension est de 4.02v /pour 100% d'ouverture
je sens qu'ouverture est tour à tour lié à la poignée et aux papillons.

Si c'est le cas, il faut clarifier, par exemple pourcentage poignée, angle poignée, etc....

Peux tu nous préparer un petit tableau de ce genre

Messages postés
7231
Date d'inscription
lundi 31 janvier 2011
Statut
Contributeur
Dernière intervention
23 avril 2021
1 734
Bonjour whismeril,

Je me suis peut-être enflammé, et oublié de dire que je sollicite bien entendu les corrections ou infirmations. Pas de problèmes donc, tu as sans doute raison en remettant la simplicité au centre de la solution.

Ceci dit, je ne vois pas comment établir la nécessaire rapidité de transmission sans faire appel à un microcontrôleur. J'ai zappé la mention de python, mais de ce que je sais, les temps de réaction ne sont pas suffisamment courts en passant par un OS et un code interprété, sauf utilisation de micro-python avec une carte de type bbc micro-bit. Mais je peux me tromper.

Bien entendu, ta proposition de tableau me semble tout à fait judicieuse.

Si scal donne suite, c'est avec intérêt que je suivrai les résultats.

Cordialement
Messages postés
11
Date d'inscription
jeudi 3 mai 2018
Statut
Membre
Dernière intervention
19 avril 2021

Premièrement ces vrai que je n'est pas préciser mais ce programme sera executer par un microcontrôleur sur lequel est inscrit (74hc595n l5n522 vs cn159008)
dans mon cas la valeur d'entrée sera ma poignée et ma valeur de sortie sera mon moteur de papillon

pour le moment je cherche juste a faire le programme,
la tache que je lui demande est de lire la valeur en volt venant de la poignée qui est toujours proportionnelle 0 à 100% ainsi 0% = 0.66v et 100% = 4.04v de meme pour le moteur de papillon avec un voltage diffèrent bien-sûr.
et de convertir cette valeur grace a un calcul de sorte a ce que le programme récupère la valeur en volt de la poignée imaginons 0% et avec une formule la transforme en une valeur correspondant au 0% du moteur de papillon.
avec une formule de produit en croix ou peut calculer les différent voltage pour les différent pourcentage que ce soit de l'entrée ou de la sorti
exemple 37% d'ouverture pour la poignée = 1.49v et pour le moteur = 1.48v
je n'est pas la possibilité actuellement de faire des mesure avec des pourcentage d'ouverture different mais je ne pense pas qu'il soit indispensable étant donner que les valeur sont proportionnelle.
ce calcul est facile pour nous étant donnée que nous savons que 4.02v est le 100% du moteur et le fait de savoir que le 0% et le 100% de ma poignée et de mon moteur son différent (je parle des valeur en volt)
Ensuite vou remarquereez que l'angle a 0% de la poignée et du moteur sont different et ces normal le moteur de papillon ouvre de 2° pour tenir le ralenti de notre moto
Il n'y a AUNCUN liens entre les valeur de ma poignée et celle du moteur de papillon hors hormis le fait quelle soit proportionnelle (les valeurs)
j'espère que vous aurez toutes les info nécessaire

voici un tableau plus explicatif

Messages postés
15856
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
23 avril 2021
695
mais je ne pense pas qu'il soit indispensable étant donner que les valeur sont proportionnelle.

A condition de nous le dire....

Jordane a soulevé le point au message 2, je l'ai appuyé au message 3. Mais dans ta réponse du message 4, tu n'en parles pas. J'en ai donc déduis que tu n'en savais rien.....

je n'est pas préciser mais ce programme sera executer par un microcontrôleur


finalement Georges, tu avais raison.
scal, je ne t'aiderais pas pour cela, je ne connais pas.

Mais pour les maths, c'est "juste" une équation de droite.
x	    y
0.66	0.68
4.04	4.02

Si tu ne sais pas calculer cette équation, Excel peut le faire pour toi



Messages postés
15856
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
23 avril 2021
695
PS Georges, t'avais raison ;)
Messages postés
7231
Date d'inscription
lundi 31 janvier 2011
Statut
Contributeur
Dernière intervention
23 avril 2021
1 734 >
Messages postés
15856
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
23 avril 2021

Bonjour à tous,

Merci whismeril pour ton commentaire. J'ai hésité précédemment à intervenir à nouveau pour ne pas donner le sentiment de vouloir imposer mes vues. Ton exposé sur la formule est ce qui manquait pour établir la droite et définir donc la correspondance entre les deux séries.

Mais ce qui manque dans les réponses de scal concerne les temps de réponses requis.

Autant il est possible en python de simuler le fonctionnement d'un tel système, autant comme je le disais, il n'est pas possible d'obtenir un fonctionnement satisfaisant en termes de réactivité.

Mes utilisations, mêmes limitées, d'une carte arduino en robotique (plus rapide qu'un programme python) me convainquent que pour la moindre action, le temps de réponse est de l'ordre de la demi ou des deux-tiers de seconde. Bien trop lent pour correspondre à une accélération ou décélération d'un moteur thermique.

D'autant que si l'on se livre à des rotations rapides de la poignée de gaz, le programme ne suivra pas.

Pour scal, je me permets d'expliquer: python fonctionne sur un ordinateur (qui pourrait être de type raspberry pi, au format carte bancaire). Cet ordinateur héberge un OS de type Linux, qui lui-même accueille un script python. Les temps de réponse des deux "couches" s'additionnent et ne conviennent pas pour des systèmes rapides comme celui du projet.

Sans compter la rapidité du servo-moteur, à choisir avec soin.

La simulation fonctionnera sur python et peut servir de base d'essais, mais python ne s'installe pas sur une carte à microcontrôleur, aux caractéristiques déjà insuffisantes pour accueillir un OS.

En un mot comme en cent, la problématique des temps de réponse se posera à un moment ou à un autre. A moins qu'il ne s'agisse de tester sur un banc-moteur, en acceptant la contrainte d'accélérations/décélérations très progressives.

Cordialement
Messages postés
11
Date d'inscription
jeudi 3 mai 2018
Statut
Membre
Dernière intervention
19 avril 2021
>
Messages postés
7231
Date d'inscription
lundi 31 janvier 2011
Statut
Contributeur
Dernière intervention
23 avril 2021

Oui je me doutais que python n’était pas vraiment adapté pour arduino mais je voulais apprendre le python plus que le C donc je pensais pouvoir faire d’une pierre deux coup..
Du coup la solution serais de changer de language ou le fait de passer par un micro contrôleur rend la manipulation impossible ?
Bien évidemment que les délais de réponse doivent être le plus rapide possible
Pour ce genre de demande que me conseillerais vous (language, composant… )
Avez vous des liens en plus de ceux citer plus haut qui vous pensez pourrais m’aider sur ce projet ?
Messages postés
7231
Date d'inscription
lundi 31 janvier 2011
Statut
Contributeur
Dernière intervention
23 avril 2021
1 734 >
Messages postés
11
Date d'inscription
jeudi 3 mai 2018
Statut
Membre
Dernière intervention
19 avril 2021

Pour faire d'une pierre deux coups, je choisirais la carte à microcontrôleur bbc microbit, qui offre l'avantage de ne pas être chère et de fonctionner avec plusieurs langages dont micro-python, plus léger que python, avec une syntaxe très proche, mais adaptée à la robotique (port GPIO pour les capteurs/actionneurs, ce qui permet de tester les scripts sur python (mais sans possibilité de transfert, il faut "récrire ou écrire dès le départ en micro-python.

Ceci dit, les conseils avisés de whismeril sont à retenir pour la validation du calcul de la droite. Il peut être fait, comme indiqué, sur un tableur. l'implémentation en un quelconque langage peut être fait après ou testé en python.

Ne pas négliger les caractéristiques du servo (puissance, vitesse de rotation car le n'en connais pas qui tourne aussi vite que le coup de poignet de Quartararo, mais ça doit exister.

Si arduino est choisi, il faut renoncer à python, mais je conseille l'étude approfondie de l'exemple d'application moto que j'ai fourni.

Je reviendrai pour d'autres liens mais celui de bbc microbit est facile à trouver.

Par contre, je ne connais pas de sites et makers lancés dans ce type de projet, à part locoduino (arduino), mais ils ne veulent se consacrer qu'aux montages ferroviaires. Il y aussi les sites de modélisme aéronautique, mais il faut que je cherche.
Messages postés
11
Date d'inscription
jeudi 3 mai 2018
Statut
Membre
Dernière intervention
19 avril 2021

je te remercie ça m'aide déjà mieux sur le chemin sur le quelle m'orienté, mon problème reste de mettre cela en pratique en python
en cherchant j'ai trouver une formule qui apparemment flairait ce que je demande mais le résultat ne coincide pas
voici la formule
(xA-xB)/(yA-yB) donc (0.66-4.04)/(0.68-4.02) et je multiplie par mon entrée
et ces sensée me donner la valeur attendu sauf que ce n'est pas le cas
vous pouvez m'éclairer ?
Messages postés
15856
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
23 avril 2021
695
L’équation d’une droite est du type y = a * x + b
DeltaY / DeltaX (et pas DX / DY) permet de calculer a, c’est le coefficient de proportionnalité.

Pour trouver b, il faut utiliser le x et le y d’un point, avec le a que l’on vient de calculer b = y - a * x