Go Down

Topic: Debitmètre (Read 3338 times) previous topic - next topic

manghao

Salut, voilà je doit calculer le débit a l'aide d'un débitmètre Débitmètre BIOTECH FCH-M-POM-PC , mais je suis bloquer pour le calcul, je ne sais pas comment m'y prendre.

J'ai déjà eu l'idée de me placer sur une broche numérique (D2) et de mettre le débitmètre en interruption (en RISING toutes les secondes).

Mais voilà je bloque sur le calcul.

Cordialement Manghao.

guix

#1
Dec 20, 2014, 05:39 am Last Edit: Dec 20, 2014, 05:47 am by guix
Bonjour,

Je ne comprend pas bien, tu dis que tu veux utiliser une interruption.. toutes les secondes? Une interruption ça n'intervient pas à une frequence donnée, elle intervient quand nécessaire, ici c'est ton capteur qui fera une interruption chaque fois que la turbine fais un tour (ou 1/4 de tour, ou autre...).

Dans la doc il est écrit: environs 2500 impulsions/litre (enfin c'est pas très clair, il faut que tu teste en conditions réelles). Donc dans ton interruption tu incrémente un compteur, puis quand tu veux connaitre le nombre de litres qui sont passés dans le capteur, tu divise le compteur par 2500.

La prochaine fois regarde sur ebay, parce que 31€ pour un débimètre de ce type, c'est du vol...Ce que je remarque souvent avec conrad...

Super_Cinci

Il existe sur l'arduino l'ATMEGA une entrée très utile : ICP1. Cette pin (la 8 je crois) permet de déclencher une interruption à chaque impulsion et en plus, elle stocke la valeur du timer 1 au moment précis de l'impulsion. Il suffit donc de faire tourner le timer 1, puis de gérer l'interruption ICP, tu auras le temps précis entre deux impulsions. Ca implique de rentrer un peu dans le lard, à moins qu'une lib ait été pondue à ce sujet?

sinon, la fonction pulseln(), mais tu ne pourras jamais traiter le résultat...

Artouste

#3
Dec 20, 2014, 12:41 pm Last Edit: Dec 20, 2014, 12:42 pm by Artouste
Salut, voilà je doit calculer le débit a l'aide d'un débitmètre Débitmètre BIOTECH FCH-M-POM-PC , mais je suis bloquer pour le calcul, je ne sais pas comment m'y prendre.

J'ai déjà eu l'idée de me placer sur une broche numérique (D2) et de mettre le débitmètre en interruption (en RISING toutes les secondes).

Mais voilà je bloque sur le calcul.

Cordialement Manghao.
bonjour
l'idée de l'interruption est bonne , mais pourquoi toutes les secondes ?
sur rising tu fait juste et simplement une incrementation de compteur.
la valeur de ton compteur est alors représentative du volume (x fois le volume unitaire)
si par exemple tu souhaite connaitre le debit par seconde , il suffit simplement toutes les 1000 ms dans le loop de relever ce compteur et de le remettre à zero.

manghao

Je me suis mal exprimé, mon interruption ce d'éclanche quand le débitmètre fonctionne, j'ai déjà fait un compteur qui s'incrémente.

Et ce débitmètre m'est imposé (TP de lycée !).

Quote
si par exemple tu souhaite connaitre le debit par seconde , il suffit simplement toutes les 1000 ms dans le loop de relever ce compteur et de le remettre à zero.
je devrait utiliser la librairie FlexiTimer pour que ce soit plus simple ?

Artouste

Je me suis mal exprimé, mon interruption ce d'éclanche quand le débitmètre fonctionne, j'ai déjà fait un compteur qui s'incrémente.

Et ce débitmètre m'est imposé (TP de lycée !).

je devrait utiliser la librairie FlexiTimer pour que ce soit plus simple ?
bonsoir
la résolution de ton problème passe par une simple division. :smiley-mr-green:

tu n'a jamais exposé ton code personnel , même foireux 8)

commence donc par là ;)



manghao

#6
Dec 21, 2014, 07:39 pm Last Edit: Dec 21, 2014, 07:40 pm by manghao
bah mon code est :

Code: [Select]

int imp = 0;

void setup() {
    Serial.begin(9600);

    attacheInterrupt(0, countImpulsuion, RISING);
}

void loop() {
    long debit = imp / 2500;
    Serial.println(debit);
}

void countImpulsuion() {
    imp++;
}

manghao

Donc dans le projet que j'ai à faire, j'ai la pompe avec un débit de 30L/h, elle fait 2500imp/L (avec le diamètre de 3mm).

Les 30L/h me donne donc 0.5L/min, alors 2500 * 30 = 75000imp/h
les 75000imp/h me donne donc 20.8imp/s
les 20.8imp/s me donne 1248imp/min

Artouste

bah mon code est :

Code: [Select]

int imp = 0;

void setup() {
    Serial.begin(9600);

    attacheInterrupt(0, countImpulsuion, RISING);
}

void loop() {
    long debit = imp / 2500;
    Serial.println(debit);
}

void countImpulsuion() {
    imp++;
}

bonsoir
tel que tu code tu ne peut pas determiner autre chose que le litre entier :smiley-mr-green:

manghao

Tu me conseil de faire comment alors?

B83s

Quand tu divises un int (imp) par un int (2500), tu obtiens un int ...

Si tu t'attends à avour un débit non entier ... Déclares le déjà en float ...

Ensuite, au lieu de diviser pas 2500 (int) tu divises par 2500.0 (float)

manghao

pour les float/double je sais, la c'est juste que j'avais tapé le code direct sur le forum.

Sinon personne ne sais comment je peux calculer le débit (en Litre) qui passe ?

guix

#12
Dec 24, 2014, 12:20 am Last Edit: Dec 24, 2014, 12:43 am by guix
Dès la première réponse je te dis comment calculer le débit total en litres.

Faut être un peu plus précis dans tes posts si tu veux avoir des réponses précises. Si tu voulais dire débit en litres par seconde, par exemple, mis à jour 4 fois par seconde, tu peux faire un truc du genre:
Code: [Select]

uint32_t
  prevTime,
  curTime;

const uint8_t mps = 4; // mesures par seconde

void loop()
{
  curTime = millis();

  if ( curTime - prevTime >= (1000 / mps) )
  {
    prevTime = curTime;
    Serial.println( (imp / 2500.0f) * mps );
    imp = 0;
  }
}

Go Up