#include <Arduino.h>
const int KompGirisPin = A4;
const int DisOrtamSicaklikPin = A1;
const int IcOrtamSicaklikPin = A2;
const int IcOrtamAcPin = A3;
const int Komp1Pin = 2;
const int Fan1Pin = 3;
const int Yol1Pin = 4;
const int PompaPin = 5;
const float R0 = 10000.0;
float A = 1.009249522e-03, B = 2.378405444e-04, C = 2.019202697e-07;
bool acKomutDurumu = false;
bool kapatKomutDurumu = false;
bool oncekiKomutDurumu = false;
int kompresorKapatSayac = 0;
unsigned long son80DereceZamani = 0;
unsigned long kompresorAcmaZamani = 0;
unsigned long acmaKomutSuresi = 10000; // 10 saniye
unsigned long beklemSuresi = 600000; // 10 dakika
void setup() {
pinMode(KompGirisPin, INPUT);
pinMode(DisOrtamSicaklikPin, INPUT);
pinMode(IcOrtamSicaklikPin, INPUT);
pinMode(IcOrtamAcPin, INPUT);
pinMode(Komp1Pin, OUTPUT);
pinMode(Fan1Pin, OUTPUT);
pinMode(Yol1Pin, OUTPUT);
pinMode(PompaPin, OUTPUT);
// Başlangıçta tüm röleleri kapalı duruma getir
digitalWrite(Komp1Pin, HIGH);
digitalWrite(Fan1Pin, HIGH);
digitalWrite(Yol1Pin, HIGH);
digitalWrite(PompaPin, HIGH);
Serial.begin(9600);
// Başlangıçta kontrolSisteminiYonet fonksiyonunu çağırarak başlangıç durumunu kontrol et
kontrolSisteminiYonet();
}
float okuSicaklik(int pin) {
int NTC_deger = analogRead(pin);
float Vout = ((NTC_deger * 5.0) / 1023.0);
float NTC_direnc = ((5 * (10.0 / Vout)) - 10);
NTC_direnc = NTC_direnc * 1000;
float NTC_direnc_ln = log(NTC_direnc);
float Sicaklik = (1 / (A + (B * NTC_direnc_ln) + (C * NTC_direnc_ln * NTC_direnc_ln * NTC_direnc_ln)));
Sicaklik = Sicaklik - 273.15;
return Sicaklik;
}
void kontrolSisteminiYonet() {
float icOrtamAcGerilim = analogRead(IcOrtamAcPin) * (5.0 / 1023.0);
float kompGirisSicaklik = okuSicaklik(KompGirisPin);
Serial.print("Ic Ortam Acma Gerilimi: ");
Serial.println(icOrtamAcGerilim);
Serial.print("Dis Ortam Sicaklik: ");
Serial.print(okuSicaklik(DisOrtamSicaklikPin));
Serial.println(" °C");
Serial.print("Ic Ortam Sicaklik: ");
Serial.print(okuSicaklik(IcOrtamSicaklikPin));
Serial.println(" °C");
Serial.print("Kompresor Giris Sicaklik: ");
Serial.print(kompGirisSicaklik);
Serial.println(" °C");
// Acma komutu kontrolü
if (icOrtamAcGerilim > 4.9) {
if (!acKomutDurumu) {
Serial.println("Sistem Acma Komutu Alindi.");
acKomutDurumu = true;
kapatKomutDurumu = false;
kompresorAcmaZamani = millis(); // Kompresor acilma zamanini kaydet
Serial.println("Kompresor aciliyor...");
} else if (millis() - kompresorAcmaZamani >= acmaKomutSuresi && icOrtamAcGerilim > 4.9) {
// Acma komutu 3 saniye boyunca 4.9V'un üzerinde ise devam et
digitalWrite(Fan1Pin, LOW); // 4 yollu fan ac
digitalWrite(PompaPin, LOW); // Pompa ac
digitalWrite(Yol1Pin, LOW); // Yol ac
delay(5000); // 5 saniye bekle
digitalWrite(Komp1Pin, LOW); // Kompresoru ac
Serial.println("Sistem tamamen acildi.");
}
} else {
// Kapatma komutu kontrolü
if (!kapatKomutDurumu) {
Serial.println("Sistem Kapatma Komutu Alindi.");
kapatKomutDurumu = true;
acKomutDurumu = false;
Serial.println("Sistem kapatiliyor...");
for (unsigned long beklemeZamani = millis(); millis() - beklemeZamani < beklemSuresi;) {
kontrolSisteminiYonet();
delay(1000);
}
// Eger bu sure içinde tekrar acma komutu gelirse devam et
float yeniIcOrtamAcGerilim = analogRead(IcOrtamAcPin) * (5.0 / 1023.0);
if (yeniIcOrtamAcGerilim > 4.9) {
acKomutDurumu = true;
kapatKomutDurumu = false;
Serial.println("Yeni acma komutu alindi, sistem bekletilmeden devam ediyor...");
} else {
digitalWrite(Komp1Pin, HIGH); // Kompresoru kapat
delay(5000); // 5 saniye bekle
digitalWrite(Yol1Pin, HIGH); // Yol kapat
delay(5000); // 5 saniye bekle
digitalWrite(Fan1Pin, HIGH); // 4 yollu fan kapat
digitalWrite(PompaPin, HIGH); // Pompa kapat
Serial.println("Sistem tamamen kapatildi.");
}
}
}
// 80 derece kontrolü
if (kompGirisSicaklik > 80) {
if (!oncekiKomutDurumu) {
oncekiKomutDurumu = true;
son80DereceZamani = millis();
} else {
// 1 saat içinde 3 kez 80 derece üzerinde olma kontrolü
if (millis() - son80DereceZamani <= 3600000) {
kompresorKapatSayac++;
if (kompresorKapatSayac >= 3) {
// Sistem komple kapat
digitalWrite(Komp1Pin, HIGH);
digitalWrite(Fan1Pin, HIGH);
digitalWrite(Yol1Pin, HIGH);
digitalWrite(PompaPin, HIGH);
acKomutDurumu = false;
kapatKomutDurumu = false;
oncekiKomutDurumu = false;
Serial.println("Sistem 80 derece üzerinde oldugu için kapatildi.");
}
} else {
// 1 saat içinde geçen süre sifirla
oncekiKomutDurumu = false;
kompresorKapatSayac = 0;
}
}
} else {
oncekiKomutDurumu = false;
}
}
void loop() {
kontrolSisteminiYonet();
// Islemleri buraya ekleyebilirsiniz
delay(1000); // Islemleri saniyede bir kontrol et
}