Σήμερα, με δεδομένη την κλιματική κρίση, το νερό γίνεται όλο και πιο πολύτιμο αγαθό. Αυτό το καλοκαίρι η Ευρώπη κατέγραψε τρομακτική μείωση της στάθμης των ποταμών της, εξαιτίας της ανομβρίας. Συνεπώς, οι όποιες διαρροές στο σύστημα ύδρευσης των οικιών, των βιομηχανιών ή των συστημάτων ποτίσματος των χωραφιών κλπ, είναι αναγκαίο να εντοπίζονται και να εξουδετερώνονται άμεσα. Διαφορετικά, γίνεται σπατάλη νερού σε μία περίοδο κρίσιμη σε ό,τι αφορά τα υδάτινα αποθέματα. Επιπλέον, αν η διαρροή δεν γίνει έγκαιρα αντιληπτή, ο λογαριασμός ύδρευσης θα επιβαρυνθεί με μεγάλα ποσά, συνεπώς θα υπάρξει και οικονομική επιβάρυνση του ιδιοκτήτη. Τέλος, διαρροές μέσα στο οίκημα, συνεπάγονται σοβαρές ζημιές (π.χ. δάπεδα, ταβάνι, τοίχοι κλπ).
Η λύση που προτείνεται είναι η συνεχής παρακολούθηση της τιμής της ροής του ύδατος εντός μιας εγκατάστασης (π.χ. σωληνώσεις οικίας), χρησιμοποιώντας μετρητή ροής νερού για 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);
}
}
}
Δεν υπάρχουν σχόλια:
Δημοσίευση σχολίου
Σημείωση: Μόνο ένα μέλος αυτού του ιστολογίου μπορεί να αναρτήσει σχόλιο.