Résistance !!! [résolu]

Bonjour

J'ai un petit soucis avec un capteur de position potentiométrique.

Il s'agit d'un potentiomètre sous la forme d'un ruban, long de 50cm.

Le problème est que si sur un potentiomètre classique, le collecteur est toujours en contact avec la piste résistante du potentiomètre, sur le ruban que j'utilise, lorsqu'aucune pression n'est exercée sur le ruban, le collecteur n'est relié à rien.

Donc j'obtiens une valeur aléatoire non stable.

La solution que j'ai trouvé est de relier le collecteur à la borne 0V à travers une résistance de 100K.
Et bien entendu, j'obtiens des valeurs exponentielles alors que moi je veux des valeurs qui augmentent de manière constante, en gros je veux une droite et non une exponentielle.

Donc il faut que j'utilise une résistance plus importante, j'ai fais un calcul vite fait, avec du 10 méga-homs ce serait pas mal.

Mais je me demande si l'arduino va prendre en compte cette résistance, ou si il faut que j'utilise une résistance plus faible ?

Merci

Bonsoir,

Ton explication n'est pas correcte.

Si le curseur n'est pas en contact avec la piste, tu as beau mettre la résistance que tu veux,
le résultat sera fixe.
Tu ne peux pas avoir des valeurs exponentielles ou logarithmiques.

Buxi:
Et bien entendu, j'obtiens des valeurs exponentielles

En fait c'est plutôt une hyperbole mais c'est un détail.

  1. Je suppose que ta "solution" te convient parce que je fais la même remarque que Geriko : quand le curseur est en l'air sans résistance tu mesures une tension aléatoire (le bruit électrique ambiant) et avec la résistance tu mesures une tension fixe = 0 volt.
  2. Quand on parle de non linéarité il faut toujours chiffrer. Or là on ne connaît ni la résistance totale de ton ruban résistif ni quel écart max de linéarité tu peux tolérer.

Partons du principe que tu sais gérer les sauts 0 volt (sans appuis) et x volt(avec appuis).
A trop augmenter ta résistance aditionnelle tu risques que la résistance d'entrée du microcontroleur ne soit plus proportionnellement assez grande pour qu'on puisse continuer à dire qu'elle n'intervient pas -> elle est connectée en parallèle avec ta résistance additionnelle.
La première chose à faire est de consulter la datasheet de ton micro-controleur pour connaître ses bornes (doc Atmel bien sûr parce que Arduino c'est seulement le nom de la carte).

Je pense que tu sais comment calculer un pont potentiométrique ainsi que la résistance équivalente à 2 résistances en parrallèle. Le mieux pour prévoir ce qu'il se passe est d'utiliser un simple tableur et d'y reporter les formules.

Indication : tu utilise une résistance additionnelle entre le curseur et la masse et tu constate un écart entre la courbe théorique et la courbe réelle. Avec la résistance telle qu'elle est placée l'écart est toujours de même signe : la courbe réelle est toujours en dessous de la courbe théorique.
Si tu avait placée la résistance additionnelle entre le curseur et l'alim l'écart aurait été de signe inverse.
Et si tu placais 2 résistances de 100k une entre masse et curseur, l'autre entre curseur et alim tu obtiendrai une courbe en S qui te permetrais de répartir l'écart de chaque coté de la courbe théorique et donc de réduire l'écart max dans un rapport 2.
Mais la tension mesurée "sans appuis" ne sera plus 0 volt mais Vcc/2

Bonsoir,

Ton explication n'est pas correcte.

Si le curseur n'est pas en contact avec la piste, tu as beau mettre la résistance que tu veux,
le résultat sera fixe.
Tu ne peux pas avoir des valeurs exponentielles ou logarithmiques.

En fait ce dont j'ai besoin, c'est d'avoir une valeur égale à 0 lorsque le curseur n'est pas en contact avec la piste. Hors, si je branche le potentiomètre ruban comme un potentiomètre classique, c'est à dire la résistance totale du potentiomètre entre 0v et 5v, et le collecteur sur une entrée de l'arduino, lorsqu'aucune pression n'est exercée sur le ruban, je n'obtient pas 0 mais j'obtiens une valeur qui varie aléatoirement entre 0,3 et 0,4.

Si je branche en plus du potentiomètre, une résistance entre le collecteur et 0v, j'obtiens une valeur égale à zéro stable lorsque je n'appuie pas sur le ruban. Mais à cause de cette résistance supplémentaire, les valeurs n'augmentent pas sous forme de ligne droite, mais sous forme d'hyperbole donc (je pensais que c'était exponentiel mais passons).

  1. Quand on parle de non linéarité il faut toujours chiffrer. Or là on ne connaît ni la résistance totale de ton ruban résistif ni quel écart max de linéarité tu peux tolérer.

La résistance de mon ruban résistif est 100K et en ce qui concerne l'écart de linéarité, je ne sais pas trop comment répondre. Disons que le ruban sert à contrôler une fréquence utilisée pour émettre du son. Donc le ruban me sert en quelque sorte de "clavier", un peu à la manière du persephone. L'écart que je peux tolérer va se concrétiser dans la largeur des écarts entre deux notes les plus courtes.
Avec la résistance additionnelle de 100K, les premiers écarts dépassent les deux centimètres tandisque les derniers sont d'environs 5mm. Dans ces conditions c'est difficile de jouer juste.

Et si tu placais 2 résistances de 100k une entre masse et curseur, l'autre entre curseur et alim tu obtiendrai une courbe en S qui te permetrais de répartir l'écart de chaque coté de la courbe théorique et donc de réduire l'écart max dans un rapport 2.
Mais la tension mesurée "sans appuis" ne sera plus 0 volt mais Vcc/2

Exactement ! J'avais fais l'essai avec deux résistances de 100k et effectivement c'est ce que j'avais constaté. Mais cette "solution" n'en est pas une car j'ai absolument besoin d'avoir une valeur à zéro lorsque je ne touche pas au ruban. Je me sert de cette valeur ensuite dans le patch PureData que j'utilise.

Je pense que tu sais comment calculer un pont potentiométrique ainsi que la résistance équivalente à 2 résistances en parrallèle. Le mieux pour prévoir ce qu'il se passe est d'utiliser un simple tableur et d'y reporter les formules.

Oui, il me reste quelques notions de mes études en électrotechnique (mais c'est trééééés loin). J'avais juste fais un petit calcul et j'avais trouvé qu'avec une résistance de 10M j'approchais à quelque chose de parfait pour moi. Mais effectivement je ne me suis pas posé la question de savoir si l'Arduino avait aussi une "résistance".

Entre temps, c'est à dire avant de lire vos réponses, j'avais trouvé un post sur un forum indiquant qu'il valait mieux ne pas dépasser 1M. Etant donné qu'il me restait quelques résistances de 100K, j'ai fais un essai en les reliant en série, et comme j'en avais sept, j'ai donc fait une résistance équivalente de 700K.
J'obtiens quelque chose de pas mal du tout, l'écart de linéarité étant assez faible pour ne pas être handicapant.
Je pense que je vais en rester là, j'ai essayé et ça me convient.

Merci :wink:

Il suffit de monter le capteur en résistance variable avec une résistance fixe et non en potentiomètre en contre partie tu perds une partie de la dynamique mais tu peux t'en arranger en utilisant la référence interne pour l'ADC au lieu du 5V.
Tu calcules la résistance talon pour que la tension soit égale à la tension de référence lorsque le curseur est en l'air.

Bonjour,
Voilà une explication claire. Au début je n'avais pas compris.
Malheureusement, je n'ai pas de solution miracle.

Petit bémol rigolo :
Sur une guitare, l'espace entre les notes n'est pas linéaire non plus hi hi !

@fdufnews
Je ne comprends pas ton montage.

  • lorsque le curseur du potentiomètre est en "l'air" il faut un 0 (il suffit d'inverser)
  • tu vas créer un décalage mais le problème restera entier me semble t-il,
    même si tu tiens compte du décalage par logiciel et en décalant l'ADC ?
    ça ne sera toujours qu'un compromis ?

Autre solution logicielle : un table de translation ?

Merci fdufnews mais moi non plus je ne comprends pas trop...

Petit bémol rigolo :
Sur une guitare, l'espace entre les notes n'est pas linéaire non plus hi hi !

C'est exact, mais c'est un problème physique qui me semble impossible à résoudre.

J'ai un ami qui fabrique des scies musicales (je suis également lamiste).
Sur une scie musicale, c'est le même soucis : Plus on s'approche des aigus, plus les notes se rapprochent.
Lui a trouvé une solution radicale, c'est de découper l'acier en courbe au lieu de le laisser droit comme les lames sonores classique, ainsi il compense et obtient une parfaite linéarité (modèle de gauche sur la photo).

Bonjour buxi,

Peux tu m'expliquer comment tu fais pour mettre un photo en page ?
Je n'ai jamais réussi.

C'est pourtant pas compliqué. Le capteur et la résistance forme un diviseur de tension.
Sur la sortie, la tension varie entre 0 (curseur en bas) et 5V * P/(R+P) (curseur max ou en l'air).

geryko:
Bonjour buxi,

Peux tu m'expliquer comment tu fais pour mettre un photo en page ?
Je n'ai jamais réussi.

Bouton "insert an image" dans les icônes au-dessus de la fenêtre d'édition. L'image doit être hébergée sur un site en ligne.

C'est pourtant pas compliqué. Le capteur et la résistance forme un diviseur de tension.
Sur la sortie, la tension varie entre 0 (curseur en bas) et 5V * P/(R+P) (curseur max ou en l'air).

Ha oui ça y est je viens de percuter !

Et donc voilà le résultat :

Bonsoir,

@Buxi
Sacrée réalisation ! Bravo !

@fdufnews
Je suis d'accord avec le calcul mais :

" - tu vas créer un décalage mais le problème restera entier me semble t-il,"

Il n'y a pas de linéarité, ce qui était le but recherché.
Voir le ficher joint. Je ne me plante pas ? (zippage obligatoire pour xls)
Rassure moi.

Pour la mise en place d'une image, J'ai enfin compris. Merci.
Bizarre cette procédure.

resistance.zip (4.49 KB)

Buxi:
C'est exact, mais c'est un problème physique qui me semble impossible à résoudre.

J'ai un ami qui fabrique des scies musicales (je suis également lamiste).
Sur une scie musicale, c'est le même soucis : Plus on s'approche des aigus, plus les notes se rapprochent(...)

La fréquence d'une note est une loi physique, et dans le cas d'une guitare, d'une scie ou de tout autre générateur de bruit, c'est une simple suite mathématique : F(n+1) = F(n) x racine douzième de deux. On peut le vérifier en calculant F(12) par rapport à F(1) : c'est une octave pure : F(n+12) = 2F(n).

Ayant découvert ça tout seul comme un grand, je me suis amusé à vérifier ça sur ma guitare, et en effet, la distance entre les frettes et le chevalet suit cette même série. Ce n'est ni linéaire, ni logarithmique, mais exponentiel (donc contre-logarithmique...)

Alors j'ai coupé des tubes d'alu en calculant la longueur de chacun avec ce même rapport : bas mince, ça sonnait pas bien. j'ai découvert que mes tubes d'alu demandaient un rapport de racine vingt-quatrième de deux... Ah? Mais pas un cylindre (tube plein) qui lui se contente de la racine douzième.

J'ai découvert plus tard que derrière tout ça, c'est la théorie des cordes (une grande notion mathématique enseignée dans les études suérieures), et qu'un tube creux, c'est une intégration de cette théorie des cordes, d'où le changement de rapport (un cylindre plein, c'est une seule corde)... Il serait intéressant de voir comment ça se présente avec une sphère...

Ce n'est donc pas un problème physique impossible à résoudre, ça a déjà été résolu...

Pour en revenir au truc de départ, ce n'est pas l'arduino qui fait ces jolis sons, n'est-ce pas? il y a du midi dans l'air je crois... :wink:

Merci :slight_smile:

La fréquence d'une note est une loi physique, et dans le cas d'une guitare, d'une scie ou de tout autre générateur de bruit, c'est une simple suite mathématique : F(n+1) = F(n) x racine douzième de deux. On peut le vérifier en calculant F(12) par rapport à F(1) : c'est une octave pure : F(n+12) = 2F(n).

Ayant découvert ça tout seul comme un grand, je me suis amusé à vérifier ça sur ma guitare, et en effet, la distance entre les frettes et le chevalet suit cette même série. Ce n'est ni linéaire, ni logarithmique, mais exponentiel (donc contre-logarithmique...)

Alors j'ai coupé des tubes d'alu en calculant la longueur de chacun avec ce même rapport : bas mince, ça sonnait pas bien. j'ai découvert que mes tubes d'alu demandaient un rapport de racine vingt-quatrième de deux... Ah? Mais pas un cylindre (tube plein) qui lui se contente de la racine douzième.

J'ai découvert plus tard que derrière tout ça, c'est la théorie des cordes (une grande notion mathématique enseignée dans les études suérieures), et qu'un tube creux, c'est une intégration de cette théorie des cordes, d'où le changement de rapport (un cylindre plein, c'est une seule corde)... Il serait intéressant de voir comment ça se présente avec une sphère...

Ce n'est donc pas un problème physique impossible à résoudre, ça a déjà été résolu...

Pfiouuuu et donc j'aime beaucoup ce genre d'exemple car on a là un cas d'application concret des maths.
Il faut repenser à l'époque où on était au collègue ou aux lycée, à ces moments où on s'est demandé à quoi ça pourra bien nous servir :grin:

Pour en revenir au truc de départ, ce n'est pas l'arduino qui fait ces jolis sons, n'est-ce pas? il y a du midi dans l'air je crois...

Et non ! Justement je voulais créer les sons sans passer par du midi.
Mais ce n'est pas l'Arduino, d'ailleurs à chaque fois que je vois un exemple de bidouillage où c'est l'Arduino qui produit les sons, je trouve ça assez "pauvre".

Là c'est PureData qui génére les sons, et je passe aussi par un logiciel qui s'appelle "Rakarrack" et qui est une sorte de pédale multi-effet.

@fdufnews
Je suis d'accord avec le calcul mais :

" - tu vas créer un décalage mais le problème restera entier me semble t-il,"

Il n'y a pas de linéarité, ce qui était le but recherché.
Voir le ficher joint. Je ne me plante pas ? (zippage obligatoire pour xls)
Rassure moi.

Pour la mise en place d'une image, J'ai enfin compris. Merci.
Bizarre cette procédure.

Oui à priori si tes calculs sont bons ça ne fait pas avancer le shimiliblick...

Donc pour ma part je reste avec ma solution d'une résistance élevé - mais pas trop - qui réduit le problème sans pour autant le régler totalement. Et vu que ça me convient j'ai marqué le sujet entant que "résolu".

En tout cas c'était intéressant d'avoir vos avis, merci :wink:

Bonjour,

Pour le plaisir de jouer avec mon tableur, j'ai tracé la courbe U en fonction de la position du curseur.
voir le fichier joint.

@Buxi
Tu pourras y faire varier la valeur de R et voir le résultat.
Tu pourras être encore plus satisfait de ton résultat.

Bon amusement.

resistance2.zip (10.9 KB)

Cool !

Par contre tu t'es arrêté à 31 et effectivement jusque là 500K permet d'arriver à une bonne linéarité, mais après ça se complique un peu.

A 700K je n'ai toujours pas une linéarité relative sur toute la longueur de mon ruban, mais ça reste quand même jouable.

:wink:

Bonjour,

pepe:
Au lieu de tenter d'adapter le capteur à la chaîne de traitement, il vaudrait peut-être mieux s'attacher à adapter la chaîne de traitement à un capteur dont la réponse est connue.

+1
De plus, le fichier tableur utiliser se base sur un potentiomètre à variation linéaire (A) quid de la variation log, en S, etc...
@+

Bonjour,

@Buxi
Compte tenu de ta réaction, je pense que tu n'a pas vu que 31 correspond à 100% du potentiomètre.
31 est une valeur arbitraire maxi que tu peux modifier qui correspond à 100% (même si tu mets 20)
Voir les colonnes N,O,P,Q,R, ...

@pepe OK

@icare
Bien sûr. Ce n'est pas moi qui ait défini le potentiomètre. C'est Buxi.