Utiliser un interrupteur à 3 positions sur 1 broche analogique

Bonjour à tous,

Pour un projet, j’essaye de brancher un interrupteur à 3 positions distinctes sur une seul broche analogique à l’instar d’un potentiomètre grâce à 3 différentes résistances.

D’après moi cela devrait me donner 3 valeurs analogiques bien différentes et donc permettre à mon programme de reconnaître la position de l’interrupteur.

Cependant ça ne fonctionne pas comme ça, en position off (pas sur le schéma ducoup) il n’y a bien rien, mais dans les 3 autres position la valeur analogique est à peu près la même alors que les résistances ne sont pas les mêmes....

Auriez vous une lanterne pour éclairer mon problème ??

Merci :slight_smile: :slight_smile:

Bonjour
Schéma indispensable pour montrer le raccordement de l'interrupteur, des résistances et de l'entrée analogique.... Sans cela ce n'est pas la lanterne mais la boule de cristal qu'il faut sortir

Je n'étais pas sur le PC pour envoyer le schéma

int sensorPin = A1;   
int sensorValue = 0; //Valeur brute lue 



int outputValue = 0; // valeur transformée


void setup() 
{


Serial.begin(9600);


}


void loop()
{




sensorValue = analogRead(sensorPin);


// map it to the range of the analog out:


outputValue = map(sensorValue, 0, 1023, 0, 3);
 // change the analog out value


Serial.print("sensor = ");

Serial.print(sensorValue);

Serial.print("\t output = ");

Serial.println(outputValue);



// wait 2 seconds before the next loop for the analog-to-digital

// converter to settle after the last reading:

delay(2000);





}
[\code]

Dans http://image.dfrobot.com/image/data/DFR0009/LCDKeypad%20Shield%20V1.0%20SCH.pdf vous avez un diviseur potentiomètrique composé de 5 resistances (R2 à R6) que 5 interrupteurs (des boutons; mais de vrais interrupteurs ou un commutateur fonctionnerait aussi bien) relient à la masse.
Nota : une fois que vos resistances sont fixées, vous n'avez pas besoin d'utiliser "map": la valeur du CAN (ou un petit intervalle, pour lutter contre le vieillissement) suffit amplement.
Edit: j'ai vu votre code: rien ne vous oblige à faire l'hypothèse que les valeurs données par le CAN sont une fonction linéaire du noméro de la position: il vous suffit (3 tests par if ... else) de trouver -empiriquement - les intervalles vraisemblables pour les 3 positions de votre commutateur)

dbrion06:
Dans http://image.dfrobot.com/image/data/DFR0009/LCDKeypad%20Shield%20V1.0%20SCH.pdf vous avez un diviseur potentiomètrique composé de 5 resistances (R2 à R6) que 5 interrupteurs (des boutons; mais de vrais interrupteurs ou un commutateur fonctionnerait aussi bien) relient à la masse.
Nota : une fois que vos resistances sont fixées, vous n'avez pas besoin d'utiliser "map": la valeur du CAN (ou un petit intervalle, pour lutter contre le vieillissement) suffit amplement.
Edit: j'ai vu votre code: rien ne vous oblige à faire l'hypothèse que les valeurs données par le CAN sont une fonction linéaire du noméro de la position: il vous suffit (3 tests par if ... else) de trouver -empiriquement - les intervalles vraisemblables pour les 3 positions de votre commutateur)

Il faudrait donc que je modifie mon montage pour que le courant passe par toutes les résistances en position 3, 2 résistances en position 2 et 1 seule résistance en position 1 ?
Je ne vois pas la différence que ça peut apporter mais je vais essayer .. Merci

Bonjour,

Vu la très faible impédance de l'alim 3.3V tu dois toujours avoir la même valeur de 3.3V sur l'entrée analogique.
Il faut que tu fasses un diviseur de tension par exemple en mettant une resistance de 4.7k sur le GND (ou sur le 3.3V).

Voilà le schéma


Sur ce schéma l'entrée analogique est en permanence à la masse......
Comme indiqué plus haut il faut réaliser un pont diviseur qui change de rapport selon la position du commutateur

"Il faudrait donc que je modifie mon montage pour que le courant passe par toutes les résistances en position 3, 2 résistances en position 2 et 1 seule résistance en position 1 ?"

Oui, pour faire un diviseur potentiometrique (en passant, je salue la bonne idée que vous avez eue d'utiliser le 3v au lieu du 5v, qui pose problème (les DUE sont chers) avec le DFRrobot lcd keypad shield : un exemple de gestion des boutons (dans leur cas) est disponible en LCD_Keypad_Shield_V2.0_SKU__DFR0374-DFRobot et ne présente aucune difficulté de lecture, ni d'adaptation.

Voilà une possibilité, valeurs de résisances arbitraires
3posdiv.png

3posdiv.png

Si le commutateur est en d, vous aurez 1024/2 en sortie du CAN -> un intervalle de 300-600
c 0.7*1024 == ca 720 en sortie du CAN -> un intervalle de 601 750
" " " " " b 785 en sortie du CAN -> un intervalle de 751 - 800

(ou je ne câblerais pas R3.... la rendant infinie et renvoyant 1024 en sortie du cAN)
Edité: ne pas câbler R3 est peut être une mauvaise idée: lors de la rotation du commutateur, il est possible que l'on ait un circuit ouvert entre deux positions; mettre des intervalles protège contre cet etat parasite)

j'ai cru comprendre qu'en fait le commutateur de Tasttcoole est un "3 positions +1", avec une 4ème position 'Off' (message #1) mais 'dans le temps que je me suis imparti" je n'ai pas trouvé le symbole......la 4eme pourrait être le 1023

Pont diviseur de tension ?

Je vais essayer cette solution ce soir mais en quoi diviser la tension passant par chaque interrupteur changera quelque chose ? Ça sera proportionnellement la même chose non?
En sachant que le serial m’affiche 388 (environ )

kamill:
Bonjour,

Vu la très faible impédance de l'alim 3.3V tu dois toujours avoir la même valeur de 3.3V sur l'entrée analogique.
Il faut que tu fasses un diviseur de tension par exemple en mettant une resistance de 4.7k sur le GND (ou sur le 3.3V).

Ça fonctionne :smiley:
j’ai juste rajouter une résistance (2k6, c’est tout ce que j’avais sous la main ^^)

Et tout roule, 142, 350 et 619 pour les 3 positions, je vais prendre en compte vos conseils et d’ailleurs sur mon schéma je l’avais branché en 5V et vu les remarque je vais ducoup passer en 3,3 pour l’interrupteur :slight_smile: (et oui il y a effectivement une quatrième position « off » qui est à 0).

Merci à tous pour votre aide :smiley:

Tastycoole:
j’ai juste rajouter une résistance (2k6, c’est tout ce que j’avais sous la main ^^)

La résistance n'est pas critique.
J'avais préconisé 4.7k car elle est proche de la moyenne des 3 résistances qui donne en principe le plus grand écart entre les trois valeurs, mais une autre résistance de l'ordre de 2 à 5k convient aussi.

Que se passe-t-il quand vous tournez votre commutateur? Parce qu'il peut y avoir des positions qui correspondent à des valeurs loufoques ou faussement realistes (passage en circuit ouvert) entre deux positions stables (et votre logiciel peut il s'en accommoder)

brancher un interrupteur à 3 positions distinctes sur une seul broche analogique

dit comme-ça, sans autre contexte, 2 résistances suffisent

le dessin ne représente pas un inter à 3 positions mais un triple interrupteur simple, c'est pareil pour vous ?

Ce n'est pas un interrupteur, c'est un commutateur rotatif.... (en plus, il a 4 positions, dont une "OFF" qui est évoquée dans le texte... et traitée)

oops, je n'ai regardé que les schémas (où aucune 4ème position n'apparaît)

J'avais fait la même erreur (m'amenant à envisager une résistance ... infinie...)