Bouttons et résistances

Salut à tous,

je suis en train de construire un panneau d’affichage pour mon club de sport (Bike Polo)

J’ai codé tout ça en python

Le panneau se compose d’un display de 4 chiffres pour le chrono et de 2 chiffres pour les goals
Tout est controlé par un panneau avec LCD de monitoring et plusieurs boutons pour :

  • démarer le script
  • choisir le temps de jeu
  • remettre à zéro le temps et les goals
  • ajouter et supprimer des goals aux équipes ( à droite et à gauche)

Apres pas mal de petits problemes qui ont été réglés , je suis en train de voir le projet aboutir.

J’ai pas mal prototypé sur la breadboard et maintenant j’ai tout connecté dans la boite.

J’ai ( et j’ai eu aussi avec la breadboard) des problemes avec mes boutons…

Il réagissent plutot bien mais de temps à autres, lorsque j’actionne un bouton, d’autres fonctions sont activées.

Exemple : je stoppe le temps ( ça met bien le timer sur pause) MAIS des goals peuvent etre ajoutés… ou alors je fais un reset MAIS le temps de jeu change…

Au début je pensais que c’était du à la mauvaise quallité de ma breadboard et qu’il devait y avoir des faux contacts ou que sais je…

Aujourdhui que je me penche plus sur la question, j’ai lu qu’il fallait peut etre placer des PULL UP RESISTORS…

Mais je ne comprends ni ou les placer ni lesquelles mettre ?

J’utilise autant des boutons poussoirs que des switch on/off… et le résultat est le meme :frowning:

Qu’en pensez vous ?

Voici le code : GitHub - clemsy/poloboard: A scoreboard for Bike Polo, written in python for a Raspberry Pi

Salut,

Quand tu changes l’état d’une entrée sur le GPIO les autres ports que tu crois non utilisées peuvent légèrement changer d’état. C’est pour cela que l’on met des résistances de pull-up (ou pull-down).

Il faut s’imaginer pour comprendre qu’il n’y a qu’un volume « fixe » d’électricité pour mesurer tout ça, donc la carte « tire » un peu de courant ailleurs quand tu lui demandes quelque chose, les comportement aléatoires qui suivent sont des grands classiques des cartes d’entrées/sorties, des bus 1-wire ou autres… :expressionless:

Pour cela on met un grosse résistance ( de plusieurs kilo-homs, 4.7k ou 10k) entre l’entrée et le potentiel qu’elle doit avoir à l’état repos.

exemple :

  • une entrée vide est au potentiel 0, donc en théorie égal au 0VDC de la carte. Si tu as d’autres entrées qui passent de +5V à 0V sur le GPIO, tu peux te retrouver facilement avec quelques mV qui « remontent » sur cette entrée et qui activent l’entrée alors que tu n’as pas appuyé sur le bouton.

Pour cela, on met une résistance (de pull-down) entre l’entrée et le 0VDC. Ainsi, si ton bouton n’est pas appuyé et qu’un courant non désiré traine, on « force » l’entrée à 0.

Quand tu appuies sur le bouton, tu mets un franc +5V sur ton entrée ! Yalahhhhh, ton entrée s’active ! :star_struck:
Ouaip, effectivement tu vas me dire, il en part un peu par la résistance (pas faux, mais 5v/4.7k = vraiment pas beaucoup et pas assez pour créer des disfonctionnement sur ton installation)

  • autre exemple :
    ton circuit est câblé en normalement branché, et ton capteur (ou ton bouton) coupe le fil pour signaler l’action.
    Pareil, mais on met la résistance entre le port et le potentiel +5V, c’est alors un pull-up.

En espérant que cela t’auras aidé

NB :

  • je n’ai pas regardé ton code, ça ne devrait pas venir de cela
  • tu peux aussi « filtrer » tes entrées, en ne prenant en compte le changement d’état seulement après 200ms d’un changement maintenu par exemple pour supprimer encore mieux les parasites