Surveillance de la consommation en eau

Bonjour à tous,
Etant en terminale S SI , mon groupe et moi travaillons sur un projet ayant pour objectif de surveiller la consommation en eau d’un système en circuit fermé, puis d’afficher le débit d’eau en temps réel, la consommation totale et la consommation par heure, sur notre site web en local en etherneta l’aide d’une carte Arduino Ethernet Shield, d’une Arduino Uno, d’une carte relais et d’un débimètre à effet hall.
Nous avons déjà réussi a afficher la consommation totale et le débit d’eau en temps réel, mais nous sommes bloqués lorsque nous essayons de mesurer et d’afficher la consommation heure par heure.

Voila notre programme sur arduino :

#include <SPI.h>
#include <Ethernet.h>



byte mac[] = { 0x90, 0xA2, 0xDA, 0x0D, 0xBF, 0x64 }; // IP carte Arduino Ethernet
IPAddress ip(172 , 20, 128, 31); // adresse IP de la page Web
EthernetServer server(80);  // Creation du serveur en port 80
byte gateway[] = {172, 20, 131, 242}; // IP du reseau

long NbTopsFan; // Variable front montant
long NbTopsFan_2;
int hallsensor = 2; // Signal debimetre en port 2
long Calc; // Variable calcul
long Debit = 0;

void rpm ()     // Appel du sous programme rpm
{
  NbTopsFan++;  // Cette fonction permet de mesurer le front montant et descendant du debimètre
  NbTopsFan_2++;

} 
void setup()
{
 Ethernet.begin(mac, ip, gateway);  // Initialisation du serveur
 server.begin();           // Demarage du serveur pour le client
 pinMode(hallsensor, INPUT); // Initialisation d'un entrée en port 2
 attachInterrupt(0, rpm, RISING); // Interruption est fixe

}

void loop()
{
  {
  // NbTopsFan = 0;	//Initialise le front montant a 0
  NbTopsFan_2 = 0;
  sei();		// Active l'interruption
  delay (125);	// Attend 125 ms
  cli();		// desactive l'interruption
  Calc = (NbTopsFan * 1.6); // Calcul du debit d'eau
  Debit = (NbTopsFan_2 * 60 / 7.5);
  
  }
  
  


  EthernetClient client = server.available();  // Essaye d'obtenir le client

   if (client) {  // Obtention du client ?

        
        boolean currentLineIsBlank = true;
        while (client.connected()) {
            if (client.available()) {   // données clients disponibles à lire
                char c = client.read(); // read 1 byte (character) from client
                // last line of client request is blank and ends with \n
                // respond to client only after last line received
                if (c == '\n' && currentLineIsBlank) {
                    //envoi du code HTML de la page    
                    client.println("HTTP/1.1 200 OK");
                    client.println("Content-Type: text/html");
                    client.println("Connection: close");
                    client.println();
                    // envoie de la page web 
                    client.println("<!DOCTYPE html>");
                    client.println("<html>");
                    client.println("<head>");
                    client.println("<title>Relevé Conso Eau</title>");
                    client.println("<meta http-equiv=\"refresh\" content=\"0.2\">");  // balise meta pour réactualisation automatique de la page Web toutes les 0.2 secondes
             // envoi du corp de la page      
                    client.println("</head>");
                    client.println("<body>");
                    client.println("<h1 align=center>Surveillance de la consommation de l'eau </h1>");
                    client.println("</body>");
                    client.println("</body>");
                    client.println("<h3>Consommation d'eau totale en temps reel (en mL) :<h3>");
                    client.println(Calc); // affichage de la conso
                    client.println("<h3>Debit d'eau en temps reel (en L/h) :<h3>");
                    client.println(Debit); // affichage de la conso
                   
                    client.println("</html>");
                    break;
                }
                // every line of text received from the client ends with \r\n
                if (c == '\n') {
                    // last character on line of received text
                    // starting new line with next character read
                    currentLineIsBlank = true;
                } 
                else if (c != '\r') {
                    // a text character was received from client
                    currentLineIsBlank = false;
                }
            } // end if (client.available())
        } // end while (client.connected())
        delay(1);      // give the web browser time to receive the data
        client.stop(); // close the connection
    } // end if (client)
}

En espérant que vous puissiez nous aider avec vos conseils d’experts :wink:
en vous remerciant d’avance ! :slight_smile:

Re, +1

conso1: Bonjour à tous, Etant en terminale S SI , mon groupe et moi travaillons sur un projet ayant pour objectif de surveiller la consommation en eau d'un système en circuit fermé, puis d'afficher le débit d'eau en temps réel, la consommation totale et la consommation par heure, sur notre site web en local en etherneta l'aide d'une carte Arduino Ethernet Shield, d'une Arduino Uno, d'une carte relais et d'un débimètre à effet hall. Nous avons déjà réussi a afficher la consommation totale et le débit d'eau en temps réel, mais nous sommes bloqués lorsque nous essayons de mesurer et d'afficher la consommation heure par heure.

Bonjour bon déjà il y a un programme et qui compile, on a connu pire :grin: Tu (pour l'equipe) bloque sur quoi et tu souhaite quoi exactement afficher la consommation de l'heure glissante ou afficher la consommation heure par heure journaliere ?

Bonjour
bon déjà il y a un programme et qui compile, on a connu pire smiley-mr-green

Oui c’est deja un bon début! :grin:
Ce que nous voudrions c’est afficher sur notre site le volume d’eau écoulé depuis le début de chaque heure puis a la nouvelle heure mettre à zéro mais tout en enregistrant cette valeur pour pouvoir la comparer avec les heures et les jours précédents.
Par exemple entre 14h00 et 15h00 le site affiche le volume écoulé pendant cette heure puis reset lorsqu’il est 15h01 et en enregistrant ce volume écoulé en une heure .
Voila je ne sais pas si j’ai été très clair mais merci de vos réponses dans tout les cas ! :slight_smile:

conso1:

Bonjour bon déjà il y a un programme et qui compile, on a connu pire smiley-mr-green

Oui c'est deja un bon début! :grin: Ce que nous voudrions c'est afficher sur notre site le volume d'eau écoulé depuis le début de chaque heure puis a la nouvelle heure mettre à zéro mais tout en enregistrant cette valeur pour pouvoir la comparer avec les heures et les jours précédents. Par exemple entre 14h00 et 15h00 le site affiche le volume écoulé pendant cette heure puis reset lorsqu'il est 15h01 et en enregistrant ce volume écoulé en une heure . Voila je ne sais pas si j'ai été très clair mais merci de vos réponses dans tout les cas ! :)

Afficher le volume consommé pendant une heure et faire un reset n'est pas tres compliqué afficher le volume consommé sur 24 periodes d'une heure pas beaucoup plus.

comme tu n'a pas d'horloge temps reel , le plus simple est de passer par l'utilisation de millis() ,voir et comprendre cette fonction là : http://arduino.cc/en/Reference/millis

commence par ecrire le code valide pour afficher la conso pour une conso d'une heure, propose le ici et aprés tu t'attaquera aux conso H sur 24H :grin:

Oui, nous nous demandions si nous ne devions pas investir une dizaine d'euros dans une horloge en temps réel afin de nous faciliter la tache! :grin: Je connaissais également millis() mais je n'ai pas fait de rechercherches approfondies. Je vais me renseigner et je vous tiendrais au courant, merci de votre réponse! ;)

conso1: Oui, nous nous demandions si nous ne devions pas investir une dizaine d'euros dans une horloge en temps réel afin de nous faciliter la tache! :grin: Je connaissais également millis() mais je n'ai pas fait de rechercherches approfondies. Je vais me renseigner et je vous tiendrais au courant, merci de votre réponse! ;)

si c'est pour une simple demonstration , l'utilisation d'une RTC ne s'impose pas vraiment (sauf là à compliquer) une bonne comprehension et utilisation de millis() fera l'affaire :grin:

Bonjour Puisque tu as un ethernet shield, tu peux faire une mise a l'heure via NTP et utiliser la fonction millis() entre chaque heure ou chaque 24 h.

point besoin d'avoir une grande précision entre deux créneaux de mesure.

  • lire l'heure NTP
  • deduire les secondes restante jusque l'heure pleine suivante boucle:
  • faire les mesures
  • tester fin du créneau de mesure -OUI -sauvegarde de la valeur + RAZ
  • Réinit du compteur de temps
  • continuer la boucle

faire un coup de temps en temps un recalage NTP

a+

Merci beaucoup de votre on essayer avec la fonction millis() :grin: