akilli-termostat-devresi

Akıllı Termostat Nedir ?

Yeni bir,  bir adım ötesi projemizle merhabalar. Bu porjemizde özellikle akıllı ev sistemi ile ilgilenen arkadaşları birkaç adım ileri götürecek bir proje yapacağız. Projemiz akıllı termostat yapımı şeklinde kısaca özet geçilse de işin detayına indikçe inilen, bu alanda gerçekten ciddi rekabetin ve güzel çalışmaların bolca mevcut olduğu bölüm. Akıllı ev sistemleri ile ilgilenen arkadaşlar için özellikle, akıllı ev sistemi tasarlayan firmaların belki de en önem verdiği klasman, akıllı termostat devresini açıklamaya çalışacağız.




Öncelikle akıllı ev sistemleri ile ilgili çok proje gördüm internette. Güzel projeler de var. Ama nedendir bilinmez perde aç kapa, garaj kapağını aç kapa, ışığı aç kapa, kısacası aç-kapa mantığının ötesine geçmemiş kimse. Ne yazıktır ki bu işi resmen yapan şirketleri araştırmamış, kullanıcıya ne sunmuşlar kimse bakmamış. Bir kaçak akım koruma sistemi, gaz kaçağı kontrol, su baskını kontrol gibi hayati öneme sahip noktaları atlamış arkadaşlar.

Biz de dht11 sensörünü tanıttık. Tadımlık bir projesini yaptık, bir adım ötesi projesine ne yapalım derken aklımıza bu geldi. Akıllı termostat yapalım dedik.

Nedir bu akıllı termostat hikayesi ?

Öncelikle piyasa da oldukça yaygın olarak kullanılan akıllı termostatı kısaca açıklamaya çalışalım. Akıllı termostat, termostat üzerindeki pot ile, girilen ayarlı sıcaklığa kadar ısıtıp o değer aşılınca kombiyi kapatan bir sistem. Buraya kadar her şey güzel, kendisini akıllı kılan kısım ise; +2,-2 opsiyonu.  Bir örnekle açıklayacak olursak;

Mesela sizin eviniz 25 derece, siz sıcaklığı 30 derece de tutmak istiyorsunuz. Normal termostatlar daha doğrusu kombiler, odayı 30 dereceye kadar ısıtır sonra kendisini kapatır. Oda sıcaklığı 29 derece olunca açılır oda ısısını 30 derece yapıp kendisini tekrar kapatır. Bu kısır döngü böylece devam eder. Böylece kombiniz 5dk’da bir kendisini açar kapatır. Bu da ömründen ömür yer.

Akıllı termostat dediğimiz hikayeye girmeden önce yeni nesil evler akıllı ev sistemi olsun olmasın artık bu sistemi tercih ediyor ve evin dışında ısı motoru bulunduruyor. Yani kombili evler yavaş yavaş gidiyor.

Neyse akıllı termostat dediğimiz hikaye ise gene aynı örnekten açıklayacak olursak; Eviniz 25 derece, siz 30 derece olsun istiyorsunuz. Potunuzu 30 derece kademesine getirdiniz.  Termostatımız  evi sizin girdiğinizin 3 derece fazlasına kadar yani 33 dereceye kadar ısıtır, sonra motoru durdurur. Ve yine sizin girdiğiniz değerin 3 derece eksiğine kadar yani ev 27 derece olana kadar motoru çalıştırmaz. Böylece daha sağlıklı bir ısı kontrolü sağlamış olursunuz.

Piyasada kullanılan yeni nesil termostatların çalışma mantığını kısaca açıkladığımıza göre yavaştan projemize geçelim.

Malzemeler
  • 1xArduino
  • 1xDht11
  • 1xAyarlı direnç-Pot(Kaç k olduğu mühim değil.)
  • 1x Led
  • Çokça jumper

Arduino Kısmı

#include <dht11.h> //kütüphanemizi ekledik.
const int DHTPIN = 2;
dht11 dh; // dht11 nesnemizi dh ismiyle oluşturduk
int check,temp,hum,set; // Kullanacağımız değişkenler
bool up=1;
void setup () {

Serial.begin(9600); // Seri haberleşmeyi başlattık.

pinMode(3,OUTPUT); // Ledimizi bağladığımız pinimizi çıkış olarak ayarladık.
}

void loop () {
/*
* Dht11 sensör çalışması kontrolü.
* Döndüğü değerler:
// DHTLIB_OK => Sensör çalışmasında sorun yok => (0)
// DHTLIB_ERROR_CHECKSUM => Sensörün sıcaklık ve nem değerlerinin doğruluğu kontrolü => (-1)
// DHTLIB_ERROR_TIMEOUT => Sensör beklenmedik bir sonsuz döngüye girdi kontrolü => (-2)
*/
set=analogRead(A0); //porttan gelen ayarlı sıcaklık.

set=map(set,0,1023,0,40); // ayarlı sıcaklığı 0-40 derece arasında sınırlandırdık.

check=dh.read(DHTPIN);
if(check != 0){
return ;
}

temp = dh.temperature; // Sensörden gelen sıcaklık verisini aldık

/* Yapılmak istenen set edilen sıcaklık normal sıcaklığın -3 veya +3 aralığında olup olmadığını kontrol etmek. Bu aralıkta ise rölenin çıkış vermesine gerek yok.
* Eğer ayarlanan sıcaklık hissedilen sıcaklıktan küçükse , ayarlanan sıcaklığın 3 derece fazlasına kadar röleye çıkış ver
* Eğer ayarlanan sıcaklık hissedilen sıcaklıktan büyükse , ayarlanan sıcaklığın 3 derece düşüğüne kadar röleyi kes.
* Örnekle açıklayalım:
* temp(hissedilen sıcaklık), set(ayarlanan sıcaklık), up(kontrol yapacağımız değişken)
* temp = 0 ve set= 5 iken ; İlk başta set-3 veya set+3 olmadığından ve set-3 den küçük olduğundan röle HIGH olacak. Röle set-3 olana kadar HIGH oldu ve up değişkeni de 1 oldu.
* Bu durumda ilk if durumuna girecek ve set+3 'e kadar HIGH olmaya devam edecek. set+3 'ü geçtiği anda en alttaki else durumuna girecek ve rölenin çıkışını kesecek.
* up değişkeni de 0 olacak ve set-3 e kadar röle çıkış vermeyecek. set -3 ün altına indiği anda tekrar röle çıkış alacak ve up 1 olacak bu döngü bu şekilde devam edecek.
* Sonuç olarak ayarlanan sıcaklığın 3 eksiği ve 3 fazlası arasında kalacak. 3 eksiğine indiğinde 3 fazlasına kadar çıkacak. 3 eksiğine indiğinde ise 3 fazlasına kadar çıkacak.
* Anlatırken röle dedik ama çıkışta bir ledi HIGH LOW yaptığımızı hatırlatalım.
*/

if(temp>=set-3 && temp <= set+3 && up==1){
digitalWrite(3,HIGH);
}
else if(temp>=set-3 && temp <= set+3 && up==0){
digitalWrite(3,LOW);
}
else if(temp <set -3){
digitalWrite(3,HIGH);
up = 1;
}
else {
digitalWrite(3,LOW);
up = 0;
}

Serial.print("Oda Sıcaklığı:");
Serial.println(temp);
Serial.print("Ayarlı Sıcaklık:");
Serial.println(set);
Serial.print("Kontrol Değişkeni");
Serial.println(up);
}

Devre Şeması

akilli-termostat-devresi

akilli-termostat-devresi

Şimdi kod kısmını açıklamaya çalışalım. Oda sıcaklığını ölçmek için sıcaklık sensörü olarak dht11’i seçtik. Oda sıcaklığını ayarlamak için pot(ayarlı direnç) kullandık. Piyasada ki termostatlar da pot kullanır. Kombi-ısı motorunu temsil amaçlı led kullandık.

Termostatımıza, akıllı termostat ismini veren kısıma gelelim. İki aşamalı tetikleme sistem diye bir açıklama söz konusu kod kısmında. Meselemiz biraz da bu. İki aşamalı tetikleme sistemi; 1. Aşamada oda sıcaklığını girilen değerin 3 derece fazlasına kadar ısıtır. 2. Aşamada oda sıcaklığımız girilen değerin 3 derece fazlasından iki derece eksik olduğu duruma gelene kadar, kombimizi(burada ledimizi) kapalı konumda tutar. Biz bunu kod kısmında nasıl yaptık.

Arduino Kod Açıklaması

Set edilen sıcaklığın 3 eksiği veya 3 fazlası ölçülen sıcaklık değerine eşitse ve Bool olarak belirlediğimiz ( Bool fonksiyonu true veya false yani 1 veya 0 değerini alabilir. Flag olarak kullanılır genelde ve kontrol işlemlerinde yarar sağlar. ) up değişken de 1 durumunda ise ledimiz yanmaya devam edecek. Ölçülen sıcaklığımız set edilen sıcaklığın üzerine çıktığı zaman ledimiziin enerjisini kesecez ve up değişkenine 0 değerini vereceğiz.

Bu durumda set edilen sıcaklık değerinin 3 eksiği veya 3 fazlası arasında up değişkeni de 0 iken yazdığımız kod bloğu devreye girmiş olacak ve set edilen sıcaklığın 3 eksiğine kadar ledimizin enerjisini kesmiş olacaz. Daha sonra set edilen sıcaklığın 3 eksiğinin altına indiği zaman ledimize enerji verecez ve up değişkenini 1 e çekecez. Bu durumda tekrardan ilk koşul ifadesine girecek ve en üst seviyeye kadar yani set edilen sıcaklık değerinin 3 fazlasına kadar led enerjilenmiş olacak. Bu döngü sürekli devam edecek ve istenilen sıcaklık değerleri arasında kalmış olacak.

Döngüden çıkma koşulu sıcaklık sensöründen bilgi alamamamız durumu olacak. Bunu da check değişkenimiz ile yapıyoruz. Sensör için yazılmış kütüphanede read fonksiyonundan sıfır harici bir değer döndürüyorsa sensör çalışmasında bir sorun var şeklinde optimize edilmiş. Bizde her döngü başında bunu kontrol ederek sensörümüzde bir sorun olup olmadığını kontrol ediyoruz. Burada isterseniz başka bir ledi yakarak sorun olduğunu anlamlandırabilirsiniz. Seri ekranda “Sensörün çalışmasıyla ilgili sorun var” şeklinde bir ifadeyi örnek olarak aşağıya bırakıyorum. Siz dilediğiniz gibi değiştirebilirsiniz.

check=dh.read(DHTPIN); 
if(check != 0){
 Serial.Println("Sensörün çalışmasında sorun var");
 return ; 
}

Son kısım; hata ayıklama kısmı diye bahsettiğimiz kısım, mantıksal yanlışımız olup olmadığını kontrol amaçlı koyduğumuz kısımdır. Siz dilerseniz koymayın.




14 YORUMLAR

  1. Sayenizde 4 aydır üzerinde çalıştığım kuluçka makinesinin ısıtma sistemini yaptım. Çok teşekkür ederim. Bende makinemi bu sitede paylaşma imkanım var mı?

    • Butonla da yapabilirsiniz bu sefer butonlara basıldığında istenilen sıcaklık değerlerini algoritmaya dahil edersiniz.
      ( Mesela buton 1 ‘e basıldığında 20 derecede , buton 2 ‘ye basıldığında 40 derecede sistem çalışsın gibi. )

  2. Merhabalar, projeyi çok beğendim tebrik ederim mantıklı bir düşünce. Bu sanırım dereceye göre ışık yakmakta peki bunu evdeki kombiye nasıl bağlayabiliriz. Kombim bununla çalışabilir mi?

    • Evinizdeki kombiler digital göstergeli kombidir diye tahmin ediyorum. Kombiye bağlama gibi bir durum olmaz. Şu şekilde olabilir kombinin içerisindeki mikroişlemci ile haberleşmen için kombi üreticileri bir port açarlar veya bir api verirler. Bu sayede kombideki bilgileri görüp düzenleme imkanı sağlamış olursun. Potansiyometre veya başka bir analog komponent ile ayarlamalarını yapıp derecesini yükseltip azaltabilirsin. Fakat onun da ( yani kombi üreticileri ) hata analizleri için hataya düşmemesi için veya hatadan çıkmak için yazmış oldukları birden fazla tespit sistemi vardır. Yani sen kendi yapmış olduğun akıllı termostat devresine göre çalışmasını istesen dahi senin devrene göre çalışmayacaktır. Bu proje daha çok kendin pişir kendi ye tadında bir proje. Yani maker projesi diyebilirim.

  3. Hocam kodlarınız biraz anlamsız sanki. Kusura bakmayın ama mesela sıcaklık 0 derece, set 5 derece ise, alttaki else if çalışır oluyor çünkü -33 yani burada niye low gonderdiniz ki. Hadi low gönderdiniz ve d=0 dediniz, hemen ardından d tekrar 1 oluyor ve LCD ekran da d nin 0 görünmesi imkansız oluyor. Ayrıca yukarıdaki if kontrollerinde de daima sıcaklık +2 derece kontrolü yapmışsınız, temp <= set – 2 ise roleye high göndermeniz gerekir. Neye baktığımı hatırlamıyorum ama Google da ilk sıralarda cikmissiniz demek ki. Yeni arkadaşlarımız için gözünüzden kaçtığını düşündüğüm bu ufak kisimlari düzeltmeniz daha sağlıklı olur diye düşündüm.

CEVAP VER

Lütfen yorumunuzu giriniz!
Lütfen isminizi buraya giriniz