ARDUINO DERS-30 (RFID KULLANIMI)
DEVRE SEMASI
RFID Nedir?
Radio Frequency Identification (RFID) 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. Birçok tanımlama biçimi vardır ama en yaygın olanı bir canlıyı ya da nesneyi tanımlayan bir antene bağlanmış mikroçip (ki buna RFID etiketi denir) içine kayıt edilebilecek diğer bilgiler de eklenerek tanımlama daha belirgin hale getirilebilir. Anten, çipin tanım bilgisini bir okuyucuya iletilebilmesini sağlar. Okuyucu RFID etiketinden aldığı radyo dalgalarını dijital bilgiye dönüştürerek bilgisayar sistemine geçmesini sağlar ve bu da işe yarar bir hale gelir.
MALZEMELER
- ARDUINO UNO
- RFID MODÜLÜ
ID NUMBERS ÖRNEĞİ
#include <SPI.h> //SPI kütüphanemizi tanımlıyoruz.
#include <MFRC522.h> //MFRC522 kütüphanemizi tanımlıyoruz.
int RST_PIN = 9; //RC522 modülü reset pinini tanımlıyoruz.
int SS_PIN = 10; //RC522 modülü chip select pinini tanımlıyoruz.
MFRC522 rfid(SS_PIN, RST_PIN); //RC522 modülü ayarlarını yapıyoruz.
byte ID[4] = {226,230,220,27}; //Yetkili kart ID'sini tanımlıyoruz.
void setup() {
Serial.begin(9600); //Seri haberleşmeyi başlatıyoruz.
SPI.begin(); //SPI iletişimini başlatıyoruz.
rfid.PCD_Init(); //RC522 modülünü başlatıyoruz.
}
void loop() {
if ( ! rfid.PICC_IsNewCardPresent()) //Yeni kartın okunmasını bekliyoruz.
return;
if ( ! rfid.PICC_ReadCardSerial()) //Kart okunmadığı zaman bekliyoruz.
return;
if (
rfid.uid.uidByte[0] == ID[0] && //Okunan kart ID'si ile ID değişkenini karşılaştırıyoruz.
rfid.uid.uidByte[1] == ID[1] &&
rfid.uid.uidByte[2] == ID[2] &&
rfid.uid.uidByte[3] == ID[3]
) {
Serial.println("Kapi acildi");
ekranaYazdir();
}
else{ //Yetkisiz girişte içerideki komutlar çalıştırılır.
Serial.println("Yetkisiz Kart");
ekranaYazdir();
}
rfid.PICC_HaltA();
}
void ekranaYazdir(){
Serial.print("ID Numarasi: ");
for(int sayac = 0; sayac < 4; sayac++){
Serial.print(rfid.uid.uidByte[sayac]);
Serial.print(" ");
}
Serial.println("");
}
UID NUMBERS ÖRNEĞİ
#include <SPI.h>
#include <MFRC522.h>
#include <EEPROM.h>
#define RST_PIN 9
#define SS_PIN 10
byte readCard[4];
int successRead;
MFRC522 mfrc522(SS_PIN, RST_PIN);
MFRC522::MIFARE_Key key;
void setup()
{
Serial.begin(9600);
SPI.begin();
mfrc522.PCD_Init();
Serial.println("RFID KART KAYIT UYGULAMASI");
Serial.println("--------------------------");
Serial.println("Lutfen karti okutun");
Serial.println();
}
void loop()
{
//yeni kart okununmadıkça devam etme
if ( ! mfrc522.PICC_IsNewCardPresent())
{
return;
}
if ( ! mfrc522.PICC_ReadCardSerial())
{
return;
}
getID(); //kart ID oku
delay(100);
SektorOku(); //Sektör oku
delay(100);
SektorYaz();
//**********************************************************************************
delay(200);
}
///Rfid kartı id sini oku.
int getID() {
Serial.print("Kart UID'si: ");
//kartın UID'sini byte byte oku ve seri monitöre yaz
for (int i = 0; i < mfrc522.uid.size; i++) { //
readCard[i] = mfrc522.uid.uidByte[i];
Serial.print(readCard[i], HEX);
}
Serial.println("");
//kart okumayı durdur ve 1 döndür (okuma başarılı)
mfrc522.PICC_HaltA();
return 1;
}
void SektorOku()
{
// In this sample we use the second sector,
// that is: sector #1, covering block #4 up to and including block #7
byte sector = 1;
byte blockAddr = 4;
byte trailerBlock = 7;
byte status;
byte buffer[18];
byte size = sizeof(buffer);
// Read data from the block
Serial.print(F("Reading data into block ")); Serial.print(blockAddr);
Serial.println(F(" ..."));
status = mfrc522.MIFARE_Read(blockAddr, buffer, &size); //sektörü oku buffer ata
if (status != MFRC522::STATUS_OK) {
Serial.print(F("Hata: "));
Serial.println(mfrc522.GetStatusCodeName(status));
}
Serial.print(F("Okunan Data- (Blok)")); Serial.print(blockAddr); Serial.println(F(":"));
dump_byte_array(buffer, 16); //gelen datayı diziye ata göster
Serial.println();
}
void SektorYaz()
{
byte blockAddr = 4;
byte dataBlock[] = {
0x01, 0x02, 0x03, 0x04, // 1, 2, 3, 4,
0x05, 0x06, 0x07, 0x08, // 5, 6, 7, 8,
0x08, 0x09, 0xff, 0x0b, // 9, 10, 255, 12,
0x0c, 0x0d, 0x0e, 0x0f // 13, 14, 15, 16
};
byte status;
byte buffer[18];
byte size = sizeof(buffer);
// Write data to the block
Serial.print(F("Writing data into block ")); Serial.print(blockAddr);
Serial.println(F(" ..."));
status = mfrc522.MIFARE_Write(blockAddr, dataBlock, 16); //dataBlock dizisindeki yeni değerleri karta yaz
if (status != MFRC522::STATUS_OK) {
Serial.print(F("Hata: "));
Serial.println(mfrc522.GetStatusCodeName(status));
}
Serial.println();
}
/**
* Helper routine to dump a byte array as hex values to Serial.
*/
void dump_byte_array(byte *buffer, byte bufferSize) {
for (byte i = 0; i < bufferSize; i++) {
Serial.print(buffer[i] < 0x10 ? " 0" : " ");
Serial.print(buffer[i], HEX);
}
}
Yorumlar
Yorum Gönder