16F628A tabanlı şifreli kapı kilidi yazılımsal olarak belirlenen şifrenin doğru girilmesi halinde devre üzerindeki röle vasıtasıyla kapı otomatına enerji vererek kapının açılmasını sağlar. Şifre doğru girilirse röle kontakları 2 saniye boyunca çekili kalır ardından normal konumuna geri döner. Şifre yazılımsal olarak belirlenmiştir. Şifre toplamda 6 hanedir. Şifre formatı *1234# şeklindedir. LCD display ekranında şifrenin yanlış girilmesi durumunda uyarı vermektedir. Kapı otomatı devrenin üzerinde bulunan röle çıkışlarına bağlanarak aktif edilmektedir. Çıkış klemenslerinin yanına ikili klemens ile 12V ve GND çıkışları eklenmiştir.Bu klemensten 1 ampere kadar 12 volt değerinde çıkış alınabilir.
Devrenin kodları MikroC PRO For Pic ile yazıldı. Basılan butonu anlamak için tarama metodunda yararlanıldı. Klavye tarama işleminde 7408 Ve kapısı kullanıldı. Kullanıcılara şifrenin doğru olması yada yanlış olması durumlarını göstermek için LCD display ekran kullanıldı. Butonlara her basıldığında sesli uyarı vermek için buzzer kullanıldı. Ayrıca Şifrenin doğru yada yanlış girilmesi durumlarında buzzer sesli uyarı vermekte ve LCD display ekranda uyarı çıkmaktadır. Devrenin besleme gerilimi 12 volttur pic ve dijital kapı için 7805 gerilim regülatörü kullanılmıştır.
Devreye ait kodlar aşağıdadır:
#define sutun3 portb.rb0
#define sutun2 portb.rb1
#define sutun1 portb.rb2
#define satir1 portb.rb3
#define satir2 portb.rb4
#define k1_int portb.rb5
#define buzzer porta.ra7
char tus1, tus2 , tus3, tus4;
char x, y,t;
int hata;
sbit LCD_RS at rb6_bit;
sbit LCD_EN at rb7_bit;
sbit LCD_D4 at ra0_bit;
sbit LCD_D5 at ra1_bit;
sbit LCD_D6 at ra2_bit;
sbit LCD_D7 at ra3_bit;
sbit LCD_RS_direction at trisb6_bit;
sbit LCD_EN_direction at trisb7_bit;
sbit LCD_D7_direction at trisa3_bit;
sbit LCD_D6_direction at trisa2_bit;
sbit LCD_D5_direction at trisa1_bit;
sbit LCD_D4_direction at trisa0_bit;
void init()
{
cmcon=0x07; //analog girişler dijitale çevrildi.
lcd_init();
lcd_cmd(_lcd_cursor_off);
lcd_out(1,2,”SIFRE GIRINIZ”);
lcd_cmd(_lcd_second_row);
portb=0;
trisb.rb2=0; // rb2 çıkış
trisb.rb1=0; // rb1 çıkış
trisb.rb0=0; // rb0 çıkış
trisb.rb3=1; // rb3 giriş
trisb.rb4=1; // rb4 giriş
trisb.rb5=1; // rb5 giriş
trisa.ra6=0; trisa.ra7=0;
porta.ra6=0; porta.ra7=0;
hata=0;}
void main()
{
init();
while(1)
{ sutun1=1; sutun2=1; sutun3=1;
//1. sutun kontrol ediliyor
sutun1=0;
if(sutun1==0 && k1_int==0 && satir2==0 && satir1==0)
{ tus1=15; buzzer=1; delay_ms(250); buzzer=0; hata=hata+1;
while(sutun1==0 && k1_int==0 && satir2==0 && satir2==0){}; } //1’e basıldı
if(hata==6){goto kontrol;}if(sutun1==0 && k1_int==0 && satir2==1 && satir1==0)
{tus1=0; buzzer=1; delay_ms(250); buzzer=0; hata=hata+1; }// 4’e basıldı
if(hata==6){goto kontrol;} // yanlış tuşa basıldıysaif(sutun1==0 && k1_int==0 && satir2==0 && satir1==1) // doğru şifre bileşenlerini 0 yap
{ tus1=0; buzzer=1; delay_ms(250); buzzer=0; hata=hata+1; } // 7’ye basıldı
if(hata==6){goto kontrol;}if(sutun1==0 && k1_int==0 && satir2==1 && satir1==1) // * a basıldı
{
x=0; tus1=0; tus2=0; tus4=0 ; tus3=0; y=0 ; hata=hata+1; //* a basınca başlangıçta bütün doğru şifre verilerini 0 yapıyor
x=17; buzzer=1; delay_ms(250); buzzer=0; // ve giriş işlemi yeniden başlatılıyor
while(sutun1==0 && k1_int==0 && satir2==1 && satir2==1){};} //* a basıldı
if(hata==6){goto kontrol;}sutun1=1; sutun2=0;
if(sutun2==0 && k1_int==0 && satir2==0 && satir1==0)
{tus2=0; x=0; buzzer=1; delay_ms(250); buzzer=0; hata=hata+1; } // 2’ye basıldı
if(hata==6){goto kontrol;}if(sutun2==0 && k1_int==0 && satir2==1 && satir1==0)
{ tus3=13; buzzer=1; delay_ms(250); buzzer=0; hata=hata+1;
while(sutun2==0 && k1_int==0 && satir2==1 && satir2==0){}; }// 5’e
if(hata==6){goto kontrol;}if(sutun2==0 && k1_int==0 && satir2==0 && satir1==1)
{ tus2=9; buzzer=1; delay_ms(250); buzzer=0; hata=hata+1;
while(sutun2==0 && k1_int==0 && satir2==0 && satir2==1){}; }// 8’e
if(hata==6){goto kontrol;}if(sutun2==0 && k1_int==0 && satir2==1 && satir1==1)
{ tus2=0; tus3=0; buzzer=1; delay_ms(250); buzzer=0; hata=hata+1; } //0 a basıldı
if(hata==6){goto kontrol;}
sutun2=1; sutun3=0;if(sutun3==0 && k1_int==0 && satir2==0 && satir1==0)
{ tus4=6; buzzer=1; delay_ms(250); buzzer=0; hata=hata+1;
while(sutun3==0 && k1_int==0 && satir2==0 && satir2==0){}; } //3’e basıldı
if(hata==6){goto kontrol;}if(sutun3==0 && k1_int==0 && satir2==1 && satir1==0)
{ tus3=0; buzzer=1; delay_ms(250); buzzer=0; hata=hata+1; }// 6ya basıldı
if(hata==6){goto kontrol;}if(sutun3==0 && k1_int==0 && satir2==0 && satir1==1)
{ tus3=0; buzzer=1; delay_ms(250); buzzer=0; hata=hata+1; }//9’a bsıldı
if(hata==6){goto kontrol;}if(sutun3==0 &&k1_int==0 && satir2==1 && satir1==1)
{ y=19; buzzer=1; delay_ms(250); buzzer=0; hata=hata+1;
while(sutun3==0 &&k1_int==0 && satir2==1 && satir2==1){}; }// #’ye basıldı
sutun1=1; sutun2=1; sutun3=1; delay_ms(2);kontrol:
if(x=17 && tus1==15 && tus2==9 && tus4==6 && tus3==13 && y==19)
{ lcd_cmd(_lcd_clear);
lcd_out(1,3,”HOSGELDINIZ”);
lcd_out(2,3,”SIFRE DOGRU”);
porta.ra6=1;
for( t=0; t<4; t++)
{buzzer=1; delay_ms(200); buzzer=0; delay_ms(200); }
hata=0;
delay_ms(2000);
porta.ra6=0;
x=0; tus1=0 ; tus2=0; tus4=0; tus3=0; y=0;
lcd_cmd(_lcd_clear);
lcd_out(1,2,”SIFRE GIRINIZ”);
}
if(hata==6 )
{ lcd_cmd(_lcd_clear);
lcd_out(1,2,”!HATALI SIFRE!”);
lcd_out(2,3,”!!!!!!!!!!!”);for( t=0; t<4; t++)
{buzzer=1; delay_ms(350); buzzer=0; delay_ms(150); }
hata=0;
x=0; tus1=0 ; tus2=0; tus4=0; tus3=0; y=0;
lcd_cmd(_lcd_clear);
lcd_out(1,2,”SIFRE GIRINIZ”);
}
y=0;}
}
Devreye enerji verilince LCD ekranda “Şifreyi Giriniz” mesajı çıkmaktadır. Ardından sürekli olarak butonlara basılıp basılmadığı kontrol edilmektedir. Kod içinde belirlenen bir değişken vasıtasıyla butonlara basılma adedi sayılmış eğer 6 defa basılmışsa şifre kontrol bölümüne gidilmiştir. Bu amaçla “kontrol” isimli etiket kullanılmıştır. Ayrıca eğer şifre içinde bulunmayan değeri temsil eden butona basılırsa doğru şifre değerini 0 yapmaktadır. Şifre eşleşme mantığı farklı değişkenlere değer ataması yapılıp; ardından doğru şifre kontrolünde bütün bu değerlerin aynı anda sağlanıp sağlanmadığı kontrol edilerek yapılır. Şifre doğru girilmesi yada yanlış girilmesi durumunda kontrol işleminden sonra tüm ilgili değişkenlere sıfır değeri atanıyor. Şifre yazılımsal olarak belirleniyor. Yanlış şifre girilmesi durumunda LCD ekranda uyarı mesajı veriliyor ve buzzer ötüyor. Butonlara her basışta buzzer ile butona basıldığı anlaşılsın diye sesli uyarı verilmesi sağlanmıştır. Eğer şifre girilirken yanlış tuşa basılırsa ve şifre sıfırlanmak istenirse ” * ” butonuna basarak şifre yeniden girilebilir. Butonların dizilimi standarttır. Butonların sayısal ve karakteristik değerleri telefonlarda bulunan klavye değerlerine sahiptir.
Devrenin tasarlanırken önce giriş ve çıkışta bulunacak elemanlar belirlendi. Daha sonra tuşları okumak için kullanılacak metot belirlendi. Devrede kullanılan 16f628 mikroişlemcisinin pin özellikleri dikkate alınarak devre oluşturuldu. Devre tasarımının ilk adımında tarama metodu 7408 VE kapısı olmadan oluşturuldu. Ancak bu durumda buzzer bağlamak için mikroişlemcinin RA5 ve RA4 pinleri boşta kalıyordu. Ancak bu pinlerden RA5 reset amacıyla kullanılıyor RA4 ise açık kollektör özelliğine sahip olduğundan bu terminaller kullanılmadı. Alternatif tarama yöntemi olarak 7408 ile oluşturulan devrenin kullanılması ile gerekli olan 1 terminal boşa çıkartıldı ve bu noktaya buzzerı sürmek için kullanılacak transistör bağlandı. Devre Proteus isimli programın ISIS bölümünde tasarlandı ve simülasyonları yapıldı. Devre şeması aşağıda görülmektedir.
Devrenin pozitif besleme girişinin uygulandığı noktaya seri olarak 1N4007 diyodu bağlanmıştır. Bu sayede devre + ve – girişlerin karıştırılması durumunda oluşacak zararlardan korunmuştur. Devre akımı 1 Amperin altında akım çektiği için 1N4007 diyodu devre için uygundur.
Simülasyonda çalışan devreden malzeme listesi oluşturuldu ve fiyat araştırması yapması ve malzemeleri sipariş etmesi için Oğuzhan Bahadır BAYRAM’a liste verildi.
Devrenin Malzeme Listesi:
- 10×10 Bakır Plaket
- 5x10k
- 2x1k
- 100 ohm
- 2x100nF
- 2x1n4007
- 2xBC237
- 12x Buton (2 pin)
- 2×14 LCD Display
- 7805
- 7408
- PIC16F628A
- 18 ve 14 Pin Entegre Soketleri
- 5 Volt Çift Kontak Röle
- 2x 0 Numara 3′ lü Klemens
- 2x 0 Numara 2′ li Klemens
- 5 Volt Devreli Buzzer
Malzemelerin siparişi aşamasında beş internet sitesi üzerinden fiyat araştırması yapıldı. Devre için gerekli malzemelerin hepsinin stoklarında bulunması, uygun aralarında fiyatlarının makul olması, malzemelerin kargoya verilme ve alıcıya ulaşma süresi ve müşterilerin yorumu gibi kriterlere bakılarak araştırma yapıldı. Araştırma sonucunda fiyatları makul olan ve hatalı kargo gibi sorunlarda hemen geri dönüş yapabilen firmadan malzemeler sipariş edildi. Malzemelerin gelmesinin ardından liste ve fatura karşılaştırması yapıldı eksik malzeme olmadığı görüldü ardından gönderilen malzemelerin kontrolü listeye göre yapıldı ve eksik malzeme olmadığı görüldü. Malzemeler devrenin borda kurulması için Hasan KESER ‘e verildi.
Malzemeler geldikten sonra simülasyonu çalışan devrenin board üzerine kurulumu yapıldı ve gerçek ortamda devrenin çalışması test edildi. Bu aşamada yazılımsal olarak bazı düzenlemeler yapıldı. Röle kontağının çekili kalacağı süre buzzer ötme süresi gibi ayarlamalar yapıldı.
Devrenin board üzerine kurulmuş hali resimde görülmektedir.
Board üzerinde çalışması gözlenen ve doğru çalıştığına emin olunan devrenin PCB tasarımı ARES programı ile yapıldı. Devrenin 10cmx10cm plakete montajının yapılması planlandığı için 10cmx10cm bakır plaket tedarik edildi ve bu boyutlara sadık kalınarak devrenin PCB tasarımı yapıldı. PCB tasarımında besleme ve kapı otomatının bağlanacağı klemenslerin bir tarafta toplu olmasına; röle ve gerilim regülatörü gibi elemanların klemensler ile doğrudan bağlantısı olduğundan birbirlerine yakın olmalarına dikkat edildi. Butonların devrenin merkezinde olmasına ve birbirlerine çok yakın olmamalarına dikkat edildi. Devrede bazı noktalarda yolların geçeceği yer kalmadığı için atlama yapıldı. 16F628’in reset pinine bağlanacak olan 10k değerindeki direnç devrenin alt kısmından lehimlenmiştir. Ayrıca plaket üzerindeki elemanların pin delikleri küçük olduğunda pin delikleri büyütüldü. Genel olarak C-90-40 ölçüsü dairesel pinler için kullanıldı. Karesel pinler için ise S-90-50 kullanıldı klemensler için ise karesel S-100-50 ölçüleri kullanıldı. Atlama noktaları için uygun ölçülerde VİA oluşturuldu. LCD ekran bağlantıları için ARES programında bulunan mevcut LCD display paketinde arka plan ışığı için besleme pinleri bulunmamaktaydı. Bu sorunu çözmek için Decompose ve Make Package komutlarında yararlanarak mevcut paket parçalandı ve arka plan besleme pinleri uygun ölçülerde eklendikten sonra yeni LCD display paketi oluşturuldu.
Devrenin PCB tasarımı alttaki resimde görülmektedir.
Devrenin 3 boyutlu görüntüsü alttaki resimde görülmektedir.
PCB Tasarımı yapılan devrenin çıktıları kuşe kağıdına yazdırılarak devrenin basılması ve asit çözeltisinde bakır yolların çıkartılması için Ahmet Enes GÜRBÜZ’ e verildi. Çıktılar birebir oranında alındı ve kuşe kağıdına alınmasının sebebi tonerin bakır plaket üzerine kuşe kağıdından daha kolay aktarılmasıdır.
Plakete basılacak baskı devre yolları bakır plakete tam olarak birebir olacak şekilde ayarlandı. Kuşe kağıdı bakır plaketin bakırsız olan arka yüzüne bantlandı. Daha sonra en yüksek ısı seviyesine getirilen ütü ile tonerin bakıra iyice geçtiğinde emin oluncaya kadar (yaklaşık 20 dakika) ütüleme işlemine devam edildi. Isının her tarafa yayılmasını sağlamak için plaketin üzerinde ütü sürekli bastırılarak gezdirildi. Kenar ve ince yolların olduğu noktalar özen ile ütülendi. Ütünün kağıdı tahriş etmemesi için ütüyü çok fazla bastırmamaya dikkat edilmeli. Kullanılan ütünün alt kısmı kağıdın bazı nıktaların tahriş ettiğinden; plaket ile ütü arasına ince bir bez konularak ütüleme işlemine devam edildi. Toner bakır plakete geçmeye başladıkça bu durum bakır plaket üzerinde net olarak görülmektedir.
20 dakika sonunda plaket soğuk su bulunan bir kaba konularak kağıdın yumuşaması ve plaketin soğuması sağlandı. Ancak bazı yolların tam çıkmadığı görülünce kağıt zarar görmeden o nokta biraz daha ütülendi ve sorun çözüldü. Daha sonra kağıdın yumuşaması için plaket tekrar suya konuldu ve 5 dakika beklendi. Sonra kağıt hafifçe plaket üzerinden çekilerek kağıdın temizlenmesi sağlandı.
Hassas noktalar sivri uçlu tornavida ile temizlendi bu noktalardaki kağıtların kaldırılması bu şekilde yapıldı. Kağıtlar tamamen temizlendikten sonra tam çıkmayan yada tonerin tam aktarılmadığı yolların üzerinden permanent kalem ile geçilerek yollar tamamlandı.
Ardından asidin hazırlanması işlemine geçildi. Devrenin aside atılması mutlaka dış ortamda yapılmalıdır çünkü çözünme işleminde gaz açığa çıkmaktadır ve asit ile temas etmemeye dikkat edilmelidir. Çözelti plastik bir kap içinde hazırlandı 2 ölçek tuz ruhunun içine bir ölçek perhidrol eklendi. Perhidrolün kullanılma amacı katalizör olarak tepkimeyi hızlandırmaktır yani perhidrol oranı artarsa bakırlar daha hızlı çözünecektir hızlı çözünme sonucunda tonerli yollarda eriyebilir bu noktaya dikkat edilmelidir .Ayrıca bir kap içinde temiz su ; çözünme işleminden sonra plaketi içine atmak için hem asit çözeltisinin yanına getirildi. Plaket maşa vasıtasıyla aside atıldı. Çözünme işleminin gerçekleşmesi için plastik kap yavaşça sallandı ve çözünme gerçekleştikçe çözeltinin rengi yeşile doğru dönüşmeye ve çözelti köpürmeye başladı.
Aşağıda asit çözeltisi aşamalarının resimleri görülmektedir.
Plaket eğer asitte fazla tutulursa tonerli yollarda eriyebileceği için plakettin durumu sürekli kontrol edildi. Sadece tonerli yollar kalıncaya kadar plaket asit içinde tutuldu. Sadece bakır yollar kalınca tonerin temizlenmesi için plaket su ile ve bulaşık teli ile temizlendi. Tonerler tamamen plaketin üzerinden temizlenince ve bakır yollar temiz bir şekilde görülünceye kadar işleme devam edildi. Aralarında bağlantı olmaması gereken bakır yolların birbiri ile bağlantılı olup olmadığı kontrol edildi ardından bütün yolların sağlam olarak plakete aktarıldığı bir kez daha kontrol edildi.
Asit ile ilgili kısım bitince asit çözeltisi kapalı mekana alınmadan önce su ile seyreltildi. Ardından su ile seyreltilerek lavabodan döküldü.
Temizlenmiş ve Bakır Yolların Tam Olarak Çıktığı Plaket:
Bu aşamadan sonra plaket delinmek ve ardından elemanların lehimlenmesi için Hakan CAN’ a verildi. Plaketin üzerinde elemanların pinlerinin geçeceği yerler ince uçlu matkap ile delindi. Delinecek yerler plaket üzerinde belli olurken bazı yerler tam olarak belli olmamaktaydı buralardaki bakırlar erimemişti bu sebeple tam belli olmayan pinlerin yerine Ares’ten bakılarak maket bıçağı ile markalama yapıldı bu sayede bu noktalardan matkap ucunun kaçmasının önüne geçildi. Delme işleminde matkap olarak 12V motor ucuna monte edilen mandren ile ince matkap ucunun bağlanmasıyla basit matkap elde edildi ve delikler bununla delindi. Deliklerin delinmesi işleminde plaketin altına tahta parçası konularak zeminin zarar görmesi engellendi. Delme işlemi sırasında motora 7 Volt gerilim uygulandı ve ortalama matkap hızında delikler delindi. Klemenslerin 7805, gerilim regülatörünün, LCD display ekranın bacak bağlantılarının yapılacağı pinler normalden daha geniş olarak delindi. Çünkü direnç kondansatör gibi elemanlar için delinen uç ile delinince bu pinlerden bu elemanların bacakları geçmiyordu. Bu yüzden bu pinler genişletildi. Delme işlemi bitince tüm deliklerin eksiksiz olarak delinip delinmediği kontrol edildi. Olumsuz bir durumla karşılaşılmadı.
Anlatılan aşamaya ait resimler aşağıda bulunmaktadır.
Delme işleminden sonra elemanların yerlerine yerleştirilip lehimlenmesine geçildi. Elemanlar yerlerine ARES programından bakılarak yerleştirildi. Elemanların yerleştirilmesi işleminde her elemanın değeri kontrol edilerek yerleştirildi. Lehimlemeye önce küçük boyutlu elemanlardan başlandı ve büyük ebatlı elemanlara doğru gidildi. Yerine yerleştirilen eleman ardından lehimlendi. Lehimlenen pinlerin arasında bağ olmayan pinlere lehim taşması sonucu temas etmemesine dikkat edildi. Dirençlerin kesilen bacakları jumper olacak kullanıldı. Elemanların hepsi board üzerinden alınarak lehimlendi. Yani board üzerinde çalışan devrenin tüm elemanları olduğu gibi plakete aktarıldı.
Lehimleme işlemi bittikten sonra avometre ile kısa devre kontrolü yapıldı. Aralarında bağlantı olamayan yolların birbiriyle temas ettiği fark edildiğinde maket bıçağı ile o noktalar ayrıldı. Temas etmesinin sebebi yakın pinlerin bazılarında lehim taşması olmasıydı. Sorunlar düzeltildikten sonra devreye 12 Volt besleme gerilimi verildi ve devre çalıştırıldı.Röle çıkışlarına kırmızı ve yeşil led bağlanarak röle kontaklarının değişimi gözlemlendi. Kontaklar normal konumda iken yeşil led yanmaktadır. Eğer şifre doğru girilirse kontaklar konum değiştirir ve iki saniye boyunca kırmızı led yanar ardından kontaklar eski haline döner.
Devrenin Breadboard Üzerine Kurulmuş Halinin Çalışmasına Ait Video:
Devrenin Çalışmasını Gösteren Video:
Hasan KESER
Oğuzhan Bahadır BAYRAM
Ahmet Enes GÜRBÜZ
Hakan CAN