Mikrodenetleyici tabanlı zamanlayıcı ve kontrol projesi bir çok konu hakkında faydalı bilgiler içeriyor kontrol devresi PIC16F877A üzerine kurulu proteus ares ile hazırlanmış baskı devresi şematik çizimi ve kaynak CCS C yazılımı var. Hazırlayan: Hüsnü Onur BOYRAZ – Emeği geçen hazırlayan kişilere teşekkürler
Günümüzde ev otomasyon sistemleri gittikçe yaygınlaşmakta olup yeni teknolojilerle bu sistemler desteklenmektedir. Bu projede farklı tiplerdeki elektronik cihazları, aydınlatmaları gibi aletlerin zamanla açılıp kapanması kontrol etmek amaçlanmıştır. Kontrol hem basit bir tuş takımıyla hem seri haberleşme ile bilgisayarla hem de istenilen zamanın ayarlanmasıyla otomatik olarak yapılmıştır.
Donanım kısmında mikrodenetleyici türlerinden PIC 16F877A, zamanlayıcı olarak DS1302 rtc, bilgisayar ile seri haberleşmeyi sağlaması için MAX232 ve yapılan işlemleri göstermek için 16X2 LCD kullanılmış olup hazırlanan yazılım CCS-C programlama dili ile yapılmıştır.
Bu çalışma günümüzde sıklıkla kullanılan PIC mikrodenetleyici tabanlı bir zamanlayıcı saat tasarımı ve buna bağlı istenilen çıkışların belirlenen zamanda açılıp kapanmasının kontrol edilmesini amaçlanmaktadır. Yapılan sistem ile istenilen farklı bir aygıt veya donanım rahatlıkla kontrol edilebilir. Kontrol tuş takımıyla ve bilgisayarla sağlanmaktadır. Ayrıca kontrol istenilen çıkış belirlenen bir zamanda da sağlanılabilir.
Bu işlemleri yaparken bir mikrodenetleyiciye ihtiyaç duyulur. Bu çalışmada kullanılan mikrodenetleyici PIC16F877A’ dır. Bunun nedeni hem PIC16F877A’ nın çok yaygın kullanılması ve uygulama geliştirmek için sunduğu kolaylıklar hem de PIC16F877A’ yı yeteri kadar çıkış portuna sahip olmasıdır (Şahin v.d. 2006). Mikrodenetleyicide kullanılan yazılımda ise CCS-C programlama tercih edilmiştir.
CCS-C tercih edilmesinin sebebi derleyicisi içinde bulunan hazır fonksiyonların yanında çevresel birimler ve iletişim protokolleri için hazır birçok kütüphane dosyası bulunmaktadır (Çiçek 2009).
CCS C derleyicisi ayrıca diğer C derleyicilerine nazaran daha kolay bir şekilde programlama yapmaya imkan vermektedir. Kullanılan denetleyicinin donanım yapısını detaylı olarak bilmeden bile ileri düzeyde programlar yazılabilmektedir. Bu çalışmada LCD de kullanıllarak bilgisayar bağlantısı olmadan da LCD de hazırlanan menü üzerinden sistemin kontrol edilmesi ve zamanlayıcı buradan ayarlanabilmektedir.
Öncelikle tasarlanan sistemin tanıtımı Bölüm 2’de verildikten sonra sistem donanımı ve yazılımı sırasıyla Bölüm 3 ve Bölüm 4’de verilmektedir. Hazırlanan devrenin simülasyonu da Bölüm 5’de verilmiş ve elde edilen sonuçlar tartışılmıştır.
Hazırlanan bu projede bilgisayardan (RS 232 üzerinden) ve devre üzerinden kontrol edilebilen bir ev otomasyonu projesinin ana kontrol bölümü gerçekleştirilmiştir. Projenin amacı bilgisayar bağlantısı gerçekleştiğinde kullanıcının sisteme bağlanması ve sistemi kontrol edebilmesidir. Ayrıca bilgisayar bağlantısı olmadan da LCD’de hazırlanan menü üzerinden sistemi kontrol edebilmesini sağlamaktır.
Proje kapsamında tasarlanan elektronik donanım, RS-232 seri haberleşme protokolünü kullanarak kişisel bilgisayar ile haberleşmekte ve hazırlanan devrede ilgili çıkışları aktif veya deaktif edebilmektedir.
Projenin gerçekleştirilmesinde öncelikle ev otomasyonu ve akıllı evler hakkında araştırma yapılmıştır. Devre tasarımı yapılırken proje birkaç modül halinde düşünülmüştür. Bunlar kullanılacak mikrodenetleyicinin gerekli donanımının(Reset devresi, osilatör devresi ) öğrenilmesi ve oluşturulması, RS 232 seri haberleşme protokolü için MAX 232 entegresi ve gerekli donanımın araştırılması ve kurulması, bilgisayarla haberleşmede gerekli hyperterminal’ in öğrenilmesi, çıkışların kontrolü için LCD mikrodenetleyici bağlantısının gerçekleştirilmesi ve çıkışların gözlemlenmesi için ledlerdir.
program CCS-C.c yazılım içeriği;
//Mikrodenetleyici Temelli Kontrol Ve Zamanlayıcı //Hüsnü Onur BOYRAZ #include <16f877A.h> // 16F877A.h dosyası programa ekleniyor #fuses HS,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD // Denetleyici konfigürasyon ayarları #use delay (clock=20000000) // Gecikme fonksiyonu için kullanılacak osilatör frekansı belirtiliyor #define use_portd_lcd TRUE // LCD D portuna bağlı #use rs232(baud=9600, xmit=PIN_c6, rcv=PIN_c7, UART1) //RS232 bağlantısı tanımlamaları #include <lcd.c> // LCD.c dosyası programa ekleniyor #define RTC_SCLK PIN_c1 // DS1302 için pin tanımlamaları #define RTC_IO PIN_c2 #define RTC_RST PIN_c0 #include <DS1302.c> // DS1302.c dosyası programa ekleniyor #use fast_io(a) // A ve D portu hızlı giriş çıkışa ayarlandı #use fast_io(d) #define ayar pin_e0 // saati ayarlama #define art pin_a0 // artırma #define azal pin_a1 // azaltma #define onay pin_a2 // onaylama #define alarm pin_e1 // alarmı ayarlama #define aonoff pin_e2 // alarmı açma kapama byte saniye,dakika,saat,gun,ay,yil,haftanin_gunu,menu,ekledakika,eklesaat,i; // byte türünde değişkenler tanımlanıyor int alarmt[8][3]; int alarm_off[8][2]; #SEPARATE // ROM bölümüne (segment) sığmayan uzun fonksiyonlar için derleyiciye bölme parametresi veriliyor. void husnu() // Saat gösterimi,ayarı ve Alarm ayarı { //rtc_set_datetime(5,5,9,5,5,5); // Tarih ve Saat ayarları yapılıyor bu satır test aşaması için gerekli menu=1; while(input(aonoff)) { //lcd_putc("\f");//ekranı temizle // saatin gösterilmesi kısmı rtc_get_time(saat,dakika,saniye); // DS1302'den saat,dakika,saniye bilgileri alınıyor rtc_get_date(gun,ay,yil,haftanin_gunu); // DS1302'den gün,ay,yil ve günün isim bilgisi alınıyor // LCD'ye gün,ay,yıl bilgileri yazdırılıyor lcd_gotoxy(1,1); // 9.sütun 1 satıra git printf(lcd_putc," %02d/%02d/%02d"gun,ay,yil); // gün ay yıl yazdır lcd_gotoxy(1,2); // gün yazılacak yere gir 2. satır 1. sütun switch(haftanin_gunu) // DS1302'den sayısal olarak alınan haftanın günü bilgisine metin olarak karşılık atanıyor { case 1: printf(lcd_putc,"PAZ "); break; // Eğer "1" ise LCD'ye PAZ yaz case 2: printf(lcd_putc,"PZT "); break; // Eğer "2" ise LCD'ye PZT yaz case 3: printf(lcd_putc,"SAL "); break; // Eğer "3" ise LCD'ye SAL yaz case 4: printf(lcd_putc,"CRS "); break; // Eğer "4" ise LCD'ye CRS yaz case 5: printf(lcd_putc,"PER "); break; // Eğer "5" ise LCD'ye PER yaz case 6: printf(lcd_putc,"CUM "); break; // Eğer "6" ise LCD'ye CUM yaz case 7: printf(lcd_putc,"CTS "); break; // Eğer "7" ise LCD'ye CTS yaz } // LCD'ye saat,dakika ve saniye değerlerini yaz lcd_gotoxy(9,2); // 2 . satır 9. sütuna git printf(lcd_putc,"%02d:%02d:%02d",saat,dakika,saniye); // saat dakika saniye yazdır aralarında : var // alarmlar test ediliyor for(i=0;i<8;i++) { //alarm kontrol if(input(aonoff)&&(alarmt[i][0]==saat)&&(alarmt[i][1]==dakika)&&(!alarmt[i][2])) { //i. alarm çalışıyor switch(i) { case 0: output_bit(48,1); break; case 1: output_bit(49,1); break; case 2: output_bit(50,1); break; case 3: output_bit(51,1); break; case 4: output_bit(52,1); break; case 5: output_bit(53,1); break; case 6: output_bit(54,1); break; case 7: output_bit(55,1); } alarmt[i][2]=1; lcd_gotoxy(1,1);printf(lcd_putc," %u. led acildi ",i+1);delay_ms(1000); //i. led için kapanma süresi belirleniyor (saat, dakika) eklesaat=0; ekledakika=1; if(dakika+ekledakika>59) { alarm_off[i][0]=(saat+eklesaat+1)%24; alarm_off[i][1]=dakika+ekledakika-60; } else { alarm_off[i][0]=(saat+eklesaat)%24; alarm_off[i][1]=dakika+ekledakika; } } //alarm off - led kapama if(input(aonoff)&&(saat==alarm_off[i][0])&&(dakika==alarm_off[i][1])&&(alarmt[i][2])) { switch(i) { case 0: output_bit(48,0); break; case 1: output_bit(49,0); break; case 2: output_bit(50,0); break; case 3: output_bit(51,0); break; case 4: output_bit(52,0); break; case 5: output_bit(53,0); break; case 6: output_bit(54,0); break; case 7: output_bit(55,0); } alarmt[i][2]=0; } } // saat ayarlama döngüsü while(input(ayar)) // saat ayar { lcd_putc("\f"); switch(menu) // menu hangi basamakta { case 1: // dakika ayarı printf(lcd_putc,"Dakika"); lcd_gotoxy(12,2); printf(lcd_putc,"%d",dakika); rtc_set_datetime(gun,ay,yil,haftanin_gunu,saat,dakika); if(input(art)) { dakika=dakika+1; delay_ms(200); } if(input(azal)) { dakika=dakika-1; delay_ms(200); } if(input(onay)) { menu=menu+1; delay_ms(200); } if((dakika==60)) { dakika=0; } if((dakika==-1)) { dakika=59; } break; case 2: // saat ayarı printf(lcd_putc,"Saat"); lcd_gotoxy(9,2); printf(lcd_putc,"%d",saat); rtc_set_datetime(gun,ay,yil,haftanin_gunu,saat,dakika); if(input(art)) { saat=saat+1; delay_ms(200); } if(input(azal)) { saat=saat-1; delay_ms(200); } if(input(onay)) { menu=menu+1; delay_ms(200); } // saat kontrol if((saat==24)) { saat=0; } if((saat==-1)) { saat=23; } break; case 3: // gün ayarı printf(lcd_putc,"Gun"); lcd_gotoxy(15,1); printf(lcd_putc,"%d",gun); rtc_set_datetime(gun,ay,yil,haftanin_gunu,saat,dakika); if(input(art)) { gun=gun+1; delay_ms(200); } if(input(azal)) { gun=gun-1; delay_ms(200); } if(input(onay)) { menu=menu+1; delay_ms(200); } // gün kontrolü if((gun==32)) { gun=1; } if((gun==0)) { gun=31; } break; case 4: // ay ayarı printf(lcd_putc,"Ay"); lcd_gotoxy(12,1); printf(lcd_putc,"%d",ay); rtc_set_datetime(gun,ay,yil,haftanin_gunu,saat,dakika); if(input(art)) { ay=ay+1; delay_ms(200); } if(input(azal)) { ay=ay-1; delay_ms(200); } if(input(onay)) { menu=menu+1; delay_ms(200); } // ay kontrolü if((ay==13)) { ay=1; } if((ay==0)) { ay=12; } break; case 5: // yıl ayarı printf(lcd_putc,"yil"); lcd_gotoxy(9,1); printf(lcd_putc,"%d",yil); rtc_set_datetime(gun,ay,yil,haftanin_gunu,saat,dakika); if(input(art)) { yil=yil+1; delay_ms(200); } if(input(azal)) { yil=yil-1; delay_ms(200); } if(input(onay)) { menu=menu+1; delay_ms(200); } break; case 6: // haftanın gün ayarı printf(lcd_putc,"haftanin gunu"); lcd_gotoxy(1,2); printf(lcd_putc,"%d",haftanin_gunu); rtc_set_datetime(gun,ay,yil,haftanin_gunu,saat,dakika); if(input(art)) { haftanin_gunu=haftanin_gunu+1; delay_ms(200); } if(input(azal)) { haftanin_gunu=haftanin_gunu-1; delay_ms(200); } if(input(onay)) { menu=1; delay_ms(200); } // haftanin_gunu kontrolü if((haftanin_gunu==8)) { haftanin_gunu=1; } if((haftanin_gunu==0)) { haftanin_gunu=7; } break; } } // Alarm ayar kısmı i=0; while(input(alarm)) // alarm ayar { if(menu>2) { menu=1; i++; if(i>7) i=0; } switch(menu) // menu hangi basamakta { case 1: // dakika ayarı printf(lcd_putc,"\f%u. Alarm Dakika\n",i+1); lcd_gotoxy(12,2); printf(lcd_putc,"%u",alarmt[i][1]); write_eeprom(8+i,alarmt[i][1]); delay_ms(20); if(input(art)) { alarmt[i][1]=alarmt[i][1]+1; delay_ms(200); } if(input(azal)) { alarmt[i][1]=alarmt[i][1]-1; delay_ms(200); } if(input(onay)) { menu=menu+1; delay_ms(200); } if((alarmt[i][1]==60)) { alarmt[i][1]=0; } if((alarmt[i][1]>60)) { alarmt[i][1]=59; } break; case 2: // saat ayarı printf(lcd_putc,"\f%u. Alarm Saat\n",i+1); lcd_gotoxy(9,2); printf(lcd_putc,"%u",alarmt[i][0]); write_eeprom(i,alarmt[i][0]); delay_ms(20); if(input(art)) { alarmt[i][0]=alarmt[i][0]+1; delay_ms(200); } if(input(azal)) { alarmt[i][0]=alarmt[i][0]-1; delay_ms(200); } if(input(onay)) { menu=menu+1; delay_ms(200); } // saat kontrol if((alarmt[i][0]==24)) { alarmt[i][0]=0; } if((alarmt[i][0]>24)) { alarmt[i][0]=23; } break; } } } } int g; #SEPARATE void pccon() // PC Kontrol { switch(g) { case '1':output_bit( PIN_B0, 1);lcd_gotoxy(1,2);printf(lcd_putc,"Led1 Acildi "); lcd_gotoxy(1,1); printf(lcd_putc,"PC'den KONTROL"); break; case 'q':output_bit( PIN_B0, 0);lcd_gotoxy(1,2);printf(lcd_putc,"Led1 Kapatildi"); lcd_gotoxy(1,1); printf(lcd_putc,"PC'den KONTROL"); break; case '2':output_bit( PIN_B1, 1);lcd_gotoxy(1,2);printf(lcd_putc,"Led2 Acildi "); lcd_gotoxy(1,1); printf(lcd_putc,"PC'den KONTROL"); break; case 'w':output_bit( PIN_B1, 0);lcd_gotoxy(1,2);printf(lcd_putc,"Led2 Kapatildi"); lcd_gotoxy(1,1); printf(lcd_putc,"PC'den KONTROL"); break; case '3':output_bit( PIN_B2, 1);lcd_gotoxy(1,2);printf(lcd_putc,"Led3 Acildi "); lcd_gotoxy(1,1); printf(lcd_putc,"PC'den KONTROL"); break; case 'e':output_bit( PIN_B2, 0);lcd_gotoxy(1,2);printf(lcd_putc,"Led3 Kapatildi"); lcd_gotoxy(1,1); printf(lcd_putc,"PC'den KONTROL"); break; case '4':output_bit( PIN_B3, 1);lcd_gotoxy(1,2);printf(lcd_putc,"Led4 Acildi "); lcd_gotoxy(1,1); printf(lcd_putc,"PC'den KONTROL"); break; case 'r':output_bit( PIN_B3, 0);lcd_gotoxy(1,2);printf(lcd_putc,"Led4 Kapatildi"); lcd_gotoxy(1,1); printf(lcd_putc,"PC'den KONTROL"); break; case '5':output_bit( PIN_B4, 1);lcd_gotoxy(1,2);printf(lcd_putc,"Led5 Acildi "); lcd_gotoxy(1,1); printf(lcd_putc,"PC'den KONTROL"); break; case 't':output_bit( PIN_B4, 0);lcd_gotoxy(1,2);printf(lcd_putc,"Led5 Kapatildi"); lcd_gotoxy(1,1); printf(lcd_putc,"PC'den KONTROL"); break; case '6':output_bit( PIN_B5, 1);lcd_gotoxy(1,2);printf(lcd_putc,"Led6 Acildi "); lcd_gotoxy(1,1); printf(lcd_putc,"PC'den KONTROL"); break; case 'y':output_bit( PIN_B5, 0);lcd_gotoxy(1,2);printf(lcd_putc,"Led6 Kapatildi"); lcd_gotoxy(1,1); printf(lcd_putc,"PC'den KONTROL"); break; case '7':output_bit( PIN_B6, 1);lcd_gotoxy(1,2);printf(lcd_putc,"Led7 Acildi "); lcd_gotoxy(1,1); printf(lcd_putc,"PC'den KONTROL"); break; case 'u':output_bit( PIN_B6, 0);lcd_gotoxy(1,2);printf(lcd_putc,"Led7 Kapatildi"); lcd_gotoxy(1,1); printf(lcd_putc,"PC'den KONTROL"); break; case '8':output_bit( PIN_B7, 1);lcd_gotoxy(1,2);printf(lcd_putc,"Led8 Acildi "); lcd_gotoxy(1,1); printf(lcd_putc,"PC'den KONTROL"); break; case 'ı':output_bit( PIN_B7, 0);lcd_gotoxy(1,2);printf(lcd_putc,"Led8 Kapatildi"); lcd_gotoxy(1,1); printf(lcd_putc,"PC'den KONTROL"); break; } } int m,k; void menua() // Tuşlarla Kontrol { switch(m) { case 1:printf(lcd_putc,"\f Led1 ");lcd_gotoxy(10,2);printf(lcd_putc,"ileri>>");delay_ms(300);k=1; break; case 2:printf(lcd_putc,"\f Led2 ");lcd_gotoxy(1,2);printf(lcd_putc,"<<geri");lcd_gotoxy(10,2);printf(lcd_putc,"ileri>>");delay_ms(300);k=2; break; case 3:printf(lcd_putc,"\f Led3 ");lcd_gotoxy(1,2);printf(lcd_putc,"<<geri");lcd_gotoxy(10,2);printf(lcd_putc,"ileri>>");delay_ms(300);k=3; break; case 4:printf(lcd_putc,"\f Led4 ");lcd_gotoxy(1,2);printf(lcd_putc,"<<geri");lcd_gotoxy(10,2);printf(lcd_putc,"ileri>>");delay_ms(300);k=4; break; case 5:printf(lcd_putc,"\f Led5 ");lcd_gotoxy(1,2);printf(lcd_putc,"<<geri");lcd_gotoxy(10,2);printf(lcd_putc,"ileri>>");delay_ms(300);k=5; break; case 6:printf(lcd_putc,"\f Led6 ");lcd_gotoxy(1,2);printf(lcd_putc,"<<geri");lcd_gotoxy(10,2);printf(lcd_putc,"ileri>>");delay_ms(300);k=6; break; case 7:printf(lcd_putc,"\f Led7 ");lcd_gotoxy(1,2);printf(lcd_putc,"<<geri");lcd_gotoxy(10,2);printf(lcd_putc,"ileri>>");delay_ms(300);k=7; break; case 8:printf(lcd_putc,"\f Led8 ");lcd_gotoxy(1,2);printf(lcd_putc,"<<geri");delay_ms(300);k=8; break; } } byte a,b,c,d; #SEPARATE void onur() // PC ve tuşlarla kontrol { asd: lcd_init(); basla: lcd_gotoxy(1,1); printf(lcd_putc," <<MENU>> "); lcd_gotoxy(1,2); printf(lcd_putc,"<<geri "); lcd_gotoxy(10,2); printf(lcd_putc,"ileri>>"); while(!input(aonoff)) { // Butonlar Tanımlanıyor a=input(pin_A0); // Sağ b=input(pin_A1); // Sol c=input(pin_A2); // Ac d=input(pin_A3); // Kapa //Seri portta veri varmi kontrol ediliyor if(kbhit()) { g = getc(); } if(g=='A') { lcd_gotoxy(1,1); printf(lcd_putc," PC BAGLANTISI "); delay_ms(20); lcd_gotoxy(1,2); printf(lcd_putc," HAZIR "); for(;;) { // Butonlar Tanımlanıyor a=input(pin_A0); // Sağ b=input(pin_A1); // Sol c=input(pin_A2); // Ac d=input(pin_A3); // Kapa if(kbhit()) { g = getc(); } if(g=='B') { lcd_gotoxy(1,1); printf(lcd_putc," PC BAGLANTISI "); delay_ms(20); lcd_gotoxy(1,2); printf(lcd_putc," KESILDI "); delay_ms(1000); goto asd; } pccon(); if(a||b||c||d) { break; } } } if (a) { m=m+1; if(m>8) { m=8; } menua(); } if (b) { m=m-1; if(m<1) { m=1; } menua(); } if(k==1) { if(c) { lcd_gotoxy(1,2); printf(lcd_putc,"< Led1 Acildi >"); output_bit( PIN_B0, 1); delay_ms(2000); k=0; m=0; break; } if(d) { lcd_gotoxy(1,2); printf(lcd_putc,"<Led1 Kapatildi>"); output_bit( PIN_B0, 0); delay_ms(2000); k=0; break; } } if(k==2) { if(c) { lcd_gotoxy(1,2); printf(lcd_putc,"< Led2 Acildi >"); output_bit( PIN_B1, 1); delay_ms(2000); k=0; m=0; break; } if(d) { lcd_gotoxy(1,2); printf(lcd_putc,"<Led2 Kapatildi>"); output_bit( PIN_B1, 0); delay_ms(2000); k=0; break; } } if(k==3) { if(c) { lcd_gotoxy(1,2); printf(lcd_putc,"< Led3 Acildi >"); output_bit( PIN_B2, 1); delay_ms(2000); k=0; m=0; break; } if(d) { lcd_gotoxy(1,2); printf(lcd_putc,"<Led3 Kapatildi>"); output_bit( PIN_B2, 0); delay_ms(2000); k=0; break; } } if(k==4) { if(c) { lcd_gotoxy(1,2); printf(lcd_putc,"< Led4 Acildi >"); output_bit( PIN_B3, 1); delay_ms(2000); k=0; m=0; break; } if(d) { lcd_gotoxy(1,2); printf(lcd_putc,"<Led4 Kapatildi>"); output_bit( PIN_B3, 0); delay_ms(2000); k=0; break; } } if(k==5) { if(c) { lcd_gotoxy(1,2); printf(lcd_putc,"< Led5 Acildi >"); output_bit( PIN_B4, 1); delay_ms(2000); k=0; m=0; break; } if(d) { lcd_gotoxy(1,2); printf(lcd_putc,"<Led5 Kapatildi>"); output_bit( PIN_B4, 0); delay_ms(2000); k=0; break; } } if(k==6) { if(c) { lcd_gotoxy(1,2); printf(lcd_putc,"< Led6 Acildi >"); output_bit( PIN_B5, 1); delay_ms(2000); k=0; m=0; break; } if(d) { lcd_gotoxy(1,2); printf(lcd_putc,"<Led6 Kapatildi>"); output_bit( PIN_B5, 0); delay_ms(2000); k=0; break; } } if(k==7) { if(c) { lcd_gotoxy(1,2); printf(lcd_putc,"< Led7 Acildi >"); output_bit( PIN_B6, 1); delay_ms(2000); k=0; m=0; break; } if(d) { lcd_gotoxy(1,2); printf(lcd_putc,"<Led7 Kapatildi>"); output_bit( PIN_B6, 0); delay_ms(2000); k=0; break; } } if(k==8) { if(c) { lcd_gotoxy(1,2); printf(lcd_putc,"< Led8 Acildi >"); output_bit( PIN_B7, 1); delay_ms(2000); k=0; m=0; break; } if(d) { lcd_gotoxy(1,2); printf(lcd_putc,"<Led8 Kapatildi>"); output_bit( PIN_B7, 0); delay_ms(2000); k=0; break; } } setup_adc_ports(NO_ANALOGS); setup_adc(ADC_OFF); setup_psp(PSP_DISABLED); setup_spi(FALSE); setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); setup_timer_1(T1_DISABLED); setup_timer_2(T2_DISABLED,0,1); } } void main() // PC,tuş ve saat kontrol (ana program) { // Giriş-Çıkış ayarları set_tris_a(0x0F); set_tris_d(0x00); set_tris_e(0x06); output_d(0x00); output_e(0x00); lcd_init(); // LCD başlangıç ayarları yapılıyor rtc_init(); // DS1302 başlangıç ayarları yapılıyor // Giriş printf(lcd_putc," H. Onur BOYRAZ "); lcd_gotoxy(1,2); printf(lcd_putc,"DiplomaCalismasi"); delay_ms(3000); // Hafızadaki alarm değerlerinin alınması for(i=0;i<8;i++) { alarmt[i][0]=read_eeprom(i); alarmt[i][1]=read_eeprom(8+i); alarmt[i][2]=0; } while(TRUE) { husnu(); onur(); } }
EV OTOMASYONU VE AKILLI EVLER
Akıllı bina tanımı genel olarak “her şeyiyle kontrol edilebilen, servis kontrol sistemine sahip olan binadır. Yine “The Intelligent Building Institution” akıllı evi şu şekilde tanımlamaktadır; “akıllı bir ev, çeşitli sistemleri bir arada koordineli bir şekilde kullanarak teknik performansı, yatırımları ve işletim maliyetlerini düşürmeyi, esneklik kazandırmayı en üst seviyeye taşıyan yapıdır”. Şekil 2.1. de basit bir akıllı ev sisteminde olabilecek uygulamalar görülmektedir.
Binalar için akıllı kelimesi ilk olarak Amerika birleşik devletlerinde 1980 yılının başlarında kullanıldı. Türkiye’deki ilk uygulama ise 1984 yılında yapıldı. Tasarlanan bu sistem yalnızca izlemeye yönelikti. Geçen yıllar içinde teknolojinin gelişmesine paralel olarak yaşantımızın her alanında ciddi değişimler oldu. Bu dönem içinde bina otomasyon sistemleri de yerinde saymadı ve firmalar sürekli yeni nesil sistemler üreterek gelişen teknolojiyi takip ettiler. Mekatronik sistemlerdeki gelişmeler daha hızlı, daha yüksek kapasiteli kontrol cihazlarının kullanılmasına imkân verdi.
Akıllı evlerden beklentiler: Genel olarak akıllı evlerden beklentiler dört ana başlık altında toplanabilir. Bunlar: Güvenlik ve emniyetin artırılmasına yönelik sistemler, konfora yönelik sistemler, basitlik ve kullanım kolaylığı, enerji tasarrufuna yönelik sistemlerdir.
Akıllı evlerin Kullanıcıya sağlayacağı faydalar: Akıllı Evler size sınırsız konfor olanağı sunar, örneğin; ısınma konusunda gelişen teknoloji hayatımızı kolaylaştırırken eski alışkanlıklarımızdan da bizi vazgeçirmiyor. Evinizde şömine keyfini çok daha güvenli ve konforlu olarak yaşayabilirsiniz, evinizdeki tüm elektrikli cihazlar otomatik kontrole geçer ve böylece gereksiz enerji sarfiyatı önlenir(Işık kontrol, TV/DVD, ısıtıcı, beyaz eşya vb. ).
Evde bulunmadığınız zamanlarda veya gece modunda tüm alarm sistemleri (hırsız ve yangın gibi.) aktif hale geçerek sizden habersiz eviniz koruma altına alınır(Pencere veya kapılar zorlandığında kamera kontrol devreye girerek kayıt yapılır, siren çalınarak ev sakinleri ve hırsız uyarılır ve son olarak istenilen numara (polis vaya itfaiye merkezi) aranılarak gerekli mesaj otomatik olarak gönderilir). Evin temizliği, bahçelerin sulanması, ev sıcaklığı veya güneş yoğunluğuna göre perdelerin açılıp kapanması gibi monoton ev işleri yine akıllı ev sistemlerinde belirlenmiş zaman veya gerektiği durumlarda otomatik olarak yapılabilmektedir.
Temizlik yapmakta zorlanıyor ya da zamanınızı daha verimli işlerde kullanmak istiyorsanız belli zamanlara programlanmış, odanızın şeklini ve eşyaların yerini bilen, kırıp dökmeden temizlik yapan robot size yardımcı olabilir. Yukarıda saydığımız tüm işlemleri ve daha fazlasını ev içindeyken sesli komutlarla veya küçük dokunuşlarla yaptırabiliriz. Eğer dışarıdaysanız cep telefonu veya internet erişimli bir bilgisayar sayesinde evinizi kontrol edebilirsiniz. (Cep telefonumuzdan evin sıcaklığını 23 dereceye ayarlayabileceğimiz gibi evdeki çocuk bakıcınızı işyerimizdeki internet erişimli bilgisayarımızdan gözetleyebiliriz.) Şekil 2.2. de yapılabilecek örnek proje görülmektedir.
.
yukarıda özetler verildi;
Şifre-Pass: 320volt.com
Yayım tarihi: 2010/05/16 Etiketler: akıllı ev, ccs c projeleri, ev oromasyonu, microchip pic projeleri, PIC16F877 örnekleri, seri haberleşme, zamanlayıcı
gevv hocam öncelikle bu çalışma için çok teşekkürler size bir sorum olacak devreyi proteusta yapıp çalıştırdım fakat akış şemasında olduğu gibi alarm on off butonuna basıldığı zaman devre alarm ayarlamaya geçmiyor sadece saat gösteriyor ve menüye geçiş yapıyor ne yapmam gerekir ilginiz için şimdiden teşekkürler
devre bilgisayar kontrollü demişsiniz acaba bilgisayar programınıda paylaşırmısınız….
iyi günler,
ccs c de yeniyim.
Bu kısmı açarmısınız?
48,49…
ne anlama geliyor.
//i. alarm çalışıyor
switch(i)
{
case 0: output_bit(48,1); break;
case 1: output_bit(49,1); break;
case 2: output_bit(50,1); break;
case 3: output_bit(51,1); break;
case 4: output_bit(52,1); break;
case 5: output_bit(53,1); break;
case 6: output_bit(54,1); break;
case 7: output_bit(55,1);
}