Oda Termostatı

DSC_0624

Oda termostatları, oda ısısına göre kombileri kontrol eden elekronik cihazlardır. Piyasada değişik yapılarda oda termostatları mevcuttur. Yapılan araştırmalara göre %30 oranında gaz ve elektrik tasarrufu sağlamaktadır. Bu termostat devresi DS18B20 sensörü ile sıcaklığı algılamaktadır. Dolayısı ile hassasiyeti yüksektir. Ondalık ayarlama yapılabilmektedir. Bizzat kendimin kullandığım ve çok memnun olduğum bir termostat devresidir.

Kombilerde iki çeşit oda termostatı kullanılabilmektedir. Bunlar röle ile kontrol ve modülasyonlu termostat devreleridir.  Modülasyonlu termostatlar kombinin alev boyunu ayarlayarak daha hassas ayarlama yapabilmektedirler. Ancak kombinin bu termostatları desteklemesi gerekiyor.

Devremiz röle ile kombiyi kontrol etmektedir. Mantık şu;

Oda termostatı olmadan kombi peteklerden dönen suyun ısısını kontrol ederek oda sıcaklığını tespit etmektedir. Dolayısı ile devamlı devir daim motoru çalışmaktadır ve kombi suyu az ısıtmaktadır. Bu ise elektrik ve gaz sarfiyatını arttırmaktadır.

Oda termostatı oda sıcaklığını ölçüyor ve ayarlanan değere geldiğinde röleyi aktif ediyor. Rölenin ortak ucu ile NC ucu kombiye geliyor. Kombinin oda termostatı uçları normalde bir kablo ile kısa devre edilmiştir. Bu kısa devre kaldırılarak oda termostatından gelen iki uç bağlanmaktadır.  Kombi bu iki uç kısa devre ise çalışmakta, açık devre ise beklemektedir. Kombinin ısıtma sıcaklığı da en az 65C olmalıdır. Böyle olunca kombi kısa süre devreye girmekte ve yüksek sıcaklığı peteklere göndererek kısa sürede evi ısıtmaktadır.

Termostatın beslemesi kombiden alınmayıp harici bir adaptörle sağlanmaktadır. Kendim kullanılmayan eski cep telefonu adaptörünü kullanıyorum.

Oda termostatları en çok kullanılan oda veya mekanın direk güneş almayan, cereyana maruz olmayan, yerden 1.5 m yükseklikte bir duvara monte edilmelidir.

Devrede DS18B20 sensörü PCB üzerine montelenmemiştir. Daha doğrusu montelenmiş sonradan kablo ile uzatılmıştır. Çünkü sensör çok hassas olduğu için PCB üzerindeki sıcaklık sensörün algılamasını etkiliyordu. Sizde kablo ile uzatarak kullanınız. Ancak sensör direk bir cisim veya duvara değmemelidir.

Aşağıda devre şeması görülmektedir. Display 7 segment ortak anot 4 lü mux displaydir.

OdaTermistot_628A_DS18B20

Oda Termostatı Devre Şeması

Program kodları;

</pre>
/*
 Bu program eeprom hafızadan set değerini alır ve ayarlandıktan sonra set değerini
 eeproma yazar. Onun için eeprom 0. adres 00, 1. adres DC olursa 22.0 dereceye
 ayarlanmış olur. Daha sonra istediğiniz değere set edebilirsiniz.

 Selim KOÇ (elektrokod.wordpress.com)
 29.12.2013
*/
#define DS18B20_D &PORTB,1
#define RLY PORTB.F3
#define UP PORTA.F5
#define DN PORTB.F0

#include <built_in.h>

char kod[14]={128,217,68,80,25,18,2,248,0,16,28,255,254,247};
char digit_1=0,digit_2=0,digit_3=0,digit_4=0,i=0;
unsigned int temp_set=200,temp_isi,isi,sayac=0,sayac1=0;

void display_goster()
{
 PORTA=digit_1;
 PORTB&=0x0F;
 PORTB|=0xE0;
 PORTB.F2=1;
 Delay_5ms();
 //-------------
 PORTA=digit_2;
 PORTB&=0x0F;
 PORTB|=0xD0;
 PORTB.F2=0;
 Delay_5ms();
 //--------------
 PORTA=digit_3;
 PORTB&=0x0F;
 PORTB|=0xB0;
 PORTB.F2=1;
 Delay_5ms();
 //-----------------
 PORTA=digit_4;
 PORTB&=0x0F;
 PORTB|=0x70;
 if(RLY) PORTB.F2=0; //eğer röle çekmişse 4. digitin noktasını yak
 else PORTB.F2=1;
 Delay_5ms();
}
//......................................
void basamakla(int sayi)
{
 digit_1=kod[sayi/100];
 digit_2=kod[(sayi%100)/10];
 digit_3=kod[sayi%10];
 digit_4=0x3C;
}
//...................................................
void isi_oku()
{
 unsigned char lsb,msb,ondalik;
 Ow_Reset(DS18B20_D);
 Ow_Write(DS18B20_D,0xCC);
 Ow_Write(DS18B20_D,0x44);
 display_goster();
 display_goster();
 Ow_Reset(DS18B20_D);
 Ow_Write(DS18B20_D,0xCC);
 Ow_Write(DS18B20_D,0xBE);
 for(i=0;i<20;i++) display_goster();
 lsb=Ow_Read(DS18B20_D);
 msb=Ow_Read(DS18B20_D);
 ondalik=lsb;
 //----------------
 msb<<=4;msb&=0xF0;
 lsb>>=4;lsb&=0x0F;
 isi=msb+lsb;
 //----------------
 ondalik&=0x0F;
 ondalik=(ondalik*10)/16;
 temp_isi=(isi*10)+ondalik;
}
//.............................................
void ayar()
{
 basamakla(temp_set);
 for(i=0;i<50;i++) display_goster();
 sayac=0;
 do
 {
 if(!UP&&temp_set<1000)
 {
 temp_set++;
 basamakla(temp_set);
 for(i=0;i<8;i++) display_goster();
 sayac=0;
 }
 if(!DN&&temp_set>0)
 {
 temp_set--;
 basamakla(temp_set);
 for(i=0;i<8;i++) display_goster();
 sayac=0;
 }
 display_goster();
 sayac++;
 }while(sayac<250);
 EEprom_write(0,Hi(temp_set));
 EEprom_write(1,Lo(temp_set));
}
//.................................................
void init()
{
 CMCON=7;
 TRISA=0;
 TRISB=3;
 OPTION_REG.F7=0;
}
//....................................
void main()
{
 init();
 Hi(temp_set)=EEprom_read(0);
 Lo(temp_set)=EEprom_read(1);
 basamakla(888);
 do
 {
 display_goster();
 while(!UP||!DN) ayar();
 while(sayac==300)
 {
 isi_oku();
 basamakla(temp_isi);
 if(temp_isi<=temp_set) RLY=1;
 if(temp_isi>temp_set+3) RLY=0;
 sayac=0;
 }
 sayac++;
 }while(1);
}//
<pre>

Program çalıştığında displayde 888 derece işareti gösterir. Daha sonra sensörün default değeri olar 85 derece gösterilir. Daha sonra sensör ortam sıcaklığını ölçer ve gösterir. Ayar için UP veya DN tuşlarından birine basıldığında set değeri displayde gösterilir. UP ile arttırılabilir, DN ile azaltılabilir. Sensör 2-3 saniye aralıklarla ölçüm yapıp displayde gösterir. Eğer set değerine geldiyse röleyi çeker ve 4. dijitin noktasını yakar. set değerinin 0.3 derece üstüne çıktığında röle bırakır ve nokta ledi söner.

Röle bıraktıktan sonra peteklerin sıcaklığından dolayı set değerinin yaklaşık 1 derece üzerine çıkabilir. Yani  ortamın sıcaklığı yaklaşık 1 derece değişmektedir. Bu değişim de ideal sayılır.

Programı geliştirmek isteyenler PID kontrolü ile bu sapmayı tolere edebilirler. Benden bu kadar…

Proje kodları buradan indirilebilir. Eğer projeyi kendiniz derliyecekseniz eeprom editöründen set değerlerini girmeniz gerekir.

Not: Kombi ile ilgili yanlış kullanım kombiye zarar verebilir. elektrokod bu zarardan sorumlu tutulamaz.

Proje videosu aşağıdadır.

Reklamlar

7 thoughts on “Oda Termostatı

  1. MERHABALAR KONUYLA İLGİLİ BİR KAÇ EKSİKLERİM VAR YENİ ÖĞRENİYORUM YARDIMCI OLABİLİRMİSİNİZ ÇOK TEŞEKKÜR EDERİM.

  2. Merhaba

    Kod içerisindeki built_in.h dosyası nedir ne olduğunu bulamadım yardımcı olurmusunuz?

    Teşekkürler

    • 2 bytelık veriyi yani int veriyi bytelara ayırmak ve birleştirmek için kullanılıyor. mikroc klasörleri içinde aratıp projenin olduğu dizine koy.

  3. isis 7.7 de similasyonda j1 ve j2 soketlerine hata veriyor ve diğer isis devresindede displayler kapanıp açılıyor

    • jumperlar için özelliklerden exclude from simulasyon seçeneğini aktif yapınız. Similasyonda displaylerde hata verebilir. gerçekte çalışan bir devre.

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Connecting to %s