Software : Arduino IDE dan hyperterminal ( atau yg sejenisnya)
Pendahuluan
RFID merupakan suatu teknologi yang memanfaatkan frekuensi radio sebagai identifikasi terhadap suatu objek. RFID dapat dipandang sebagai salah satu cara dalam pelabelan suatu objek. Pelabelan dalam hal ini menggunakan sebuah kartu RFID atau TAG yg ditempatkan pada objek yg diindentifikasi. Fungsi TAG sama dengan fungsi barcode label akan tetapi RFID mempunyai kelebihan daripada label barcode
Gambar 1. Overview of RFID system
RFID Card /TAGSebuah tag RFID atau transponder, terdiri atas sebuah microchip dan sebuah antena,. Chip tersebut menyimpan nomor seri yang unik/ID dan informasi lainnya tergantung kepada tipe memorinya. Tipe memori itu sendiri dapat read-only, read-write, atau write-onceread-many. Antena yang terpasang pada mikrochip mengirimkan informasi ke reader RFID.
bentuk fisik Tag
Jenis Tag : pasive dan aktive tag
Pasive Tag :
Aktive tag:
struktur memory MIFARE Tag
TAG atau RFID card keluaran MIFARE mempunyai 1 kilo byte lokasi memory. yang dibagi menjadi 16 sector (no 0-15) dan 63 block (block 0-63). untuk membaca dan menulis memory 1 block cukup menggunakan alamat/nomor block.
kotak merah adalah 1 sector , 1 Sector terdiri dari 4 block.
kotak biru adalah block tiap block terdiri dari 16 byte
Block yg ke-4 tiap sector adalah key block untuk authentifikasi. tdk digunakan untukmenyimpan data. 6 byte pertama dan 6 byte terakhir (kotak hijau) dari tiap block ini digunakan untuk authentifikasi.
kotak kuning (4 byte pertama block 0) adalah ID (indentitas ) TAG . Tiap tag mempunyai ID yg berbeda. Oleh karena itu ketika kita menulis ke block 0 tdk akan berhasil.
RFID Reader
Untuk berfungsinya sistem RFID, maka diperlukan sebuah reader atau alat scanning yang dapat membaca tag dengan
benar dan mengkomunikasikan hasilnya ke microprosessor/microcontroller.
Komunikasi antara TAG dan Reader bisa melalui serial USART, i2c dan SPI. pada artikel ini digunakan serial SPI untuk membaca dan menulis data ke memory TAG. Membaca dan menulis dilakukan oleh Arduino.
Langkah langkah membaca dan menulis memory TAG pada program arduino
1. masukan library MFRC522 kedalam program (#include MFRC522.h)
2. Buat objeck MFRC522 dgn cara MFRC522 namaobjek(parameter).
3. Buat objek structur key dgn cara MFRC522::MIFARE_Key key;
structur key digunakan untuk menyimpan 6 byte key authentifikasi
4. Inisialisasi RFID dengan fungsi PCD_Init();
5. Cek keberadaan TAG /RFID Card
Jenis Tag : pasive dan aktive tag
Pasive Tag :
Gambar 3. Rangkain pasive TAG yg disederhanakan
Aktive tag:
Gambar 4. Rangkaian aktif tag yang disederhanakan
struktur memory MIFARE Tag
TAG atau RFID card keluaran MIFARE mempunyai 1 kilo byte lokasi memory. yang dibagi menjadi 16 sector (no 0-15) dan 63 block (block 0-63). untuk membaca dan menulis memory 1 block cukup menggunakan alamat/nomor block.
kotak merah adalah 1 sector , 1 Sector terdiri dari 4 block.
kotak biru adalah block tiap block terdiri dari 16 byte
Block yg ke-4 tiap sector adalah key block untuk authentifikasi. tdk digunakan untukmenyimpan data. 6 byte pertama dan 6 byte terakhir (kotak hijau) dari tiap block ini digunakan untuk authentifikasi.
kotak kuning (4 byte pertama block 0) adalah ID (indentitas ) TAG . Tiap tag mempunyai ID yg berbeda. Oleh karena itu ketika kita menulis ke block 0 tdk akan berhasil.
RFID Reader
Untuk berfungsinya sistem RFID, maka diperlukan sebuah reader atau alat scanning yang dapat membaca tag dengan
benar dan mengkomunikasikan hasilnya ke microprosessor/microcontroller.
Komunikasi antara TAG dan Reader bisa melalui serial USART, i2c dan SPI. pada artikel ini digunakan serial SPI untuk membaca dan menulis data ke memory TAG. Membaca dan menulis dilakukan oleh Arduino.
Langkah langkah membaca dan menulis memory TAG pada program arduino
1. masukan library MFRC522 kedalam program (#include MFRC522.h)
2. Buat objeck MFRC522 dgn cara MFRC522 namaobjek(parameter).
3. Buat objek structur key dgn cara MFRC522::MIFARE_Key key;
structur key digunakan untuk menyimpan 6 byte key authentifikasi
4. Inisialisasi RFID dengan fungsi PCD_Init();
5. Cek keberadaan TAG /RFID Card
if ( ! mfrc522.PICC_IsNewCardPresent())return;
6. Pilih salah satu TAG/ RFID card
6. Pilih salah satu TAG/ RFID card
if ( ! mfrc522.PICC_ReadCardSerial())return;
7. Authentifikasi menggunakan Key A atau B . lihat kotak hijau pada memori map dari TAG gambar diatas
status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, trailerBlock, &key, &(mfrc522.uid));
if (status != MFRC522::STATUS_OK) {
Serial.print(“PCD_Authenticate() failed: “);
return;
}
Setelah dilakukan autentifikasi baru kita bisa membaca atau menulis memory TAG / RFID Card
8. Membaca Memori TAG /RFID Card
7. Authentifikasi menggunakan Key A atau B . lihat kotak hijau pada memori map dari TAG gambar diatas
status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, trailerBlock, &key, &(mfrc522.uid));
if (status != MFRC522::STATUS_OK) {
Serial.print(“PCD_Authenticate() failed: “);
return;
}
Setelah dilakukan autentifikasi baru kita bisa membaca atau menulis memory TAG / RFID Card
8. Membaca Memori TAG /RFID Card
status = mfrc522.MIFARE_Read(alamatBlock, buffer, &size);
if (status != MFRC522::STATUS_OK) {d
Serial.print(“Read failed: “);
}
kalau berhasl maka data hasil baca disimpan di array bernama buffer. sebelumnya kita deklarasikan dulu array buffer tsb.
9. Menulis ke memory TAG
status = mfrc522.MIFARE_Write(alamatBlock, dataBlock, 16);
if (status != MFRC522::STATUS_OK) {
Serial.print(“Write failed: “);
}
parameter angka 16 adalah jumlah byte dlm1 block.
data yg akan ditulis disimpan di array dataBlock yg sebelumnya sudah kita buat.
10. Setelah selesai membaca atau menulis ditutup dengan perintah sbb:
// Halt PICC
mfrc522.PICC_HaltA();
// Stop encryption on PCD
mfrc522.PCD_StopCrypto1();
berikut ini contoh hasil baca dan menulis kememory TAG:
Contoh program arduino membaca sector 1 dari memory tag
/**
* Typical pin layout used:
* ———————————–
* MFRC522 Arduino
* Reader/PCD Uno
* Signal Pin Pin
* ————————————-
* RST/Reset RST 9
* SPI SS SDA(SS) 10
* SPI MOSI MOSI 11 / ICSP-4
* SPI MISO MISO 12 / ICSP-1
* SPI SCK SCK 13 / ICSP-3
*/
#include <SPI.h>
#include <MFRC522.h>
#define RST_PIN 9
#define SS_PIN 10
MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance.
MFRC522::MIFARE_Key key;
void setup() {
Serial.begin(9600);
SPI.begin(); // Init SPI bus
mfrc522.PCD_Init(); // Init MFRC522 card
// Prepare the key
// using FFFFFFFFFFFFh which is the default at chip delivery from the factory
for (byte i = 0; i < 6; i++) {
key.keyByte[i] = 0xFF;
}
}
/**
* Main loop.
*/
void loop() {
// Look for new cards
if ( ! mfrc522.PICC_IsNewCardPresent())
return;
// Select one of the cards
if ( ! mfrc522.PICC_ReadCardSerial())
return;
byte sector = 1;
byte blockAddr = 4;
byte trailerBlock = 7;
byte status;
byte buffer[18];
byte size = sizeof(buffer);
// Authenticate using key B
status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_B, trailerBlock, &key, &(mfrc522.uid));
if (status != MFRC522::STATUS_OK) {
Serial.print(“Authenticate failed “);
return;
}
// Read data from the block
status = mfrc522.MIFARE_Read(blockAddr, buffer, &size);
dump_byte_array(buffer, 16); Serial.println();
Serial.println();
// Halt PICC
mfrc522.PICC_HaltA();
// Stop encryption on PCD
mfrc522.PCD_StopCrypto1();
}
/**
fungsi menampilkan data hex ke serial PC
*/
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);
}
}
if (status != MFRC522::STATUS_OK) {d
Serial.print(“Read failed: “);
}
kalau berhasl maka data hasil baca disimpan di array bernama buffer. sebelumnya kita deklarasikan dulu array buffer tsb.
9. Menulis ke memory TAG
status = mfrc522.MIFARE_Write(alamatBlock, dataBlock, 16);
if (status != MFRC522::STATUS_OK) {
Serial.print(“Write failed: “);
}
parameter angka 16 adalah jumlah byte dlm1 block.
data yg akan ditulis disimpan di array dataBlock yg sebelumnya sudah kita buat.
10. Setelah selesai membaca atau menulis ditutup dengan perintah sbb:
// Halt PICC
mfrc522.PICC_HaltA();
// Stop encryption on PCD
mfrc522.PCD_StopCrypto1();
berikut ini contoh hasil baca dan menulis kememory TAG:
Contoh program arduino membaca sector 1 dari memory tag
/**
* Typical pin layout used:
* ———————————–
* MFRC522 Arduino
* Reader/PCD Uno
* Signal Pin Pin
* ————————————-
* RST/Reset RST 9
* SPI SS SDA(SS) 10
* SPI MOSI MOSI 11 / ICSP-4
* SPI MISO MISO 12 / ICSP-1
* SPI SCK SCK 13 / ICSP-3
*/
#include <SPI.h>
#include <MFRC522.h>
#define RST_PIN 9
#define SS_PIN 10
MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance.
MFRC522::MIFARE_Key key;
void setup() {
Serial.begin(9600);
SPI.begin(); // Init SPI bus
mfrc522.PCD_Init(); // Init MFRC522 card
// Prepare the key
// using FFFFFFFFFFFFh which is the default at chip delivery from the factory
for (byte i = 0; i < 6; i++) {
key.keyByte[i] = 0xFF;
}
}
/**
* Main loop.
*/
void loop() {
// Look for new cards
if ( ! mfrc522.PICC_IsNewCardPresent())
return;
// Select one of the cards
if ( ! mfrc522.PICC_ReadCardSerial())
return;
byte sector = 1;
byte blockAddr = 4;
byte trailerBlock = 7;
byte status;
byte buffer[18];
byte size = sizeof(buffer);
// Authenticate using key B
status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_B, trailerBlock, &key, &(mfrc522.uid));
if (status != MFRC522::STATUS_OK) {
Serial.print(“Authenticate failed “);
return;
}
// Read data from the block
status = mfrc522.MIFARE_Read(blockAddr, buffer, &size);
dump_byte_array(buffer, 16); Serial.println();
Serial.println();
// Halt PICC
mfrc522.PICC_HaltA();
// Stop encryption on PCD
mfrc522.PCD_StopCrypto1();
}
/**
fungsi menampilkan data hex ke serial PC
*/
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);
}
}
Contoh program arduino menulis sector 1 ke memory tag
/**
* Typical pin layout used:
* ———————————–
* MFRC522 Arduino
* Reader/PCD Uno
* Signal Pin Pin
* ————————————-
* RST/Reset RST 9
* SPI SS SDA(SS) 10
* SPI MOSI MOSI 11 / ICSP-4
* SPI MISO MISO 12 / ICSP-1
* SPI SCK SCK 13 / ICSP-3
*/
#include <SPI.h>
#include <MFRC522.h>
#define RST_PIN 9
#define SS_PIN 10
MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance.
MFRC522::MIFARE_Key key;
void setup() {
Serial.begin(9600);
SPI.begin(); // Init SPI bus
mfrc522.PCD_Init(); // Init MFRC522 card
// Prepare the key
// using FFFFFFFFFFFFh which is the default at chip delivery from the factory
for (byte i = 0; i < 6; i++) {
key.keyByte[i] = 0xFF;
}
}
/**
* Main loop.
*/
void loop() {
// Look for new cards
if ( ! mfrc522.PICC_IsNewCardPresent())
return;
// Select one of the cards
if ( ! mfrc522.PICC_ReadCardSerial())
return;
// 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 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 sector = 1;
byte blockAddr = 4;
byte trailerBlock = 7;
byte status;
byte buffer[18];
byte size = sizeof(buffer);
// Authenticate using key B
status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_B, trailerBlock, &key, &(mfrc522.uid));
if (status != MFRC522::STATUS_OK) {
Serial.print(“Authenticate failed “);
return;
}
// Write data to the block
status = mfrc522.MIFARE_Write(blockAddr, dataBlock, 16);
if (status != MFRC522::STATUS_OK) {
Serial.print(“Write failed: “);
return;
}
dump_byte_array(buffer, 16); Serial.println();
Serial.println();
// Halt PICC
mfrc522.PICC_HaltA();
// Stop encryption on PCD
mfrc522.PCD_StopCrypto1();
}
/**
fungsi menampilkan data hex ke serial PC
*/
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);
}
}
Library MFRC522 dan program lengkapnya anda bisa download dilink berikut ini : https://github.com/miguelbalboa/rfid
/**
* Typical pin layout used:
* ———————————–
* MFRC522 Arduino
* Reader/PCD Uno
* Signal Pin Pin
* ————————————-
* RST/Reset RST 9
* SPI SS SDA(SS) 10
* SPI MOSI MOSI 11 / ICSP-4
* SPI MISO MISO 12 / ICSP-1
* SPI SCK SCK 13 / ICSP-3
*/
#include <SPI.h>
#include <MFRC522.h>
#define RST_PIN 9
#define SS_PIN 10
MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance.
MFRC522::MIFARE_Key key;
void setup() {
Serial.begin(9600);
SPI.begin(); // Init SPI bus
mfrc522.PCD_Init(); // Init MFRC522 card
// Prepare the key
// using FFFFFFFFFFFFh which is the default at chip delivery from the factory
for (byte i = 0; i < 6; i++) {
key.keyByte[i] = 0xFF;
}
}
/**
* Main loop.
*/
void loop() {
// Look for new cards
if ( ! mfrc522.PICC_IsNewCardPresent())
return;
// Select one of the cards
if ( ! mfrc522.PICC_ReadCardSerial())
return;
// 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 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 sector = 1;
byte blockAddr = 4;
byte trailerBlock = 7;
byte status;
byte buffer[18];
byte size = sizeof(buffer);
// Authenticate using key B
status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_B, trailerBlock, &key, &(mfrc522.uid));
if (status != MFRC522::STATUS_OK) {
Serial.print(“Authenticate failed “);
return;
}
// Write data to the block
status = mfrc522.MIFARE_Write(blockAddr, dataBlock, 16);
if (status != MFRC522::STATUS_OK) {
Serial.print(“Write failed: “);
return;
}
dump_byte_array(buffer, 16); Serial.println();
Serial.println();
// Halt PICC
mfrc522.PICC_HaltA();
// Stop encryption on PCD
mfrc522.PCD_StopCrypto1();
}
/**
fungsi menampilkan data hex ke serial PC
*/
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);
}
}
Library MFRC522 dan program lengkapnya anda bisa download dilink berikut ini : https://github.com/miguelbalboa/rfid
Sumber :
0 komentar:
Posting Komentar