# EL-UHF-RMT01 Dengan Menggunakan Mikrokontroler

EL-UHF-RMT01 Merupakan sebuah modul RFID ultra high frequency dengan konsumsi daya yang rendah dan dapat dihubungkan ke mikrokontroler menggunakan TTL UART 3,3V dengan protokol komunikasi EPC ISO18000-6C.

Pada modul EL-UHF-RMT01 terdapat sebuah kontroler untuk menghubungkan antena, UHF RFID, dan juga memori. dengan begini EL-UHF-RMT01 dapat digunakan untuk mendeteksi barang–barang pada penyimpanan dengan kemampuan membaca lebih dari 50 tag/detik sekaligus.

Berikut akan diperlihatkan cara menghubungkan EL-UHF-RMT01 dengan Arduino Mega.

# Persiapan

Siapkan dahulu benda perlengkapan yang dibutuhkan :

  1. Arduino Mega serta usbnya untuk terhubung dengan komputer.
  2. EL-UHF-RMT01 dengan kabel wafer agar dapat melakukan komunikasi dengan komputer.

El-uhf-RMT01 dapat dibeli di https://www.tokopedia.com/electron/el-uhf-RMT01-RFID-reader-writer-module-uart-ttl-3-3v-microcontroller (opens new window)

Arduino Mega dapat dibeli di https://www.tokopedia.com/electron/microcontroller-mega-2560-r3-ch340g-atmega2560-arduino-clone-ch340-16u (opens new window)

# Cara menghubungkan EL-UHF-RMT01 dengan Arduino Mega

# 1. Sambungkan EL-UHF-RMT01 dengan Arduino

Arduino Mega akan melakukan komunikasi dengan EL-UHF-RMT01 dengan menggunakan hardware serial dengan sambungan rangkaian dari El-uhf-RMT01 sebagai berikut.

Warna Arduino EL-UHF-RMT01
Merah 5V 5V
Hijau Rx1 Tx
Putih Tx1 Rx
Biru Pin 4 Enable
Hitam Gnd Gnd

Meskipun EL-UHF-RMT01 melakukan interface dengan mengunakan uart TTL3,3 V, Arduino tetap dapat membaca nilai 3,3 volt sebagai kondisi high.

# 2. Cara Kerja Alat

Sebelum masuk kedalam kode, perlu diketahui bahwa komunikasi dilakukan dimulai Arduino mengirimkan perintah dengan komunikasi serial dengan format data tertentu, contoh format frame yang diperlukan adalah seperti pada tabel berikut.

H Type CMD PL Parameter CRC End
BB 00 03 00 01 00 04 7E

Contoh frame perintah pada tabel diatas merupakan perintah untuk mendapatkan versi hardware dari reader, dari frame tersebut dapat dilihat ada bagian bagian seperti H, Type, CMD, PL, Parameter, CRC dan END.

Bagian - bagian yang telah disebutkan memiliki peran masing-masing untuk memastikan pengiriman dan penerimaan data diterima dengan baik, berikut adalah penjelasan masing-masing frame.

Contoh jenis jenis Frame yang lain dapat dilihat pada dokumentasinya di EL-UHF-RMT01

H —> H adalah Header yang berarti pembuka, setiap pesan yang diterima ataupun dikirim memerlukan H sebagai tanda awal dari sebuah pesan.

Type –> tipe adalah bentuk komunikasi yang sedang pada sebuah pesan, dimana tipe dibagi menjadi 3 bagian seperti pada tabel di bawah ini.

Type Description
0x00 Command from the Host Computer to the Interrogator
0x01 Response from the Interrogator to the Host Computer
0x02 Notification from the Interrogator to the Host Computer

Dari tipe tersebut dapat dilihat komunikasi terjadi pada host komputer dan interrogator, dimana interrogator merupakan bagian utama dari EL-UHF-RMT01, sedangkan komputer merupakan pemberi perintah yang merupakan Arduino pada tutorial ini.

CMD –> CMD adalah jenis perintah yang dikirim, dimana pada contoh respon interrogator adalah perintah untuk mendapatkan informasi modul interrogator. jenis-jenis perintah CMD ada pada tabel dibawah

Code Instruction
0x03 Get Interrogator Module Information
0x22 Single Inventory
0x27 Multiple Inventory
0x28 Stop Multiple Inventory
0x0C Set Select
0x12 Get Select
0x39 Read Tag
0x49 Write Tag
0x82 Lock Tag

Untuk lebih lengkapnya perintah dapat dilihat di EL-UHF-RMT01

PL –> PL adalah Parameter Length yaitu panjang parameter yang dikirim mengikuti perintah yang dikirim contoh pada respon interrogator memiliki PL dengan nilai 1, dan isi parameter nya adalah 0.

Parameter –> parameter merupakan data yang dikirim mengikuti command, dimana parameter ini tidak selalu ada, pada contoh 2 dapat dilihat memiliki isi parameter length dengan panjang 1 maka akan dibutuhkan parameter.

CRC –> CRC adalah nilai penjumlah mulai dari frame type hingga frame sebelum CRC lalu diambil 2 nilai lsb nya, sehingga dapat dilihat pada respon interrogator memiliki nilai CRC 4 yang merupakan total dari penjumlahan tersebut 00 + 03 + 00 + 01 + 00 = 04.

END –> end merupakan tanda akhir dari pesan yang dikirim ataupun diterima sehingga meruapakan tanda akhir dari 1 frame data.

# 3. Kode dan Penjelasan

Dari penjelasan langkah 2 maka yang perlu disiapkan adalah frame data yang mau dikirim terlebih dahulu yang disimpan didalam array seperti di bawah ini.

uint8_t singleRead[7] = {0xBB, 0x00, 0x22, 0x00, 0x00, 0x22, 0x7E};

Setelah itu data pada frame yang dibuat dikirim secara berurutan dengan menggunakan fungsi seperti di bawah ini.

for(int i = 0; i < 7 ; i++){
      Serial1.write(singleRead[i]);
      delay(50);
    }

Begitu interrogator sudah menerima pesan yang dikirim dari host, interrogator akan memberikan respon ke Host, untuk membaca perintah yang dikirim dapat dengan mudah dibuat seperti di bawah ini.

while(Serial1.available()){
    Serial.println(Serial1.read());
  }

Fungsi diatas memang sudah bisa menerima pesan yang dikirim dari interrogator, namun memiliki kelemahan, data yang diterima akan ditampilkan secara langsung tanpa memastikan data tersebut bagus atau rusak seperti berikut:

# Respon Interrogator

19:21:09.530 -> BB->1-FF-0-1-15-16-7F-
19:21:13.355 -> BB->1-FF-0-1-15-16-7F-
19:21:18.412 -> BB->1-FF-0-1-15-16-7F-
19:21:21.223 -> BB->1-FF-0-1-15-16-7F-

Data yang ditampilkan seperti pada baris paling atas terdapat nilai 7F yang merupakan ending pesan tersebut yang seharusnya tidak baik untuk ditampilkan karena data tersebut terhitung rusak, sehingga diperlukan sebuah proses untuk menerima pesan, sehingga frame parameter length dan CRC akan berguna kode untuk melakukan filter data rusak. kode lengkap untuk filter dapat dilihat seperti di bawah ini.

#define header 0xBB   // mendefinisikan frame pembuka pesan
#define last 0x7E     // Mendefinisikan frame penutup pesan
#define indexCode 2
#define en 4

byte type[2] = {1,2};
byte code[indexCode] = {0x22,0xFF};

bool valid = true;
bool started = true;
bool pass = false;
String respond;

uint8_t singleRead[7] = {0xBB, 0x00,
0x22, 0x00, 0x00, 0x22, 0x7E};
uint8_t multiRead[10] = {0xBB, 0x00,
0x27, 0x00, 0x03, 0x22, 0x00,
0x10, 0x5c, 0x7E};

void setup() {
  Serial1.begin(115200);
  Serial.begin(9600);

  for(int i = 0; i < 7 ; i++){
      Serial1.write(singleRead[i]);
      delay(50);
    }
    Serial1.println();

}

void loop() {
  //filter data masuk

  int crc;
  uint16_t paramL=0;
  uint8_t data =0;

  while(Serial1.available()){
    data = Serial1.read();
    if(data == 0xBB){
      pass = data == 0xBB ? true:false;
      data = Serial1.read();
      crc = data;
      pass = matchType(data);
      data = Serial1.read();
      crc += data;
      pass = matchCode(data);
      if(pass){
        paramL = Serial1.read();
        crc+=paramL;
        paramL = paramL << 8;
        paramL += Serial1.read();
        crc+=paramL;
        respond += String(paramL,HEX)+'-';
        for(int i=0;i<paramL;i++){
          data = Serial1.read();
          respond += String(data,HEX)+'-';
          crc+=data;
        }
        crc &= 0xFF;
        data = Serial1.read();
        if(crc == data){
          respond += String(crc,HEX)+'-';
          data = Serial1.read();
          respond += String(data,HEX);

        }
        Serial.println(respond);
      }
    }
  }
}

bool matchType(uint8_t data){
  for(int i = 0;i < 2;i++){
    if(data == type[i]) {
      respond = "bb-";
      respond += String(data,HEX)+ '-';
      return true;
    }
  }
  return false;
}

bool matchCode(uint8_t data){
  for(int i = 0;i < indexCode;i++){
    if(data == code[i]) {
      respond += String(code[i],HEX) + '-';
      return true;
    }
  }
  return false;
}

Dari program diatas output yang dihasilkan akan seperti dibawah berikut ini, dari hasil tersebut dapat dilihat scan tag yang ditampilkan akan memiliki nilai dengan CRC yang sama, yang berarti dalam perhitungannya seperti di bawah ini.

CRC ==> 2 + 22 + 11 + c4 + 34 + 9 + b1 + e8 + 80 + 4e + 21 + 51 + 9 + ee + 5b = 561, yang berarti 2 lsb nya adalah 61 maka data tersebut dipastikan tidak rusak.

// Data yang sudah difilter
02:38:07:751 -> bb-2-22-11-c4-34-0-0-9-b1-e8-80-0-0-0-4e-21-51-9-ee-5b-61-7e
02:38:07:751 -> bb-2-22-11-ca-34-0-e2-80-11-70-0-0-2-c-c3-78-31-ad-3d-58-d2-7e

# 4. Informasi Tambahan

Pada kode yang telah dibuat di langkah 3 berfungsi untuk menjalankan perintah single inventory dari yang berarti dilakukan scanning tag sebanyak 1 kali, karena EL-UHF-RMT01 juga memiliki fungsi multi inventory, dimana perintah tersebut adalah proses scanning berulang sebanyak yang diinginkan dengan limit angka 0 – 65535, perintah tersebut dapat langsung dijalankan cukup dengan mengganti pada bagian void setup, lalu ganti nilai array yang dikirim menjadi seperti pada program di bawah ini.

uint8_t singleRead[7] = {0xBB, 0x00, 0x22, 0x00, 0x00, 0x22, 0x7E};
uint8_t multiRead[10] = {0xBB, 0x00, 0x27, 0x00, 0x03, 0x22, 0x00, 0x10, 0x5c, 0x7E};

void setup() {
  Serial1.begin(115200);
  Serial.begin(9600);

  for(int i = 0; i < 10 ; i++){
      Serial1.write(multiRead[i]);
      delay(50);
    }
}

Format perintah yang dimiliki oleh multi inventory dapat dilihat pada tabel di bawah ini.

H Type CMD PL Reserved CNT CRC End
BB 00 27 00 03 22 27 10 83 7E

Pada format perintah multi inventory, jumlah scan yang dilakukan adalah sebanyak 10.000 kali (27 10 dalam hexa) sehingga jika hanya ingin melakukan perintah sebanyak 32 kali, cukup ganti nilai dalam frame cnt menjadi 0x0 dan 0x20 sehingga nilai CRC berubah menjadi 0x6c dan output dari perintah tersebut akan menjadi seperti berikut:

17:48:30.951 -> bb-2-22-11-df-34-0-0-9-b1-e8-80-0-0-0-4e-21-51-9-ee-5b-7c-7e
17:48:30.951 -> bb-2-22-11-d6-30-0-e2-80-68-94-0-0-50-9-56-71-b8-dl-c3-d9-de-7e
17:48:30.951 -> bb-2-22-11-df-34-0-0-9-b1-e8-80-0-0-0-4e-21-51-9-ee-5b-7c-7e
17:48:30.984 -> bb-2-22-11-d9-34-0-e2-80-11-70-0-0-2-c-c3-78-31-ad-3d-58-e1-7e
17:48:30.984 -> bb-2-22-11-d6-30-0-e2-80-68-94-0-0-50-9-56-71-b8-dl-c3-d9-de-7e
17:48:31.086 -> bb-2-22-11-e0-34-0-0-9-b1-e8-80-0-0-0-4e-21-51-9-ee-5b-7d-7e
17:48:31.086 -> bb-2-22-11-dc-34-0-e2-80-11-70-0-0-2-c-c3-78-31-ad-3d-58-e4-7e
17:48:31.188 -> bb-2-22-11-dc-34-0-e2-80-11-70-0-0-2-c-c3-78-31-ad-3d-58-e4-7e
17:48:31.188 -> bb-2-22-11-dc-34-0-e2-80-11-70-0-0-2-c-c3-78-31-ad-3d-58-e4-7e

# Video seputar EL-UHF-RMT01

Beberapa video seputar reader Electron EL-UHF-RMT01:

Last Updated: 2022-09-08