Arduino ile Air to Water Chiller Kontrolü Çalışması
Sokağa çıkma yasaklarında evde vakit geçirmek için yapılan bir çalışmadır. Bunu geliştirebiliriz. Arduino üzerine bir ekran ve keypad ilave ederek tam teşekküllü bir otomasyon sistemi oluşturulabilir. Fakat şunu gözlemledim , clone modeller stabil çalışmıyor bu nedenle Orjinal UNO modeli ile denedim gayet güzel çalışıyor. İlave yapmak isteyen olursa bana da bilgi verirse çok memnun olurum. Malum bilgi paylaştıkça çoğalır… Şimdiden teşekkürler.
#include <math.h>
//Su sıcaklığı için gerekli degişkenler
double setpoint = 4;
double sp;
// pin girişleri belirliyoruz
#define comp 2 // Compressor
#define fanA 3 // Fan Motor 1
#define fanB 4 // Fan Motor 2
#define pompa 5 // Water Pump
#define button 6 // On-off Button
#define hps 7 // Yüksek Basınç Müşürü
#define lps 8 // Alçak Basınç Müşürü
#define fbs 9 // Flow-Swithc yada Fark Basınç Şalteri
#define spbutton 10 // Yeni Set-Point girme isteği butonu.
void setup()
{
//Serial Baglantı + Pinlerin Pozisyonlarını belirliyoruz.
Serial.begin(9600);
//Inputlar
pinMode(hps, INPUT);
pinMode(lps, INPUT);
pinMode(fbs, INPUT);
pinMode(pompa, INPUT);
pinMode(button, INPUT);
//Outputlar
pinMode(comp, OUTPUT);
pinMode(fanA, OUTPUT);
pinMode(fanB, OUTPUT);
}
//NTC verileri hesaplama tablosu
double Termistor(int analogOkuma)
{
double sicaklik;
sicaklik = log(((10240000 / analogOkuma) - 10000));
sicaklik = 1 / (0.001129148 + (0.000234125 + (0.0000000876741 * sicaklik * sicaklik)) * sicaklik);
sicaklik = sicaklik - 273.15;
return sicaklik;
}
void loop()
{
// Cevrim Sıcaklığı NTC'den gelen sıcaklık
int deger = analogRead(A0); // NTC Sensör A0 Analog Girişe Takılacak
double sicaklik = Termistor(deger);
Serial.print("Set Point :");
Serial.println(setpoint);
delay(1000);
Serial.print("Su Sicakligi :");
Serial.println(sicaklik);
delay(1000);
//Setpoint ile Sıcaklık arasındaki farkı hesaplıyoruz.
double difference = sicaklik - setpoint;
Serial.print("Difference :");
Serial.println(difference);
delay(1000);
Serial.println("------------------");
delay(1000);
int compdurum = digitalRead(comp);
if (compdurum == LOW)
{
Serial.println("Comp.Durumu : Stop");
}
else
{
Serial.println("Comp.Durumu : Run");
}
Serial.println("------------------");
delay(1000);
//Sistem Acma-kapama Butonu Durumunu kontrol ediyoruz.
while (digitalRead(spbutton) == HIGH)
{
setpointayarla();
}
while (digitalRead(button) == HIGH)
{
yuksekbasinc();
}
}
//buton açık ise , önce yuksek basınç kontrol ediliyor.
void yuksekbasinc()
{
while (digitalRead(hps) == LOW)
{
alcakbasinc();
}
}
//alcakbasınc kontrol ediliyor.
void alcakbasinc()
{
Serial.println("Yuksek Basınc Normal");
delay(1000);
while (digitalRead(lps) == LOW)
{
farkbasinc();
}
}
//su akıisi kontrol ediliyor
void farkbasinc()
{
Serial.println("Alcak Basinc Normal");
delay(1000);
while (digitalRead(fbs) == HIGH)
{
pompaDurumu();
}
}
//pompanın calisma durumu kontrol ediliyor.
void pompaDurumu()
{
Serial.println("Su akisi normal");
delay(1000);
while (digitalRead(pompa) == HIGH)
{
cevrim();
}
}
//Tum kontroller yapıldı , eger sorun yoksa cevrim calistiriliyor.
void cevrim()
{
Serial.println("Pompa Calisiyor");
delay(1000);
double difference;
if (difference >= 0)
{
digitalWrite(comp, HIGH);
digitalWrite(fanA, HIGH);
digitalWrite(fanB, HIGH);
Serial.println("Cevrim Calisiyor");
zaman();
}
else
{
digitalWrite(comp, LOW);
digitalWrite(fanA, LOW);
digitalWrite(fanB, LOW);
Serial.println("Cevrim Durdu");
}
}
void setpointayarla()
{
sp = double(Serial.read());
setpoint = sp;
Serial.print("Yeni SP Ayarlandı : ");
Serial.print(setpoint);
}
void zaman()
{
Serial.print("Çevrim Zamanı dk: ");
unsigned long zaman = millis();
double sure = (zaman / 1000) / 60;
Serial.println(sure);
delay(1000);
}
Yorum gönder
Yorum yapabilmek için oturum açmalısınız.