Pengetahuan Dasar RFID dan Pemrograman dgn Arduino

Hardware : Arduino board,  RFID Reader RC522, RFID TAG mifare

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

tabelperbeda

RFIDSYSTEM

Gambar  1.    Overview of  RFID system

rfidinstall

RFID Card /TAG

Sebuah 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

mifaretagGambar 2. Bentuk fisik TAG berupa gantungan kunci dan kartu

Jenis Tag : pasive  dan aktive tag

Pasive Tag :passivetag

Gambar 3. Rangkain pasive TAG yg disederhanakan

Aktive tag:

aktivetag

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.

memorytag

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.

RFID-RC522 - Pin Layout

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.

rfidkoneksi

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

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

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:

tag memory r-w

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

Referensi

The RF in RFID,  Passive UHF RFID in Practice by Daniel M. Dobkin

About pccontrol

Berisi Tutorial Menggunakan PC untuk mengontrol Peralatan dengan cara mudah & praktis untuk pemula.

Posted on 12/12/2014, in Arduino, elektronika-dasar and tagged , . Bookmark the permalink. 24 Comments.

  1. Bagaimana cara mbaca isi memori kartu e-ktp ?

  2. tergantung banyaknya memory .

  3. Berapa jumlah tag yg bisa disimpan arduino gan?

  4. Maksudnya NOID ya ?

  5. Bisa

  6. ahmad saefudin

    Bagaimana memunculkan serial tag bawaan coba minta coding.a gan saya udah coba tp gagal mulu
    Dan buka.a lewat serial COM arduino atau gmna

  7. pastinya sy juga blm tahu. tapi kemungkinan besar iya sebab protokol dan frekwensi komunikasi harus cocok antara reader dan kartu nya..

  8. mas maaf, mau tanya. saya pakai rc522 tapi cm bisa baca tag bawaan ya(yg bntuk kartu putih polos sama sprti gantungan). apa emang default-nya cm bsa baca itu doang ? terimakasih

  9. bang bagimana mengisi data pada rfid yang berupa nama kendaraan??

  10. bagaimana ngisi rfid dengan data seperti data untuk identifikasi suatu kendaraan yang di dalamnya ada nama kendaraan nomor kendaraan terus sambunganya ke vb 6

  11. maksud dikalibrasi disini seperti apa ya?. setahu sy tdk ada proses kalibrasi.

  12. Gan kira2 cara kalibrasi RFID dengan Arduino gmana gan?

  13. Arif Sabanuddin

    Saya sudah coba tapi eror terus saya sudah copy paste coding dari web ini eror juga.. Kira2 solusinya gimana ya.. Apa ada masalah dalam pemasangan pin..

  14. Selamat siang master,
    Ijin bertanya,gimana cara membuat/mengcode lebih dari satu RFID ?
    Terima kasih

  15. coba didelete karakter tsb .compile ulang. karakter tsb sptnya karena mencopy kode dari halaman web secara langsung. CMIIW.

  16. permisi gan, punya ane kesalahan stray ‘\223’ in program , mohon bantuan nya

  17. tambah null(0x00) diakhir bufer

  18. permisi gan,,mau tanya kalau hasil buffernya di jadikan string untuk di jadikan syarat fungsi di tambah code gimana ya
    terima kasih

  19. Nanang Maulana

    Mas, kalo source code Vb.net ada pa gak,,?? Sy buat aplikasinya di visual Studio 2012
    Mohon bantuannya mas
    Terima kasih

  20. di ide arduinonya keluar pesan
    MFRC522 Software Version: 0x0 (unknown)
    WARNING: Communication failure, is the MFRC522 properly connected?
    Scan PICC to see UID, type, and data blocks…
    kenapa itu yah mas?

  21. #include
    // Write block
    status = mfrc522.MIFARE_Write(block, buffer, 16);
    if (status != MFRC522::STATUS_OK) {
    Serial.print(“MIFARE_Write() failed: “);
    Serial.println(mfrc522.GetStatusCodeName(status));
    return;
    }

  22. Maaf mau tanya mas, apakah bisa mengisi data pada kartu dengan menggunakan arduino mas?
    Terima kasih

  23. mau tanya gan saya di suruh cari dari mana asal mu asal sector blok pasa tag rfid dan di suru cari seperti pada gambar diatas c4 63 8B 0D itu apa/dari mana didapatnya

  24. Pak mau tanya, saya sudah mencoba tutrial nya, dan sukses. nah pertanyaan nya gimana ID dri Tag RFID tersebut bisa tersimpan ke Database menggunakan Netbeans.
    mohon kirim ke email saya tajudinsubki@gmail.com

Komentar ,Saran atau Pertanyaan