28 Ocak 2016 Perşembe

PIC 16f877A ile uzaktan kumandalı kombi kontrol devresi


Bu proje alıcı ve verici olmak üzere iki devreden oluşmaktadır. Verici devresini evin istediğiniz bir köşesine koyup, sizin belirlediğiniz saat aralığında, evinizin yada herhangi bir odanızın sıcaklığını istediğiniz  bir değerde tutabilirsiniz.

malzemeler:
2 adet pic16f877a
1 adet 2x16 lcd ekran
1 adet lm35 sıcaklık sensörü
1 adet ds1302 RTC
1 adet 3V pil (BIOS pili)
1 adet RF alıcı-verici modül seti
2 adet 7805 voltaj regülatörü
2 adet 100uF kapasitör
2 adet 100nF kapasitör
4 adet 22pF kapasitör
2 adet 4mHz kristal
1 adet 32768 Hz kristal
1 adet 2N2222 NPN transistör
1'er adet mavi, kırmızı, yeşil mantar led
1 adet 1 k trimmpot
3 adet 330 ohm direnç
2 adet 1 k ohm direnç
7 adet 10k direnç
5 adet 4 bacaklı buton
2 adet buton
1 adet 5V röle
4 adet 0 no klemens
1 adet toggle switch

DS1302 RTC (gerçek zamanlı saat) entegresi:
















Şekilde de görüldüğü üzre bu entegrede 8 adet pin bulunmaktadır. DIP-8 kılıf yapısına sahip bu entegre, 2100 yılına kadar olan tüm zaman bilgisini içerisinde  barındırmaktadır. Bacak bağlantıları yukarıdaki resimde ve aşağıdaki şemada ayrıntılı olarak anlatıldığından bunlara değinmeyeceğim ancak burada belirtmek istediğim 2 önemli husus var. birincisi bu entegreyi şekildeki gibi bağlayıp çalıştırdığınızda bir süre sonra entegrenin gösterdiği saatinin ileriye doğru saptığını göreceksiniz. Bunu engellemek için X1 ve X2 uçlarından toprağa giden 6 pF'lık kapasitör kullanmak gerekiyor. ancak bu kapasitörün değeri sizin kullandığınız kristale göre farklılık gösterebilir. bunu ölçerek kontrol etmeniz gerekiyor. benim burada izlediğim yol ise şu şekilde: bir kronometre yardımıyla, entegre ile gerçek zaman arasında 1 saniyelik farkın oluşması için ne kadar süre geçtiğini ölçtüm ve benim kullandığım kristale göre bu süre 90 dakikada. Yani biz her 3 saatte bir entegrenin saatini 2 saniye geri alırsak entegrenin zamanı gerçek zamanla paralel ilerlemiş olur. Siz de devrelerinizde bu iki yoldan hangisi kolayınıza geliyorsa onu kullanarak gerçeğe en yakın sonuçlar elde edebilirsiniz.

İkinci olarak, bu entegreyi kullanmaya başlamadan önce entegreye şu an zamanın ne olduğunu  söylememiz gerekiyor. CCS ile birlikte gelen ds1302.c adlı kütüphaneyi koda dahil ettiğimizde kullanmamız gereken kod şu şekilde : rtc_set_datetime(gün,ay,yıl,hafta,saat,dakika)
örneğin: rtc_set_datetime(28,1,16,4,13,25);
Ancak burada dikkat etmemiz gereken husus, biz zamanı entegreye bildiren kodun, PIC tarafından yalnızca 1 kez okunmasını istiyoruz. Aksi takdirde PIC her resetlendiğinde zamanı tekrar tekrar başa almaya devam edecektir.Bunu önlemek için PIC te kullanmadığımız herhangi bir pini giriş pini olarak tanımlıyoruz örneğin c2 pini. Eğer c2 pini HIGH olursa zamanı yazdırma kodunu PIC in okumasını sağlıyoruz. Bu durumda kod şu şekilde olacaktır:

if (input(pin_c2)==1) {
   rtc_set_datetime(28,1,16,4,13,25);
    }

Daha sonra devreyi kurup PIC i yerleştirdikten sonra c2 pinine bir jumper kablo vasıtasıyla 5v verip zamanı ayarlayabiliriz.

Son olarak ds1302.c dosyasında, entegreden gelen giriş-çıkış pinleri B portuna bağlanmış. Biz kendi devremizde E portuna bağladık. Oluşacak uyum sorunlarını gidermek için ds1302.c dosyasında PIC e
bağladığımız pinleri tanıtmamız gerekiyor ancak kütüphanede değişiklik yapmamıza izin verilmediğinden biz dosyanın içeriğini metin olarak kopyalayıp yazdığımız koda yapıştırdık ve daha sonra gerekli düzenlemeleri yaptık.

Devrenin çalışma mantığı:
Verici devresi:

Verici devresi çalışmaya başladığından lcd ekranın sol üst tarafında saat; sağ üst köşesinde sıcaklık; alt satırda ise kombinin durumu açık ya da kapalı şeklinde kullanıcıya aktarılacak.
Kullanıcı, dilerse butonlar yardımıyla çalışma sıcaklığını ve saatini değiştirebilecek.

Orta buton: menü ve onay butonu
Üst buton : arttırma butonu
Alt buton : azaltma butonu
Sol ve sağ taraftaki butonlar ise yukarı aşağı kaydırma butonları

Bu arada bazı modüllerde sinyal alışverişinde problem çıkabiliyor. Eğer bir sorunla karşılaşıssanız öncelikle alıcı ve verici devresinin topraklarını birleştirerek, vericinin out pinini alıcının in pinine kabloyla bağlayın, çalışıp çalışmadığını kontrol edin eğer çalışıyorsa alıcının ve vericinin frekansları birbirini tutmuyor olabilir. bu durumda bağladığınız kabloları söküp alıcı üzerindeki bobini tornavida yardımıyla yavaşça çevirip sinyal göndermeye devam edin. Son olarak bunları denemeden önce alıcı ve vericiye 17.1 cm lik kablo bağlamayı unutmayın.
Eğer kablo bağladığınızda da çalışmıyorsa devrenizdeki bağlantılarda ya da yazdığınız kodda sıkıntı var demektir.



Alıcı devresi:

Alıcı devresi dosyaları:
devreyle ilgili tüm dosyaları buradan indirebilirsiniz.
PCB çizimi verici dosyasının içerisindedir.

Devrenin çalışma videosu:

21 yorum:

Adsız dedi ki...

iyi günler benim sorum role boştaki 3 uç bağlantıları nereye bağlanacaktır acil yardım lütfen

Yahya dedi ki...

Hocam siz ekteki cizimleri mi kullaniyorsunuz yoksa sifirdan kendiniz mi ciziyorsunuz?

Yahya dedi ki...

Rolenin orta bacagi kombi beslemesine, normalde acik olan bacak da kombiye takilacak

Adsız dedi ki...

sizin çizimi kullandım alıcı ile verici devresi nasıl birbirine bağlantı olacak

Adsız dedi ki...

hocam proje ödevim için acil siz bu devrede alcı modülü nereye bağladınız ve proğramda yazıldımı acilll

Yahya dedi ki...

baskı devre çizminin olduğu fotoya bakarsanız orada alıcı olarak adlandırılan 4 pinli bir eleman var

Yahya dedi ki...

alıcı verici devresi kablosuz olarak haberleşmekte. birbirine bağlantısı olmayacak

Adsız dedi ki...

verici devresinde saat yanlış gösteriyor bu yüzden kombi hep kapalı nasıl sorunu giderebiliriz

Yahya dedi ki...

Ancak orada devreyi test etmek icin videodaki gibi saat araligini degistirebilirsiniz. Ornegin saat 22. 35 gosteriyorsa siz calisma araligini 21 ile 23 arasinda ayarlayarak devreyi deneyebilirsiniz...

Yahya dedi ki...

Orada yazdigim saati ve tarihi duzletmeniz gerekiyor c doayasindan. Hatirlattiginiz icin teşekkür ederim onun ayarini koymayi unutmusum. Sinavlarim bittikten sonra programa onu da ekleyip guncellerim kodu

gürkan köseoğlu dedi ki...

Hocam düzeltme yapamıyorum alt dosyalarını istiyor. Tüm dosyalarını atar mısınız tek dosya halinde. TEŞEKKÜRLER İYİ ÇALIŞMALAR.

gürkan köseoğlu dedi ki...

Hocam düzeltme yapamıyorum alt dosyalarını istiyor. Tüm dosyalarını atar mısınız tek dosya halinde. TEŞEKKÜRLER İYİ ÇALIŞMALAR.

recep dedi ki...

paylaşımınız için teşekkürler bu devreyi kurmak istiyorum 84x84 nokia lcd sini kullanabilir miyiz yada kodda ne gibi değişiklikler yapmamız gerekiyor.bir soru daha sormak istiyorum benim elimde 433mhz rf var onu mu takıcaz devreye ?

Adsız dedi ki...

paylaşımınız için teşekkür ederim.devre ile ilgili birkaç soru sormak istiyorum.
433mhz rf mi kullanıcaz birde 84x84 nokia lcd si kullanabilir miyiz yada kodda nasıl bir değişiklik yapmamız gerekiyor

Unknown dedi ki...

Paylaşımınız için teşekkürler devre ile ilgili birkaç sorum olacak.lcd yerine 84x84 Nokia lcd ekran kullanabilir miyiz yada ne gibi değişiklikler yapmamız gerekiyor diğer bir sorumda 433mhz rf kullanmamız mı gerekiyor ? Tekrar teşekkürler

Unknown dedi ki...

Paylaşımınız için teşekkürler. Devre ile ilgili birkaç sorum olacak 84x84 Nokia lcd kullanabilir miyiz ne gibi değişiklikler yapmamız gerekiyor.diğer bir sorumda rf olarak 433mhz rf mi kullanılacak ?

Adsız dedi ki...

Paylaşımınız için teşekkürler. Devre ile ilgili birkaç sorum olacak 84x84 Nokia lcd kullanabilir miyiz ne gibi değişiklikler yapmamız gerekiyor.diğer bir sorumda rf olarak 433mhz rf mi kullanılacak ?

Yahya dedi ki...

merhaba. nokia lcd kullanabilmeniz için kütüphaneleri değiştirmeniz gerekiyor. ayrıca bütün printf komutlarının içeriğini de o lcdye göre düzenlemelisiniz. verici devresine 433 Mhz RF verici, alıcı devresinde de yine aynı şelikde 433 mhz rf alıcı kullanmalısınız. Pin bağlantılarıyla oynama yaparak ve baud rate değerini 9600 e çekerek bluetooth modülüyle de haberleşmeyi sağlayabilirsiniz. iyi çalışmalar

Unknown dedi ki...

Elinize sağlık, bu güzel çalışmayi bizlerle paylaştığınız için, Bu projeyi haberleşmesiz tek pic üzerinden yapmak istiyorum, Bunun için yazilimda ve tasarimda ne gibi değişiklikler yapmam gerekli yardımcı olursanız cok sevinirim.

Yahya dedi ki...

Merhaba. Verici devresindeki işlemcinin herhangi bir pinine bir röle bağlamanız ve verici devresine ait kodlarda rs232 üzerinden putc komutu kullanılarak gönderilen aç ya da kapat komutlarını silerek bunların yerine bağladığınız röleyi aktif etme yada devreden çıkarma komutlarını eklemeniz yeterli olacaktır. iyi çalışmalar

gürkan köseoğlu dedi ki...

merhaba hocam devredeki saat ayarını nasıl yapıyoruz sümilasyonda saat gözüküyor fakat gerçekte devredeki saati nasıl ayarlıyacağız.