"Kembali Ke Dasar Elektronika Digital ... "

Rabu, 19 Juni 2013

Tutorial: RFID ID-12 Trainer Modul dan Aplikasi Pintu Berbasis RFID




Penulis mendapat modul starter kit RFID innovative dari pembaca blog yg kebingungan setelah membeli nya. Modul ini dapat diperoleh dengan harga sekitar 350 ribu dengan packing yang sudah terdapat komunikasi serial UART atau Rs232 serta beberapa rangkaian tambahan sehingga dapat dikatakan siap pakai. Modul Utama RFID adalah ID-12 yang bekerja pada frekuensi 125Khz dan hanya berfungsi sebagai reader. Terdapat antenna internal sehingga tinggal menempatkan kartu RFID di atasnya. Unutk model yang bisa write/menulis ke kartu RFID maka dibutuhkan jenis yang lebih advance yaitu ID-20


jaycon_systems_white_rfid_card_125khz.jpg (800×600)

Ternyata tidaklah sesusah yg dikira..bisa langsung dihubungkan menuju serial port atau usb to serial converter dan melalui software hyperterminal / putty  (9600 bps) ketika kartu RFID dideketkan ke modul akan muncul kode ascii seperti contoh ini :




4D00D584B1AD

Dari datasheet didapatkan penjelasan byte yg dikirim ketika kartu didekatkan berupa :




1. STX (0x02) , start transmission
2. 10 DATA ASCII
3. 2 byte checksum (ascii) 
4. <cr><lf> ETX , kalo hexanya 0x0D , 0x0A, 0x03


Ke 16 byte ini bisa dibaca langsung melalui serial port (tentunya ketika kartu yg sesuai ditempelkan dekan ID-12) akan tetapi checksumnya mubazir jika hanya kecepatan membaca kartu tidak tinggi, sehingga lebih baik hanya di compare semua byte ascii (10 + 2) jika ingin melakukan suatu proses pengecekan kartu.



Untuk rangkaian dari datasheet produk RFID Innovations, seperti berikut:








Perbedaan antara ID-0/ID-2 dan ID-12 hanya di antenna , dimana ID0/2 tidak memiliki antena internal seperti ID12. Tapi ID12 dapat juga dipasangkan antena external yg dapat digunakan bersamaan. Antenna dapat dibuat dengan lilitan kawat enamel diameter 0.5 mm yang dililit melingkar sekitar 100 putaran  dengan diameter lingkaran 10cm (kira2 menghasilkan 640uh, gunakan google untuk mencari kalkulator lilitan), dan kemudian jangan lupa memasangkan tunning capacitor yang bernilai sekitar 1,5nF. Untuk koneksinya dapat dilihat pada gambar diatas.


Jika modul trainner dihubungkan dengan Microcontroller maka cukup gunakan  mode UART TTL , dan hanya digunakan pin RX saja , karena tujuannya hanya membaca data serial yg diberikan oleh modul ketika membaca kartu.

jadi....kodenya kira2 begini , output ke LCD 16x2 (baca tutorial mengenai penulisan lcd disini):



#define F_CPU 4000000UL //sesuaikan dengan clock micro
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include "lcd.h"  //silahkan baca pembahasan menulis LCD

#define USART_BAUDRATE 9600 //baudrate 
#define BAUD_PRESCALE (((F_CPU / (USART_BAUDRATE * 16UL))) - 1) 



void init_usart(void)
{



   UCSRB |= (1 << RXEN) | (1 << TXEN);   
   UCSRC |= (1 << UCSZ0) | (1 << UCSZ1); 
   UBRRL = BAUD_PRESCALE; 
   UBRRH = (BAUD_PRESCALE >> 8);
   UCSRB |= (1 << RXCIE);  //interupt serial usart

    sei(); //enable interupt
  }




ISR(USART_RX_vect) //interupt ketika ada data yg diterima
{ 
 char databyte;
 
  
  databyte = UDR;  // isi data 



    if(databyte == 2) {  //deteksi STX (0x02h)
     
      lcd_gotoxy(0,1);
   }                     
    //tampilkan data kecuali data status  ke LCD
    else if((databyte != 0x0D)&&(databyte != 0x0A)&&(databyte != 0x03)) 
 {lcd_putc(databyte); 
    }



}


int main(void)
{


//inisialisasi port I/O

DDRC=0b1111111; //port LCD


ADCSRA &= ~_BV(ADEN); //matiin ADC biar irit

//inisialisasi LCD

lcd_init(LCD_DISP_ON);
lcd_clrscr();


lcd_puts("   BACA RF ID");

init_usart();

while(1) 
{




}



return 0;

}

Script diatas hanya berfungsi untuk mendapatkan pembacaan dari kartu RFID yang didekatkan ke modul. Untuk lebih ke aplikasi selanjutnya kita dapat memanfaatkan nomer kartu yang unique yang kemudian akan dipakai sebagai pembuka suatu slot kunci dari selenoid. Slot kuncinya seperti ini nih :



Jadi ntar salah satu pin dari microcontroller akan meng ON dan OFF selenoid sebagai proses Kunci dan Buka dari pintu. Ketika tombol kunci ditekan maka selenoid akan OFF sehingga ujung slot akan mengunci pintu. Ketika kartu yang kodenya sesuai dengan yang diijinkan membuka (atau memakai daftar database pun bisa) maka Micro akan meng ON kan selenoid sehingga slot akan tertarik oleh magnet selenoid dan pintu akan terbuka. Selenoid ini harus di drive oleh relay atau transistor agar tidak merusak microcontroller dan rata-rata tegangan selenoid tidak bisa di drive langsung oleh microcontroller. contohnya seperti gambar berikut:




Script komparasi dari kartu RFID seperti berikut ini :


/*=============================
RF ID trainner modul IE version
connected to IE MINSYS 8535  
For DOOR LOCK via SELENOID
by: ahocool@gmail.com    www.aisi555.com
=============================*/
#define F_CPU 4000000UL //sesuaikan clock xtal yg dipakai
#include <string.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include "lcd.h"  //untuk LCD

#define USART_BAUDRATE 9600  //baudrate komunikasi serial
#define BAUD_PRESCALE (((F_CPU / (USART_BAUDRATE * 16UL))) - 1) 

uint8_t dataindex,detik;

char data[12];
char pass[12]="4D00D584B1AD" ;  
//sesuaikan dengan pembacaan kartu via PC & hyperterminal/putty , kartu yg digunakan yg dapat membuka pintu



void init_usart(void)  //inisialisasi usart
{



   UCSRB |= (1 << RXEN) | (1 << TXEN);   
   UCSRC |= (1 << UCSZ0) | (1 << UCSZ1); 
   UBRRL = BAUD_PRESCALE; 
   UBRRH = (BAUD_PRESCALE >> 8);
   UCSRB |= (1 << RXCIE);  //interupt serial usart
sei();
  }


void init_jam(void) //timer 8 detik tanpa aktivitas, LCD mati
{
   TCCR1B |= (1 << WGM12); // Configure timer 1 for CTC mode
   TIMSK |= (1 << OCIE1A); // Enable CTC interrupt 
   OCR1A  = 62499; //compare the CTC A 
   TCCR1B |= (1 << CS11)|(1 << CS10); // Start timer at Fcpu/64
   TCNT1 = 0;
   
   PORTC |= (1<<PC7); //hidupkan LCD
   detik=0;

}


ISR(TIMER1_COMPA_vect) //interrupt detik

{ 


detik ++;

if(detik == 2)
{
   lcd_gotoxy(0,1);  
   lcd_puts("Tempelkan Kartu!");

}

if(detik >=8) { //8 detik layar lcd mati

PORTC &= ~(1<<PC7); // lcd mati
TCCR1B=0;
}



}



ISR(USART_RX_vect) //interupt data serial dari RFID
{ 
 char databyte;
 uint8_t a;
 
  
  databyte = UDR;   



    if(databyte == 2) {  //Start transmission
     
      dataindex=0;
   }                     
     //byte status di skip aja  
    else if((databyte != 0x0D)&&(databyte != 0x0A)&&(databyte != 0x03)) 
 { 
   data[dataindex - 1]=databyte; //simpan ke memory hasil pembacaan
 }

 
    if(dataindex > 14 ) //jika sudah baca semua data
     {

       for(a=0 ;a<12 ; a++) { 

       if(data[a] != pass[a]) break; //komparasi nilai pembacaan RFID

    }


    if( a == 12) { //jika kartu benar

       lcd_gotoxy(0,1);  
          lcd_puts("                ");
          lcd_gotoxy(0,1);  
          lcd_puts("  PINTU DIBUKA  ");
    PORTA |=(1<<PA0);
          init_jam();

          }
        else{
    lcd_gotoxy(0,1); //jika kartu salah  
          lcd_puts("                ");
          lcd_gotoxy(0,1);  
          lcd_puts("  Kartu Salah ! ");

          init_jam();
    
    }  
  }
   
   
    dataindex++;



}

void tombol(void) //routine pembacaan tombol
{


if(bit_is_clear(PINA, PINA1)) 
   { 
    
   lcd_gotoxy(0,1);  
   lcd_puts("                ");
   lcd_gotoxy(0,1);  
   lcd_puts("  PINTU DIKUNCI ");
     
   PORTA &= ~(1<<PA0);

   init_jam();
   

   
   }

}



int main(void)
{


//inisialisasi port I/O, sesuaikan dengan IC AVR yg dipakai

DDRC=0b11111111; //port LCD dan PC7 terhubung ke VCC dari LCD (kalau tidak kuat di drive transistor) untuk mematikan layar jika melebihi waktu (biar hemat listrik)

DDRA |= (1<<PA0); //output ke relay/transistor driver selenoid kunci & led status pintu 
DDRA &= ~(1<<PA1); //tombol kunci pintu ,tombol lepas= pull up 10k ke vcc, tombol ditekan = nyambung ke GND


ADCSRA &= ~_BV(ADEN); //matiin ADC biar irit

//inisialisasi LCD

init_jam();

lcd_init(LCD_DISP_ON);
lcd_clrscr();


lcd_puts(" RFID DOOR LOCK\n");
lcd_puts("Tempelkan Kartu!");
init_usart();

while(1) 
{

tombol();


}



return 0;

}




Hasilnya seperti ini nih...




Selamat Mencoba
Share:

5 komentar:

  1. bang, kalo rfid ny disambungin ke mikro,,abis itu mikro ny terhubung ke VB (laptop/PC) dan ngambil data di database,, pin2 yg buat saling terhubung tu gmn yg apa aja?? pake koneksi apa yang ke laptop???
    buat skripsi ,,
    makasih sebelumnya

    BalasHapus
  2. maaf pak,. kalo penggunaannya di codevision avr gimana listing programnya yah, .? mhon bantuannya

    BalasHapus
  3. master kalo mikon y pake arduino sketch y sama?

    BalasHapus
  4. master kalo mau bikin satu set.berpa uang yang di keluarkan dari kantong

    BalasHapus
  5. Terimakasih info dan gambar modulnya.untuk modul Harga pintu otomatis berapa?

    BalasHapus

Kontak Langsung



12179018.png (60×60)
+628155737755

HP: 081331339072
Mail : ahocool@gmail.com

ANTI SPAM !



Blog Ini Mendukung Blogger Indonesia Yang Jujur dan Memberikan Informasi Sebenarnya, Bukan Menyampah Demi $Rp$ Yang Hanya Merendahkan Blogger Indonesia

Site View

Categories

555 (6) 7 segmen (3) adc (3) amplifier (1) analog (9) android (11) attiny (1) attiny2313 (16) blog (1) bluetooth (1) cmos (1) dasar (31) display (2) gcc (1) infrared (2) Input Output (3) jam (6) jualan (10) kereta api (1) keyboard (1) keypad (3) kios pulsa (2) kit (6) komponen (9) komputer (3) komunikasi (1) kontrol (2) lain-lain (8) lcd (2) led (9) led matrix (6) line tracer (1) lm35 (1) memory (1) metal detector (4) microcontroller (48) mikrokontroller (1) mikrotik (4) paket belajar (19) palang pintu otomatis (1) pcb (2) project (33) proyek (1) radio (3) remote (1) revisi (1) rfid (1) robot (1) rpm (2) rs232 (1) script break down (3) sdcard (3) sensor (1) sharing (2) sms (5) software (16) tachometer (2) telepon (7) televisi (16) transistor (1) troubleshoot (3) tulisan (34) tutorial (67) vu meter (1) vumeter (1) wav player (3) wayang (1) wifi (1)

Diskusi


kaskus
Forum Hobby Elektronika