Comptage de fronts montants pour anémomètre

Bonjour, je dispose d'un anémomètre qui fonctionne par impulsion. Chaque demi-tour lui fait passer de 0V à 5V. Je voudrais réaliser un programme qui comptent les fronts montants pour mesurer la vitesse du vent. On m'a conseillé d'utiliser les interruptions. J'ai déjà un programme test mais il ne fonctionne pas, il ne renvoi que 0 dans le moniteur série. Pouvez-vous m'aider s'il vous plait ?

Le programme :

int nb_tours;

void setup() {
const byte pinAnemometer = 2;
attachInterrupt(digitalPinToInterrupt(A2), ISR_tours, RISING);
Serial.begin(9600);


}

void loop(){
nb_tours = 0;
  interrupts();    // autoriser les interruptions
  delay(1000);   // on compte le nombre de tours sur 1 s par exemple
  noInterrupts();// désactiver les interruptions
  
  Serial.println(nb_tours * 2.4); // vitesse en km/h
}
  void ISR_tours() {
  nb_tours++;
}

P.S. : Ce n'est pas moi qui suit à l'origine du programme, je l'ai juste corrigé pour que nos broches correspondent.

Which pin are you using? A2 or 2?

Can you please post a link to specs/data for the anemometer?

Is the anemometer output open collector?
If so have you got a pullup resistor?

You do not seem to be defining Pin2 as an input?

pinMode(2,INPUT);
or 
pinMode(2,INPUT_PULLUP);

Tom.. :smiley: :+1: :coffee: :australia:

wildbill, I'm using the A2 pin.

And here is the link for the anenometer's specs : Anémomètre et girouette avec interface Grove PACK-GR007 (lextronic.fr)

Sorry it's french but I trust you :grin:

Not all pins are usable for interrupts. The Uno for example has them on pins 2 and 3. You may have sabotaged yourself by choosing A2.

Ok wildbill but does the line code byte pinAnenometer = 2 make this job ?

It would, if you used it instead of A2 on the next line.

I think the problem of the current program is that it doesn't count the numbers of rising fronts. So this is why it only shows 0 ( it does 0 * 2.4 ).

Indeed. And the reason it doesn't count them, I suspect, is that you are using the wrong pin.

Hi,
You have included the resistors shown in this diagram form the link?

It is very important so you get a signal out of your anemometer/
LEXCA007C

Tom... :smiley: :+1: :coffee: :australia:

All the connections between the Arduino and the capters are done and good. I think the issue is on the program. I tried to change the pin but the problem is still here .

Which Arduino are you using and which pin is the anemometer attached to?

Hi,

Then you should be able to post a circuit diagram and a picture of your project so we can see your component layout.
You do have the resistors shown in the post #10 fitted?

Thanks.. Tom... :smiley: :+1: :coffee: :australia:

Hey guys, sorry for the late. Here's the picture of my project. I just want to count the number of impulsions that the anenometer does in a certain period.

Thanks for the help btw

Are u dead guys ? I'm using Arduino Uno and the A2 pin for the anenometer.

Bonjour armandguitton

Il n'y a pas d'interrupt sur la pin A2 de l'Arduino UNO, il faut prendre la pin 2 ou 3

A éviter dans ce genre d'application, utiliser millis

Cordialement
jpbbricole

Bonjour jpbbricole, merci de ta réponse rapide. Je n'ai en fait pas le choix du pin pour l'anémomètre car il fonctionne avec la platine ( voir photo plus haut ).

Bonjour,

Je ne comprends pas bien comment c'est connecté sur ta photo.
C'est quand même étonnant, si la carte est prévue pour une UNO, que ça ne soit pas possible de connecter un capteur qui génère des pulses sur une entrée d'interruption.

Bonjour Armand

Oui, l'adapteur DEV-LEX2 reçoit bien sur A0, A1 et A2, ce qui, pour l'anémomètre, sur A2, complique les choses, il faut surveiller en permanence l'état de l'entrée. Il existe des bibliothèques (enableinterrupt ?) qui permet de mettre un interrupt sur toutes les pin de l'Arduino qui ont l'attribut PCINTnn, PCINT10 pour A2 , ça simplifierai bien les choses.

Cordialement
jpbbricole

Hi,
What is this board, and do you have a schematic for it?
How does it connect to the UNO?

Tom... :smiley: :+1: :coffee: :australia: