compteur à eau à impulsion et interrupteur reed - branchement?

Bonjour,

Je viens d'acheter un compteur à eau (gianola) à impulsion (1 impulsion=1 litre).

En attendant de me faire livrer je prépare donc la partie Arduino de mon projet, c.a.d compter les impulsions.

Je vais utiliser la fonction attachinterrupt pour compter chaque impulsion.

J'ai un doute sur le branchement : je crois comprendre que je dois envoyer un courant faible dans l'interrupteur afin de détecter un on/off sur un port digital (une interruption donc).

j'ai réalisé le schema suivant avec succès avec un bouton simulant mon interrupteur reed.

Ai je raison de penser qu'il me suffira de remplacer mon bouton par un reed (le gnd sur une patte, la résistance sur une autre patte) ?
Ma crainte étant de cramer mon reed : j'ai lu ici et la que le reed peut rester coller définitivement en cas de mauvais branchement.

Ci dessous mon code (version simplifiée).

Mon port digital 3 est tout le temps high, sauf quand j'appuie sur le bouton ou il passe alors en low, déclenchant une interruption.

int last=0;
int SWITCHPIN=3;

void setup() {
pinMode(SWITCHPIN, INPUT);
attachInterrupt(1, wakeUpNow, LOW);
}

void wakeUpNow(){ 
if (millis()-last>10) {
last=millis();
//do something
}
}

Merci pour ce retour.

En effet, la led sans resistance c'est pas top.
Je l'ai branché sur le digital 13 et je l'ai mis en HIGH (réduisant ainsi sa tension à 1.7v...).

Pour le input_pullup, merci pour l'info : je ne connaissais pas ce mode.
Il faut que je vois l'impact sur ma logique (high vs low).

De manière générale, confirmes tu qu'il faille envoyer un courant faible dans l’interrupteur reed pou détecter les impulsions sur mon digital 3? et ce depuis le pin 5v de mon arduino ?

/Erwan

Bonjour,

Mon projet est en place (compteur, arduino sur le compteur, et récupération des données de l'arduino via ethernet/http).

Cela marche : si je tire un litre, ça compte un litre...

Mais ... je me rends compte que même sans activité je vois passer entre 2 et 4 litres par heure.
J'ai d'abord cru à une fuite cachée mais ce matin en coupant mon arrivée d'eau juste avant le compteur, mon arduino continue d'incrémenter mon total :frowning:

Ci dessous mon schéma.
Je gère mon interrupt en mode FALLING (HIGH par défaut, LOW quand l'interrupteur reed se ferme).

Une idée de pourquoi mon arduino déclencherait des interruptions sans raisons?

A noter que sur mon arduino j'ai un shield ethernet+sd.
Ce pourrait t il que ce shield déclenche des interrupt sur le pin 3? (j'interroge en http tous les 5 mns).

Merci,
Erwan

Si les fils sont longs, tu peux être perturbé par l'environnement (signaux parasites générés par un frigo, un éclairage, ou par un téléphone sans fil)
Quelques remèdes en vrac (on peut les cumuler):

  • Baisser la valeur de la résistance de tirage au plus. Tu pourrais l'abaisser à 470 Ohms sans préjudice pour l'ILS.
  • Torsader entre eux les fils de la liaison vers l'ILS
  • Placer un petit condensateur entre l'entrée D3 et la masse (quelques nF au plus près de la carte suffisent largement)

Eviter de faire passer la liaison près de câbles véhiculant de la puissance.

fdufnews:
Si les fils sont longs, tu peux être perturbé par l'environnement (signaux parasites générés par un frigo, un éclairage, ou par un téléphone sans fil)
Quelques remèdes en vrac (on peut les cumuler):

  • Baisser la valeur de la résistance de tirage au plus. Tu pourrais l'abaisser à 470 Ohms sans préjudice pour l'ILS.
  • Torsader entre eux les fils de la liaison vers l'ILS
  • Placer un petit condensateur entre l'entrée D3 et la masse (quelques nF au plus près de la carte suffisent largement)

Eviter de faire passer la liaison près de câbles véhiculant de la puissance.

j'ai un congélateur juste à coté (environ 1m) et une chaudière juste au dessus (1m aussi).
le fil fait 2 mètres.

je vais tenter la résistance et/ou le condo : merci pour ce conseil !!

pour le condo, le schema ci dessous est t il juste?

est ce que du coup mon D3 n'est pas directement à la masse? le placant en low?
alors que je le veux eh high par defaut?

Sinon j'avais pensé à la possibilité ci dessous mais cela va a l'inverse de ce que préconise fdufnews.

Bon, je suis parti sur la solution avec condo à la masse (10nf) : aucun changement.

J'ai ensuite changé ma résistance de pullup de 4700 à 470, et la à priori c'est bon.

Je laisse tourner une nuit et je pourrais ensuite consulté mon historique.

EDIT : fausse joie, j'ai déjà 3 interruptions alors que rien ne tourne :frowning:

Je suis un perdu.

Si je laisse mon montage tourner dans mon bureau (donc pas branché au compteur) : pas d'interruptions pendant une heure (normal !). Donc r.a.s ici.

Si je laisse tourner mon montage dans le garage (branché au compteur) : des interruptions, même arrivée d'eau coupée.
A noter que la nuit dernière mon montage était dans une boite entourée d'allu (faraday?) pour éviter des perturbations extérieures et cela n'a rien changé.

Je fais maintenant le test suivant : montage dans le garage mais pas branché au compteur.
2 possibilités :
-Si j'ai des interruptions, mon montage est donc sensible à une perturbation extérieure.
-Si je n'ai pas d'interruptions, c'est mon compteur à eau qui ne fonctionnerait pas correctement donc.

Pourtant le principe est super simple : un câble avec au bout un interrupteur reed vient s'enficher dans le compteur et se ferme a chaque litre (une rondelle tourne avec un aimant fixée dessus).
J'ai du mal à comprendre comment cela pourrait déclencher des interruptions aléatoires.

Bon a priori cela venait de mon code.

Je partage donc mon expérience ici au cas ou.

Au départ j'attachais mon interrupt sur un FALLING (HIGH tout le temps, LOW lorsque le reed est fermé).
Et bien a priori de temps en temps, l'arduino détecte un FALLING sans raison apparente (sans doute des perturbations extérieures) et ce environ 2 à 4 fois par heure.

J'ai donc opté pour un attachinterrupt sur un CHANGE ce qui requiert un peu plus de logique qu'un simple water+=1;

Je pensais même avoir besoin de contrôler la longueur de l'impulsion (variable pulse) pour exfiltrer les mauvaises impulsions mais à priori pas besoin : le code ci dessous (et en particulier la variable change) suffit pour l'instant.

void setup() {
attachInterrupt(1, IntChange, CHANGE);
}

void loop() {
if (change==true) {
    change=false;
    Serial.print("pulse=");Serial.println(pulse);
    water+=1;
  }
}

void IntChange() {
 if (digitalRead(SWITCHPIN)==LOW) {
  start=millis();
  change=false;
} else {
  if (start>0) {
    pulse=millis()-start;
    start=0;
    change=true;
  } else {
    start=0;
    change=false;
  }//if (start>0)
} //if (digitalRead(SWITCHPIN)==LOW) {
}

Bonjour
Pouvez vous poster le schéma.
J'aimerais installer ce compteur d'eau.
Merci

Bonjour erwanl

J'ai le même problème que tu avais : des interruptions aléatoires et donc un mauvais comptage.
Aurais-tu donc trouvé la cause exacte? Merci d'avance :wink:

Bien cordialament

Bonjour Isabelle,

La cause exacte : des interférences (magnétiques je pense).
J'ai un congélateur et une chaudière à moins d'un mètre de mon montage.

La solution : un condo n'a pas résolu le problème du coup j'ai revu mon code (voir mon poste précédent).

La solution tourne bientôt depuis 18 mois à présent : jamais eu un pb et mes valeurs correspondent à quelques litres près à mon compteur extérieur.
Le tout branché sur ma solution domotique (requêtes http depuis mon rpi+jeedom).

Je suis très content de cette solution qui ne m'a pas coûté bien chère et réalisée par mes soins :slight_smile:

Cordialement,
Erwan

Bonjour Erwan,

Merci beaucoup pour ce tutoriel vraiment très simple.
J'aimerais faire comme toi pour la simplicité de la réalisation.
Ça fait un moment que le post existe, mais je tente quand même.

Étant plutôt novice en la matière il y a quelques points qui m'échappe :

  • Où est-ce que tu branches les fils qui arrive du compteurs d'eau (il me semble qu'il y en a 2) sur ton schéma ?
  • Et à quoi sert la led brancher sur la pin8 (elle n'apparaît pas dans ton code ?)

Si tu pouvais me débloquer, ça serait génial !
Merci beaucoup.
Cordialement.

ThomasR

RESOLU :-----)

Bonjour,

Quelques infos supplémentaires pour mener à bien ce projet.
Je viens d'installer un compteur d'eau à impulsion que j'ai branché sur le même principe que vous à l'arduino.
Comme vous j'avais des perturbations, il y avait une cinquantaine de litres en plus par jour qui partait dans le vent, alors que cela ne correspondait en rien à ma consommation réel.

En cherchant, j'ai compris que ces perturbations étaient bien matériel, et qu'elles étaient liées essentiellement aux petites entrées de l'Arduino chaotiques et bien incertaines et qu'il faut absolument dompter pour obtenir quelque chose de stable.

Pour ça deux solutions, Matériel et/ou Logiciel :

MATÉRIEL :
Rajouter un petit condensateur de 10μF en parallèle avec l'interrupteur Reed (les deux fils du compteur d'eau). Cela permettra d'éviter les sursauts en montagne russe, au moment du contact électrique et viendra lisser parfaitement le courant comme un tampon. Déjà avec ça on est pas mal !

LOGICIEL :
Dans le code Arduino, mettez une temporisation de contrôle de 50 ou 80ms sur le HIGH de la PIN, pour que l'arduino puisse vérifier si le contact dure au moins cette période. Comme ça vous êtes sûr qu'un petit sursaut parasite de quelques millisecondes ne sera pas pris en compte et passera à la trappe ! C'est assez facile à faire avec "Debounce" (il faudra jongler avec la fonction "millis", vous verrez c'est pas bien compliqué :wink: ) https://www.arduino.cc/en/Tutorial/Debounce

De mon côté j'ai opté pour la combinaison des deux solutions : matériel et software, qui me permet de n'avoir eu aucun problème jusqu'ici !

Bon courage, à + :wink:

PS : je ne comprends pas bien l'intérêt de faire un Change avec la fonction attachInterrupt(1, IntChange, CHANGE), qui normalement priorise simplement la lecture du code pour cette fonction lors d'un évènement. Je vois pas le lien avec les fausses valeurs données par le compteur. Si ça a marché tant mieux...

Bonjour, je souhaiterais faire la même chose que vous, serait-il possible d'envoyer tout le code et les montages que vous avez réalisé svp ?

Bonjour j'aimerais Avoir le Shéma et le code Complet Svp je suis un Etudiant et j'ai ce Projet comme projet de Fin d'étude.

Bonjour, je souhaiterais faire la même montage sur mon compteur d'eau que vous, serait-il possible de m'envoyer tout le code et les montages que vous avez réalisé svp ?
étant bricoleur mais pas codeur je suis à la recherche de personne qui on déjà réalise ce montage.
cordialement.