Herkese merhabalar,

Bildiğiniz üzere günümüzde ev, ofis, market, ve bir çok alanda yabancıların ulaşamayacağı veya başka başka  şahısların o alana izinsiz girmemesi gereken özel alanlarımız bulunmaktadır. Bu durum bazen yüksek maliyetli güvenlik sistemlerini gerektirse de aslında çok az maliyetle de yapılabildiğini ve sizleri anahtar kayboldu veya anahtar kırıldı derdinden kurtarmış oluyoruz. Biz sizler için maliyeti düşük ve 7’den 70’e herkesin kendi evinde yapabileceği çok kolay bir proje ile karşınızdayız.

Bu projede sizlerle beraber çok kullanışlı ve çok basit bir şekilde anahtar derdinden kurtulacağınız şifreli kapı kilidini yapacağız. 

Malzeme Listesi

Yukarıdaki malzemelere sahipseniz Arduino Şifreli Kapı Kilidi Projesine başlayabiliriz.

Malzemeleri bir bir Mekrobot.com‘da satın alabileceğiniz gibi, projeye özel set taleplerinizi bize iletebilirsiniz. Ayrıca Arduino üzerinde daha farklı çalışmalar yapmak isterseniz aşağıda bulunan linkten hem kullanışlı hem de uygun fiyatlı Arduino setlerine sahip olabilirsiniz.

Arduino setlerini incelemek için tıklayınız.

Çalışma Şekli

Herhangi bir tuşa basıldığında önceden EEPROM’ da kaydedilmiş olan şifreyle karşılaştırılır. Eğer şifre eşleşirse LCD ekranda şifre doğru yazısı çıkar ve röleye yani bağlı olduğu 10. Pine enerji gönderir ve ardından röleye gelen enerjiden dolayı röle kendini çeker ve akım akar bu da motoru harekete geçirir ve kapı açılır. Fakat tuş takımında basılan şifre eğer yanlış ise LCD ekranda şifre yanlış lütfen tekrar deneyin yazısı çıkar. Başka şahısların şifrenizi öğrendiğini anladığınızda şifrenizi değiştirmek için ilk önce  #  tuşuna basıp mevcut şifreyi girmeniz gerekecektir ardından yeni şifreyi girmeniz istenecek ve yeni şifrenizi gireceksiniz. Şifreniz değiştirilmiş olacaktır.

EEPROM Nedir?

EEPROM (elektriksel olarak silinebilir programlanabilir salt okunur bellek), normalden daha yüksek elektrik voltajı uygulamasıyla tekrar tekrar silinebilen ve yeniden programlanabilen kullanıcı tarafından değiştirilebilen salt okunur bellektir ( ROM ). EPROM yongalarının aksine , EEPROM’ ların değiştirilmek için bilgisayardan çıkarılmasına gerek yoktur. Fakat bir EEPROM yongasının seçici olarak değil, tamamen silinmesi ve yeniden programlanması gerekir. Aynı zamanda sınırlı bir ömre sahiptir. Yani yeniden programlanabilme sayısı on veya yüz binlerce kez ile sınırlıdır. EEPROM’un özel bir biçimi, silme ve yeniden programlama için normal PC voltajlarını kullanan flash bellektir. 

Devre Şeması

Öncelikle, 4X4 tuş takımını Arduino ya bağlayın; 4X4 tuş takımındaki ilk altı pini Arduino’ da ki A0 ve A5 pinlerine bağlayın. Ardından 4X4 tuş takımı modülünde ki son iki pini Arduino’ da ki 3 ve 2 numaralı dijital pimlere bağlayın.

Bundan sonra, LCD’yi Arduino’ya bağlayın. LCD’yi Arduino ile bağlamak için bağlantılar aşağıdaki gibidir

  • VSS pini olan LCD üzerindeki pin 1’i Arduino’daki GND’ye bağlayın
  • VDD pini olan pin 2’yi Arduino’daki 5V pinine bağlayın
  • V0 olan pin 3’ü 10k potansiyometrenin ortasına bağlayın ve potansiyometre üzerindeki diğer iki pini Arduino’ da ki 5V ve GND’ ye bağlayın. Bu pin, LCD’nin kontrastını ayarlamak içindir.
  • RS pini olan 4. pin Arduino’ da ki pin 7’ye bağlayın
  • R / W pini olan pin 5’i Arduino’ da ki GND pinine bağlayın
  • Etkinleştirme pini olan pin 6’yı Arduino’ da ki pin 6’ya bağlayın
  • Veri pinleri olan 11, 12, 13 ve 14 numaralı pinleri  Arduino’ da ki 5, 4, 3 ve 2 numaralı pinlere bağlayın.
  • LCD’nin arka ışık pini olan pin 15’i 220 ohm direnç üzerinden Arduino’ da ki 5V’ye bağlayın
  • Arka ışığın negatif pini olan Arduino’ da ki 16. pini Arduino’ da ki GND’ ye bağlayın

Son olarak, DC kilidi Arduino ile bağlayacağız. Kilit, 7’den 12V’a kadar bir voltajda çalışır, bu nedenle doğrudan Arduino’ya bağlayamayız. Arduino’ya bağlamak için bir röle ve bir bataryaya ihtiyacımız olacak.

Rölenin sinyal pinini Arduino’daki pin 10’a ve kilidin VCC ve GND’sini Arduino’daki 5V ve GND’ye bağlayın. Daha sonra rölenin diğer ucunda, pilin negatifini röle üzerindeki ortak uç ve röle üzerindeki NO (Normalde açık) ‘ı kilidin bir tarafına bağlayın. Ardından kilidin diğer tarafını pilin artı kutbuna bağlayın.

Arduino Tuş Takımı Kilit Kodu

Tüm devreyi tamamlayıp sistem çalışır hale geldiğinde kullanacağınız ilk şifreniz ‘1234’ tür. Bu şifreyi girip  # tuşu ile şifrenizi değiştirebilirsiniz.

Arduino Kodu

#include <Keypad.h> //tuş takımı kütüphanesi
#include <LiquidCrystal.h> //LCD kütüphnesi
#include <EEPROM.h> //şife saklama kütüphanesi
LiquidCrystal liquid_crystal_display(9, 8, 7, 6, 5, 4);

char password[4]; //şifre uzunluğu
char initial_password[4], new_password[4];
int i = 0;
int relay_pin = 10; //röleye bağlı pinimiz

char key_pressed = 0;
const byte rows = 4;
const byte columns = 4;

char hexaKeys[rows][columns] = {
  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}
};//tuş takımını tanımlıyoruz

byte row_pins[rows] = {A0, A1, A2, A3}; //tuş takımının pinleri
byte column_pins[columns] = {A4, A5, 3, 2}; //tuş takımının pinleri
Keypad keypad_key = Keypad( makeKeymap(hexaKeys), row_pins, column_pins, rows, columns);

void setup() {
  pinMode(relay_pin, OUTPUT); //röledeki enerjiyi keser
  liquid_crystal_display.begin(16, 2);
  liquid_crystal_display.print("MEKBOTEK"); //LCD'ye yazdırılacak yazı
  liquid_crystal_display.setCursor(0, 1);
  liquid_crystal_display.print("ELEKTRONIK SIFRE "); //LCD'ye yazdırılacak yazı
  delay(2000); //bekleme süresi 2000ms= 2 sn
  liquid_crystal_display.clear(); //ekranı temizle komutu
  liquid_crystal_display.print("SIFRE GIRINIZ "); //LCD'ye yazdırılacak yazı
  liquid_crystal_display.setCursor(0, 1);
  initialpassword(); //şifre girilme komutu
}

void loop() {
  digitalWrite(relay_pin, HIGH); //röle enerjisini aktif eder
  key_pressed = keypad_key.getKey();
  if (key_pressed == '#') //yeni şifreyi girme komutu
    change();
  if (key_pressed)
  {
    password[i++] = key_pressed; //tuş takımından gelecek kod
    liquid_crystal_display.print(key_pressed);
  }
  if (i == 4) { //eğer karakter 4 haneliyse
    delay(200); //bekleme süresi 200 ms
    for (int j = 0; j < 4; j++)
      initial_password[j] = EEPROM.read(j); //yeni girilen şifeyi kaydedilecek yeri gösterir
    if (!(strncmp(password, initial_password, 4))) //4 haneli şifre olduğunu gösterir
    {
      liquid_crystal_display.clear(); //LCD ekranını temizler
      liquid_crystal_display.print("SIFRE KABUL EDILDI:"); //LCD ekrana yazılacak komut
      digitalWrite(relay_pin, LOW); //röledeki enerjiyi kapatır
      delay(2000); //bekleme süresi 2000 ms

      liquid_crystal_display.setCursor(0, 1);
      liquid_crystal_display.print("DEGISTIRMEK ICIN # TUSUN BASINIZ:"); //LCD ekrana yazılacak komut
      delay(2000); //bekleme sürei 2000 ms

      liquid_crystal_display.clear(); //ekranı temizle komutu
      liquid_crystal_display.print("PAROLA GIRINIZ:"); //LCD ekrana parola girin komutu
      liquid_crystal_display.setCursor(0, 1);
      i = 0;
    }
    else {
      digitalWrite(relay_pin, HIGH); //röledeki enerjiyi aktif eder
      liquid_crystal_display.clear(); //ekranı temizler
      liquid_crystal_display.print("YANLIS SIFRE");
      liquid_crystal_display.setCursor(0, 1);
      liquid_crystal_display.print("# TUSUNA BASINIZ"); //komut veriyor
      delay(2000); //bekleme süresi

      liquid_crystal_display.clear(); //ekranı temizle komutu
      liquid_crystal_display.print("SIFREYI GIRINIZ"); //komut veriyor
      liquid_crystal_display.setCursor(0, 1);
      i = 0;
    }
  }
}

void change() {
  int j = 0;
  liquid_crystal_display.clear(); //ekranı temizle komutu
  liquid_crystal_display.print("MEVCUT SIFRE"); //mevcut şifreyi girin komutu
  liquid_crystal_display.setCursor(0, 1);
  while (j < 4) //döngü komutu
  {
    char key = keypad_key.getKey();
    if (key) {
      new_password[j++] = key; //yeni şifre girme komutu
      liquid_crystal_display.print(key);
    }
    key = 0;
  }

  delay(500); //500 ms bekleme
  if ((strncmp(new_password, initial_password, 4))) {
    liquid_crystal_display.clear(); //ekranı temizle komutu
    liquid_crystal_display.print("YANLIS SIFRE"); //yanlış şifre komutu
    liquid_crystal_display.setCursor(0, 1);
    liquid_crystal_display.print("TEKRAR DENEYIN"); //şifreyi tekrar girin komutu
    delay(1000); //bekleme süresi 1000 ms
  }
  else {
    j = 0;
    liquid_crystal_display.clear(); //ekranı temizle komutu
    liquid_crystal_display.print("YENI SIFRE:"); //yeni şifreyi girin komutu
    liquid_crystal_display.setCursor(0, 1);
    while (j < 4) {
      char key = keypad_key.getKey(); // tuş takımı karakter tipini gösterir
      if (key) {
        initial_password[j] = key;
        liquid_crystal_display.print(key);
        EEPROM.write(j, key); //tuş takımından gelen şifreyi kaydetme komutu
        j++;
      }
    }
    liquid_crystal_display.print("SIFRE DEGISTIRILDI"); //şifre değiştirildi komutu yazdırdı
    delay(1000);
  }

  liquid_crystal_display.clear(); //ekranı temizle komutu
  liquid_crystal_display.print("SIFRE GIRINIZ"); //şifre giriniz komutu yazdırır
  liquid_crystal_display.setCursor(0, 1);
  key_pressed = 0;
}

void initialpassword() {
  for (int j = 0; j < 4; j++) //karakter sayısı 4 olması
    EEPROM.write(j, j + 49);
  for (int j = 0; j < 4; j++)
    initial_password[j] = EEPROM.read(j); //girilen şifreyi kaydet
}