Artikel ini berlaku untuk HW-VX63 Series yang memiliki interface RS232:

Persiapan

Persiapan yang diperlukan dari Hardware ialah sebagai berikut :

  • HW-VX63 Series Reader
  • Arduino Mega 2560 serta USB nya
  • Max232 RS-232 to TTL converter
  • 3 jumper male to male

HW-VX seri 63 dapat dibeli di :

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

Max232 dapat dibeli di https://www.tokopedia.com/electron/converter-module-rs232-female-to-ttl-max3232-serial-db9-max232-3-3v-5v

1. Konfigurasi Hardware

Sinyal RS-232 memiliki nilai tegangan yang berbeda dengan sinyal ttl yang biasa diterima oleh mikrokontroler seperti pada gambar di bawah ini, jika tetap dipasang secara langsung dan mengirim data, hal ini akan membuat board pada Mikrokontroler terbakar, sehingga diperlukan sebuah konverter yang dapat mengkonversikan data dari TTL ke RS-232 maupun RS-232 ke TTL.

Konversi sinyal dapat dilakukan dengan bantuan modul Max232 yang dapat megkonversi sinyal TTL ke RS-232 maupun sebaliknya, idenya adalah Max232 menjadi jembatan komunikasi antara HW-VX63 dan Mikrokontroler, lihat gambar di bawah ini.

Bagian yang biasanya membingungkan adalah bagaimana cara melakukan sambungan cross dari HW-VX63 ke MAX232, jika ingin digunakan sebagai rangkaian yang berkelanjutan (jangka panjang) cukup lepas saja kabel yang terhubung dengan DB9 pada HW-VX dan hubungkan ke rangkaian pada Max232, namun artikel ini akan menggunakan kabel jumper sebagai alat bantu melakukan cross antar DB9 seperti pada gambar di bawah ini.

2. Bagian Program

Pada bagian program cukup simple, intinya adalah komunikasi yang dilakukan sudah berbentuk sinyal TTL sehingga mikrokontroler dapat dengan mudah menerima datanya dengan menggunakan protokol UART. Komunikasi dapat dilakukan dengan menggunakan hardware serial maupun software serial, karena Arduino Mega memiliki 3 hardware serial, tutorial ini akan menggunakan hardware serial.

Deklarasi Variabel

Pada bagian ini array yang berisi nilai-nilai hexa adalah perintah yang akan dikirimkan ke HW-VX63 yang memerintahkan HW-VX63 untuk melakukan pembacaan epc dari tag RFID.

uint8_t data[5] = {0x04,0xFF,0x0F, 0x65, 0x5D};
bool newLine;

Setup

Pada bagian setup melakukan deklarasi terhadap hardware serial yang akan digunakan, yaitu hardware serial yang terhubung dengan komputer, dan hardware serial 1 yang terhubung dengan Arduino Mega.

void setup() {
  Serial.begin(9600);
  Serial1.begin(57600);
  pinMode(2,INPUT_PULLUP);
}

Loop

Pada bagian loop terdapat pengecekan apakah pin 2 dari Arduino Mega menyentuh GND, jika iya maka perintah yang terseimpan pada array sebelumnya akan langsung terkirim

Setelah itu pengecekan newLine berfungsi untuk melakukan enter ke setiap data yang telah diterima pada sekali pengiriman data dari HW-VX63 ke Arduino Mega.

void loop() {
  if(!digitalRead()){
    sendData();
  }
    while(Serial1.available()){
      newLine = true;
      Serial.print(Serial1.read(),HEX);
      Serial.print(" ");
    }
  if(newLine){
    newLine = false;
    Serial.println();
  }
}

Prosedur Send data

Prosedur send data berisi for loop yang akan mengirimkan isi array satu per satu ke HW-VX63, namun di sini dapat dilihat pengiriman setiap pengiriman 1 byte perintah dapat diberi delay maksimal 15 ms, jika pengiriman terhambat dipertengahan dan HW-VX tidak menerima data apa-apa dalam waktu 15ms, maka HW-VX akan otomatis menghapus baris perintah yang sebelumya belum selesai dikirim.

void(sendData){
  for(int i=0;i<5;i++){
    Serial1.write(data[i]);
  }
  delay(200);
}

Kode Lengkap

Sehingga ketika digabungkan akan menjadi seperti dibawah ini

uint8_t data[5] = {0x04,0xFF,0x0F, 0x65, 0x5D};
bool newLine;
 
void setup() {
  Serial.begin(9600);
  Serial1.begin(57600);
  pinMode(2,INPUT_PULLUP);
 
}
 
void loop() {
  if(!digitalRead()){
    sendData();
  }
    while(Serial1.available()){
      newLine = true;
      Serial.print(Serial1.read(),HEX);
      Serial.print(" ");
    }
  if(newLine){
    newLine = false;
    Serial.println();
  }
}
 
void(sendData){
  for(int i=0;i<5;i++){
    Serial1.write(data[i]);
  }
  delay(200);
}

Video Tutorial