Παρασκευή 8 Σεπτεμβρίου 2023

ΑΥΤΟΜΑΤΟΣ ΕΛΕΓΧΟΣ ΔΙΑΡΡΟΗΣ ΝΕΡΟΥ

Σήμερα, με δεδομένη την κλιματική κρίση, το νερό γίνεται όλο και πιο πολύτιμο αγαθό. Αυτό το καλοκαίρι η Ευρώπη κατέγραψε τρομακτική μείωση της στάθμης των ποταμών της, εξαιτίας της ανομβρίας. Συνεπώς, οι όποιες διαρροές στο σύστημα ύδρευσης των οικιών, των βιομηχανιών ή των συστημάτων ποτίσματος των χωραφιών κλπ, είναι αναγκαίο να εντοπίζονται και να εξουδετερώνονται άμεσα. Διαφορετικά, γίνεται σπατάλη νερού σε μία περίοδο κρίσιμη σε ό,τι αφορά τα υδάτινα αποθέματα. Επιπλέον, αν η διαρροή δεν γίνει έγκαιρα αντιληπτή, ο λογαριασμός ύδρευσης θα επιβαρυνθεί με μεγάλα ποσά, συνεπώς θα υπάρξει και οικονομική επιβάρυνση του ιδιοκτήτη. Τέλος, διαρροές μέσα στο οίκημα, συνεπάγονται σοβαρές ζημιές (π.χ. δάπεδα, ταβάνι, τοίχοι κλπ).


 Η λύση που προτείνεται είναι η συνεχής παρακολούθηση της τιμής της ροής του ύδατος εντός μιας εγκατάστασης (π.χ. σωληνώσεις οικίας), χρησιμοποιώντας μετρητή ροής νερού για Arduino, τοποθετημένο αμέσως μετά το υδρόμετρο. O Έλεγχος θα γίνεται από το Arduino. Κάθε φορά που θα υπάρχει ροή, ένας μετρητής θα μετράει κάθε δευτερόλεπτο την διάρκειά της. Αν η ροή μηδενιστεί, ο μετρητής θα μηδενίζεται . Ωστόσο, αν η ροή καταγράφεται συνεχώς για ένα χρονικό διάστημα που ορίζει ο χρήστης χωρίς να μηδενίζεται, σημαίνει ότι υπάρχει διαρροή, οπότε θα δίνεται εντολή σε μία βαλβίδα και θα σταματά η παροχή νερού αμέσως μετά το υδρόμετρο, ειδοποιώντας τον ιδιοκτήτη με διάφορους τρόπους. Ο χρήστης, πατώντας ένα κουμπί, κάνει reset οπότε η βαλβίδα ανοίγει και ο μετρητής ξεκινά να μετράει τη διάρκεια της ροής όπως πριν. 




Παρακάτω δίνεται ο κώδικας για Arduino:

  volatile int flow_frequency; // Measures flow sensor pulses

unsigned char flowsensor = 2; // Sensor Input

unsigned long currentTime;

unsigned long cloopTime;

int flow_counter=0;

int valve_close=9;

const int resetbuttonPin = 7;

const int resetPin =  5;

int resetbuttonState = 0; 

void flow () // Interrupt function

{

   flow_frequency++;

}




void setup() {

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

pinMode(valve_close, OUTPUT);

pinMode(flowsensor, INPUT);

pinMode(resetbuttonPin, INPUT);

pinMode(resetPin, OUTPUT);

   digitalWrite(flowsensor, HIGH);

   Serial.begin(9600);


   attachInterrupt(digitalPinToInterrupt(flowsensor), flow, RISING); // Setup Interrupt

  currentTime = millis();

   cloopTime = currentTime;

   

}


void loop() {

  resetbuttonState = digitalRead(resetbuttonPin);

 digitalWrite(valve_close, HIGH);// THE VALVE RELAY HAS NEGATIVE LOGIC

  digitalWrite(resetPin, LOW); 

  // check if the pushbutton is pressed. If it is, the buttonState is HIGH:

  if (resetbuttonState == HIGH) {

    // open the valve:

    digitalWrite(resetPin, HIGH);

     digitalWrite(valve_close, HIGH);// THE VALVE RELAY HAS NEGATIVE LOGIC

    delay(6000) ;

      digitalWrite(resetPin, LOW);  }

  

currentTime = millis();

   // Every second, calculate and print litres/hour

   if(currentTime >= (cloopTime + 1000))

   {

    cloopTime = currentTime; // Updates cloopTime

    if(flow_frequency != 0){

     

       flow_counter++; //increase counter every second

       flow_frequency = 0;

      Serial.print(flow_counter);

      if (flow_counter >   20){

        Serial.print("Water Leakage");

      digitalWrite(valve_close, LOW  );// THE VALVE RELAY HAS NEGATIVE LOGIC

       digitalWrite(resetPin, LOW);

      delay(6000) ;

      digitalWrite(valve_close, LOW);      

      }

    }

    else {

        flow_counter = 0; // Reset Counter

              digitalWrite(valve_close, LOW);     

        Serial.print(flow_counter);

        Serial.print(valve_close);

     }

     

     }

}

Δεν υπάρχουν σχόλια:

Δημοσίευση σχολίου

Σημείωση: Μόνο ένα μέλος αυτού του ιστολογίου μπορεί να αναρτήσει σχόλιο.