contador de agua

Todo lo relacionado con el software de Arduino
Cerrado
Avatar de Usuario
Sigmundfreud
Mensajes: 269
Registrado: Mar Feb 12, 2019 8:23 pm
Ubicación: Girona

contador de agua

Mensaje por Sigmundfreud » Dom Mar 03, 2019 8:02 am

correos pregunta

Hola necesito hacerme un contador de agua uso un sensor de flujo conectado con una tarjeta arduino uno
encontre un codigo que me registra ademas del flujo y los litros que pasan por minuto registra el totaliza los litros que han pasado por el sensor
pero lo que me esta pasando cuando ya cuenta que ham pasado aproximadamente 145 litros se reinicia y empieza a contar desde cero de nuevo todo esto lo envio a una pgina de excel con plx daq
aqui añado el codigo haber si alguien me echa un cable o sabe de alguno que me sirva
gracias

Código: Seleccionar todo

//which pin to use for reading the sensor? can use any pin!
#define FLOWSENSORPIN 2

// count how many pulses!
volatile uint16_t pulses = 0;
// track the state of the pulse pin
volatile uint8_t lastflowpinstate;
// you can try to keep time of how long it is between pulses
volatile uint32_t lastflowratetimer = 0;
// and use that to calculate a flow rate
volatile float flowrate;
// Interrupt is called once a millisecond, looks for any pulses from the sensor!
SIGNAL(TIMER0_COMPA_vect) {
uint8_t x = digitalRead(FLOWSENSORPIN);

if (x == lastflowpinstate) {
lastflowratetimer++;
return; // nothing changed!
}

if (x == HIGH) {
//low to high transition!
pulses++;
}
lastflowpinstate = x;
flowrate = 1000.0;
flowrate /= lastflowratetimer; // in hertz
lastflowratetimer = 0;
}

void useInterrupt(boolean v) {
if (v) {
// Timer0 is already used for millis() - we'll just interrupt somewhere
// in the middle and call the "Compare A" function above
OCR0A = 0xAF;
TIMSK0 |= _BV(OCIE0A);
} else {
// do not call the interrupt function COMPA anymore
TIMSK0 &= ~_BV(OCIE0A);
}
}

void setup() {
Serial.begin(9600);

Serial.println("LABEL,Time,date,litros");
pinMode(FLOWSENSORPIN, INPUT);
digitalWrite(FLOWSENSORPIN, HIGH);
lastflowpinstate = digitalRead(FLOWSENSORPIN);
useInterrupt(true);
}

void loop() // run over and over again
{ 






// if a plastic sensor use the following calculation
// Sensor Frequency (Hz) = 7.5 * Q (Liters/min)
// Liters = Q * time elapsed (seconds) / 60 (seconds/minute)
// Liters = (Frequency (Pulses/second) / 7.5) * time elapsed (seconds) / 60
// Liters = Pulses / (7.5 * 60)
float liters = pulses;
liters /= 7.5;
liters /= 60.0;

/*
// if a brass sensor use the following calculation
float liters = pulses;
liters /= 8.1;
liters -= 6;
liters /= 60.0;
*/
Serial.print("DATA,TIME,DATE, ");
Serial.print(liters); 
Serial.println();
delay(1800000);
}

Avatar de Usuario
Sigmundfreud
Mensajes: 269
Registrado: Mar Feb 12, 2019 8:23 pm
Ubicación: Girona

Re: contador de agua

Mensaje por Sigmundfreud » Dom Mar 03, 2019 8:03 am

solucion aportada por peninquen

Hola, justamente la semana pasada planteé incluir el código necesario para gestionar sensores de pulso como el caudalimetro que planteas.
El código que utilizas lo he visto en varias páginas y está bien si el Arduino no tiene nada más que hacer, ya que la interrupción es de un timer que entra cada milisegundo, mira el pin del sensor y si ha cambiado incrementa el contador de pulsos 'pulses'.

Así a simple vista no veo que resetee el contador después de 'liters=pulses;' con lo que se producirá un overflow y pasa a un valor negativo, lo que no tiene sentido en un contador.
Puedes probar con un 'volatile unsigned long pulses', que te da un rango de 32 bits (0 hasta 4.294.967.295). No ostante el contador total llegará al final y vuelta a comenzar.

También puedes pones después de 'float liters=pulses;' haces 'pulses=0;' y en vez de un contador total tienes un contador parcial.

No obstante no me gusta este código, con el 'delay (180000) de TREINTA MINUTOS al final.

Acabo de encontrar esta página http://gammon.com.au/interrupts donde tratan las interrupciones y esta otra http://www.gammon.com.au/timers sobre los timers.

Si tienes un poco de paciencia estoy preparando una librería para gestionar estos sensores, pero todavía está verde.

Suerte

Cerrado

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado