Go Down

Topic: Besoin d'info pour interfacer un compteur d'eau à émetteur d'impulsion (Read 4500 times) previous topic - next topic

gnomathibus

Bonjour à tous, je dispose d'un compteur d'eau qui est équipé d'un émetteur d'impulsion, je souhaite l'interfacer avec mon arduino mais je rencontre quelques difficultés car je suis pas très doué en électronique   :smiley-sad-blue:,  les caractéristiques de la sortie «impulsion» sont les suivantes :

- Sortie transistor à collecteur ouvert de type NPN
- Etat fermé en présence d'une impulsion.
je dispose de deux fil l'un pour les impulsions l'autre pour la masse

pour mon code j'ai besoin impérativement d'utiliser un interruption de ce faite j'ai bêtement connecté le fils impulsion sur la broche 2 et le fils de masse sur mon arduino, pour le code j' ais utilisé celui-ci dessous issu d'un tuto, le compteur envoi 1 impulsion lorsque 1L d'eau est consommée le problème étant que quand l'arduino reçois l'impulsion elle m'en compte trois au lieu d'une

si quelqu'un peut m'aiguiller sur mon pb merci d'avance

Code: [Select]


volatile int comptageImpulsion=0;

void setup()   {

digitalWrite(2, HIGH);
Serial.begin(115200);

attachInterrupt(0, gestionINT0, CHANGE);

}


void loop(){

}

void gestionINT0() {

comptageImpulsion=comptageImpulsion+1;

Serial.print("Nombre impulsions = ");
Serial.println(comptageImpulsion);

}

Snootlab

Bonjour,

Je ne sais pas pourquoi 3 mais 2 ça parait normal puisqu'il me semble que ce code
Code: [Select]
attachInterrupt(0, gestionINT0, CHANGE);
contenant les modes de déclenchement possibles = LOW, CHANGE, RISING, FALLING (cf. mon club elec)

va compter les changements d'état, donc il y en a au moins 2 (passage de 0 à 1 puis de 1 à 0),
a la place de CHANGE, un RISING me parait plus approprié.

mais 3 ?? un oscillo sous la main peut être ?? ou sinon un arduino :) avec un snapshot du signal pour valider son fonctionnement ?

Lionel
- Distributeur officiel Arduino - France

gnomathibus

merci pour ta réponse, pour la partie interrupt j'ai déjà essayé les quatres LOW, CHANGE, RISING, FALLING mais j'ai  le même pb, malheureusement je n'ai pas d'oscillo, sous la main sinon quelle est cette methode avec l'arduino "snapshot de signal" ?

merci encore

B@tto

Peut-être un effet de rebond. Essaye en RISING et en désactivant les interruptions une fois la routine d'interruption lancée, et en les relançant à la fin de la même routine.
Blog électronique : http://battomicro.wordpress.com/
Photographie : www.interactive-celebration.fr

Snootlab

Effectivement, ça peut être du rebond


merci pour ta réponse, pour la partie interrupt j'ai déjà essayé les quatres LOW, CHANGE, RISING, FALLING mais j'ai  le même pb, malheureusement je n'ai pas d'oscillo, sous la main sinon quelle est cette methode avec l'arduino "snapshot de signal" ?

le lien que j'ai mis plus haut
http://code.google.com/p/xoscillo/
permet d'utiliser un arduino comme un oscilloscope (modeste)
je te suggérai de l'installer et de l'utiliser pour analyser le signal issu de ton capteur, au cas ou les rebonds ne soient pas trop rapides pour être capturés.
et enfin de faire une capture d'écran (snapshot)

Lionel
- Distributeur officiel Arduino - France

gnomathibus

Merci pour les replys, dès que je peux je fais les tests avec les conseils donnés et je vous retiendrais au courant

gnomathibus

retour de test,  j'ai donc mis mon arduino en mode oscillo avec le prog xoscillo puis branché la sortie impulsion de l'émetteur sur la broche 0 analogique de l'arduino mais malheureusement le trigger du programme de l'oscillo ne se déclenche pas, donc pas de visu de l'impulsion  :(

sinon j'ai mis la désactivation de l'interruption quand celle-ci s'ouvre, puis réactivation lorsqu'elle celle-ci termine son exécution et la c'est mieux il compte 2 impulsion au lieu des trois précédemment mais j'ai toujours pas régler mon pb.

al1fch

Plus performant que Xoscillo (qui ne fait chez moi aucune acquisition analogique ou numérique) il y a ça pour enregistrer, observer et analyser des signaux logiques :
http://arduino.cc/forum/index.php/topic,69885.0.html

fdufnews

La sortie impulsion est en collecteur ouvert, tu as bien une résistance de pull up sur l'entrée ?

Dans un autre ordre d'idée, il y a tout un tas de choses qu'il est préférable d'éviter dans les routines d'interruption.
Personnellement j'aurais sorti les Serial.print de cette routine, positionné un booléen à 1 pour indiquer le passage dans l'IT. Dans loop() j'aurais testé le booléen et s'il est positionné j'imprime la variable et je le remets à 0.

gnomathibus

comme j'ai indiqué dans mon premier post j'ai branché la sortie impulsion en direct sur la broche 2 de mon arduino et j'ai activé le pull up interne de la carte, mais comme je ne suis pas très calé en électronique pense tu qu'il soit necessaire de rajouter une résistance de pull up et de quelle valeur ?

al1fch

avec le pull up interne de 20 kOhm ça devrait aller mais je ne suis pas certain qu'il soit activé sans la séquence suivante qui écrit 1 sur un pin positionnée au préalable en entrée. (Après un reset il me semble que les pins sont en entrées par défaut mais deux précautions valent mieux qu'une !!)
Code: [Select]
pinMode(2, INPUT);
digitalWrite(2, HIGH)

Sinon un pull up externe de 10 kOhm ferait l'affaire avec éventuellement 100nF entre pin2 et masse.

Pour l"attach interrupt"  je mettrai RISING ou FALLING comme conseillé précédemment.

Dans la routine d'interruption je pense également qu'il est préférable en général de ne laisser que "ce qui ne peut pas attendre" et qui peut être "vite fait" (incrémenter le compteur et lever un drapeau 'le nombre a changé').... l'affichage, lui, peut etre fait dans la boucle loop() de manière conditionnelle si le drapeau est levé.

Peut être que dans ce programme simple les deux serial.print() passent ......

gnomathibus

de retour de week end, j'ai donc essayer de mettre le pull up externe avec la résistance de 10KOhm et le condo de 100nF mais malheureusement ce n'est pas contre faut - il que la résistance et le condo soit proche de l'arduino pour être efficace ?

fdufnews

Quote
il que la résistance et le condo soit proche de l'arduino pour être efficace ?

Y'a une longue distance entre la sortie du compteur et l'arduino?


al1fch

Quote
il y a 15m environ

Information très importante !!
Avec une telle distance il faut soigner la laison (pas n'importe quel câble) et filtrer un peu à l'arrivée (côté Arduino). Il ne serait pas superflu également de protéger l'Arduino contre les surtensions.

-Est-il absolument certain que l'émetteur soit à transistor et qu'il ne s'agisse pas en réalité d'un contact avec les rebonds inévitables ?
-l'interruption est elle toujours définie de type 'change' comme dans le code montré au début de ce fil ou bien 'rising' ou 'falling' ?  

Go Up