Kablosuz oda termostatı yaptım

Başlatan bederik, 09 Aralık 2012, 17:11:33

bederik

Sayın arkadaşlarım nette termostat fiyatlarını gördükten sonra bunu ben de yaparım dedim ve yaptım. Sizlerle de paylaşmak istedim. Cihazın verici kısmı 16x2 display ds18b20 ve 16f628'den oluşuyor. Alıcı kısmı 12f675 ve bir röleden oluşuyor. 433 Mhz rf modül kullandım. Minimum ve Maksimum sıcakığı 0,1 derece hassasiyet ile kontrol ediliyor. Örneğin 22,3 minimum 22,4 maksimum setleri dahi verilebiliyor. Videosu aşağıdaki adrese yükledim.
http://youtu.be/1ZmbcrufPL4
İsis https://hotfile.com/dl/183278369/16fc49a/628termoverici.DSN.html
Verici https://hotfile.com/dl/183279729/9813a15/628termoverici1.hex.html
Alıcı https://hotfile.com/dl/183279840/ca9faed/675kombialc.hex.html
Ayrıca ETE hocaya teşekkürlerimi sunuyorum. Hazırladığı 13 derslik eğitim pic programlamada benim rüyamda göremeyeceğim seviyeye gelmemde en büyük etken.

ento

Tebrikler. Alıcı kısmı da kapalı kutuya koyunca işlem tamamdır. Bende buradan ETE hocamıza selamlarımı iletiyorum.

Veli B.

Tebrik ederim, güzel çalışma olmuş.

Yeni başlayan arkadaşlar nasıl faydalanacak bu projeden?

bederik

Benim kodlar biraz karışık ama idare edin. verici:
@ DEVICE pic16F628A 'işlemci 12F675
@ DEVICE pic16F628A,WDT_ON              'Watch Dog timer açık
@ DEVICE pic16F628A, PWRT_ON  'Power on timer açık
@ DEVICE pic16F628A, PROTECT_OFF  'Kod Koruma kapalı
@ DEVICE pic16F628A, MCLR_OFF      'MCLR pini kullanılMIYOR.
@ DEVICE pic16F628A, INTRC_OSC_NOCLKOUT  'Dahili osilatör kullanılacak 
define OSC 4
DEFINE SER2_BITS 9
include "modedefs.bas"
DEFINE LCD_DREG PORTA
DEFINE LCD_DBIT 0
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 3
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 1
define LCD RWREG    PORTB   'LCD R/W Bacağı Hangi Porta bağlı?
define LCD_RWBIT 2    
DEFINE LCD_BITS 4
DEFINE LCD_LINES 2
DEFINE LCD_COMMANDUS 4000
DEFINE LCD_DATAUS	 250
LCDOUT $FE,$40,6,9,9,6,0,0,0,0 'Derece gösterimi için özel karakteri LCD'ye yüklüyoruz.
OPTION_REG=%0000000 'dahili  Pull up dirençleri aktif edildi ayrıca pullup direncine gerek yok
INTCON=%10010000 'Tüm  Kesmeler aktif ve RB0/INT kesmesi aktif
CMCON = 7
TRISB=%00110001
TRISA=%00000000
PORTA.4=1
PORTA.5=1
PORTA.6=0
PORTA.7=1
PORTB.7=1
SENSOR VAR PORTB.6 'Sensör PORTB.7'ye bağlı
MESGUL VAR BYTE 'Çeşitli değişken tanımlamaları
BILGI VAR WORD
ISARET VAR BYTE
ARA VAR WORD
DEGER VAR BYTE
ONDA1 VAR WORD
ONDA2 VAR WORD
A VAR BYTE
I VAR WORD
MAXSIC VAR BYTE
MINSICONDA VAR BYTE
MAXSICONDA VAR BYTE
MINSIC VAR BYTE
K VAR BYTE
K=0
H VAR BYTE
G VAR BYTE
H=0
G=0
MAXSICONDA=0
MINSICONDA=0
MAXSIC=23
MINSIC=19
pause 2000
ON INTERRUPT GoTo KESME 'kesme oluşursa KESME adlı etikete git.

BASLA: 'Dongüye gir.
ISARET="+"
OWOUT SENSOR,1,[$CC,$44] 'Sensöre sıcaklığı okumasını söyle.
BEKLE: 'Sensör hazır olana kadar bekle.
OWIN SENSOR,4,[MESGUL]
IF MESGUL=0 THEN
GOTO BEKLE
ENDIF
OWOUT SENSOR,1,[$CC,$BE] 'Sensöre okuduğu değeri göndermesini söyle.
'OWIN SENSOR,2,[BILGI] 'Gelen 16 bitlik bilgiyi al.
OWIN SENSOR,2,[BILGI.LOWBYTE,BILGI.HIGHBYTE] 'Gelen 16 bitlik bilgiyi al.
IF BILGI.BIT13=1 THEN 'Sıcaklık negatif ise
ISARET="-" 'İşaret artık + değil -
BILGI=~BILGI 'Gelen bilgideki bitleri tersle, 1->0, 0->1
BILGI=BILGI+1 'Bilgiyi 1 arttır.
ENDIF
ARA=BILGI*625 '12 bit hassasiyet kullandığımız için her değer 0.0625 santigrat dereceye denk geliyor.
DEGER=DIV32 10000
ARA=BILGI*625
ONDA1= DIV32 1000
ARA=BILGI*625
ONDA2= DIV32 100
ONDA1=ONDA1-(DEGER*10)
ONDA2=ONDA2-((dEGER*100)+(ONDA1*10))
LCDOUT $FE,$C0,"          " 'LCD ekranın alt satırını temizle
LCDOUT $FE,$C0,"SIC. = ",ISARET,#DEGER,",",dec1 ONDA1," ",0,"C"
IF DEGER<MINSIC THEN GOTO AC
IF DEGER=MINSIC THEN
IF ONDA1<MINSICONDA THEN GOTO AC
ENDIF
IF DEGER>MAXSIC THEN GOTO KAPA
IF DEGER=MAXSIC THEN
IF ONDA1>MAXSICONDA THEN GOTO KAPA
ENDIF
GOTO BASLA

KAPA:
H=H+1
IF H>2 THEN GOTO BASLA
G=0
lcdout $FE,$1,"Kombi kapali"
LCDOUT $FE,$C0,"SIC. = ",ISARET,#DEGER,",",dec1 ONDA1," ",0,"C"
A=32
PORTA.6=1
PAUSE 200
SEROUT2 PORTB.7,396,["BED",A]
SEROUT2 PORTB.7,396,["BED",A]
SEROUT2 PORTB.7,396,["BED",A]
SEROUT2 PORTB.7,396,["BED",A]
SEROUT2 PORTB.7,396,["BED",A]
SEROUT2 PORTB.7,396,["BED",A]
SEROUT2 PORTB.7,396,["BED",A]
SEROUT2 PORTB.7,396,["BED",A]
SEROUT2 PORTB.7,396,["BED",A]
SEROUT2 PORTB.7,396,["BED",A]
PORTB.7=0
PORTA.6=0
GOTO BASLA


AC:
H=0
G=G+1
IF G>2 THEN GOTO BASLA
LCDOUT $FE,$1,"Kombi acik"
LCDOUT $FE,$C0,"SIC. = ",ISARET,#DEGER,",",dec1 ONDA1," ",0,"C"
A=16
PORTA.6=1
PAUSE 200
SEROUT2 PORTB.7,396,["BED",A]
SEROUT2 PORTB.7,396,["BED",A]
SEROUT2 PORTB.7,396,["BED",A]
SEROUT2 PORTB.7,396,["BED",A]
SEROUT2 PORTB.7,396,["BED",A]
SEROUT2 PORTB.7,396,["BED",A]
SEROUT2 PORTB.7,396,["BED",A]
SEROUT2 PORTB.7,396,["BED",A]
SEROUT2 PORTB.7,396,["BED",A]
SEROUT2 PORTB.7,396,["BED",A]
PORTB.7=0
PORTA.6=0
GOTO BASLA


DISABLE
KESME:
pause 200
IF PORTB.4=0 THEN
FOR K=0 TO 10 STEP 1
LCDOUT $FE,$1,"MAXIMUM SICAKLIK"
LCDOUT $FE,$C0,"AYARI  = ",DEC2 MAXSIC,",",DEC1 MAXSICONDA
PAUSE 500
IF PORTB.4=0 THEN
MAXSICONDA=MAXSICONDA+1
IF MAXSICONDA=10 THEN
MAXSIC=MAXSIC+1
MAXSICONDA=0
ENDIF
K=0
PAUSE 200
ENDIF
IF PORTB.5=0 THEN
MAXSICONDA=MAXSICONDA-1
IF MAXSICONDA=255 THEN
MAXSICONDA=9
MAXSIC=MAXSIC-1
ENDIF
K=0
PAUSE 200
ENDIF
NEXT K
ENDIF
IF PORTB.5=0 THEN
FOR K=0 TO 10 STEP 1
LCDOUT $FE,$1,"MINIMUM SICAKLIK"
LCDOUT $FE,$C0,"AYARI  = ",DEC2 MINSIC,",",DEC1 MINSICONDA
PAUSE 500
IF PORTB.4=0 THEN
MINSICONDA=MINSICONDA+1
IF MINSICONDA=10 THEN
MINSIC=MINSIC+1
MINSICONDA=0
ENDIF
K=0
PAUSE 200
ENDIF
IF PORTB.5=0 THEN
MINSICONDA=MINSICONDA-1
IF MINSICONDA=255 THEN
MINSICONDA=9
MINSIC=MINSIC-1
ENDIF
K=0
PAUSE 200
ENDIF
NEXT K
ENDIF
LCDOUT $FE,$1
INTCON.1=0
RESUME
ENABLE
END

alıcı:
@ DEVICE pic12F675 'işlemci 12F675
@ DEVICE pic12F675, WDT_ON              'Watch Dog timer açık
@ DEVICE pic12F675, PWRT_ON  'Power on timer açık
@ DEVICE pic12F675, PROTECT_OFF  'Kod Koruma kapalı
@ DEVICE pic12F675, MCLR_ON      'MCLR pini kullanılMIYOR.
@ DEVICE pic12F675, INTRC_OSC_NOCLKOUT  'Dahili osilatör kullanılacak 
DEFINE OSCCAL_1K 1  'bu  komut mutlaka olacak OSCCAL değerini yeniden pice yazdırıyor
DEFINE OSC 4
DEFINE SER2_BITS 9
include "modedefs.bas"
OPTION_REG.7=0
CMCON = 7
GPIO=0
TRISIO=%00100000
WPU=0
Y VAR BYTE
Y=0
ANSEL=0
GPIO.2=0
PAUSE 500
GPIO.2=1
PAUSE 1000
GPIO.2=0
PAUSE 500
BASLA: 'Dongüye gir.
TOGGLE GPIO.2
SERIN2 GPIO.5,396,[WAIT ("BED"),Y]
IF Y=16 THEN
GPIO.0=1
ELSE
GPIO.0=0
ENDIF
GOTO BASLA
END

Saygılar

LukeSkywalker

Güzel bir çalışma. Yalnız alıcı kısmı kombi ile aynı hattan besleyecekseniz gürültülerden iyi filtrelemek gerek. Çünkü Kombi çalıştığı anda motordan dolayı meydana gelecek parazitler alıcının çalışmasını etkileyebilir.

gulmath

kaynak dosyaları silinmiş tekrar yüklermisiniz. veya mail adresime gönderebilr misiniz

mustafa_cmbz

Alıntı yapılan: LukeSkywalker - 10 Aralık 2012, 00:03:51
Güzel bir çalışma. Yalnız alıcı kısmı kombi ile aynı hattan besleyecekseniz gürültülerden iyi filtrelemek gerek. Çünkü Kombi çalıştığı anda motordan dolayı meydana gelecek parazitler alıcının çalışmasını etkileyebilir.

Buna benzer bir uygulamayı bende yaptım daha önceden ferroli marka kombim var ve organize sanayi bölgesinde oturuyorum sık sık dalgalanma vs. oluyor ama hiç etkilenme vs. olmadı.

muzikmp3

mail adtttım ama cevap veren olmadı linkler gitmiş iyi calısma tşk ederım ... benım adresım e bu projenın dosyalarını yollarmısınız tşkler iyi calısmlar

bederik




Arkadaşlar resimde şema var. MCS kodları da yukarıda mevcut. Kopyala-yapıştır ile gereken yapılabilir. Herkeze saygılar...

ercan_t

merhaba,

anladığım kadarı ile alıcı devre belli bir sıcaklıkta röle kombiyi kapatıp açacak,

1. peki sürekli röle kapanıp açıldığında kombide kapanıp açıldığında, kombi bozulmaz mı?
2. kombi kapalı iken sıcak musluk sularını nasıl kullanacağız?
3. kombinin özel haberleşme portu protokolü var mı?

mur@t

Alıntı yapılan: ercan_t - 28 Ocak 2014, 09:10:05
merhaba,

anladığım kadarı ile alıcı devre belli bir sıcaklıkta röle kombiyi kapatıp açacak,

1. peki sürekli röle kapanıp açıldığında kombide kapanıp açıldığında, kombi bozulmaz mı?
2. kombi kapalı iken sıcak musluk sularını nasıl kullanacağız?
3. kombinin özel haberleşme portu protokolü var mı?

Kombi'nin elektriğini kesmeyeceksiniz.
kombinin elektrik giriş klemensinin yanında bir klemens daha var, normalde köprü atılmış (kısadevre)
köürüyü söküp, kontrol devresinin rölesine bağlıyorsunuz.
Termostatı da yüksek bir değere ayarlıyorsunuz. Gerisini kontrol devresi hallediyor.

Bizim kombide bu şekilde...

yuppi

İlk olarak oda termostat kısmını ayarlarken 0,1 derece gibi yakın bir değere ayarlamayın.Min 0,5 derece fark olsun.Çünki anlık hava dalgalanamasından etkileniyor sonuçta kombi devreye girip çıkmak zorunda kalıyor.Kombiyide evin yalıtım durumuna göre bir derceye ayarlayın.Ne gariban sizin set derecenize ulaştırmak için sürekli devede kalsın.Nede hızlı ulaşsın diye verimin düştüğü yüksek sıcaklıklara çıkın.

ercan_t

merhaba,
ufak bir araştırma yaptım ;
kombilerin Opentherm protocol portları varmış,(Bosch kombide var)
burada dijital olarak haberleşip kombinin gerekli ayarlarını yapabiliyormuşuz.

ikitelli bir protokol cihaz direkt kablo ile bağlanıyor ve az elektrik çekiyor ise bu kablo üzerinden hem data hemde güç alabiliyormuş.

http://en.wikipedia.org/wiki/OpenTherm
http://blog.hekkers.net/wp-content/uploads/2012/02/OT-Protocol-Specification-v2-2.pdf
http://www.domotiga.nl/projects/domotiga/wiki/OpenTherm
http://blog.dest-unreach.be/2012/12/14/reverse-engineering-the-elco-heating-protocol


not: baymak kombide oda termosu için röleden bahsediyor.

xpress34

Alıntı yapılan: bederik - 09 Aralık 2012, 17:11:33
Sayın arkadaşlarım nette termostat fiyatlarını gördükten sonra bunu ben de yaparım dedim ve yaptım. Sizlerle de paylaşmak istedim. Cihazın verici kısmı 16x2 display ds18b20 ve 16f628'den oluşuyor. Alıcı kısmı 12f675 ve bir röleden oluşuyor. 433 Mhz rf modül kullandım. Minimum ve Maksimum sıcakığı 0,1 derece hassasiyet ile kontrol ediliyor. Örneğin 22,3 minimum 22,4 maksimum setleri dahi verilebiliyor. Videosu aşağıdaki adrese yükledim.
http://youtu.be/1ZmbcrufPL4
İsis https://hotfile.com/dl/183278369/16fc49a/628termoverici.DSN.html
Verici https://hotfile.com/dl/183279729/9813a15/628termoverici1.hex.html
Alıcı https://hotfile.com/dl/183279840/ca9faed/675kombialc.hex.html
Ayrıca ETE hocaya teşekkürlerimi sunuyorum. Hazırladığı 13 derslik eğitim pic programlamada benim rüyamda göremeyeceğim seviyeye gelmemde en büyük etken.

hocam malum hotfile sitesi kapandı. mümkünse dosyaları yeniden farklı bir siteye upload edebilirmisiniz.

obilgi

#14
Tasarlayan arkadaşın (Bederik) iznini almadan dosyayı aşağıdaki linke koydum affına sığınıyorum.

https://www.dropbox.com/s/h75dehdfuovffj2/Kablosuz_kombi_oda_termostati-Bederik.rar?dl=0


Not: Bu devreyi bende yaptım ama verici ve alıcıyı bir türlü haberleştiremedim. 2 farklı 433 mhz RF modül kullanmama rağmen alıcı devre hiç bir şekilde işlem yapmıyor. 12F675 e hex dosyasını atarken programlayıcı OSCCAL (34xx) değeri (3Fxx) olarak değiştirilsin mi? gibisinden bir uyarı veriyor. Değiştir desende değiştirmesen de hiç bir şekilde alıcı kısmı devreye sokamadım. Tavsiyelerinizi alabilirim.