Pages: [1] 2   Go Down
Author Topic: Besoin d'info pour interfacer un compteur d'eau à émetteur d'impulsion  (Read 4122 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 27
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:

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);

}
Logged

Forum Moderator
Toulouse / France
Offline Offline
Full Member
*****
Karma: 5
Posts: 241
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,

Je ne sais pas pourquoi 3 mais 2 ça parait normal puisqu'il me semble que ce code
Code:
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 smiley avec un snapshot du signal pour valider son fonctionnement ?

Lionel
« Last Edit: August 25, 2011, 07:43:23 am by Snootlab » Logged

- Distributeur officiel Arduino - France

Offline Offline
Newbie
*
Karma: 0
Posts: 27
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Ales
Offline Offline
Faraday Member
**
Karma: 39
Posts: 3650
Do or DIY
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged


Forum Moderator
Toulouse / France
Offline Offline
Full Member
*****
Karma: 5
Posts: 241
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

- Distributeur officiel Arduino - France

Offline Offline
Newbie
*
Karma: 0
Posts: 27
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Offline Offline
Newbie
*
Karma: 0
Posts: 27
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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  smiley-sad

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.
Logged

France
Offline Offline
God Member
*****
Karma: 4
Posts: 971
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

France
Offline Offline
Faraday Member
**
Karma: 39
Posts: 3561
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
« Last Edit: August 26, 2011, 09:56:10 am by fdufnews » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 27
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 ?
Logged

France
Offline Offline
God Member
*****
Karma: 4
Posts: 971
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
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 ......
« Last Edit: August 26, 2011, 12:55:07 pm by al1fch » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 27
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 ?
Logged

France
Offline Offline
Faraday Member
**
Karma: 39
Posts: 3561
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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?
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 27
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

il y a 15m environ
Logged

France
Offline Offline
God Member
*****
Karma: 4
Posts: 971
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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' ?  
« Last Edit: August 30, 2011, 07:25:50 am by al1fch » Logged

Pages: [1] 2   Go Up
Jump to: