Watermeter excessen!
5 berichten
• Pagina 1 van 1
Watermeter excessen!
Dag allemaal!
Ik heb weer een probleemke gehad en (deels) kunnen oplossen met onze bekende Arduino Uno.
Wij zijn aangesloten op het openbaar drinkwaternet en verbruiken ongeveer 40 liter per dag. Door een fout in een overdrukklep van de keukenboiler is er ergens 70m³ water in het riool "verdwenen" ...
Dit impliceert niet alleen het water te betalen maar ook nog de milieuheffing daarop. Een Arduino is goedkoper. Zeker weten.
Daarom bedacht ik deze oplossing: Ik bouw een watermeter om met een fotocel die de 'liters' water registreert in een Arduino Uno, en wanneer de hoeveelheid water per 24u (in mijn geval) de vijftig liter overschrijdt, er een alarm afgaat.
Ik wil wel duidelijk stellen dat we ook nog regenwater hebben die gebruikt wordt voor bad, wc, wasmachine ... Drinkwater alleen in de keuken dus.
Om het zo simpel mogelijk te houden dacht ik gewoon aan een teller die tot 50 liter telt, en bij overschrijding een uitgang activeert die een piezo alarmzoemer laat afgaan. Tot daar geen probleem.
De teller moet ook om de 24u ge reset worden. Daar dacht ik om de Arduino Uno volledig te resetten middels een programma te implementeren die ik ook op het net gevonden had.
Dit werkt ... maar niet voor 24 uur ... zie lijn int interval waar ik een waarde van 24 uur of 86400000 mS wil invoeren. Waar zit nu de fout? Zal waarschijnlijk weer een kleinigheid geweest zijn die ik over het hoofd gezien heb.
Kan iemand me helpen aub? Alvast heel erg bedankt.
Hieronder de code:
/*Watermeter met alarm
* ——————
deze telt het waterverbruik per 24u en na overschrijding van de dagelijkse limiet van 50 Liter gaat het alarm over.
Resetten gaat met DE RESET drukknop of automatisch omde 24u.
*/
int ledPin = 13; // choose the pin for the LED
int tellerpuls = 2; // choose the input pin for the watermeter
int val = 0; // variable for reading the pin status
int counter = 0;
int currentState = 0;
int previousState = 0;
int alarm = 3;
int interval = 10000; // reset na x mS of 24 uur: HIER LOOPT HET FOUT denk ik!
long int time = 0; // reset time
void setup() {
digitalWrite(7, HIGH); //We need to set it HIGH immediately on boot
pinMode(7,OUTPUT); //We can declare it an output ONLY AFTER it's HIGH
pinMode(ledPin, OUTPUT); // declare LED as output
pinMode(tellerpuls, INPUT); // declare photocell as input
pinMode(alarm, OUTPUT); // declare alarm output for sounder
Serial.begin(9600);
}
void loop(){
val = digitalRead(tellerpuls); // read input value
if (val == HIGH) { // check if the input is HIGH (button released)
digitalWrite(ledPin, HIGH); // turn LED on
currentState = 1;
}
else {
digitalWrite(ledPin, LOW); // turn LED off
currentState = 0;
}
if(currentState != previousState){
if(currentState == 1){
counter = counter + 1;
Serial.println(counter);
}
}
previousState = currentState;
delay(25); // anti bouncing
if (counter==50)
{digitalWrite(alarm, HIGH); //als waterverbruik 50L is, gaat alarm aan
}
else{}
//Reset systeem na 24 uur:
time = millis();
Serial.println(time);
if(time > interval){
Serial.println("RESET!");
digitalWrite(7, LOW); //Pulling the RESET pin LOW triggers the reset.
}
}
Ik heb weer een probleemke gehad en (deels) kunnen oplossen met onze bekende Arduino Uno.
Wij zijn aangesloten op het openbaar drinkwaternet en verbruiken ongeveer 40 liter per dag. Door een fout in een overdrukklep van de keukenboiler is er ergens 70m³ water in het riool "verdwenen" ...
Dit impliceert niet alleen het water te betalen maar ook nog de milieuheffing daarop. Een Arduino is goedkoper. Zeker weten.
Daarom bedacht ik deze oplossing: Ik bouw een watermeter om met een fotocel die de 'liters' water registreert in een Arduino Uno, en wanneer de hoeveelheid water per 24u (in mijn geval) de vijftig liter overschrijdt, er een alarm afgaat.
Ik wil wel duidelijk stellen dat we ook nog regenwater hebben die gebruikt wordt voor bad, wc, wasmachine ... Drinkwater alleen in de keuken dus.
Om het zo simpel mogelijk te houden dacht ik gewoon aan een teller die tot 50 liter telt, en bij overschrijding een uitgang activeert die een piezo alarmzoemer laat afgaan. Tot daar geen probleem.
De teller moet ook om de 24u ge reset worden. Daar dacht ik om de Arduino Uno volledig te resetten middels een programma te implementeren die ik ook op het net gevonden had.
Dit werkt ... maar niet voor 24 uur ... zie lijn int interval waar ik een waarde van 24 uur of 86400000 mS wil invoeren. Waar zit nu de fout? Zal waarschijnlijk weer een kleinigheid geweest zijn die ik over het hoofd gezien heb.
Kan iemand me helpen aub? Alvast heel erg bedankt.
Hieronder de code:
/*Watermeter met alarm
* ——————
deze telt het waterverbruik per 24u en na overschrijding van de dagelijkse limiet van 50 Liter gaat het alarm over.
Resetten gaat met DE RESET drukknop of automatisch omde 24u.
*/
int ledPin = 13; // choose the pin for the LED
int tellerpuls = 2; // choose the input pin for the watermeter
int val = 0; // variable for reading the pin status
int counter = 0;
int currentState = 0;
int previousState = 0;
int alarm = 3;
int interval = 10000; // reset na x mS of 24 uur: HIER LOOPT HET FOUT denk ik!
long int time = 0; // reset time
void setup() {
digitalWrite(7, HIGH); //We need to set it HIGH immediately on boot
pinMode(7,OUTPUT); //We can declare it an output ONLY AFTER it's HIGH
pinMode(ledPin, OUTPUT); // declare LED as output
pinMode(tellerpuls, INPUT); // declare photocell as input
pinMode(alarm, OUTPUT); // declare alarm output for sounder
Serial.begin(9600);
}
void loop(){
val = digitalRead(tellerpuls); // read input value
if (val == HIGH) { // check if the input is HIGH (button released)
digitalWrite(ledPin, HIGH); // turn LED on
currentState = 1;
}
else {
digitalWrite(ledPin, LOW); // turn LED off
currentState = 0;
}
if(currentState != previousState){
if(currentState == 1){
counter = counter + 1;
Serial.println(counter);
}
}
previousState = currentState;
delay(25); // anti bouncing
if (counter==50)
{digitalWrite(alarm, HIGH); //als waterverbruik 50L is, gaat alarm aan
}
else{}
//Reset systeem na 24 uur:
time = millis();
Serial.println(time);
if(time > interval){
Serial.println("RESET!");
digitalWrite(7, LOW); //Pulling the RESET pin LOW triggers the reset.
}
}
Advertisement
Re: Watermeter excessen!
Maak van de int interval ook een long int. 65536 of daaromtrent is het maximum voor een int. Daar gaan dus niet genoeg milliseconden voor een hele dag in.
Oh, en dan moet je denk ik interval ook initialiseren op 86400000. Dus:
Succes, Karel
Oh, en dan moet je denk ik interval ook initialiseren op 86400000. Dus:
- Code: Alles selecteren
long int interval = 86400000;
Succes, Karel
If you think education is expensive, try ignorance! (Derek Bok)
Re: Watermeter excessen!
Bedankt karel, zal dat subiet eens proberen, orgen hoor je ervan ... MAAR ik vertrouw uw raad zeker!!!
Re: Watermeter excessen!
datzelfde voor de counter want er komen veel meer pulsjes uit de watermeter per liter.
en je hoeft niet de hele arduino te resetten, alleen een variabele en die moet je niet resetten maar er 86400000 van af trekken.
eigenlijk moet je dus bij die tijd telkens het aantal mills bijtellen totdat je over de 24 uur gaat.
en je hoeft niet de hele arduino te resetten, alleen een variabele en die moet je niet resetten maar er 86400000 van af trekken.
eigenlijk moet je dus bij die tijd telkens het aantal mills bijtellen totdat je over de 24 uur gaat.
paul deelen
shooter@home.nl
shooter@home.nl
5 berichten
• Pagina 1 van 1
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 8 gasten