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(); }
Etiketler: arduino, kapı, şifreli kapı, şifreli kapı projesi
Eklenme Tarihi: 10 Mart 2020
fritzingde yaptığınız devre şemasında röle bağlantısı yok.rölenin vin gnd ve bağlı olduğu pin dışında diğer uçlarını nasıl bağladınız teşekkürler
Röle sinyal ucunu Arduino 1. Digital pinine bağlayacaksınız
hocam zaten arduino kodunda role pini 1 no denmiş fakat ben rölenin diğer uçlarını nereye bağlayacağımızı sormuştum aslında
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 ?
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
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.
hocam dönüş yapmadınız ama .Yardımcı olabilir misiniz bana
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
Hocam dönüş yaparmısın uzaktan eğitim ödevim bu çünkü
Kodda neden role kullandınız ve rolenin süresi ayarlanabilir mi
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?
0553 404 81 14 görüntü atabilirsin
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ı .
Şifreyi değiştirmek istediğin zaman kullanacaksın o bölümü.
Hocam röle burda direk servoyu mu kontrol ediyor yoksa ledimi
hocam fritzingde şemayı yeniden oluşturuyorumda röle bağlantısını nasıl yapacağım