Arduino Şifreli Kapı Projesi

Arduino ile yapılan şifreli kapı uygulamamda bir adet servo ve bir adet röle kullanılmaktadır. İsterseniz röle ile kapı kilidini kullanabilir. İsterseniz de servo motor ile manual kapı kilidini kontrol edebilirsiniz.


#include <EEPROM.h>

int bir_address = 50;
int iki_address = 51;
int uc_address = 52;
int dort_address = 53;


#include<Keypad.h>  //libraries
#include <LiquidCrystal.h>
#include<Servo.h>
Servo sg90;
#define yled 7   //green led
#define kled 6   // red led
#define role 1
#define buzzer 4

LiquidCrystal lcd(13, 12, 11, 10, 9, 8);


int bir_;
int iki_;
int uc_;
int dort_;

int bir_sifre ;
int iki_sifre ;
int uc_sifre ;
int dort_sifre ;

const byte satir = 4;  //rows
const byte sutun = 4;  //columbs
char tus;
String gelen_tus;


int i = 0;

bool dogru = false;

char tus_takimi[4][4] = {
  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}
};

byte satir_pins[4] = {A0, A1, A2, A3};
byte sutun_pins[4] = {A4, A5, 3, 2};

Keypad tuss_takimi = Keypad(makeKeymap(tus_takimi), satir_pins, sutun_pins, 4, 4);

byte customChar9[8] = {  //in order to create animation(LOADING EFFECT ) and custom character.

  0b11111,
  0b11111,
  0b11111,
  0b11111,
  0b11111,
  0b11111,
  0b11111,
  0b11111
};
byte customChar8[8] = {
  0b11110,
  0b11110,
  0b11110,
  0b11110,
  0b11110,
  0b11110,
  0b11110,
  0b11110
};
byte customChar7[8] = {
  0b11100,
  0b11100,
  0b11100,
  0b11100,
  0b11100,
  0b11100,
  0b11100,
  0b11100
};
byte customChar6[8] = {
  0b11000,
  0b11000,
  0b11000,
  0b11000,
  0b11000,
  0b11000,
  0b11000,
  0b11000
};
byte customChar5[8] = {
  0b10000,
  0b10000,
  0b10000,
  0b10000,
  0b10000,
  0b10000,
  0b10000,
  0b10000
};
byte customChar4[8] = {
  0b00001,
  0b00011,
  0b00011,
  0b00111,
  0b00111,
  0b01111,
  0b01111,
  0b11111
};
byte customChar3[8] = {
  0b00000,
  0b00010,
  0b00010,
  0b00110,
  0b00110,
  0b01110,
  0b01110,
  0b11110
};
byte customChar2[8] = {
  0b00000,
  0b00000,
  0b00000,
  0b00100,
  0b00100,
  0b01100,
  0b01100,
  0b11100
};
byte customChar1[8] = {
  0b00000,
  0b00000,
  0b00000,
  0b00000,
  0b00000,
  0b01000,
  0b01000,
  0b11000
};

byte customChar0[8] = {
  0b00000,
  0b00000,
  0b00000,
  0b00000,
  0b00000,
  0b00000,
  0b00000,
  0b10000
};

void setup() {

  pinMode(yled, OUTPUT);
  pinMode(buzzer, OUTPUT);
  pinMode(kled, OUTPUT);
  pinMode(role, OUTPUT);

  digitalWrite(role, HIGH);
  lcd.createChar(0, customChar0);
  lcd.createChar(1, customChar1);
  lcd.createChar(2, customChar2);
  lcd.createChar(3, customChar3);
  lcd.createChar(4, customChar4);
  lcd.createChar(5, customChar5);
  lcd.createChar(6, customChar6);
  lcd.createChar(7, customChar7);
  lcd.createChar(8, customChar8);
  lcd.createChar(9, customChar9);
  lcd.begin(16, 2);
  lcd.clear();
  //  // Serial.begin(9600);


  sg90.attach(5);
  sg90.write(0);




  bir_sifre = EEPROM.read(bir_address);                  // adresten degeri oku
  iki_sifre = EEPROM.read(iki_address);                  // adresten degeri oku
  uc_sifre = EEPROM.read(uc_address);                  // adresten degeri oku
  dort_sifre = EEPROM.read(dort_address);                  // adresten degeri oku


  lcd.setCursor(0, 0);
  lcd.print("SISTEM  ACILIYOR");
  for (int i = 0; i <= 16; i++)  // used 2 for loop in order to create LOADING EFFECT
  {


    for (int k = 5; k <= 8; k++)
    {
      lcd.setCursor(i, 1); lcd.write((uint8_t)k);
      delay(50);

    }

  }

}

void loop() {


  //  digitalWrite(role, LOW);
  digitalWrite(buzzer, LOW);
  digitalWrite(kled, LOW);
  digitalWrite(yled, LOW);

  lcd.setCursor(0, 0);
  lcd.print("  HOSGELDINIZ   ");
  lcd.setCursor(0, 1);
  lcd.print("  SIFRELI KAPI  ");


  tus = tuss_takimi.getKey();// char tus;  String gelen_tus;
  gelen_tus = tus;
  int gelen = gelen_tus.toInt();

  // Serial.print(bir_sifre);
  // Serial.print(iki_sifre);
  // Serial.print(uc_sifre);
  // Serial.print(dort_sifre);

  // Serial.print(" gelen_tus ");
  // Serial.print(gelen_tus);
  // Serial.print(" gelen ");
  // Serial.println(gelen);

  if (bir_sifre == 255)
  {
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("SIFRE           ");
    lcd.setCursor(0, 1);
    lcd.print("   BELIRLEYINIZ ");
    delay(1000);
    sifre_belirle();
  }

  if (gelen_tus.length() > 0) {

    digitalWrite(buzzer, HIGH);
    delay(100);
    digitalWrite(buzzer, LOW);
    if (gelen_tus == "A")
    {

      lcd.setCursor(0, 0);
      lcd.print("  A Butonuna    ");
      lcd.setCursor(0, 1);
      lcd.print("   BASILDI      ");
      gelen_tus == "";
      delay(1000);
    }
    else if (gelen_tus == "B")
    {

      lcd.setCursor(0, 0);
      lcd.print("  B Butonuna    ");
      lcd.setCursor(0, 1);
      lcd.print("   BASILDI      ");
      gelen_tus == "";
      delay(1000);
    }
    else if (gelen_tus == "C")
    {

      lcd.setCursor(0, 0);
      lcd.print("  C Butonuna    ");
      lcd.setCursor(0, 1);
      lcd.print("   BASILDI      ");
      gelen_tus == "";
      delay(1000);
    }


    else  if (gelen_tus == "D")
    {

      lcd.setCursor(0, 0);
      lcd.print("  D Butonuna    ");
      lcd.setCursor(0, 1);
      lcd.print("   BASILDI      ");
      gelen_tus == "";
      delay(1000);
    }
    else if (gelen_tus == "#")
    {

      // // Serial.println("sifreyi giriniz");
      lcd.setCursor(0, 0);
      lcd.print("LUTFEN SIFRENIZI");
      lcd.setCursor(0, 1);
      lcd.print("     GIRINIZ    ");
      gelen_tus == "";
      delay(1000);

      lcd.clear();
      sifre_gir();
    }
    else if (gelen_tus == "*")
    {

      // // Serial.println("sifre degisecek");
      lcd.setCursor(0, 0);
      lcd.print("SIFRE           ");//ARDUINO HOCAM
      lcd.setCursor(0, 1);
      lcd.print("  DEGISTIRILECEK");   // LOCK DOOR SYSTEM
      gelen_tus == "";
      delay(1000);

      lcd.clear();
      sifre_sorgula();
    }

    else
    {
      lcd.setCursor(0, 0);
      lcd.print("SIFRE GIR      #");//ARDUINO HOCAM
      lcd.setCursor(0, 1);
      lcd.print("SIFRE DEGISTIR *");   // LOCK DOOR SYSTEM
      gelen_tus == "";
      delay(1000);
    }

  }
}

void sifre_sorgula()
{
  lcd.setCursor(0, 0);
  lcd.print("ESKI SIFREYI GIR");//ARDUINO HOCAM
  while (i < 4) {
    tus = tuss_takimi.getKey();  //getKey gets key when we click on the keypad

    if (tus)
    {
      lcd.setCursor(i, 1);
      lcd.print("*");
      i++;
      digitalWrite(buzzer, HIGH);
      delay(100);
      digitalWrite(buzzer, LOW);


      gelen_tus = tus;
      if (i == 1)
        bir_ = gelen_tus.toInt();

      if (i == 2)
        iki_ = gelen_tus.toInt();

      if (i == 3)
        uc_ = gelen_tus.toInt();

      if (i == 4)
        dort_ = gelen_tus.toInt();



    }
    if (i == 4)
    {
      delay(200);
      if (bir_ == bir_sifre)
      {
        if (iki_ == iki_sifre)
        {
          if (uc_ == uc_sifre)
          {
            if (dort_ == dort_sifre)
            {
              // // Serial.print("sifre dogru");   //WELCOME
              lcd.clear();
              lcd.setCursor(0, 0);
              lcd.print("SIFRE DOGRU!"); //password correct
              digitalWrite(yled, HIGH);
              digitalWrite(kled, LOW);
              digitalWrite(buzzer, HIGH);
              delay(100);
              digitalWrite(buzzer, LOW);
              delay(100);
              digitalWrite(buzzer, HIGH);
              delay(100);
              digitalWrite(buzzer, LOW);
              delay(1000);


              sifre_degistir();
              i = 5;
            }
          }
        }
      }


      else
      { // // Serial.print("sifre yanlis");   //WELCOME
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print("SIFRE YANLIS!!!");  //wrong password
        digitalWrite(yled, LOW);
        digitalWrite(kled, HIGH);
        digitalWrite(buzzer, HIGH);
        delay(1000);
        digitalWrite(buzzer, LOW);
        delay(1000);

      }


    }

  }

  i = 0;
}



void sifre_degistir()
{
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("YENI SIFREYI GIR");  //wrong password
  i = 0;

  while (i < 4)
  {
    tus = tuss_takimi.getKey();

    if (tus)
    {
      gelen_tus = tus;

      if (i == 0)
        bir_sifre = gelen_tus.toInt();

      if (i == 1)
        iki_sifre = gelen_tus.toInt();

      if (i == 2)
        uc_sifre = gelen_tus.toInt();

      if (i == 3)
        dort_sifre = gelen_tus.toInt();



      EEPROM.write(bir_address, (bir_sifre));
      EEPROM.write(iki_address, (iki_sifre));
      EEPROM.write(uc_address, (uc_sifre));
      EEPROM.write(dort_address, (dort_sifre));
      lcd.setCursor(i, 1);
      lcd.print("*");   // i have used * this charecter so that passwords that we print on the screen can not be seen from anyone else

      i++;
      digitalWrite(buzzer, HIGH);
      delay(100);
      digitalWrite(buzzer, LOW); // also when we clicked keypad ,buzzer will ring which make you feel like real system :)

    }

    if (i == 4)
    {
      delay(1000);
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("SIFRE           ");  //wrong password
      lcd.setCursor(0, 1);
      lcd.print("    DEGISTIRILDI");  //wrong password
      delay(1000);

      gelen_tus == "";
    }
  }
  i = 0;
}
void sifre_gir()
{

  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("SIFREYI  GIRINIZ");

  // // Serial.println("sifreyi gir");
  while (i < 4)
  {
    tus = tuss_takimi.getKey();

    if (tus)
    {
      lcd.setCursor(i, 1);
      lcd.print("*");
      digitalWrite(buzzer, HIGH);
      delay(100);
      digitalWrite(buzzer, LOW);
      delay(200);
      i++;
      gelen_tus = tus;


      // Serial.print(" gelen_tus ");
      // Serial.print(gelen_tus);
      // Serial.print("   ");

      if (i == 1)
        bir_ = gelen_tus.toInt();

      if (i == 2)
        iki_ = gelen_tus.toInt();

      if (i == 3)
        uc_ = gelen_tus.toInt();

      if (i == 4)
        dort_ = gelen_tus.toInt();


    }



    //    // Serial.print(bir_sifre);
    //    // Serial.print(iki_sifre);
    //    // Serial.print(uc_sifre);
    //    // Serial.print(dort_sifre);
    //    // Serial.print(" _ ");
    //
    //    // Serial.print(bir_);
    //    // Serial.print(iki_);
    //    // Serial.print(uc_);
    //    // Serial.println(dort_);

    if (i == 4)
    {
      delay(200);
      dogru = false;
      if (bir_ == bir_sifre)
      {
        if (iki_ == iki_sifre)
        {
          if (uc_ == uc_sifre)
          {
            if (dort_ == dort_sifre)
            {
              dogru = true;
              lcd.clear();
              lcd.setCursor(0, 0);
              lcd.print("SIFRE DOGRU!"); //password correct

              // // Serial.println("sifre dogru");

              sg90.write(90);
              digitalWrite(role, LOW);
              digitalWrite(yled, HIGH);
              digitalWrite(kled, LOW);
              digitalWrite(buzzer, HIGH);
              delay(100);
              digitalWrite(buzzer, LOW);
              delay(100);
              digitalWrite(buzzer, HIGH);
              delay(100);
              digitalWrite(buzzer, LOW);
              delay(3000);

              digitalWrite(role, HIGH);

              sg90.write(0);
            }
          }
        }
      }


      if (dogru == false)
      {
        //        digitalWrite(role, LOW);
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print("SIFRE YANLIS!!!");  //wrong password

        // // Serial.println("sifre yanlis");
        digitalWrite(yled, LOW);
        digitalWrite(kled, HIGH);
        digitalWrite(buzzer, HIGH);
        delay(1000);
        digitalWrite(buzzer, LOW);
        delay(1000);

      }
    }
  }
  i = 0;
}


void sifre_belirle()
{ lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("GIRILEN SIFRE   ");
  while (i < 4)
  {
    int sifre;

    tus = tuss_takimi.getKey();

    if (tus)
    {
      digitalWrite(buzzer, HIGH);
      delay(100);
      digitalWrite(buzzer, LOW);
      delay(200);

      gelen_tus = tus;


      // Serial.print(" gelen_tus ");
      // Serial.print(gelen_tus);
      // Serial.print("   ");

      if (i == 0)
      { bir_sifre = gelen_tus.toInt();
        sifre = bir_sifre;
      }
      if (i == 1)
      { iki_sifre = gelen_tus.toInt();
        sifre = iki_sifre;
      }
      if (i == 2)
      { uc_sifre = gelen_tus.toInt();
        sifre = uc_sifre;
      }
      if (i == 3)
      { dort_sifre = gelen_tus.toInt();
        sifre = dort_sifre;
      }

      lcd.setCursor(i, 1);
      lcd.print(sifre);
      i++;
    }


  }
  delay(1000);

  lcd.setCursor(0, 0);
  lcd.print("SIFRE           ");
  lcd.setCursor(0, 1);
  lcd.print("   KAYIT EDILDI ");



  EEPROM.write(bir_address, (bir_sifre));
  EEPROM.write(iki_address, (iki_sifre));
  EEPROM.write(uc_address, (uc_sifre));
  EEPROM.write(dort_address, (dort_sifre));

  delay(1000);
  lcd.clear();
}

Sosyal Medyada Paylaş Facebook Twitter Google+

Etiketler: , , ,
Eklenme Tarihi: 10 Mart 2020

Konu hakkında yorumunuzu yazın

Arduino Şifreli Kapı Projesi (22 Yorum)

  1. merhabalar Bu arduino kodunu yani projeyi seri haberleşme ile c#üzerinden yazacağımız kod ile kontrol etsek butonlardan tuş takımı oluştursak . Nasıl yazabiliriz kodu ?

  2. hocam merhaba;
    ilk şifre belirleme işlemi olan
    bir_şifre = 1;
    iki_şifre = 2;
    üç_şifre = 3;
    dört_şifre = 4;
    şeklinde şifre belirledim ve yükledim
    fakat şifreyi girdiğimde şifre yanlış diyor
    yardımcı olursanız sevinirim.

    • Serial.print(bir_sifre);
      Serial.print(iki_sifre);
      Serial.print(uc_sifre);
      Serial.print(dort_sifre);
      Bu komut ile şifreyi ekrana yazdırıp karşılaştırma yapın

  3. merhabalar ben de bu projeyi yapmaktayım fakat kod üzerinde şöyle bir düzenleme yapmak istiyorum binadaki daireler mesela 3 daire olsun dış kapıdan giren her dairenin farklı şifresi olsun herkes kendine ait şifreyi girsin yani 3 dairenin şifreside kod içinde hafızada kaydedilmiş olsun her daire kendi şifresiyle binaya giriş yapsın .Bu durumu kodda nasıl düzenleme yaparak saylayabilirim.Yardımcı olabilir misiniz mail atabilirim size .Teşekkürler.

      • Her daire için RFID kart belirlemeniz gerekir. Her daire içinde bir şifre belirleyeceksiniz. İlgili dairenin ilgili kartı okununca sorgulamayı o daire için oluşturduğunuz şifre ile yapacaksınız.

        • hocam rfıd kartsız, sadece tuş takımından eeprom hafızasına mesela 2 farklı daire şifresi kaydedip öyle kullanamazmıyız yani bu kodu.

        • Hocam RFID kartı dışında sizin paylaşmış olduğunuz proje kodunda bir şifre haricinde 2 daire için farklı 2 şifre oluşturup kaydetme yapmak mümkün mü?yardımcı olabilir misiniz rica etsem

        • ayrıca hocam kodu incelediğimde en sonlarda KAYIT EDİLDİ şeklinde satır bulunmakta bu mevcut şifre ye ek olarak oluşturacağımız şifrenin kodumu eğer öyleyse bunun için * mı yoksa # ye mi basılacak.Kusura bakmayın çok soru sordum ama kafama takıldı ve yabancı kaynaklarda eeproma 1 den fazla sayı kaydetme üzerine bir örnek bulamadım

    • Digital 1. Pine röle takabilirsiniz. Bazı kapılar röle ile kontrol edilmekte. Ondan dolayı hem röle hemde servo eklendi. Süreyi uzatmak için yazılımdaki delay (3000) değerini arttırabilirsiniz

      • Şema da VSs +5v bağlanmış vdd grnd yanlış değilmiş? Ve röle bağlasam kaç ohm Luk direnç eklenir .100ohm olurmu

        • Lcd için diyorsunuz galiba. Dikkatiniz için teşekkürler. Yanlış olmuş evet. 1. Bacak gnd ye 2. Bacak 5v gelecek. Röle için dirence gerek yok

          • ben bu devre şemasını proteus isis te oluşturmaya çalışıyorum ama bir türlü yapamadım bana yardımcı olurmusunuz.Bir noktaya kadar geldix hex dosyasını da yükledim arduinoya fakat bazı sorunlar var herhalde mailden ekran fotosu atsam veyahut isis hali varmı sizde bana mail atsanız?

          • hocam arduino kodunda hosgeldiniz sifreli kapının hemen altında if bir_sifre==255 şeklinde bir komut var bunu neden kullandık ve bu bizi neden sifre_beklirle kısmına yönlendiriyor çünkü şifre gir ve değiştir var zaten .

          • Ilk başta bir_sifre epromdan çağrılınca değeri 255 oluyor yani o yazılım sistemi ilk açtığınızda kendi şifremizi belirlemek için

          • hocam bir sorum daha olucak .en sonlarda void sifre belirle() burayı açıklar mısınız en sonda da sifre kayıt edildi diyor e biz zaten 1 şifre başta girebiliriz .sifre kayıt edildi derken ?ayrıca yukarda sormuştum bir_sifre==255 olan komut bizi sifre belirle() ye yönlendiriyor ama bunun için keypadden hangi tuşa basıcaz.Benim kafamı kurcaladı açıkcası .

          • hocam fritzingde şemayı yeniden oluşturuyorumda röle bağlantısını nasıl yapacağım

HOŞ GELDİNİZ

Youtube kanalıma Abone Olabilirsiniz.