Arduinoda 2 darbe arası süre hesaplama

https://www.instructables.com/Ho-to-Make-Arduino-Based-Digital-Tachometer-Simple/ bu veya bunun gibi https://create.arduino.cc/projecthu...ounter-with-a-new-and-faster-algorithm-3af9f3 bir tachometer arduino yazılımını değiştirerek kullanmanız çok daha kolay olacaktır kronometre değiştirmesi daha zor sürekliliği olan bir algoritma değil. Bu kodlar sürekli pulse var mı diye kontrol ediyor hem. Varsa da aradaki süreyi hesaplayıp ekrana bunlar rpm yazdırıp hemen saymaya devam ediyor süreyi. Kodunuz için önemli olan 10 litrelik bir hassasiyet sizin için yeterli mi kodu ona göre de biraz özelleştirmeniz gerekli. 1sn devreyi kapayarak bağlıyor demişsiniz. Eğer kulanacağınız yerde saniyede 10 litre veya altında bir su geçişi olacaksa hatta 20 30 da olabilir 1sn lik pulse hesabı bozabilir. Ya da kodda oynama yaparak pulse gördüğü an kodunuzu 2-3 ms gibi tetikleyebilirsiniz. Bilmiyorum anlatabildim mi? Pulse yokken de örneğin saniyede 10 L akıyorsa ve pulse dediğim gibi 3ms görünecek şekilde ayarladınız. 997 ms süreyi ölçer program bir if içinde, 3ms olunca da sayaç değişkenini bir arttırarak toplam geçen suyu hesaplar. En son da toplam su ve anlık geçen suyu yazdırırsınız.
 
Uğraşmadan olmaz. Vakti müsait olan işi yapma becerisine sahip birinden yardım almanızı ya da bilen birine yaptırmanızı öneririm.
 
Cevaplar için teşekkürler. Şöyle bir şey oluşturdum kendim ama mantık doğru mu emin değilim. Tinkercad'de butonla simüle ediyorum fakat daha butona basmadan farklı farklı değerler akıyor.

Kod:
#define darbePin 2
bool deger = 0;
float ilkzaman=0;
float sonzaman=0;
float farkzaman=0;
float debiilk=0; // L/ms
float debison=0; // m3/sa

void setup()
{
  Serial.begin(9600);
  pinMode(darbePin, INPUT);
}

void loop()
{
  deger = digitalRead(darbePin);
 
  if(deger==1){
    ilkzaman = millis();
  }
  if(deger==0) {
    sonzaman = millis();
    farkzaman = (sonzaman - ilkzaman);
  }
  Serial.print("SURE FARKI :");
  Serial.println(farkzaman);
 
  debiilk = (10 / farkzaman) * 1000;  // 10L/2000ms = 0.005 L/ms  0.005*1000=5 L/s 
  debison = (debiilk * 3.6);  // 5 x 3.6 = 18 m3/sa
  Serial.print ("ANLIK DEBI DEGERI :");
  Serial.println(debison);
 
}
 
if(deger==0) {
sonzaman = millis();
farkzaman = (sonzaman - ilkzaman);
}

Bu kodla butona basılmadığı zaman millis değerini çekip farkzaman formülünde de hesaplatmışsınız. Haliyle butona basılmadığı zamanlarda değer okunması doğal. Düşünce tarzı yanlış olmuş.
 
Ben mi yanlış düşünüyorum pulse 1sn olması sorun yaratmaz mı? Çıkarıyoruz süreleri kodda fakat diyelim 10L 1sn'de aktı. Pulse geldi o da 1 sn. Sıfır çıkacak ancak debi yüksek olacak ki 1 sn pulse çok da mühim olmasın. Yanlış mıyım?
 
C:
nkercad'de butonla simüle ediyorum fakat daha butona basmadan farklı farklı değerler akıyor.

Kod:
#define darbePin 2
bool deger = 0;
float ilkzaman=0;
float sonzaman=0;
float farkzaman=0;
float debiilk=0; // L/ms
float debison=0; // m3/sa

void setup()
{
  Serial.begin(9600);
  pinMode(darbePin, INPUT);
}

void loop()
{
  deger = digitalRead(darbePin);
 
  
  if(deger==1) {
    sonzaman = millis();
    farkzaman = (sonzaman - ilkzaman);
    ilkzaman=sonzaman;
  
  Serial.print("SURE FARKI :");
  Serial.println(farkzaman);
 
  debiilk = (10 / farkzaman) * 1000;  // 10L/2000ms = 0.005 L/ms  0.005*1000=5 L/s
  debison = (debiilk * 3.6);  // 5 x 3.6 = 18 m3/sa
  Serial.print ("ANLIK DEBI DEGERI :");
  Serial.println(debison);
   }

}
 
if(deger==0) {
sonzaman = millis();
farkzaman = (sonzaman - ilkzaman);
}

Bu kodla butona basılmadığı zaman millis değerini çekip farkzaman formülünde de hesaplatmışsınız. Haliyle butona basılmadığı zamanlarda değer okunması doğal. Düşünce tarzı yanlış olmuş.
Dediğim gibi tam anlamıyla hakim değilim algoritma mantığına.
Ben mi yanlış düşünüyorum pulse 1sn olması sorun yaratmaz mı? Çıkarıyoruz süreleri kodda fakat diyelim 10L 1sn'de aktı. Pulse geldi o da 1 sn. Sıfır çıkacak ancak debi yüksek olacak ki 1 sn pulse çok da mühim olmasın. Yanlış mıyım?
Aslında darbenin kaç saniye sürdüğünü tahmini söyledim kronometre tutmadım yani. Darbe denilen şey 10 litre geçtiğinde teli anahtarlayarak kısa devre yapması demek. Bu süre sabit değil yani pompalar yavaş çalışırsa 10 litre 2 saniyedede geçebilir, 500 msde de geçebilir. Mesela bizim mekanik sayacın üzerinde ibreler var, biz manuel olarak debiyi 24 m3/sa gibi değerler gözlemledik. Teoride de en fazla 48 m3/sa olmasını bekliyoruz. Burda birden çok sorun var aslında. Bağlantı kısmı da ayrı bir sorun. Sensörün içinden kısa devreli olan iki kablonun 10litrede bir verdiği uyarıyı arduinoya nasıl okuturuz bu da net değil henüz.
C:
nkercad'de butonla simüle ediyorum fakat daha butona basmadan farklı farklı değerler akıyor.

Kod:
#define darbePin 2
bool deger = 0;
float ilkzaman=0;
float sonzaman=0;
float farkzaman=0;
float debiilk=0; // L/ms
float debison=0; // m3/sa

void setup()
{
  Serial.begin(9600);
  pinMode(darbePin, INPUT);
}

void loop()
{
  deger = digitalRead(darbePin);

 
  if(deger==1) {
    sonzaman = millis();
    farkzaman = (sonzaman - ilkzaman);
    ilkzaman=sonzaman;
 
  Serial.print("SURE FARKI :");
  Serial.println(farkzaman);

  debiilk = (10 / farkzaman) * 1000;  // 10L/2000ms = 0.005 L/ms  0.005*1000=5 L/s
  debison = (debiilk * 3.6);  // 5 x 3.6 = 18 m3/sa
  Serial.print ("ANLIK DEBI DEGERI :");
  Serial.println(debison);
   }

}
Cevap için teşekkürler. Bu şekilde de çalıştıramadım bir değer yazmıyor ekranda.
 
arkadaşın demek istediği benim anladığım.
Sonuçta bu bir anahtar her birinci 10 litrede gelen pulse kapanmadan ikinci 10 litre geçerse ne olacak.
birde www.tinkercad.com daki linki versene . paylaşıma açıp.
 
arkadaşın demek istediği benim anladığım.
Sonuçta bu bir anahtar her birinci 10 litrede gelen pulse kapanmadan ikinci 10 litre geçerse ne olacak.
birde www.tinkercad.com daki linki versene . paylaşıma açıp.
aynen dediğiniz gibi.
Aslında darbenin kaç saniye sürdüğünü tahmini söyledim kronometre tutmadım yani. Darbe denilen şey 10 litre geçtiğinde teli anahtarlayarak kısa devre yapması demek. Bu süre sabit değil yani pompalar yavaş çalışırsa 10 litre 2 saniyedede geçebilir, 500 msde de geçebilir. Mesela bizim mekanik sayacın üzerinde ibreler var, biz manuel olarak debiyi 24 m3/sa gibi değerler gözlemledik. Teoride de en fazla 48 m3/sa olmasını bekliyoruz. Burda birden çok sorun var aslında. Bağlantı kısmı da ayrı bir sorun. Sensörün içinden kısa devreli olan iki kablonun 10litrede bir verdiği uyarıyı arduinoya nasıl okuturuz bu da net değil henüz.
Bir de akış hızına göre pulse süresi değişiyor mu eğer o şekilde bir hız bilgisi veriyorsa zaten ölçme biçiminin farklı olması lazım. İlk verdiğim örnekler motor pervanesi gibi anlık bir pulse için geçerli.
 
arkadaşın demek istediği benim anladığım.
Sonuçta bu bir anahtar her birinci 10 litrede gelen pulse kapanmadan ikinci 10 litre geçerse ne olacak.
birde www.tinkercad.com daki linki versene . paylaşıma açıp.
Anladım fakat verdiğim değerlere bakarsak; 24m3/sa ölçüyoruz, bu da saatte 24000litre, dakikada 400litre, saniyede 6.67litre akıyor. Bahsettiğiniz kadar hızlı bir sistemimiz yok pompalar bu kadar verebiliyor suyu zaten. O yüzden şimdilik darbelerin üst üste bindiğini yoksayabiliriz. Tinkercadde bir şey yapmadım bir arduino ve bir buton. Ekliyorum aşağıya linki.
tinkercad
Adsız.png
 
Son düzenleme:

Forum istatistikleri

Konular
129,809
Mesajlar
930,319
Kullanıcılar
452,617
Son üye
tahir_akdg

Yeni konular

Geri
Üst