www.elektronik.si
Flow senzor OF05ZAT Arduino

www.elektronik.si -> Arduino sekcija

Avtor: galex4 PrispevekObjavljeno: Pon Apr 02, 2018 9:43 am    Naslov sporočila:  Flow senzor OF05ZAT Arduino
----------------------------------------------------------------------------
Pozdravljeni,

Kot že sam naslov pove gre za omenjeni senzor pretoka.
Pri izračunu pretoka l/h sem naletel na težavo kako pretvoriti litre v litre na uro.
Pisan program za Arduinota.

Koda:
Koda:

volatile uint32_t  PulseCount = 0;
uint32_t copyPulseCount; 

uint32_t lastDisplay = 0;

int hall = 2;

void processPulse()
{
  PulseCount++;
}

void setup()
{
  pinMode(hall, INPUT);
  digitalWrite(hall, HIGH);
 

  attachInterrupt(0, processPulse, RISING);

  sei();   
 
  Serial.begin(115200);
}

void loop ()   
{
  if (millis() - lastDisplay >= 1000)
  {
    lastDisplay += 1000;

    cli();
    copyPulseCount  = PulseCount;
    sei();

    Serial.print("Puls:\t");
    Serial.println(copyPulseCount);

    float liters = copyPulseCount  * 4.6E-4; // = * 0.00046
    Serial.print("Liter:\t");
    Serial.println(liters, 3);

  }
}


Proizvajalec navaja, da je njegova t.i. ločljivost 0,46mL/P kar pomeni 2174 pulz/l.

Izpis na serial monitor deluje, sedaj pa imam težavo pretvoriti litre v litre na uro (osnove matematike). d'oh!

Ali je izračun pravi:

liters = liters /60; //da litre delim 1/60 kar pomeni 60 min?

Ali ga moram v tem primeru deliti 3600 (3600 sekund)?

Avtor: rafaellsiKraj: Radovljica PrispevekObjavljeno: Pon Apr 02, 2018 10:42 am    Naslov sporočila:  
----------------------------------------------------------------------------
število preštetih pulzov moraš deliti s časom v katerem si tepulze naštel ...

Avtor: galex4 PrispevekObjavljeno: Pon Apr 02, 2018 1:30 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Se pravi v mojem primeru:

l_h = copyPulseCount/previousMillis;

Avtor: CaliforniaKraj: Hrastnik PrispevekObjavljeno: Tor Apr 03, 2018 10:45 am    Naslov sporočila:  
----------------------------------------------------------------------------
Število pulzov deliš z 2174 da dobiš litre. Ko porabo prečitaš, števec postaviš na 0 in tako vsako polno uro ...

Lp, Vlado

Avtor: igo PrispevekObjavljeno: Tor Apr 03, 2018 1:27 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Kolikšen je največji možen pretok na minuto?
Jaz bi lepo štel impulze in vsako minuto v polje spremenljivk zapisal preštete impulze v pravkar pretekli minuti.
unsigned int PulziVminuti[60];
byte indexMinut; // kroži od 0 do 59 in spet na 0

Ko bi vpisal 60 vrednosti, bi povozil najstarejšo in potem naslednjo ...
Nato bi vsako minuto preprosto seštel vseh 60 vrednosti in vsoto delil s (60 * 2174) = 130440.
Tako bi dobil pretok v zadnji uri.

Torej:
Koda:

void loop()
{
  miliZdaj = millis(); // centralni trenutni čas

  if (miliZdaj - miliPrej > 60000) // je minila 1 minuta?
  { // ja
    PulziVminuti[indexMinut] = pravkarPresteto;
    pravkarPresteto = 0; // šteje nove impulze
    if(indexMinut < 59) indexMinut++;
    else indexMinut = 0; // pripravi za naslednji vpis
    miliPrej = miliZdaj; // pripravi za novo minuto

    for (i = 0; i < 60; i++)
    {
      PulziVUri = PulziVUri + PulziVminuti[i];
    }

    Pretok = PulziVUri / 130440;
    Izpis ...
  } // vsako minuto

}// void loop()


Pred vpisom v polje dodaš še kopijo in sei()/cli(), ... to že znaš.

Avtor: RGorazdKraj: Ig PrispevekObjavljeno: Sre Apr 04, 2018 11:28 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Napravi frekvencmeter, ki bo meril frekvenco, dobil boš podatek v hertzih. Veš, da predstavlja 2174 Hz 1l/s, kar znese 60l na minuto. Če boš dobil 100Hz, je to 100/2174 * 60 je cca 2,7l/min

LP G

Stran 1 od 1

Powered by phpBB © 2001,2002 phpBB Group