BAB IV ANALISA DAN PEMBAHASAN
4.1.2. Mekanisme Penarikan Kartu Melewati Sensor Pembaca Barcode
Mekanik penarikan kartu digunakan untuk melewatkan kartu ke sensor pembaca
barcode. Mekanik penarik kartu terdiri dari penjepit dan sensor limit switch yang digunakan untuk mendeteksi adanya kartu dan batasan untuk motor stepper harus berhenti. Mekanik penarikan kartu terdiri dari penjepit kartu dan tiga sensor limit switch. Penjepit kartu berfungsi untuk menjepit kartu supaya pada saat mengerakkan kartu melewati sensor kartu tidak bergerak – gerak. Sensor limit switch ada tiga fungsi yang berbeda – beda. Sensor limit switch depan berfungsi untuk indikator batas depan motor stepper bergerak maju. Saat limit switch depan aktif maka motor stepper akan berhenti menandakan untuk mengeluarkan kartu serta kondisi siap untuk menarik kartu. Limit switch tengah berfungsi untuk mendeteksi adanya kartu. Sedangkan limit switch belakang berfungsi untuk batas belakang motor stepper bergerak atau untuk indikasi pembacaan kode barcode untuk semua karakter sudah selesai.
Mekanisme penarikan kartu juga merupakan hal terpenting pada mesin pembaca
barcode kode 3 of 9. Penggerak kartu melewati sensor pembaca barcode menggunakan
motor stepper. Pergerakan satu langkah motor stepper dirancang hanya melewati satu bar
atau space sempit saja sehingga setiap langkah motor stepper sensor pembaca barcode
akan membaca garis hitam atau putih pada kondisi itu juga. Akan tetapi pergerakan motor stepper ternyata tidak dapat stabil sehingga menyebabkan dalam satu langkah pergerakan
motor stepper bisa melewati lebih dari satu bar atau space sempit sehingga menyebabkan kesalahan dalam pembacaan data identitas dari kartu tersebut.
Mengacu rumus 2.6 dengan menggunakan diameter roda motor stepper 1 cm dan resolusi sudut setiap step adalah 1.80 maka jarak yang ditempuh motor stepper dalam satu
step adalah ;
X =
X = 1,57 mm
Maka dalam satu stepmotor stepper kartu bergeser 1,57 mm, sendangkan lebar bar dan
space sempit yang harus dilewati hanya 0,578 mm. maka dengan demikian dalam satu langkah motor stepper saja sudah melewati dua bar atau space sempit saja. Roda motor stepper mengunakan roda pada bekas printer. Karena ketika mencoba membuat roda sendiri putaran motor tidak setabil karena gerigi dari roda tersebut tidak stabil sehingga menyebabkan putarannya tidak stabil begitu juga dengan pergeseran kartunya. Sehingga dengan jarak pergeseran kartu yang dalam satu kali lagkah saja sudah melewati dua bar
atau space sempit maka untuk membedakan garis hitam dan putih saja akan mengalami kesalahan. Karena dalam satu langkah maka sensor akan membaca hitam dan putihnya pada saat itu juga, maka dengan begitu untuk membedakan bar atau space lebar tidak dapat dilakukan. Bentuk fisik mekanik kartu dapat dilihat pada gambar 4.7.
Gambar 4.8. Mekanik Penarikan Kartu
Motor stepper akan bergerak ketika sensor pendeteksi kartu aktif, sensor pendeteksi kartu mengunakan limit switch yang dihubungkan ke ground. Motor stepper akan bergerak untuk menarik sensor pembaca barcode sampai sensor limit switch belakang aktif. Setelah sensor limit switch aktif motor stepper akan bergerak untuk mengeluarkan kartu identitas
sampai sensor limit switch depan aktif. Penempatan sensor yang digunakan dapat dilihat pada gambar 4.7.
Proses pembacaan barcode dilakukan ketika dilakukan ketika sensor pendeteksi kartu aktif maka motor stepper akan bergerak untuk melakukan proses pembacaannya. Pada proses pembacaan kartu identitas bergerak melewati sensor pembaca barcode. Motor stepper akan bergerak untuk mengerakkan kartu melawati sensor untuk proses pembacaan dan mengeluarkan kartu. Motor stepper akan bergerak mengeluarkan kartu sampai sensor
limit switch depan aktif. Saat kartu belum diambil maka buzzer akan berbunyi sampai kartu diambil. Buzzer berbunyi ketika proses pembacaan selesai dan sensor pendeteksi katu aktif dan sensor limit switch depan aktif. Setelah kartu diambil maka mesin pembaca dapat untuk melakukan pembacaan kartu identitas berikutnya. Proses pergerakan kartu dapat dilihat pada potongan program berikut:
void mechanics(void){ unsigned int i, j;
if (deteksi_kartu == 0){ //jika kartu terdeteksi jalankan perintah delay_ms(200); //delay 200ms
if (deteksi_kartu == 0){ //apakah kartu masih terdeteksi? for (j = 0; j <=2; j++){ buzzer = 1; delay_ms(500); buzzer = 0; delay_ms(200); #asm("wdr") }
goto lanjutkan; //bila kartu masih terdeteksi, lanjutkan proses }
else return; //jika kartu tidak terdeteksi, loop lanjutkan:
lcd_clear(); //bersihkan layar LCD
lcd_gotoxy(0,0); //posisikan kursor pada baris 0 kolom 0
lcd_putsf("-CARD DETECTED!-"); //tulis pada LCD baris 0 mulai dari kolom 0 lcd_gotoxy(0,1); //posisikan kursor pada baris 1 kolom 0 lcd_putsf("PROCESSING.. "); //tulis pada LCD baris 1 mulai dari kolom 0 while (limit_switch_belakang != 0){ //jika limit switch belakang aktif
lcd_gotoxy(0,1); //posisikan kursor pada baris 1 kolom 0 lcd_putsf("PROCESSING.. "); //tulis pada LCD baris 1 mulai dari kolom 0 for (i = 0; i <=1; i++){ //loop bwt LCD blink
rv_step(); //motor stepper (memasukkan kartu) #asm("wdr")
if (limit_switch_belakang == 0){ //jika limit switch belakang aktif, break; //break
} }
lcd_gotoxy(0,1); //letakkan kursor lcd_putsf("PROCESSING... ");
for (i = 0; i <=1; i++){ rv_step();
if (limit_switch_belakang == 0){ break; } } } if (limit_switch_belakang == 0){ PORTC = 0x00; delay_ms(100); lcd_clear(); lcd_gotoxy(0,0); lcd_putsf("READING BARCODE "); lcd_gotoxy(0,1); lcd_putsf("PLEASE WAIT.. "); delay_ms(500); //delay 500ms if (flag != 1){ for (j = 0; j <=3; j++){ buzzer = 1; delay_ms(300); buzzer = 0; delay_ms(100); #asm("wdr") }
lcd_clear(); lcd_gotoxy(0,0);
lcd_putsf("READING FAILURE "); lcd_gotoxy(0,1);
lcd_putsf("PLS REPEAT STEP!"); } else{ flag=0; #asm("wdr") buzzer = 1; delay_ms(500); buzzer = 0; delay_ms(200); buzzer = 1; delay_ms(1500); buzzer = 0; delay_ms(200); } delay_ms(100); while (limit_switch_depan != 0){ fw_step(); #asm("wdr")
}
buzzer = 1; lcd_clear(); lcd_gotoxy(0,0);
lcd_putsf("TAKE YOUR CARD!!"); lcd_gotoxy(0,1); lcd_putsf("PLEASE... "); while (deteksi_kartu == 0){ buzzer = 1; #asm("wdr") } if (deteksi_kartu != 0){ buzzer = 0; delay_ms(200); lcd_clear(); lcd_gotoxy(0,0);
lcd_putsf("-BARCODE READER-"); lcd_gotoxy(0,1);
lcd_putsf("- INSERT CARD! -"); return;
} }
else #asm("wdr") }
else #asm("wdr") }
Fungsi mechanics merupakan proses dimana kapan serta mengatur pergerakkan maju atau mundur motor stepper harus bergerak serta menentukan kapan harus mengaktifkan serta membaca barcode. Pertama sensor pendeteksi kartu akan melihat apakah ada kartu atau tidak. Jika tidak ada kartu maka akan menampilkan pesan pada LCD pada baris atas “ -BARCODE READER-“ dan pada bari kedua akan menampilkan “ -INSERT CART-“. Ketika sensor mendeteksi kartu maka mikrokontroler akan mengerakkan motor stepper
untuk menarik kartu sampai sensor belakan aktif. Pada saat motor stepper bergerak menarik kartu LCD akan menampilkan “-CARD DETECTED!-“ pada baris pertama dan “PROCESSING.. “ pada baris kedua. Pada saat sensor pendeteksi aktif mikrokontroler juga akan menhidupkan buzzer selama 500 ms dan kemudian kan mengerakkan kartu untuk melewati sensor pembaca. Pada saat mikrokontroler membaca barcode akan menampilkan pesan pada LCD “READING BARCODE” pada baris pertama dan “PLEASE WAIT.. “. Kemudian mikrokontroler akan menggerakkan motor stepper untuk mengeluarkan kartu setelah pembacaan sudah selesai. Untuk indikasi pembacaan sensor sudah selesai mnggunkana sensor limit switch belakang. Ketika limit swich belakang aktif
motor stepper akan bergerak mundur untuk mengeluarkan kartu. Motor stepper akan berhenti ketika sensor limit swich depan sudah aktif. Jika sensor limit swich depan sudah aktif dan sensor pendeteksi kartu masih aktif maka mikrokontroler akan menghidupkan
buzzer sampai kartu diambil. Setelahkartu diambil mikrokontroler sidah siap untuk melakukan pembacaan kartu identitas lainnya. Sedangkan program untuk step maju dan
step mundur pergerakan motor stepper dapat dilihat pada potongan program dibah ini : void fw_step(void){
PB_0 = 1; delay_ms(40); PB_0 = 0;
PB_1 = 1; delay_ms(40); PB_1 = 0; PB_2 = 1; delay_ms(40); PB_2 = 0; PB_3 = 1; delay_ms(40); PB_3 = 0; } void rv_step(void){ PB_3 = 1; delay_ms(40); PB_3 = 0; PB_2 = 1; delay_ms(40); PB_2 = 0; PB_1 = 1; delay_ms(40); PB_1 = 0; PB_0 = 1; delay_ms(40);
PB_0 = 0; }
Pergerakan motor stepper untuk setiap stepnya menggunakan delay 40 ms. Pulsa input
motor stepper melalui port PB0-3 yang akan aktif bergaintian agar motor stepper dapat bergerak. Inputan motor stepper mengunakan logika tinggi. Pergerakan motor stepper
dengan gerakan full step.