Calculer une quantité d'eau avec débit mètre.

Bonjour à tous,
Dans le cadre d'un projet de faire une fusée à eau automatique géré par arduino, j'aurais besoin de mesurer une quantité d'eau grâce à ce débimètre: http://www.amazon.fr/gp/product/B00K67YL98?psc=1&redirect=true&ref_=oh_aui_detailpage_o00_s00.

J'ai déjà trouvé sur internet comment calculer le débit mais moi je souhaiterais calculer la quantité d'eau qui entre dans la fusée

Merci d'avance,

Salut,

C'est de la physique : Débit = Quantité / temps

Donc il suffirait d'appliquer cette formule: Quantité = Débit * temps ?
Cordialement,

Bonjour,

il y a beaucoup plus simple car dans ce cas, tu va calculer un débit en fonction du VOLUME ET du TEMPS (volume par unité de temps donc V/T )pour ensuite multiplier par le TEMPS donc (V/T)*T = V ...

d'après la notice, il envoie 450 impulsion par litres..... soit une impulsion tous les 2,2222222222 millilitre

A priori, il s'agit de celui- ci : YF-S201 Hall Effect Water Flow Meter / Sensor

il suffit donc de compter le nombre d'impulsions pour connaitre le volume.

Tu peux "vérifier" ton compteur en faisant passer un volume connu et en vérifiant le nombre d'impulsion ( attention au départ au volume d'air éventuellement compté ) sachant que la notice donne une erreur possible de 10 %

Pierre

bonjour
ce type de capteur delivre une impulsion pour un volume connu (à priori selon petrusfr 2.22 ml)
pour avoir le volume total , il suffit de compter le nb d'mpulsions et de multiplier par 2.22
pour avoir le debit "instantané" simplement recuperer la frequence = nb impuslsion en 1 seconde.

Merci à tous pour vos réponses,

Je vais faire comme petrusfr à dis mais pour faire ça, il me faudrait un timer pour pouvoir calculer le temps durant la phase de remplissage. Avez-vous une idée??

Cordialement,

Voir du coté de millis() :grin:

Voir du coté de millis() :grin:

Le souci avec millis(), c'est qu'il donne le temps depuis que le programme est lancé, moi je voudrais voir juste dans la phase de remplissage.
Cordialement

C'est que tu ne sais pas comment fonctionne millis().....

Non pas vraiment, désolé.

Cordialement

Dommage de ne pas être plus curieux que ça... :grin:

Détrompez-vous, je suis très curieux, mais j'ai pas encore eu le temps de tout tester, mais si vous pouvez m'en dire plus, sa serait avec plaisir dans apprendre plus. C'est également à ça que sert ce forum :smiley:

Cordialement

millis() c'est comme un train.... on a l'impression qu'il ne fait que passer.

Si on court assez vite on pourrait penser que le train est arrêté.... c'est simplement le point de vue qui change.

En réfléchissant comme ça et en plaçant les jalons judicieusement on peut utiliser la fonction millis() pour faire une mesure de temps et déclencher des actions à intervalles "convenus".

maintenant on laisse le train de coté ( c'est pour B@tto :grin: ).

on prend un ruban métrique.

on veut utiliser la mesure qui se trouve entre 9 et 13 mètres.... ça fait combien de mètres ?

Cela fais 4 mètres :slight_smile:
J'ai compris se que vous voulez faire.
Cordialement

Merci

Fais un bout de code pour essai si jamais on corrige :grinning:

Bonjour, est-ce que ce code irait?

volatile int NbTopsFan;
int Calc;
int hallsensor = 2;

void rpm()
{
  NbTopsFan++;  
}

void setup()//
{
  pinMode(hallsensor, INPUT);
  Serial.begin(9600);
  attachInterrupt(0, rpm, RISING);
}
void loop()
{
  NbTopsFan = 0;  
  sei();   
  delay (1000);  
  cli(); 
  Calc = (NbTopsFan * 2.2);
  Serial.print (Calc, DEC);
  Serial.print(","); (" en L/h"); 
}

Cordialement,

Je n'arrive pas à trouver un bon compteur d’impulsion, avez-vous une idée?
Cordialement

je te laisse adapter

#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); //attention ce sont mes N° de pinoches
boolean capteur_impulsion = true;

void setup()
{
noInterrupts();
attachInterrupt(0, isr_compteur_impulsion, FALLING); // N° interruption0,routine, flanc descendant
lcd.begin(20, 4); // initialise le LCD
Serial.begin(57600);
interrupts();
}

void loop()
{
controle_si_interruption();

}

void controle_si_interruption()
{
if (capteur_impulsion == false) // oui, il y a eu interruption
{
//ici tu mets ton code bla, bla, bla
capteur_impulsion = true;
}
}
void isr_compteur_impulsion() // routine d’interruption 0
{
static unsigned long memo_temps = 0;
unsigned long temps_actuel = millis();
if (temps_actuel - memo_temps > 200)
capteur_impulsion = false;
memo_temps = temps_actuel;
}

Merci de votre réponse, j’essayerais si la solution que je veux tester ne fonctionne pas.
Actuellement je cherche à savoir combien il y a d’impulsion en 1 seconde, mais je vois pas comment m’y prendre, voici mon code:

#define LED 13
#define IN 3
 
volatile uint8_t state = LOW;
 
void cny70_onRising(void) 
{
    // bascule l'état de la led
    state = !state;
 
    Serial.print(state);
    Serial.println(" detected");
    
}
 
void setup () 
{
    Serial.begin(9600);
    Serial.println("CNY70 test");
 
    pinMode(IN, INPUT);
    pinMode(LED, OUTPUT);
 
    // Attache une interruption sur changement de valeur (pin 3)
    attachInterrupt(1, cny70_onRising, CHANGE);
}
 
void loop () 
{
  digitalWrite(LED, state);
}