Su akış sensörü ve I2c lcd ile toplam litre gösterimi kod yardım ?

korkmaz_design

Yönetici
Yönetici
Yönetici
Katılım
21 Ara 2006
Mesajlar
2,518
Puanları
419
merhaba
liktedi projeyi yaptım sadece trafik lambası kısmını bağlamadım ama(yazılım bilgim yok)toplam litreyi bulmak istiyorum 1,5lt su sişesini 1,8 litre gibi hesaplıyor lt/dk hesaplıyor

istediğim devreyi değiştirmeden toplam lt miktarı yazması ve ölçülen değerin doğru olması

yardımlarınızı bekliyorum
kolay gelsin
 
Kod:
#include "Arduino.h"
#include <Wire.h>
#include <LiquidCrystal_I2C_AvrI2C.h>  //Lcd ekran kütüphanemizi ekliyoruz.


int KIRMIZI = 8; //Kırımızı trafik lambası pinimizi digital 8'e bağladık.
int SARI = 9;    //Sarı trafik lambası pinimizi digital 9'a bağladık.
int YESIL = 10;  //Yeşilı trafik lambası pinimizi digital 10'a bağladık.
#define Buton 3  // Buton pinimizi digital 3'e bağladık.


int sayac = 0;
int interval = 1000;
unsigned long previousMillis = 0;

volatile int flow_frequency;   // Sensör akış frekansı (sensör palsi)
float litre;                   // Toplam kullanılan litre.
unsigned char flowsensor = 2;  // Debimetre sinyal pinimizi digital 2'ye bağladık.
unsigned long currentTime;
unsigned long cloopTime;
int toplamdakika;

void flow () // Interrupt
{
flow_frequency++;
}


LiquidCrystal_I2C_AvrI2C lcd(0x27,16,2);                //Lcd ekran bağlantısı

void setup() {
 
lcd.begin();                                   //LCD ekranımızı başlatıyoruz.
lcd.clear();                                   //LCD ekranımızı temizliyoruz.

pinMode (YESIL, OUTPUT);
pinMode (SARI, OUTPUT);
pinMode (KIRMIZI, OUTPUT);

pinMode(Buton, INPUT);

// Sensör Giriş Ayarları

pinMode(flowsensor, INPUT);

digitalWrite(flowsensor, HIGH);

// İnterrupt/Kesme Ayarları
attachInterrupt(0, flow, RISING); //Hall effect sensörü her RISING oluşunda flow formülünü çalıştırır. Buradaki sıfıt interreupt kullanırken Arduino uno üzerindeki D2 pini temsil ediyor.
sei(); // interrupts açık
currentTime = millis();
cloopTime = currentTime;

lcd.setCursor(0, 0);               
lcd.print(" Debimetre V1");
lcd.setCursor(0, 1);
lcd.print(" Mehmet Ali TOR");
delay(2000);
}


void loop() {

currentTime = millis();
// saniyede geçen pals sayısı sayılıp litre - saat hesabı alınması
if(currentTime >= (cloopTime + 1000))
{
cloopTime = currentTime; // saniyeyi güncelle

litre = (flow_frequency / 7.5 / 60); // saniyede geçen litre
//flow_frequency = 0; // sayıcıyı sıfırlar, eğer sayacı sıfırlarsak ekranda her defasında litre/saniye değerini görürüz. Ancak sıfırlamazsak saniyede geçen debi toplanarak gider ve toplam kullanılan suyu görürüz.
}


if ((millis() - previousMillis) >= interval){
previousMillis = millis();

toplamdakika = sayac/60; // milisaniye değerini 60'a bölerek toplam geçen dakikayı buluyoruz.

sayac++;
 
}


if (digitalRead(Buton) == LOW){ //Eğer butona basıldıysa

flow_frequency = 0; // Sensör palsini sıfırla
sayac = 0;          // Zaman sayacını sıfırla


lcd.setCursor(0, 0);
lcd.print("  Su ve Zaman        ");
lcd.setCursor(0, 1);
lcd.print("  Resetlendi         ");

}

else {
lcd.setCursor(0, 0);               
lcd.print("Su   : ");
lcd.print(litre, 1); // toplam kullanılan suyu gösterir, virgülden sonraki 2 basamağı gösterir.
lcd.print(" lt");
lcd.setCursor(0, 1);
lcd.print("Zaman: ");
lcd.print(toplamdakika); //toplam kullanımda geçen süreyi verir.
lcd.println("   dk    ");
delay(100);
}

if (litre <= 1){
digitalWrite (KIRMIZI, LOW);
digitalWrite (SARI, LOW);
digitalWrite (YESIL, HIGH);
}
else if (1 < litre && litre <= 2){
digitalWrite (KIRMIZI, LOW);
digitalWrite (SARI, HIGH);
digitalWrite (YESIL, LOW);
}
else {
digitalWrite (KIRMIZI, HIGH);
digitalWrite (SARI, LOW);
digitalWrite (YESIL, LOW);
}


}
 
litre = (flow_frequency / 7.5 / 60); // saniyede geçen litre

Bu koddaki 7.5 değerini deneme yanılma yöntemiyle değiştirip sistemi kalibre etmeye çalışın.
 
Su bitince dönmeye devam ediyordur, su bitmemeli.
 
Kod:
#include "Arduino.h"
#include <Wire.h>
#include <LiquidCrystal_I2C_AvrI2C.h>  //Lcd ekran kütüphanemizi ekliyoruz.


int KIRMIZI = 8; //Kırımızı trafik lambası pinimizi digital 8'e bağladık.
int SARI = 9;    //Sarı trafik lambası pinimizi digital 9'a bağladık.
int YESIL = 10;  //Yeşilı trafik lambası pinimizi digital 10'a bağladık.
#define Buton 3  // Buton pinimizi digital 3'e bağladık.


int sayac = 0;
int interval = 1000;
unsigned long previousMillis = 0;

volatile int flow_frequency;   // Sensör akış frekansı (sensör palsi)
float litre;                   // Toplam kullanılan litre.
unsigned char flowsensor = 2;  // Debimetre sinyal pinimizi digital 2'ye bağladık.
unsigned long currentTime;
unsigned long cloopTime;
int toplamdakika;

void flow () // Interrupt
{
flow_frequency++;
}


LiquidCrystal_I2C_AvrI2C lcd(0x27,16,2);                //Lcd ekran bağlantısı

void setup() {
 
lcd.begin();                                   //LCD ekranımızı başlatıyoruz.
lcd.clear();                                   //LCD ekranımızı temizliyoruz.

pinMode (YESIL, OUTPUT);
pinMode (SARI, OUTPUT);
pinMode (KIRMIZI, OUTPUT);

pinMode(Buton, INPUT);

// Sensör Giriş Ayarları

pinMode(flowsensor, INPUT);

digitalWrite(flowsensor, HIGH);

// İnterrupt/Kesme Ayarları
attachInterrupt(0, flow, RISING); //Hall effect sensörü her RISING oluşunda flow formülünü çalıştırır. Buradaki sıfıt interreupt kullanırken Arduino uno üzerindeki D2 pini temsil ediyor.
sei(); // interrupts açık
currentTime = millis();
cloopTime = currentTime;

lcd.setCursor(0, 0);              
lcd.print(" Debimetre V1");
lcd.setCursor(0, 1);
lcd.print(" Mehmet Ali TOR");
delay(2000);
}


void loop() {

currentTime = millis();
// saniyede geçen pals sayısı sayılıp litre - saat hesabı alınması
if(currentTime >= (cloopTime + 1000))
{
cloopTime = currentTime; // saniyeyi güncelle

litre = (flow_frequency / 7.5 / 60); // saniyede geçen litre
//flow_frequency = 0; // sayıcıyı sıfırlar, eğer sayacı sıfırlarsak ekranda her defasında litre/saniye değerini görürüz. Ancak sıfırlamazsak saniyede geçen debi toplanarak gider ve toplam kullanılan suyu görürüz.
}


if ((millis() - previousMillis) >= interval){
previousMillis = millis();

toplamdakika = sayac/60; // milisaniye değerini 60'a bölerek toplam geçen dakikayı buluyoruz.

sayac++;
 
}


if (digitalRead(Buton) == LOW){ //Eğer butona basıldıysa

flow_frequency = 0; // Sensör palsini sıfırla
sayac = 0;          // Zaman sayacını sıfırla


lcd.setCursor(0, 0);
lcd.print("  Su ve Zaman        ");
lcd.setCursor(0, 1);
lcd.print("  Resetlendi         ");

}

else {
lcd.setCursor(0, 0);              
lcd.print("Su   : ");
lcd.print(litre, 1); // toplam kullanılan suyu gösterir, virgülden sonraki 2 basamağı gösterir.
lcd.print(" lt");
lcd.setCursor(0, 1);
lcd.print("Zaman: ");
lcd.print(toplamdakika); //toplam kullanımda geçen süreyi verir.
lcd.println("   dk    ");
delay(100);
}

if (litre <= 1){
digitalWrite (KIRMIZI, LOW);
digitalWrite (SARI, LOW);
digitalWrite (YESIL, HIGH);
}
else if (1 < litre && litre <= 2){
digitalWrite (KIRMIZI, LOW);
digitalWrite (SARI, HIGH);
digitalWrite (YESIL, LOW);
}
else {
digitalWrite (KIRMIZI, HIGH);
digitalWrite (SARI, LOW);
digitalWrite (YESIL, LOW);
}


}
merhaba bu projeyi yapacağım bağlantı şeması lazım bana size nasıl ulaşabilirim
 
merhaba
malesef bende bulamadım youtube var diye kayıt etmemişim sadece burada yaplaştığım kod var
 
merhaba
liktedi projeyi yaptım sadece trafik lambası kısmını bağlamadım ama(yazılım bilgim yok)toplam litreyi bulmak istiyorum 1,5lt su sişesini 1,8 litre gibi hesaplıyor lt/dk hesaplıyor

istediğim devreyi değiştirmeden toplam lt miktarı yazması ve ölçülen değerin doğru olması

yardımlarınızı bekliyorum
kolay gelsin
Butonun 1 bacağını 3 no ya bağladıktan sonra diğer bacağını nereye bağlıyoruz
 

Forum istatistikleri

Konular
127,950
Mesajlar
913,850
Kullanıcılar
449,597
Son üye
CTure

Yeni konular

Geri
Üst