Gérer 2 contacts secs pour compter

Bonjour !

Après moult hésitation, je me décide enfin à faire quelques projets en Arduino (Je programme déjà en C).

Actuellement, dans le cadre de mon travail, je voudrais ajouter un "compteur" à une machine.

Sans trop décrire (Parait-il que c'est secret défense !), imaginez deux boutons qui envoient un contact sec. Mon but est simple que l'un ajoute un +1 sur un integer et l'autre -1.

Ma question est la suivante :

Comment permettre à l'Arduino d'interpréter le contact sec pour qu'à sa "réception", il fasse un simple +1/-1 ?

J'ai pu lire, après une recherche Google, des gens parler de Mosfet. Est-ce une solution ? Serait-il possible d'expliciter ce que fait le Mosfet et son interaction avec l'Arduino ?

Désolé si ça semble simple, bien que j'ai déjà programmer, je n'ai jamais toucher à de l'électronique !

Merci d'avance :slight_smile:

Que veux-tu dire par "deux boutons qui envoient un contact sec" ? (tu peux y aller, je suis habilité SD :slight_smile: )

Tu peux trouver ici un exemple de sketch qui allume ou éteint une led grâce à un bouton poussoir. Ici, un tuto sur l'utilisation des boutons poussoirs avec l'explication du mode INPUT_PULLUP qui est bien pratique.

Si tu fais déjà du C, tu sauras t'en inspirer pour reconnaître le bouton enfoncé (si tu en utilises deux) et selon le cas incrémenter ou décrémenter ton compteur.

Il faut faire attention au mécanisme de rebond, expliqué ici et qui peut être géré de plusieurs manières (logicielle ou matérielle)

Le soucis n'est pas ta capacité à comprendre, c'est la mienne :stuck_out_tongue: Je travaille avec des électriciens mais ils ont dût beaucoup me vulgariser la chose, je ne suis que le programmeur et j'ai des connaissance en électronique niveau collège !

Ce serait plus des capteurs de mouvement (Qu'on appellera X et Y) reliés à une machine, qui a sa propre "carte-mère" fournie par le distributeur tiers.
Lorsque l'on passe devant l'un d'entre eux, la carte du système embarqué renvoi un contact sec très bref.

Il faudrait que l'Arduino détecte ce contact sec pour faire un bref +1 pour le capteur X et -1 pour le capteur Y. Le but final étant d'allumer des Leds différente en fonction du nombre enregistrer par le compteur, mais sur cette dernière partie, j'ai trouver assez de documentation.

Ma question est plus : Quelle interface utiliser pour que l'Arduino reconnaisse le contact sec comme un signal ?

Si je comprends bien, ce que tu appelles un contact sec est une impulsion de tension d'une courte durée ?

Si oui, il faut savoir si l'impulsion passe de 0 à une tension donnée, puis revient à 0, ou si c'est le contraire.
Ensuite, un Arduino ne peut pas recevoir de tension négative : il faut une valeur entre 0 et VCC, la tension de fonctionnement de l'Arduino (5V ou 3.3V selon le modèle : quel modèle utilises-tu ?). Si la tension dépasse cette valeur, elle peut abimer l'Arduino : il faudra la limiter, donc revoir tes cours de collège...

Pour détecter cette impulsion, on peut l'assimiler à un signal numérique et la détecter avec une broche (GPIO) numérique et une instruction simple : digitalRead permet de lire la valeur binaire (0 ou 1, soit GND ou VCC) en entrée de cette broche. Donc pas de souci de ce côté.

Il faut juste que tu saches ce qui arrive sur l'Arduino.

Merci pour ça. A priori ça serait une tension de 5V en courte durée. Actuellement je n'ai pas de modèle d'Arduino précis, je peut commander à peu près le modèle de mon choix, il me faut juste tout les détails de la commande en une fois (modules compris)

Effectivement, la tension va passer de 0 à 5V pendant ~1sec puis revenir à 0.
Donc si le câble qui délivre cette tension passe par une broche GPIO ça serait suffisant à le détecté ? Ca m'arrange parfaitement ça, merci !

Il faut être sûr que tu n'auras pas de "bruit" ou de parasites sur ta ligne qui puisse être pris par l'Arduino comme un signal.
Veux-tu détecter le front montant ? Ou bien l'impulsion de longue durée (une seconde c'est long) et te baser aussi sur le front descendant ? As-tu une contrainte de vitesse pour ajouter ou enlever 1 à ton compteur ?

Est-ce qu'il est possible qu'une impulsion "+1" arrive pendant la durée d'une impulsion "-1" ?

Si tu as des tensions de 5V, autant utiliser un Arduino qui les supporte : un Uno ou un nano par exemple. Ca se trouve pour 2-3€ en Chine si tu peux attendre un mois pour la livraison.

Je comptais, à priori, prendre l'Uno. C'est l'entreprise qui payera donc ça sera à elle de choisir où se fournir, je suppose !

Je n'en aurais pas car le système de base est prévu pour fonctionner sans bruit. C'est juste qu'au lieu d'utiliser la seconde carte, qui gère une action, nous utiliserons l'arduino pour gérer cette même action plus une autre.

Il ne peut pas y avoir de +1 et de -1 en même temps

Je n'aurais besoin que du montant et je n'aurais aucune contrainte de vitesse.

En contact sec est par définition un contact à fermeture ou ouverture sans potentiel. dans la pratique, il s'agit des contacts d'un relais.
Cela offre une isolation galvanique entre l'automate qui fourni le contact sec et le monde extérieur.

il faudra considérer ce contact sec comme un bouton poussoir standard et le connecter à l'Arduino soit avec un pullup soit une pull down.

Par contre s'il s'agit d'une impulsion de tension, il faudra utiliser un optocoupleur pour conserver ou créer cette isolation galvanique.
il existe plein de montage pour cela.

Bonne bidouille.