RFID,Radio Frequency Identification ya da “Radyo Frekanslı Tanımla” şeklinde Türkçeleştirilirse; canlıları ya da nesneleri radyo dalgaları ile tanımlamak için kullanılan teknolojilere verilen genel isimdir.
RFID modülü ile otomatik açılır kapı projemizi gerçekleştircez.
Öncelikle >>buradan>> kartımızın çalışması için gerekli olan kütüphaneyi Arduino programının kurulu olduğu klasör altındaki libraries klasörüne MFRC522 ismiyle kaydediyoruz.(Arduino programına sağ tıklayıp dosya konumu aç diyebilirsiniz.).
ÖNEMLİ:Kütüphaneyi eklerken klasör içerisinde klasör olmamassına dikkat ediniz.
Öncelikler Projenin 3dkapı çizim dosyalarını inceleyebilirsiniz.
Sürgülü kapımızın çizimi bu şekilde 3d çizimlerini >>buradan>> indirebilirsiniz.
Artık Projemizi oluşturmaya başlayabiliriz.
Malzemeler
-Arduino Uno(Tercihe bağlı değiştirilebilir.)
-1adet sg90 servo motor(Değişebilir)
-1 adet RFID modül takım
-Jumper kablolar erkek ve dişi
-BreadBoard(İsteğe bağlı)
Devre Şeması
Devremizin baglantılarını şekildeki gibi yapıyoruz.
Devre Kodları
ÖNEMLİ:Devre kodlarını yükledikten sonra önce beyaz kartla sisteme giriş yapıp küçük mavi kartı tanıtın.İd yi tanımazsa işlemi gerçekleştirmez.Seri porttan takip edin.
Kodlarda EEPROM a mavii kartı yazma kodları mevcuttur.Beyaz kartla giriş yapınız.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 |
#include <EEPROM.h> //Okuma ve yazma işini UID ile EEPROM a kaydedicez. #include <SPI.h> //RC522 modülü SPI protokolünü kullanır. #include <MFRC522.h> //Mifare RC522 kütüphanesi #include <Servo.h> // servo pini belirledik int servoPin = 2; // servo nesnesi oluşturuyoruz. Servo Servo1; boolean match=false; boolean programMode=false; //Programlama modu başlatma. int successRead; //Başarılı bir şekilde sayı okuyabilmek için integer atıyoruz. byte storedCard[4]; //Kart EEPROM tarafından okundu. byte readCard[4]; //RFID modül ile ID tarandı. byte masterCard[4]; //Master kart ID'si EEPROM'a aktarıldı. int sayac=0; #define SS_PIN 10 #define RST_PIN 9 MFRC522 mfrc522(SS_PIN,RST_PIN); //MFRC522 örneği oluşturduk. ///////////////////////YÜKLEME///////////////////// void setup() { Servo1.attach(servoPin); Servo1.write(180); //Protokol konfigrasyonu Serial.begin(9600); //PC ile seri iletim başlat. SPI.begin(); //MFRC522 donanımı SPI protokolünü kullanır. mfrc522.PCD_Init(); //MFRC522 donanımını başlat. Serial.println(F("Giris Kontrol v1.0")); //Hata ayıklama amacıyla ShowReaderDetails(); //PCD ve MFRC522 kart okuyucu ayrıntılarını göster. if (EEPROM.read(1) != 143) { Serial.println(F("Master Kart Secilmedi.")); Serial.println(F("Master Karti secmek icin kartinizi okutunuz..")); do { successRead=getID(); //successRead 1 olduğu zaman okuyucu düzenlenir aksi halde 0 olucaktır. } while(!successRead); //Başarılı bir şekilde okuyamadıysa Başarılı okuma işlemini yapmicaktır. for (int j=0; j<4; j++) //4 kez döngü { EEPROM.write(2+j,readCard[j]); //UID EPPROM a yazıldı, 3. adres başla. } EEPROM.write(1,143); //EEPROM a Master Kartı kaydettik. Serial.println(F("Master Kart kaydedildi..")); } Serial.println(F("*****************")); Serial.println(F("Master Kart UID:")); for(int i=0; i<4; i++) //EEPROM da Master Kartın UID'si okundu. { //Master Kart yazıldı. masterCard[i]=EEPROM.read(2+i); Serial.print(masterCard[i],HEX); } Serial.println(""); Serial.println(F("***************")); Serial.println(F("Hersey Hazir!!")); Serial.println(F("Kart okutulmasi icin bekleniyor...")); } void loop() { Servo1.write(180); do { successRead=getID(); //SuccessRead 1 olursa kartı oku aksi halde 0 } while(!successRead); if(programMode) { if(isMaster(readCard)) //Master Kart tekrar okutulursa programdan çıkar. { Serial.println(F("Master Kart Okundu..")); Serial.println(F("Programdan cikis yapiliyor..")); Serial.println(F("*********************")); programMode=false; return; } else { if(findID(readCard)) //Okunan kart silinmek isteniyorsa { Serial.println(F("Okunan kart siliniyor..")); deleteID(readCard); Serial.println(F("****************")); } else //Okunan kart kaydedilmek isteniyorsa { Serial.println(F("Okunan kart hafizaya kaydediliyor..")); writeID(readCard); Serial.println(F("**************************")); } } } else { if(isMaster(readCard)) //Master Kart okunursa programa giriş yapılıyor. { programMode=true; Serial.println(F("Merhaba Sayin TURK, Programa giris yapiyorum.")); int count=EEPROM.read(0); Serial.print(F("Sahip oldugum kullanici ")); Serial.print(count); Serial.print(F("sayisi kadardir.")); Serial.println(""); Serial.println(F("Eklemek veya cikarmak istediginiz karti okutunuz.")); Serial.println(F("*****************************")); } else { if(findID(readCard)) { Servo1.write(0); delay(5000); int sayi=1; Serial.println(F("Hosgeldin, gecis izni verildi.")); } else { Serial.println(F("Gecis izni verilmedi.")); } } } } int getID() { //Kart okuyucuyu hazır ediyoruz if(!mfrc522.PICC_IsNewCardPresent()) //yeni bir kart okutun vve devam edin. { return 0; } if(!mfrc522.PICC_ReadCardSerial()) //kartın serial numarasını alın ve devam edin. { return 0; } //4 ve 7 byte UID'ler mevcut biz 4 byte olanı kullanıcaz Serial.println(F("Kartin UID'sini taratin...")); for (int i=0; i<4; i++) { readCard[i]=mfrc522.uid.uidByte[i]; Serial.print(readCard[i],HEX); } Serial.println(""); mfrc522.PICC_HaltA(); //Okuma durduruluyor. return 1; } void ShowReaderDetails() { // Get the MFRC522 software version byte v = mfrc522.PCD_ReadRegister(mfrc522.VersionReg); Serial.print(F("MFRC522 Software Version: 0x")); Serial.print(v, HEX); if (v == 0x91) Serial.print(F(" = v1.0")); else if (v == 0x92) Serial.print(F(" = v2.0")); else Serial.print(F(" (bilinmeyen)")); Serial.println(""); if ((v == 0x00) || (v == 0xFF)) { Serial.println(F("DİKKAT! Haberlesme yetmezligi, MFRC522'yi dogru bagladiginizdan emin olun.")); while(true); } } //////////////////Cycle Leds(Program Modu)/////////////////////// ///////////////////////EEPROM için ID Okuma//////////////////////// void readID( int number ) { int start=(number*4)+2; //başlama pozisyonu for (int i=0; i<4; i++) //4 byte alamabilmek için 4 kez döngü kurucaz { storedCard[i]=EEPROM.read(start+i); // EEPROM dan diziye okunabilen değerler atayın. } } ////////////////////EEPROM a ID Ekleme/////////////////////////////////// void writeID(byte a[]) { if (!findID(a)) //biz eeprom a yazmadan önce önceden yazılıp yazılmadığını kontrol edin. { int num=EEPROM.read(0); int start= (num*4)+6; num++; EEPROM.write(0,num); for(int j=0;j<4;j++) { EEPROM.write(start+j,a[j]); } Serial.println(F("Basarili bir sekilde ID kaydi EEPROM'a eklendi..")); } else { Serial.println(F("Basarisiz! Yanlıs ID veya kotu EEPROM. :-(")); } } /////////////////////////EEPROM'dan ID Silme//////////////////////// void deleteID(byte a[]) { if (!findID(a)) //Önceden EEPROM'dan silinen karta sahipmiyiz kontrol et. { Serial.println(F("Basarisiz! Yanlıs ID veya kotu EEPROM. :-(")); } else { int num=EEPROM.read(0); int slot; int start; int looping; int j; int count=EEPROM.read(0); //Kart numarasını saklayan ilk EEPROM'un ilk byte'ını oku slot=findIDSLOT(a); start=(slot*4)+2; looping=((num-slot)*4); num--; //tek sayacı azaltma EEPROM.write(0,num); for(j=0;j<looping;j++) { EEPROM.write(start+j,EEPROM.read(start+4+j)); } for(int k=0;k<4;k++) { EEPROM.write(start+j+k,0); } Serial.println(F("Basarili bir sekilde ID kaydi EEPROM'dan silinmistir..")); } } ///////////////Byte'ların Kontrolü/////////////////// boolean checkTwo (byte a[],byte b[]) { if (a[0] != NULL) match=true; for (int k=0; k<4; k++) { if(a[k] != b[k]) { match=false; } if(match) { return true; } else { return false; } } } //////////////////////Boşluk Bulma//////////////////////////// int findIDSLOT (byte find[] ) { int count = EEPROM.read(0); //EEPROM ile ilk byte ı okuyacağız. for(int i=1; i<=count; i++) //Döngüdeki her EEPROM girişi için { readID(i); //EEPROM daki ID yi okuyacak ve Storedcard[4] de saklayacağız. if (checkTwo(find, storedCard)) // Saklı Kartlar da olup olmadığının kontrolü. { //aynı ID'e sahip kart bulursa geçişe izin vericek. return i; //kartın slot numarası break; //aramayı durdurucak. } } } ///////////////////////EEPROM'da ID Bulma////////////////////// boolean findID (byte find[] ) { int count = EEPROM.read(0); //EEPROM'daki ilk byte'ı oku for(int i=1; i <= count; i++) //Önceden giriş yapılmış mı kontrolü. { readID(i); if(checkTwo(find,storedCard) ) { return true; break; } else { //değilse return false } } return false; } ////////////////Master Kartın Doğruluğunun Tespiti/////////////////// boolean isMaster (byte test[]) { if(checkTwo(test,masterCard)) return true; else return false; } |
Proje Dosyasını >>buradan>> indirebilirsiniz.
Paylaştıgım video,dosya yada projelerle ilgili sorularınızı buradan sorabilirsiniz.
Not:Projemi siz yaparmısınız demeyin lütfen :)
Yorum Yap :
29.03.2019 10:45:19
elinize sağlık iyi bir proje