IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

Dispositif anti fuite d'eau


Sujet :

Arduino

  1. #1
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Mars 2021
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mars 2021
    Messages : 8
    Points : 10
    Points
    10
    Par défaut Dispositif anti fuite d'eau
    Bonjour a tous, j'ai pour projet de concevoir un dispositif anti fuite d'eau. Ce dispositif comprend un capteur de débit d'eau, un électrovanne et une carte Arduino. J'aimerais que si la variable L_hour est croissante pendant plus de 15 minutes, l’électrovanne se ferme et la diode intégré sur la carte s'allume. Si elle reste constante a moins de 15000, la variable se remet a zéro. Mais je suis débutant et je n'arrive pas à écrire le code. voici mon code actuel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
     
    volatile int  flow_frequency;         // Mesure les impulsions du débitmètre       
    unsigned int  l_hour;                   // Litres/heure calculé                          
    float flowmeter = 2;                    // broche jaune du débitmètre vers arduino Numéro de broche 2      
    unsigned long currentTime;
    unsigned long cloopTime;
     
     
    void flow () {                       // Fonction d'interruption       
       flow_frequency++;
    } 
     
    void setup() { 
     
      flow_frequency == 0;
     
       pinMode(8,INPUT);
       pinMode(LED_BUILTIN, OUTPUT);
       pinMode(flowmeter, INPUT);
       Serial.begin(9600); 
       attachInterrupt(0, flow, RISING);        // Configuration de l'interruption 
     
       sei();                                        // Activer les interruptions  
       currentTime = millis();
       cloopTime = currentTime;
       } 
     
    void _loop() {}
     
    void loop () {
       currentTime = millis();                         // Toutes les secondes, calculer et imprimer les litres/heure     
     
       if(currentTime >= (cloopTime + 1000)) {
       cloopTime = currentTime;                    // Mises à jour cloopTime    
         // Fréquence d'impulsion (Hz) = 7,5Q, Q étant le débit en L/min. (Résultats dans une fourchette de +/- 3%) 
          l_hour = (flow_frequency * 60 / 7.5); // (Fréquence d'impulsion x 60 min) / 7,5Q = débit en L/heure 
          Serial.print(l_hour, DEC);                 // Imprimer litres/heure
          Serial.println(" L/hour");}   
        digitalWrite(LED_BUILTIN, HIGH);
        pinMode(8,HIGH);}
       if(flow_frequency > 15000){
        flow_frequency == 0;}
    }
    */ Ici, j'aimerais mettre que si la variable L_hour est croissante pendant plus de 15 minutes, 
    l'éléctrovanne se ferme et que la diode intégré sur la carte s'allume. Si elle reste constante a
     moins de 15000, elle se remet a zero. /*
    Merci d'avance pour votre aide qui me sera fort précieuse !

  2. #2
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 711
    Points : 5 390
    Points
    5 390
    Par défaut
    pouvez vous repriser ce que vous voulez dire par
    quand le capteur de débit d'eau envoi un signal pendant plus de quinze minutes
    (il y a des choses qui ne vont pas dans le code, mais sans comprendre le cahier des charges c'est difficile de proposer des corrections)

  3. #3
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Mars 2021
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mars 2021
    Messages : 8
    Points : 10
    Points
    10
    Par défaut
    Je Voulais dire quand la variable l_hour était croissante pendant quinze minutes, l'électrovanne se mettait en position fermée.

  4. #4
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 711
    Points : 5 390
    Points
    5 390
    Par défaut
    essayez un truc comme cela (tapé ici sur la base de votre code, j'ai adapté un peu le nom et type des variables; code totalement non testé, c'est pour vous donner des idées)

    - je lis le flux pendant 10 secondes pour calculer une valeur moyenne (1s c'est peut être un peu juste ?)
    - on crée une zone critique dans laquelle on désactive les interruptions pour faire une copie de flowCount et le remettre à zéro avant de réactiver les interruptions. On travaille ensuite sur la copie (qui ne changera pas pendant les calculs)
    - les maths pour le calcul du débit sont basés sur votre commentaire.
    - sous 10l/h on considère que ça ne coule pas (à vous de décider si ça doit être une autre valeur)
    - si le débit a été supérieur à 10l/h pendant plus de 15 minutes on coupe et le programme s'arrête

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    const byte flowMeterPin = 2;      // broche jaune du débitmètre vers arduino Numéro de broche 2
    const byte valvePin = 8;          // broche de contrôle de l'électrovanne
    volatile unsigned long flowCount; // Mesure les impulsions du débitmètre
    unsigned long previousTime;
    unsigned long flowStartTime;
    bool noFlow = true;
     
    // Fonction d'interruption
    void flowTick() {
      flowCount++;
    }
     
    void setup() {
      pinMode(LED_BUILTIN, OUTPUT); // LOW par defaut
      pinMode(flowMeterPin, INPUT);
     
      pinMode(valvePin, OUTPUT);
      digitalWrite(valvePin, HIGH); // <<< QUESTION: DOIT ON OUVRIR LA VANNE ICI ???
     
      Serial.begin(115200);
      attachInterrupt(digitalPinToInterrupt(flowMeterPin), flowTick, RISING);        // Configuration de l'interruption
      previousTime =  millis();
    }
     
    void loop () {
      unsigned long currentTime = millis();
      if (currentTime - previousTime >= 10000ul) { // lecture pendant 10 secondes du flux avant calcul 
        noInterrupts(); // zone critique, on désactive les interruptions
        unsigned long flowCountCopy = flowCount; // on fait une copie de la valeur
        flowCount = 0;
        interrupts(); // on active à nouveau les interruptions
        // on a reçu flowCountCopy impulsions en (currentTime - previousTime) ms
        // la fréquence d'impulsion est donc 1000 * flowCountCopy / (currentTime - previousTime) en Hz
        // Fréquence d'impulsion (Hz) = 7,5Q, Q étant le débit en L/min. (Résultats dans une fourchette de +/- 3%)
        double debit = (60000.0 * flowCountCopy / (currentTime - previousTime)) / 7.5; // l/h
     
        if (debit >= 10.0) { // si on a plus de 10l par heure on considère qu'il y a un flux (adapter 10 à vos besoins)
          if (noFlow) { // si le flux n'était pas actif précédemment, on note l'heure de démarrage du flux
            flowStartTime = currentTime;
            noFlow = false;
          } else {
            if (currentTime - flowStartTime >= 900000ul) {          // flux actif depuis 15 minutes (15 * 60 * 1000ms) ?
              digitalWrite(LED_BUILTIN, HIGH);
              digitalWrite(valvePin, LOW); // fermer la vanne
              while (true); // on arrête le programme ici
            }
          }
        } else noFlow = true;
     
        Serial.print(debit);                 // Imprimer litres/heure
        Serial.println(F(" L/h"));
        previousTime = currentTime; // Mises à jour previousTime
      }
    }
    Mais à mon avis si vous voulez régler l'arrosage, il vaudrait mieux peut-être compter le nombre de litres écoulés et éteindre après un certain volume... je vous laisse modifier en conséquence

  5. #5
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Mars 2021
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mars 2021
    Messages : 8
    Points : 10
    Points
    10
    Par défaut
    Merci beaucoup pour votre réponse !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Sécurité] Dispositif anti-spam en PHP ?
    Par Nerva dans le forum Langage
    Réponses: 19
    Dernier message: 27/11/2006, 10h07
  2. Anti Spam sous RedHat
    Par TuxP dans le forum Réseau
    Réponses: 3
    Dernier message: 03/02/2004, 11h26
  3. [debug] fuites mémoires
    Par tmonjalo dans le forum C
    Réponses: 3
    Dernier message: 28/07/2003, 17h20
  4. [] [Réseau] Anti-timer, anti-idle
    Par clonevince dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 15/01/2003, 22h19
  5. Réponses: 8
    Dernier message: 17/10/2002, 12h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo