Go Down

Topic: abaisser la valeur d'un signal [RESOLU] (Read 2749 times) previous topic - next topic

pouic13

May 28, 2013, 05:41 pm Last Edit: May 29, 2013, 03:37 pm by pouic13 Reason: 1
Salut

Je dispose d'un shield LCD dfrobot avec les 5 boutons sur la pin analogique 0 et d'un capteur lm35.

Mon souci et que pour avoir une valeur correct avec mon lm35 j'utilise la référence interne de l'arduino environ 1V alors que les boutons eux me renvois une tension comprise entre <4,5V et 0,1V.

Je me retrouve avec seulement 2 boutons qui réponde leur valeur étant proche de 1V.

Es que je peux abaissé mon signal? si oui comment?
Ou y a t'il une autre méthode (sachant que je veu garder la référence interne de l'arduino)?

Merci.

B@tto

Aucun rapport entre la ref analogique et une lecture digitale
Blog électronique : battomicro.wordpress.com
Photographie : www.interactive-celebration.fr
Fablab de Montpellier : www.labsud.org

68tjs

#2
May 28, 2013, 06:30 pm Last Edit: May 28, 2013, 06:32 pm by 68tjs Reason: 1
Qu'est ce que tu veux faire ?
D'après le peu que tu dis on peut s'autoriser  à comprendre que tu veux raccorder les boutons aussi sur des pins comprises entre A0 et A5.

Si tu accepte de faire l'effort de lire la datasheet du micro-controleur tu verra que selon la façon dont on les active ces pins peuvent être aiguillée soit vers un port digital classique (donc 0/+5V sans problème) soit vers le multiplexeur en entrée du Convertisseur Analogique/Digital que tu as configuré pour avoir sa référence à 1V +/- 10%.

En résumé  un ordre :
DigitalRead(Ax) ou DigitalWrite(Ax)  configure Ax en port digital classique.
AnalogRead(Ax) configure Ax en entrée analogique.
Edit : et bien sur chaque entrée Ax est indépendante des autres.

Quant à abaisser un signal c'est bien sur possible, recherche avec ces mots "pont résistif" ou "pont potentiométrique" et tu trouvera toutes les informations dont tu as besoin.

Tu as un exercice pratique à faire qui te sera utile pour étalonner la référence interne :
Principe
- Tu place un potentiomètre entre le 0V et le 5V (si possible un multitour ce sera plus souple à régler)
- Avec un voltmètre tu règle le potentiomètre pour obtenir 0,8V entre la masse et le point milieu
- Tu relie à une entrée analogique
- Tu fait une acquisition et tu compare la mesure de l'arduino à celle du voltmètre qui dans ce cas est considéré comme l'étalon.
Pratique
On ne se contente JAMAIS d'un seul point de mesure qui peut être faux. Il faut faire au moins 3 mesures 0,6V; 0,7V ; 0,8V.
Soit on fait la moyenne, soit on trace la courbe et on interprète graphiquement.

pouic13

Voici le module LCD que j'ai actuelement : http://www.dfrobot.com/wiki/index.php?title=Arduino_LCD_KeyPad_Shield_%28SKU:_DFR0009%29

avec ce module les boutons sont tous connectés sur la pin analogique 0, pour les différencier ils utilises un résistance propre à chaque bouton. On lit la valeur reçu a la pin A0.

Par exemple avec la reférence neutre de l'arduino pour le bouton SELECT je lis 741, si aucun bouton n'est appuyer j'ai 1023, pour GAUCHE je lis 506 tous ça sur la pin analoique 0.

mon souci c'est que lorsque j'utilise le lm35 je souhaite avoir une résolution maximal donc je paramètre l'arduino sur ça réf interne.

Lorsque je lis ma pin A0 les valeurs ne sont plus du tout pareil elles sont trop élevées pour rapport à ma référence interne.



infobarquee

bonjour,
quelle lib utilise tu?
tu peux utiliser soit la lib liquidcrystal ou LCD4Bit_mod (exemple avec une sonde temp dedans)
quelle pin analog utilise tu pour le lm35?

dans la 48 les valeurs sont celles ci
int  adc_key_val[5] ={30, 150, 360, 535, 760 };
AUCUNE AIDE PAR MP

B@tto

Ca ne changera pas grand chose je pense, le problème étant la limitation induite par le choix de la ref analogique.

Je ne sais pas si c'est possible sur le shield mais une solution serait tout simplement d'alimenter les pont diviseurs en 1V et non en 5V
Blog électronique : battomicro.wordpress.com
Photographie : www.interactive-celebration.fr
Fablab de Montpellier : www.labsud.org

68tjs

Les 5 boutons sont sur la même pin A0 et l'identification se fait par le niveau.
Il est possible de recalculer les résistances pour que les niveaux renvoyés par les boutons restent en dessous de 1V.
Il faut 5 niveaux entre 0V et 1V soit des pas de 166mV -> il ne faut pas que les signaux soit bruités, attention à bien gérer la masse.

Autre solution tu conserve la référence sur 5V.
Quand tu mesure le lm35, par programmation tu passe la référence à 1,1 V et tu la re-commute en 5V juste après.
Il faut éviter de valider un appuis sur un bouton pendant la lecture du lm35 sinon n'importe quel bouton sera reconnu comme étant le bouton 1. Avec un drapeau bien placé pendant la lecture du LM35 il ne devrait pas y avoir de grosse difficulté.

fdufnews

Si tu regardes le schéma de ton shield sur le site de dfrobot, tu vois que les boutons sont montées sur une série de résistances qui constituent un pont diviseur.
Il suffit de remplacer la résistance R2 de 2k qui va au +5V afin de limiter la tension sur AD0 à moins de 1V. Je suggère quelque chose comme 27k ou 33k. Cela devrait donner un comportement sensiblement similaire à ce qui se passe lorsque la référence est de 5V

pouic13

Merci pour vos réponses.

Dommage quelles ne m'enchante guère lol.

Ma première solution été la même que B@tto c'est à dire alimenter directement les boutons avec du 1V.(peu de modification sur le circuit et compatibilité assurée)

Mais cela implique de toucher au shield comme tous ce que vous me proposez et bon... si je peu éviter.

Aussi mon code est assé long et un peu tordu lol je voudrais éviter donc de basculer ma référence en permanence 68tj (je le note dans un coin quand même).

On ne peu pas utiliser un genre de montage en suiveur de tension qui abaisserait mon signal de sorti avec un transistor ou un ampli?





haifger

Effectivement, pour conditionner le signal venant des boutons tu risque d'être obligé de physiquement modifier ton shield, ce qui peut paraître un peu extrême.

En fait je pense que tu prend le problème à l'envers, plutôt que d'agir sur les boutons, c'est sur le signal du LM35 que tu devrais agir, et abandonner l'idée d'utiliser la référence à 1.1V.

Comme ça à chaud je vois 2 solutions :

  • Si le signal provenant du capteur est un peu bruité, tu peux appliquer des techniques de suréchantillonage. En simplifiant, tu peux gagner 2 bits de résolution en prenant 16 mesures au lieu d'une seule. Grosso modo cela veut dire que tu retrouve la même résolution qu'en utilisant la ref interne à 1.1V. Important: le signal doit être légèrement bruité pour que cela fonctionne.

  • Utiliser un amplificateur opérationnel avec un gain de 4 ou 5. Suivant les caractéristiques de l'opamp et des résistances utilisées pour fixer le gain, il te faudra toutefois recalibrer le système.

Rien n'empêche de combiner les deux approches d'ailleurs.

fdufnews


Mais cela implique de toucher au shield comme tous ce que vous me proposez et bon... si je peu éviter.

Enfin changer une résistance c'est pas la mer à boire

pouic13

Quote
Enfin changer une résistance c'est pas la mer à boire


En général non mais la il faut dessouder l'écran c'est pour ça que je ne voulais pas.

Bon en tout cas ça marche.

Go Up