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
}
}
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 ?
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
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).
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 !!
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.
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.
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
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.
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é ) 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, à +
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 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.