Capteur interrupteur au signal étrange

Bonjour,
J’ai un capteur de https://www.amazon.fr/images/I/61sn2uMAlsL.SL1200.jpg dans un puits relié à un arduino nano qui donne l’ordre à ma pompe de s’arrêter quand j’arrive à un certain niveau.
Ce capteur ferme le circuit quand le niveau est atteint.
J’ai donc un
dans le setup :

pinMode(capteur_puits, INPUT_PULLUP);

et dans le loop :

if (digitalRead(capteur_puits) == 1)

qui active un relais pour enclencher la pompe.
avec plus loin un

else {...

Bizarrement, quelques secondes après le début du programme, la pompe s’arrête, puis reprend immédiatement pendant 2 sec, s’arrête, puis reprend pendant quelques sec… et ainsi de suite… Comme si des courants parasites étaient détectés sur la pin capteur_puits.
C’est vrai que ce capteur (qui n’est qu’un simple interrupteur) est à 30 m dans une gaine avec d’autres câbles électriques (240 V). Pas impossible qu’il y ait des perturbations…
Comment les filtrer et éviter cela ?
(Je pourrais le faire en soft en vérifiant que le digitalRead(capteur_puits)=0 pendant plus de 10 sec, mais je préférerais le faire avec des composants)
Avez vous une idée ?
Merci bcp !

Ce que je comprends:
Au démarrage la pompe se met en route et remplit le réservoir. Le niveau du réservoir baisse d’un mm et la pompe se remet en route. Il faut 1,9s pour re-remplir le tuyau et 0,1s pour refaire monter le niveau d’un mm, et la pompe s’arrête. Et le cycle recommence.

Si on veut remplir une cuve il faut DEUX capteurs, un pour cuve pleine et un pour cuve bientôt vide. La pompe se met en route quand le capteur cuve bientôt vide le dit et s’arrête quand le capteur cuve pleine le dit.

Avec un seul capteur et des petites vagues dans le réservoir, le capteur unique va délivrer une succession rapide de marche et d’arrêt qui peut endommager le moteur

Bonjour,
J’ai voulu être un peut trop synthétique…
Non, en fait mon capteur est au fond d’un puits. Comme le puits ne donne pas beaucoup d’eau, j’ai fait un système pour pomper l’eau du puits dans un réservoir de 2m3. Néanmoins, je veux quand même garder une petite réserve d’eau dans le puits d’environ 200 litres. Du coup, j’ai mis mon capteur à 80 cm du fond du puits de façon à ce que lorsqu’il détecte que le niveau d’eau descend sous ces 80 cm, l’arduino ferme l’électrovanne de remplissage de la réservoir. (pour l’instant je n’ai pas encore mis de capteur dans le réservoir, j’y vais progressivement :wink: )
A noter que l’arduino ne commande pas la pompe du puits (c’est un surpresseur classique qui déclenche la pompe lorsque nécessaire). L’arduino ne pilote pour l’instant qu’une électrovanne pour remplir le réservoir à partir du réseau d’eau du puits.
Ce qui est étrange, c’est que le capteur dans le puits, renvoie un signal alterné fermé/ouvert toutes les deux à 5 secondes. Je pense que c’est dû à des parasites.
Hier soir, j’ai modifié mon code pour que si le capteur a ce genre de symptômes, c’est-à-dire que le circuit n’est pas fermé de façon franche pendant 10 secondes mini en continu, je ne tiens pas compte du signal du capteur. Mais je trouve que ce serait plus propre de corriger le signal côté électronique…
Merci :slight_smile:

Le problème est le même, il faut aussi un hystérésis dans le puis. Si le niveau est atteint les 80cm, la pompe se met en marche et cela fait baisser le niveau, qui arrête le moteur.

Ce n’est pas dit non plus que le niveau du puis soit fixe.

Si j’ai bien compris le capteur fait un cours-circuit et tu détecte un 0 V.
D’autre part tu as un “Input_pullup” donc si le fil est coupé tu ne détectera pas de O V puisque tu aura toujours + V sur l’entrée et tu pourra pomper alors qu’il n’y a plus assez d’eau.

A Mon Humble Avis il serait préférable de placer une rèsistance de “pull-down”, puisque les micro avr n’en sont pas dotés, et de connecter l’interupteur entre l’entrée et l’alim.

Dans la sécurité le niveau d’alrme est toujours 0 V et le niveau fonctionnel est toujours + V.

D’autre part quelle est la longueur de la liaison filaire et quelle est la nature du fil. Il peut se produire des phénomênes électriques selon les différentes valeurs visibles ou invisibles des composants constituants la liaison.

Oui tu as tout compris :grinning:
Mon interrupteur, lorsqu’il doit arrêter le pompage ferme bien le circuit.
Mais comme j’ai activé la resistance Pullup de l’arduino, j’attends un signal “hight”.

Dans la sécurité le niveau d’alrme est toujours 0 V et le niveau fonctionnel est toujours + V.

Oui, je suis tout à fait d’accord sur cette approche. Je viens de regarder la résistance de pull-down.
En somme, il me suffit

  • de brancher une résistance entre la pin et la masse : comment définir sa valeur ? :thinking:
  • le brancher mon capteur (interupteur) entre le 5V et la pin.
  • de modifier mon code en mettant :
    pinMode(capteur_puits, INPUT);
  • et de garder
    if (digitalRead(capteur_puits) == 1)

La longueur de la liaison filaire est d’environ 30 m en 2x1,5mm² (du câble électrique type RO2V). Dans la gaine, j’ai un autre câble de 3x1,5mm² d’alimentation 240V… Je suspecte celui ci d’être à l’origine des parasites :frowning:
Bien qu’après avoir regarder ces histoires de résistance de pull-down, je me dis que c’est peut-être ça mon problème… je vais donc tester cette piste en premier… Si vous pouvez m’indiquer comment calculer la valeur de la résistance à mettre…
Merci beaucoup

En utilisant un pifomètre étalonné.

Tout dépend du courant que tu acceptes de faire passer quand l’inter est fermé.
Une valeur autour de 10 kohms, qui ne fait consommer que 0,5 mA, devrait faire l’affaire.
Elle forme un bon couple avec un condensateur de 100 nF pour l’anti rebond matériel si tu choisis cette solution.

Le problème est ailleurs.

30 m, c’est déjà de la liaison ‘un peu délicate’.
Je n’ai aucune idée de l’impédance caractéristique de la liaison que tu utilises.
Cela dépend du câble utilisé.

Ne connaissant pas le câble je propose une solution “bateau” qui devrait donner satisfaction :

  1. En sortie d’interrupteur, je mettrais une résistance série de 100 ohms.
  2. En entrée de carte, je mettrais en parallèle entre la pin et la masse :
  • la résistance de “poule daoune” de 10 k : il l’a faut en entrée de carte pour qu’en cas de coupure de câble elle puisse imposer un niveau 0 V.
  • un circuit constitué d’une résistance de 100 ohms avec un condensateur série de valeur >= 100 nF pour charger la liaison de 30 m à basse impédance pendant les transitions.
    Ces valeurs ne seront absolument pas les valeurs optimum, mais comme elles ont de fortes chances de fonctionner il faut tenter le coup.
    Capture_2021_04_25_20_17_58

Le condensateur Cs permet de construire un entrée à faible impédance pour les transitions du signal tout gardant l’entrée en haute impédance (10 k) pour les états stables.

A Mon très Humble Avis un anti rebond logiciel avec 30 m de câble n’a pas sa place ici.
Les personnes originaires de la programmation vont considérer le contraire, perso l’humble électronicien considère qu’un condensateur de 100 nF en parallèle sur le contact de l’interrupteur combattra l’effet des rebonds de manière plus efficace que des lignes de code qui cachent la poussière sous le tapis.
Mais ce n’est que l’avis d’un pauvre électronicien qui n’a pas peur d’ajouter un condensateur.

Probablement d’autres solutions te seront proposés.

Merci 68tjs !

Voilà un post qui me mets sur la piste de nombreux apprentissages qui me seront nécessaires pour mes futurs projets

Pour le pull-down, j’ai compris, nickel merci.

Effectivement avoir 0 par défaut est bien mieux et ça préserve les imprévus (coupure de câble, défaut de connexion…)

Je vais tenter de comprendre la phrase "construire une entrée à faible impédance pour les transitions du signal tout gardant l’entrée en haute impédance " car pour l’instant c’est du chinois lol.

Je suis originaire de la programmation (pour l’instant j’ai résolu mon problème en modifiant mon soft) mais effectivement, je suis tout à fait d’accord avec toi : il faut avoir des données (des signaux) les plus propres possibles. Ca ne fait pas obstacle à ce que l’algorithme prévoie tous les cas et les gèrent, mais ce qui peut être résolu en amont doit l’être.

Merci encore. Je vais tenter d’implémenter cela rapidement et je vous tiens au courant.

Liaison à basse impédance :

Premièrement c’est quoi une entrée numérique ?
C’est une très grande résistance entre pin et masse avec une capacité en parallèle.
Avec les CI Mos on obtient très facilement des dizaines de millions d’ohms

J’utilise le terme “capacité” parce que si ce sont bien des pF ce n’est pas un condensateur que l’on ajoute : c’est un condensateur parasite et qu’il est impossible de supprimer.

Il faut faire la différence entre les transitions et le plat du signal.
Le plat du signal c’est du continu.
Les transitions c’est des fréquences élevées → voir Série de Fourier sur Wikipédia : pour représenter “à peu près carrée” une horloge à 1 kHz il faut transmettre des signaux harmoniques jusqu’à 10 kHz au minimum.

Je t’invite à voir sur wikipédia la charge d’un circuit RC.
Tu verras que ce qui compte, c’est la constante de temps T = R x C.
Les valeurs de capacités parasites sont faibles, de 2pF à moins de 10 pF, mais comme la résistance d’entrée fait plusieurs millions d’ohms le produit R x C n’est pas négligeable.

Plus la constante de temps est élevée et plus les fréquences élevées seront affaiblies et les transitions des signaux qui contiennent ces hautes fréquences seront écroulées.
Un signal carré à l’émission se transforme en une patate informe à la réception.

Que fait le circuit RC série en entrée ?
Condensateur de 100 nF : du fait de sa “forte” valeur une fois chargé il ne bouge plus et il se comporte comme un court-circuit pour les transitions → c’est que l’on cherche : isoler la résistance de 100 ohms sur le plat mais l’activer sur les transistions.
Résistance de 100 ohms : “Pour les transitions” elle se retrouve en parallèle avec la résistance d’entrée (disons 10 Megohms) → le résultat fait 100 ohms.
Conclusions : pendant la transition la capacité parasite de 2 à 10 pF ne verra plus 10 Megohms en parallèle, mais 100 ohms → les transitions haut vers bas et bas vers haut seront plus propres.

La réalité est plus complexe, on préfère utiliser des câbles "adaptés : 75 ohms pour la télé, 600 ohms pour le téléphone, 100 ohms pour l’ethernet.
Pour ton projet qui a des besoins très simples je suis persuadé que le câble électrique que tu as choisi conviendra, c’est juste pour ton information personnelle.

Bonjour !
Bonne nouvelle, le petit montage électronique comme indiqué fonctionne à merveille !!! :partying_face:

Je n’ai pas encore tout bien compris sur cette histoire d’impédance, mais je vais y regarder de plus près.

Par contre, concernant le capteur dans le puits, celui-ci ferme le circuit quand il n’y a plus d’eau et l’ouvre quand il y en a assez. Ce type de capteur m’empêche donc de concevoir mon circuit de façon sécurisée pour que si le câble venait à être coupé, il empêche le pompage (enfin l’ouverture d’une électrovanne, heureusement, la pompe est commandé par un flotteur approprié et j’ai encore une marge entre mon capteur et le flotteur de la pompe ;-))
Pour être plus propre, j’aurais donc dû prendre un autre capteur (inversé du coup).
Merci encore… j’aurai sans doute d’autres questions sur ces histoires de câbles pour fiabiliser le signal, mais je ferai un autre post :wink:

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.