Go Down

Topic: Compteur de front montant (Read 4681 times) previous topic - next topic

karolusfun

Bonjour,

J'ai comme projet de mesure la vitesse du vent avec un anémomètre, celui-ci que j'ai est un anémomètre ILS. Je l'alimente en 5V et à chaque passage sur l'aimant, il passe à 5V . Je cherche à trouver un moyen de lire chaque front montant avec un programme sur Arduino UNO et de les additionner au fur et à mesure du passage et les afficher sur un écran LCD. J'ai pensé utilisé la fonction AttachInterrupt mais je ne sais pas encore comment l'adapter à mon code. Je suis un débutant dans la programmation en C.

Merci

blocos27

#1
May 11, 2015, 09:54 pm Last Edit: May 11, 2015, 10:02 pm by blocos27
Salut,

Ton code (pas fonctionnel) :

Code: [Select]

//Programme de l'anémomètre
#include <math.h>
#include <LiquidCrystal.h>


byte compteur = 0;
int anemometre = 9;
volatile boolean valeur = false;
LiquidCrystal lcd(8, 7, 6, 5, 4, 3);

void setup()
{
  pinMode (9, INPUT);
  attachInterrupt(0, btn, FALLING);
  lcd.begin(20, 4);
  lcd.setCursor(4, 1);
  lcd.print("Anemometre");
  delay(1000); // pause rapide pour laisser temps initialisation
  lcd.clear();

  // put your setup code here, to run once:
}

void loop()
{
  digitalWrite(9, valeur);
  lcd.setCursor(0, 0);
  lcd.print(compteur);
}

void btn()
{
  valeur=!valeur;
}


Le principe pour compter des impulsions, est de connecter un capteur sur une entrée avec interruption et à chaque interruption, augmenter la valeur du compteur.

Note : Il est préférable de commuter le GND plutot que le 5V. c'est plus facile à mettre en oeuvre car pas besoin de "résistance de tirage".

Les interruptions sur le UNO sont sur les PIN 2 (INT0) et PIN 3 (INT1).

Dans ton code, tu peux déjà mettre la PIN2 en entrée et en mode PULLUP (niveau haut), et rattacher une interruption front descendant dessus (HIGH to LOW = FALLING) :

Code: [Select]

void setup()
{
pinMode (2, INPUT_PULLUP);
attachInterrupt(0, btn, FALLING);
...
...
}

 
le code interruption attaché étant la fonction "btn"; tu y fais un ++ sur le compteur à incrémenter :
Code: [Select]

void btn()
{
  compteur++;
}


Avec ces deux modifications, tu es capable de compter les impulsions de ton anémomètre (nb de tours réalisé), avec une impulsion comptée à chaque mise à GND de la PIN 2.

Ensuite dans ta LOOP, il faut mettre une mesure d'écart de temps et "juste" des formules de maths pour calculer la vitesse sur ce laps de temps donné (ex: nb tours/min) et en déduire la vitesse du vent suivant une abaque / info de ton modèle d'anémomètre.

Tu as aussi un exemple de comptage sur un ventilo ici : http://playground.arduino.cc/Main/ReadingRPM

En espérant t'avoir aiguillé.

A+

fdufnews

#2
May 11, 2015, 10:10 pm Last Edit: May 11, 2015, 10:12 pm by fdufnews
compteur étant modifié dans la routine d'interruption, il faut déclarer cette variable volatile.

Go Up