www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

Flow senzor OF05ZAT Arduino

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Arduino sekcija
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
galex4
Član
Član



Pridružen-a: Tor 01 Apr 2008 18:27
Prispevkov: 459
Aktiv.: 2.36

PrispevekObjavljeno: Pon Apr 02, 2018 9:43 am    Naslov sporočila:  Flow senzor OF05ZAT Arduino Odgovori s citatom

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)?
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
rafaellsi
Član
Član



Pridružen-a: Ned 11 Sep 2011 18:54
Prispevkov: 477
Aktiv.: 3.12
Kraj: Radovljica

PrispevekObjavljeno: Pon Apr 02, 2018 10:42 am    Naslov sporočila:   Odgovori s citatom

število preštetih pulzov moraš deliti s časom v katerem si tepulze naštel ...
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
galex4
Član
Član



Pridružen-a: Tor 01 Apr 2008 18:27
Prispevkov: 459
Aktiv.: 2.36

PrispevekObjavljeno: Pon Apr 02, 2018 1:30 pm    Naslov sporočila:   Odgovori s citatom

Se pravi v mojem primeru:

l_h = copyPulseCount/previousMillis;
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
California
Član
Član



Pridružen-a: Pet 26 Avg 2005 19:48
Prispevkov: 219
Aktiv.: 0.99
Kraj: Hrastnik

PrispevekObjavljeno: Tor Apr 03, 2018 10:45 am    Naslov sporočila:   Odgovori s citatom

Število pulzov deliš z 2174 da dobiš litre. Ko porabo prečitaš, števec postaviš na 0 in tako vsako polno uro ...

Lp, Vlado

_________________
California
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
igo
Član
Član



Pridružen-a: Sre 11 Okt 2006 19:11
Prispevkov: 3638
Aktiv.: 17.11

PrispevekObjavljeno: Tor Apr 03, 2018 1:27 pm    Naslov sporočila:   Odgovori s citatom

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š.

_________________
Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
RGorazd
Član
Član



Pridružen-a: Čet 20 Maj 2004 15:57
Prispevkov: 1712
Aktiv.: 7.71
Kraj: Ig

PrispevekObjavljeno: Sre Apr 04, 2018 11:28 pm    Naslov sporočila:   Odgovori s citatom

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

_________________
.
._. _ _ ._. _.__. _|
[ (_](_)[ (_] /_(_]
._|
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Arduino sekcija Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
Ne, ne moreš dodajati novih tem v tem forumu
Ne, ne moreš odgovarjati na teme v tem forumu
Ne, ne moreš urejati svojih prispevkov v tem forumu
Ne, ne moreš brisati svojih prispevkov v tem forumu
Ne ne moreš glasovati v anketi v tem forumu
Ne, ne moreš pripeti datotek v tem forumu
Ne, ne moreš povleči datotek v tem forumu

Uptime: 48 dni


Powered by phpBB © 2001, 2005 phpBB Group