multiplexer des boutons poussoirs

Bonjour,

je me suis fait une petite station de controle pour un train electrique.
Ca commence à bien fonctionner mais je voudrait faire un pupitre de controle facilement déportable à base de boutons poussoir et de leds.
Je souhaiterai utiliser le moins de fils possible entre l'Arduino et ce pupitre (dans l'idéal moins de 8)

J'ai trouvé une solution pour multiplexer les leds à l'aide d'un controleur d'affichage (eventuellement MM5451) mais je cherche une solution pour multiplexer mes poussoirs (entre 15 et 20)

Ou si vous pensez à une autre solution...

Merci

Je souhaiterai utiliser le moins de fils possible entre l'Arduino et ce pupitre (dans l'idéal moins de 8 )

un MCP23017 va se piloter en I2C et vous donner 16 pins et gère des interruptions ce qui est bien pratique

vous avez une adresse sur 3 bits, donc vous pouvez en mettre jusqu'à 8 sur votre montage, ce qui devrait vous donner assez de boutons :slight_smile:

vous en trouverez sous forme de module tout câblé pour un peu plus d'un euro en Asie
carte.png


(c'est utilisé pour des écrans LCD par exemple)

Adafruit a même une une bibliothèque associée

carte.png

Merci c'est Top!
Je crois que je vais même pouvoir l'utiliser pour les boutons et pour les Leds
reste plus qu'a le programmer!

EDIT: je vois qu'il est quand même limité à 150mA au total, ce qui peut faire trop juste pour 20 leds

Bonjour,

  1. normalement les leds actuelles fonctionnent à 5mA, donc ça convient

0,5) si t'as pas peur, il y une solution avec un module à tlc5947, qui t'éviterait d'utiliser des résistances pour les leds
il en faudra quand-même une pour les boutons. Autre inconvénient, il faudra 4 fils pour le spi et retour des boutons (au lieu de 2 pour l'i2c)

Oui soit tlc5947 ou alors à base de PCA9685 qui vous donne 16 PWM à courant constant. Utilisé pour des servo souvent il peut être utilisé pour des LEDs à anode commune (current sink).

Le PCA9685 est en I2C et aussi chaînable (on peut en associer jusqu’à 62 donc 992 sorties PWM
:slight_smile:

oui aussi, une solution mcp23017 pour les boutons + pca9685 pour les leds, est des + sensées

... je pense à une autre solution : mcp23017 + tlc5947, où les 3 lignes d'entrée du tlc5947 sont commandées par 3 sorties du mcp23017
-> ça me plaît bien, alors j'ai fait un dessin :slight_smile:

je suis parti d'un dessin existant, alors on va du bas vers le haut

  • j'ai mis 8 volts par exemple, dans le cas où l'on dispose d'une alim quelconque, pas forcément régulé ; mais si on a une alim 5 volts cela simplifie encore les choses. Le but est de ne pas utiliser le 5 volts de l'arduino, mais le régulateur intégré au module à tlc5947
  • il n'y a que 4 fils entre la base et le tableau
  • on peut chaîner des tlc5947 et ajouter des mcp23017 si besoin
  • autres avantages du tlc5947, on dispose de 24 sorties pour les leds, et on peut peaufiner le réglage du milliampérage
  • un inconvénient toutefois : pour changer la luminosité d'une led, le travail de l'arduino est conséquent (et peu gratifiant), mais cela ne devrait pas poser de problème de timing pour cette application (je connais assez bien), à condition aussi que l'arduino n'a pas trop de travail par ailleur

Merci pour toutes vos reponses, il faut déja que je me penche de plus prés sur le fonctionnement du bus I2C.

Je ne débute pas en programmation mais je suis complétement newbie sur l'arduino.

dans ce cas il vaut mieux faire au + simple, en laissant le tlc5947 de côté

  • tu peux tout faire en n'utilisant que des mcp23017. Dans ce cas, pour les leds, il faut ajouter des résistances à calculer en fonction de la couleur de chaque led
  • si tu veux la possibilité de varier l'intensité lumineuse par l'arduino, il faut du pca9685. Ici les résistances ne sont pas indispensables, mais je les préconise pour ajuster le courant au mieux, cad. 5 mA au lieu de 9 mA. Elles seront à calculer en fonction de la couleur de chaque led, en tenant compte des résistances déjà présentes sur le module

des bibliothèques i2c, c'est l'avantage d'arduino, existent pour simplifier au maximum la vie du programmateur, mais c'est en effet une bonne chose de se documenter un peu avant

Je me demandais justement si il y'avait un intérêt à passer le signal I2C destiné au MCP23017 à travers le TLC5947(pour la régulation je suppose)

J'ai commandé un MCP23017. je verrais bien si je m'en sors. A priori, si'j'arrive à en faire travailler 1, ça a pas l'air trop compliqué d'en rajouter derriere.

le tlc5947 ne fonctionne malheureusement pas en i2c, mais avec un protocole spécial qui nécessite 3 fils

mon idée c'était d'éviter de rajouter ces 3 fils entre l'arduino et le tableau, en faisant fabriquer les 3 signaux de commande du tlc5947 par le mcp23017 (les 3 flèches sur le dessin) mais la simplification de câblage entraîne une complication du logiciel, qui n'est pas rentable en termes d'heures de travail (ou de loisir), donc on laisse tomber

tu as combien de leds à commander ?

oui, si on avait une idée du nombre de boutons et LEDs - ça permettrait d'orienter le choix.

  • à signaler les modules à SX1509 qui font à la fois commande pwm pour les leds et prise en compte de clavier / boutons
  • on ne peut pas tout avoir, les inconvénient par rapport au tlc5947 sont qu'il fonctionne en 3v3 et qu'il faut des résistances pour les leds
  • mais il a aussi des fonctions comme les "dimming et blinking" qui peuvent être intéressantes, entre autres en modélisme ferroviaire, notamment pour les signaux lumineux

J-M-L:
oui, si on avait une idée du nombre de boutons et LEDs - ça permettrait d'orienter le choix.

J'aurai une douzaine de boutons et 25-30 Leds.

OK oui alors un mcp23017 pour les boutons (16 boutons possibles) + deux PCA9685 pour les LEDs (32 LEDS possibles) ça devrait le faire, les deux sont en I2C

Le MCP23017 a trois broches d'adresse I2C donc on peut en raccorder jusqu'à 7.
Donc cela fait 7 x 16 entrées / sorties possibles.

Si la luminosité des LEDs doit être réglable : SX1509 (16 canaux) ou PCA9685 (16 canaux).
TLC5947 (24 canaux) : pas I2C
Jette un œil aux datasheets.