Récupérer les données d'un débitmètre

Bonjour,

Je souhaite récupérer des informations d'un débitmètre. Pour cela, je dispose d'un arduino uno, d'un débitmètre avec un interrupteur reed et du programme ci-dessous. L'interrupteur se ferme tous les 0,1L.
Je pensais tout d'abord pouvoir récupérer l'impulsion faîte à la fermeture mais sans succès. J'essaye maintenant de récupérer le courant que j'apporte avec l'arduino (je dois le récupérer si l'interrupteur se ferme), mais c'est sans succès non plus.
Je ne sais pas comment relier le débimètre et l'arduino. J'ai essayé différents montages, tels que alimenter le débimètre en 5 V ou non. Le problème est que j'aurais besoin de 3 sorties (pin, alimentation et ground) pour mon débimètre mais que je ne peux mettre que 2 câbles en sortie (voir le bornier à vis dans les liens ci-dessous).
De plus, même lorsque rien n'est branché, l'arduino affiche quand même "contact", mais affiche 0 pour le débit, ou bien il affiche "pas de contact" (ce qui est ici normal) alors que la situation reste la même. Il doit donc y avoir une erreur dans le programme.

Qu'en pensez-vous ?

Merci d'avance pour votre temps.

#include <TimeLib.h>

int duree= second();
int pinContact = 10;
boolean Contact=digitalRead(pinContact);
int i=0;
int tps;

void setup() {
   Serial.begin(9600); // initialisation de la connexion série
   

}

void loop() {
  if (Contact)
    {
    if (duree>59)
    {
      i=i+1;
      tps= (60*i) + second();
      float debit= 0.1/(tps/3600);
      Serial.println("duree:"); 
      Serial.println(tps);//renvoi le temps si contact
      Serial.println("debit:");
      Serial.println(debit);
      delay (1000); 
      i=0;
    }

    else {
      float debit= 0.1/(duree/3600);
      Serial.println("duree:"); 
      Serial.println(duree);//renvoi le temps si contact
      Serial.println("debit:");
      Serial.println(debit);
      delay (1000);
      duree=0;
  }}
    else {
    Serial.println("Pas de contact");
     if (duree>59)
    {
      
      i=i+1;
      tps = (60*i) + second();
      
     }
    }
    
}

Liens utiles :

VZO4
Fiche technique

Vous avez bien acheté le modèle Avec Emetteur Impulsions ? (+ 80 € H.T. sur un prix déjà cher- ils sont pas donnés!)

le compteur reed n'est pas super compliqué on dirait

Vous connectez au GND de votre Arduino et à une PIN en INPUT_PULLUP de l'autre coté - vous devriez voir vos impulsion sur cette PIN.

Edit - j'ai dit une bêtise vu où est branché la sortie.

sur une pin analogique vous devriez voir une tension si vous envoyez 3.3V de l'autre côté (avec une R de 47Ω le courant qui passera sera acceptable sans soucis)

Je dois avouer que je n'ai rien compris au fonctionnement de cette bête.
Les impulsions ont quelles caractéristiques et correspondent à quoi ?

Que veulent dire les deux signes +/- sur les deux fils à gauche de l'image ?
Moi cela me fait penser à un montage où la masse n'est pas fixée et où l'utilisateur est libre de choisir son emplacement.

Si c'est le cas met le "moins" à la masse pour pouvoir dialoguer avec un arduino.
Je pense que si tu nous faisais un schéma de branchement nous y verrions plus clair.

Je ne vois pas d'anti-rebond sur les contacts du relai, est-il dans le code ?
Pour faire un anti-rebond tu peux le faire dans le code (debouncing) ou simplement placer un condensateur en parallèle sur le contact.
Valeur du condensateur :
D'où vient la résistance de 47 ohms sur le schéma ? Est-ce une valeur imposée ou est-ce la valeur minimale pour que le courant ne dépasse pas 50 mA ? Dans le deuxième cas tu peux mettre 10 k pour la résistance et 100 nF pour le condensateur, c'est un bon couple assez passe partout.

En fonction de la nature des impulsions (largeur variable en fonction du débit ou impulsion à chaque pas de X litres par heure le traitement ne sera pas le même.
Dans le premier cas je pense que le traitement sera le même que pour les capteurs de distance à ultrasons, dans le second il me semble que l'utilisation d'interruptions serait plus approprié.

Que fait ton digitalread(pincontact) hors du loop?

le schéma vient de la fiche technique

je suppose que quand les roues tournent elles font bouger un aimant qui ferme ou ouvre le Reed - donc on met ce qu'on veut d'un côté et on le reçoit de l'autre - avec une R au milieu de 47Ω (allez savoir pourquoi 47)

Le document ne mérite pas le nom de fiche technique. Le coup de la 47 ohms pour dire de ne pas dépasser 50 mA (sous quelle tension ?) est pour le moins tordu.
Un document comme ça ne rassure pas sur le produit >:( .

@J-M-L
Je pense que tu as raison sur le principe de l'aimant puisque le capteur n'est pas alimenté.
Par contre comment dans ce cas comment expliquer l'unité en litres par heure ?
Si le fonctionnement de l'aimant est bien comme tu penses c'est des litres tout court.

Dans ce cas je pense que le plus simple est d'utiliser une interruption qui incrémente un compteur qui sera étant lu a intervalle régulier.

@Claire21
La société SAPPREL fait maintenant partie d'un groupe.
Sur wikipédia j'ai trouvé l'adresse du site français qui semble-t-il fabrique ces capteurs de débit :

  • Diehl Metering S.A.S., France
    Téléphone : +33 38969-5400
    Télécopie : +33 38969-7220
  • 67, Rue du Rhône B.P. 10160
    68304 Saint-Louis Cedex, France

Je pense qu'un appel téléphonique, ou un courrier, pour demander plus de renseignement et sécuriser la compréhension du fonctionnement ne pourrait pas faire de mal.

Edit :
Pour le débit minimal je pense effectivement que c'est des litres par heure : ce pourrait être la vitesse minimal des roues capable de fermer le contact --> si l'aimant se déplace trop lentement il pourrait ne pas être capable de fermer le contact. A ce sujet plutôt que relai Reed on devrait parler d'ampoule Reed car le terme relai implique de facto un bobinage de commande.

Edit 2
Après avoir lu et comparé plusieurs datasheet de compteurs je pense arriver à la conclusion suivante :

Les "Absolute Maximum Rating" sont données en litre par heure --> cela correspond(rait) à une contrainte mécanique sur le matériel.
La mesure est clairement donnée en litre pour des compteurs concurrent.

Pour celui dont il est question je pense que dans le paragraphe "OPTION : Émetteur d'impulsion"
Ce qui est appelé "Poids de l'impulsion = 0,4" sans indication d'unité correspond à 0,4 litre par impulsion.
Super fiche technique !

68tjs:
Edit :
Pour le débit minimal je pense effectivement que c'est des litres par heure : ce pourrait être la vitesse minimal des roues capable de fermer le contact --> si l'aimant se déplace trop lentement il pourrait ne pas être capable de fermer le contact. A ce sujet plutôt que relai Reed on devrait parler d'ampoule Reed car le terme relai implique de facto un bobinage de commande.

Bonsoir 68tjs
AMHA c'est le debit minimal pour mettre en rotation l'etage primaire (avant demultiplication)
le contact ILS est pris au travers d'une R47 (pourquoi ? )
Une simple levée de doute peut surement etre faite avec un simple ohmetre (là un ohmetre "balistique" sera bienvenu ) pour "voir " la fermeture de l'ILS

le contact ILS est pris au travers d'une R47 (pourquoi ? )

Je n'en suis pas sur, s'il y a effectivement une résistance de 47 ohms (on doit pouvoir la mesurer avec un simple ohmmètre) peut-être sert-elle de résistance talon de protection contre les courts-circuits ?
5 volt et 47 ohms font 100 mA et non pas 50.
Je note que sur ce produit nous faisons beaucoup de supposition.

68tjs:
Je n'en suis pas sur, s'il y a effectivement une résistance de 47 ohms (on doit pouvoir la mesurer avec un simple ohmmètre) peut-être sert-elle de résistance talon de protection contre les courts-circuits ?
5 volt et 47 ohms font 100 mA et non pas 50.
Je note que sur ce produit nous faisons beaucoup de supposition.

:grin:

Bien d'accord , avec toi
En tous cas pour moi , hors de question que je depense 400€+ pour ce genre de truc :wink:

Dans ma campagne "chauffée" au fioul

je ne gere que 2 infos à corréler

  • volume cuve restant (basé sur du capteur de pression)

  • temps d'activation pompe bruleur ( si on veut être puriste , vérifier effectivement le débit gicleur 8) pour calibration )

Bonjour à tous,

Tout d'abord merci à tous pour vos réponses.

Le débitmètre fonctionne comme l'a dit @J-M-L. Les roues font tourner un aimant qui ferme et ouvre l'interrupteur reed tous les 0,1 L. La résistance est de 47 ohm et il n'y a pas de polarité particulière dans le débitmètre. Il s'agit bien du modèle à impulsions.

J'ai mesuré aux bornes du débitmètre que l'intensité passait bien à 0 (au moment de l'ouverture de l'interrupteur). De plus j'ai bien mesuré une résistance de 47 Ohms.

J'ai reproduit ce matin le débitmètre sur plaque, avec une résistance de 47 ohm, une led et un fil servant d'interrupteur. Le problème est lorsque que je place la résistance avant la led, celle-ci ne s'allume plus. L'intensité n'est donc plus suffisante.

De plus, comme 68tjs l'a dit : "5 volt et 47 ohms font 100 mA et non pas 50". Même en 3,3V cela donne 70mA... Il faudrait du 2,3 V.
Est-il donc impossible d'alimenter le débitmètre avec l'arduino ?
Dois-je rajouter une résistance avant le débitmètre pour réduire l'intensité ?
@J-M-L, vous dîtes que ça serait possible en utilisant une pin analogique ?
Ce débitmètre m'est imposé dans le cadre de mon projet.

Cela devrait fonctionner en connectant sur une entrée digital (un fil de l'ILS sur l'entrée, l'autre au GND) en activant INPUT_PULLUP dans l'instruction pinMode dans le setup().
Si tu dois travailler avec les interruptions, il faut choisir les bonnes entrées.

la notice SAPPEL est conforme à l'usage des notices de compteurs divisionnaires d'eau (métier de SAPPEL) et autres compteurs et au vocabulaire 'métier' de ce domaine. Un électronicien est dérouté car il attend une autre terminologie.
Un chauffagiste (cible commerciale) attend, lui, une notice de ce type.
On ne va quand même pas chercher à 'rééduquer les chauffagistes !!"....

Ce n'est pas un 'débitmetre' mais un compteur volumétrique pour du fuel , fonctionnant dans une plage de débit spécifiée.

Le débit minimal (en dessous duquel la rotation n'est pas garantie) est indiqué , il est raisonnablement faible, la plage de débits de fonctionnement est correcte.

Dans ce contexte professionnel le terme 'émetteur d'impulsions' renvoie à un simple contact en série içi en interne avec une résistance.
Le +/- indiqe au monteur que la polarité est indifférente.
Le modèle RE4 produit une fermeture par décilitre, le RE8 une fermeture par litre.
La précision de 1% est spécifiée entre le débit in (Qmin) et le débit max (Qmax), bonne précision pour un compteur pour ce type de fluide d'autant plus qu'il n'y a pas de restriction sur le positionnement (orientation) du compteur.
La perte de charge est faible.
Le croquis montre un couplage magnétique entre le piston oscillant et la partie compteur. (pas de laison mécanique rigide entre les deux parties, pas de fuite de liquide dans les engrennages)

C'est un bon compteur du point de vue 'chauffagiste', la notice est pour lui 'comme d'habitude', la marque est réputée et avec sa probable remise chez son grossiste en tant que professionnel, le chauffagiste n'hésitera pas beaucpoup pour le choisir s'il veut 'être tranquille' sur la qualité des mesures dans le temps.
Le prix est évalué en relation avec le service rendu, le prix de l'installation ...et celui du fuel.

A mon avis si vous faites un montage comme cela avec ce code:

const byte pinCapteur = A3;

void setup() {
  Serial.begin(115200);
  pinMode(pinCapteur, INPUT_PULLUP);
}

void loop() {
  Serial.println(analogRead(pinCapteur));
  delay(100);
}

(tapé ici donc non testé)

Quand l'interrupteur est ouvert vous lirez sur la console une valeur proche de 0 (sans doute vers 10)

Quand l'interrupteur est fermé vous lirez sur la console une valeur proche de 1023 (sans doute vers 1000)

idéalement je rajouterais une R supplémentaire avant d'aller à GND pour limiter le courant.


ça devrait faire passer la valeur basse sans doute dans les 20 et la valeur haute devrait rester proche de 1000

à tester avec la PIN D2 en interrupt pour voir... (avec la R additionnelle juste pour être sûr)

Le fait de mettre le pull-up sur l'entrée analogique va modifier les lectures de l'ADC mais vous ne vous intéressez pas à la valeur lue, plus au changement de fronts et là il seront très visibles à mon avis

C'est un tout ou rien quel est l'intérêt de faire un analogRead()?

fdufnews:
C'est un tout ou rien quel est l'intérêt de faire un analogRead()?

oui - c'était juste au cas où quelque chose d'autre se passait au sein de l'appareil qui ne soit pas simplement la résistance - ça permettrait de voir une divergence par rapport aux attentes

--> d'où, si ça marche l'idée de tester avec la PIN D2 en interrupt pour voir... (avec la R additionnelle juste pour être sûr)

Il ne faut pas faire passer 100 mA dans le contact, il faut simplement ajouter une résistance en série avec la 47 ohms.

  • soit comme le propose Fdufnews en utilisant les résistances de tirage interne (les pull-up) . Les pull-up font entre 30 k et 70 k ohms selon le lot de fabrication du microcontrôleur.
    -soit comme je l'ai proposé en ajoutant une résistance externe de 10k ohms en série avec la 47 ohms.

Sans oublier dans tous les cas d'utiliser un anti rebond matériel (condensateur de 100 nF) ou logiciel.

On ne va quand même pas chercher à 'rééduquer les chauffagistes !!"....

Et pourquoi pas :grin:

C'est vrai que j'ai lu beaucoup de bien sur les produits de cette marque,et que je trouvais étrange d'avoir une si mauvaise documentation.
Sans les envoyer en camp de rééducation ils pourraient voir ce que fait la concurrence et qui est beaucoup plus clair.

J'obtiens des valeurs autour de 15 pour la position fermée et autour de 1000 pour la position ouverte, sur plaque, avec le programme de J-M-L.
Avec le débitmètre, j'obtiens des valeurs assez bizarres. Si par exemple le compteur commence à compter à 1L, à 1,03L j'obtiens des valeurs vers 1000, à 1,09L des valeurs vers 15, à 1,13L des valeurs vers 1000, à 1,19L des valeurs vers 15 etc...
Aucune variation liée à l'ouverture et à la fermeture ne semble être mise en évidence (Il y a une fermeture tout les 0,1 L normalement).
Dans la configuration des tests avec ce programme, le débitmètre n'était pas alimenté.

Je vais tester d'autres choses, comme des interrupts. J'avais essayé avec une pin digitale, pas analogique, mais je ne pense pas que ça va changer grand chose. J'ai aussi essayé d'alimenter le débitmètre en 3,3 V et de de rajouter une résistance extérieure de 47 Ohms, sans résultat, de même avec les PULL-UP. Je vais essayer avec une résistance externe de 94 Ohms, je n'ai pas plus pour le moment.

Je ne comprends toujours pas s'il est nécessaire d'alimenter le débitmètre (en respectant la limite des 50mA bien sûr) afin de récupérer le courant si l'interrupteur est fermé, ou bien si je pourrais capter les impulsions lors de la fermeture du circuit. J'ai essayé les 2 options mais sans résultats pour le moment.

J'ajouterai un anti-rebond quand j'arriverai à capter la fermeture du circuit, merci de m'y avoir fait penser.

Claire21:
Je ne comprends toujours pas s'il est nécessaire d'alimenter le débitmètre (en respectant la limite des 50mA bien sûr) afin de récupérer le courant si l'interrupteur est fermé, ou bien si je pourrais capter les impulsions lors de la fermeture du circuit. J'ai essayé les 2 options mais sans résultats pour le moment.

si vous n'envoyez rien d'un côté, la fermeture ou ouverture du contact ne va pas vous aider à mesurer quoi que ce soit. pour mesurer une "continuité" il faut envoyer un truc d'un côté et voir s'il ressort de l'autre :slight_smile:

Dans mon exemple en mettant la PIN en INPUT_PULLUP et l'autre côté au GND, ça crée un circuit avec très peu de courant qui circule (car le pull-up est de 20k à 50kΩ en interne sur un UNO)

Finalement, après réflexion cela fonctionne même sans envoyer de courant.
En effet, si on a ces valeurs :
0,03 : affiche 1000
0,09 : affiche 15
0,13 : affiche 1000
0,19 : affiche 15
0,23 : affiche 1000

Donc finalement, cette information suffit car tous les 0,1 L, on revient à 1000. Seule la première valeur est fausse et donc à corriger.
Je peux donc dans le programme mettre de compter 0,1 L à chaque fois qu'on obtient autour de 1000, après avoir corrigé l'erreur du début. Cela me suffit pour calculer mon débit.

Merci à tous pour votre aide. :slight_smile:
Je mettrai mon programme complet pour le calcul de débit dans cette conversation si ça peut aider certains.

Comme sur la doc de ce compteur volumétrique : une fermeture de contact tous les décilitres.... mais pas en goutte à goutte car le comptage ne progresse correctement que si le débit est supérieur à 0,4l/h
(Le terme 'générateur d'impulsion' trouble l'électronicien puis qu'il ne s'agit en fait que d'un contact d'ILS)