34 BAB IV
IMPLEMENTASI DAN PENGUJIAN
Langkah selanjutnya setelah melakukan analisis dan perancangan adalah implementasi dan pengujian. Implementasi merupakan perancangan aplikasi yang dapat dimengerti oleh mesin dengan spesifikasi perangkat keras dan perangkat lunak yang digunakan. Tahap pengujian terfokus pada fungsi-fungsi perangkat lunak yang memastikan bahwa seluruh pernyataan telah sesuai dengan apa yang diinginkan.
4.1 IMPLEMENTASI PROGRAM ANTARA MUKA
Tampilan pertama kali yang muncul ketika aplikasi dijalankan adalah halaman pembuka. Menu Utama aplikasi menampilkan lima tombol menu utama.
Implementasi dari keseluruhan sistem ini menggunakan bahasa pemograman java. Bab ini akan membahas tentang beberapa proses utama yang ada di sistem yang menjadi titik berat penulisan tugas akhir ini.
4.2 IMPLEMENTASI ANTARMUKA
Implementasi antaramuka merupakan hasil dari perancangan user interface yang sebelumnya sudah dilakukan pada tahap perancangan. Pada implementasi antarmuka akan menampilkan kode program dan juga hasil implementasi rancangan ke aplikasi.
4.2.1 Implementasi Halaman Pembuka
Pada halaman ini menampilkan halaman pembuka yang disertai dengan progress bar.
35 4.2.2 Implementasi Halaman Menu Utama
Pada halaman ini menampilkan halaman menu utama, pada halaman ini terdapat 5 buah tombol yang terdiri dari tombol set degree, tombol Buka Pintu, tombol Tutup Pintu , Tombol Stop serta tombol Exit. Setiap tombol yang ada memiliki fungsinya masing-masing untuk menggerakkan prototype yang telah dibuat. Berikut ini tampilan halaman utama setelah tombol-tombol tersebut ditekan, antara lain :
1) Tampilan Halaman Menu Buka Pintu
36 3) Tampilan Halaman Menu Stop
37
5) Tampilan Halaman Tutup Pintu melalui Ponsel
38 7) Tampilan Menu Set Degree
4.3 IMPLEMENTASI KODE PROGRAM TAMPILAN
Berikut ini merupakan kode program untuk mengimplementasikan tampilan yang akan di buat di aplikasi.
4.3.1 Kode Activity_Halaman Pembuka
Untuk kode activity program Tampilan halaman pembuka, antara lain : Syntax yang digunakan :
createSplashScreen();
SwingUtilities.invokeLater(new Runnable() { public void run() {
splashScreen.show(); } }); initComponent(); try { Thread.sleep(3000); } catch (InterruptedException e) { }
39
hideSplash(); short binernol =0;
parallelJava = new ParallelPort(); parallelJava.output(addr,binernol); actiondoIt = new ActionDoIt(); actiondoIt.start();
show(); }
public ImageIcon createImageIcon(String filename, String description) { String path = "/resources/" + filename;
return new ImageIcon(getClass().getResource(path)); }
public void hideSplash() { splashScreen.setVisible(false); splashScreen = null;
splashLabel = null; }
public void createSplashScreen() {
splashLabel = new JLabel(createImageIcon("Splash.jpg", "Splash.accessible_description"));
JPanel test = new JPanel(new BorderLayout()); progressBar = new JProgressBar(0,100); test.add(splashLabel,BorderLayout.CENTER); test.add(progressBar,BorderLayout.SOUTH); splashScreen = new JWindow();
splashScreen.getContentPane().add(test); splashScreen.pack();
splashScreen.setSize(500,278);
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); Dimension frameSize = splashScreen.getSize();
if (frameSize.height > screenSize.height) { frameSize.height = screenSize.height;
40 }
if (frameSize.width > screenSize.width) { frameSize.width = screenSize.width; }
Tampilan ini dibuat menggunakan splash screen dan sebagai loadingnya menggunakan progress bar. Selain itu, tampilannya menggunakan thread sleep. Thread sleep ini yang menentukan lamanya waktu jeda ketika tampilan loading pada halaman progress bar ini berhenti.
4.3.2 Kode Activity_Halaman Pembuka Serta Halaman Menu Utama Berada Pada Tengah Layar Monitor
Berikut ini merupakan syntax yang digunakan untuk menampilkan komponen-komponen yang ada di dalam tampilan GUI serta membuat posisi tampilan GUI berada di tengah layar monitor:
splashScreen.setLocation( (screenSize.width - frameSize.width) / 2, (screenSize.height - frameSize.height) / 2);
timePro = new javax.swing.Timer(10, new ActionListener(){
public void actionPerformed (ActionEvent evt){ ///System.out.println("i =" + i );
//File aa = new File(files[i]); //if(!aa.exists()){
// timePro.stop();
// System.out.println("File " + files[i] + " tidak ada"); // System.exit(0); //} posisi++; progressBar.setValue(posisi); if(posisi>=100){ timePro.stop(); } ///i = i + 1; //if(i>1){ // i=0; //} } }); timePro.start(); }
41
/// metode atau fungsi untuk menampilkan komponen-komponen public void initComponent(){
header1 = new JLabel("Sistem Pengendali Pintu Gerbang");
header2 = new JLabel("Via Bluetoth dengan Menggunakan HandPhone"); Font headerFont = new Font("Verdana",Font.BOLD,18);
Font title = new Font("Verdana",Font.PLAIN,12); header1.setFont(headerFont);
JPanel header = new JPanel (new BorderLayout()); header.add(header1,BorderLayout.NORTH); header.add(header2,BorderLayout.SOUTH);
header.setBorder(new CompoundBorder(new TitledBorder(null,"", TitledBorder.LEFT,TitledBorder.TOP),new EmptyBorder(5,5,5,5))); JPtitle1 = new JPanel(new BorderLayout());
JPtitle1.setBorder(new CompoundBorder(new TitledBorder(null,"Nama File Input", TitledBorder.LEFT,TitledBorder.TOP),new EmptyBorder(5,5,5,5)));
dataInput = new JTextField(25); dataInput.setText("null"); dataInput.disable();
JPtitle1.add(dataInput,BorderLayout.CENTER); JPtitle2 = new JPanel(new BorderLayout());
JPtitle2.setBorder(new CompoundBorder(new TitledBorder(null,"Keterangan Gambar",
TitledBorder.LEFT,TitledBorder.TOP),new EmptyBorder(5,5,5,5))); actInput = new JTextField(25);
actInput.setText("null"); actInput.disable();
JPtitle2.add(actInput,BorderLayout.CENTER); JPtitle3 = new JPanel(new BorderLayout());
JPtitle3.setBorder(new CompoundBorder(new TitledBorder(null,"Derajat ", TitledBorder.LEFT,TitledBorder.TOP),new EmptyBorder(5,5,5,5))); out1 = new JTextField(25);
out1.setText("" +degree); out1.disable();
JPtitle3.add(out1,BorderLayout.CENTER); JPtitle4 = new JPanel(new BorderLayout());
JPtitle4.setBorder(new CompoundBorder(new TitledBorder(null,"Nilai Biner", TitledBorder.LEFT,TitledBorder.TOP),new EmptyBorder(5,5,5,5)));
out2 = new JTextField(25); out2.setText("0");
out2.disable();
JPtitle4.add(out2,BorderLayout.CENTER);
JPanel inBody = new JPanel(new GridLayout(2,2,3,3)); inBody.add(JPtitle1);
inBody.add(JPtitle2); inBody.add(JPtitle3); inBody.add(JPtitle4);
JPanel footer =new JPanel(new FlowLayout(FlowLayout.RIGHT,10,10)); exitBT = new JButton("Exit");
bukaBT = new JButton("Buka Pintu"); tutupBT = new JButton("Tutup Pintu");
42 exitBT.addActionListener(this);
bukaBT.addActionListener(this); tutupBT.addActionListener(this);
footer.setBorder(new CompoundBorder(new TitledBorder(null,"", TitledBorder.LEFT,TitledBorder.TOP),new EmptyBorder(5,5,5,5))); footer.add(bukaBT);
footer.add(tutupBT); footer.add(exitBT);
JPanel body = new JPanel(new BorderLayout());
body.setBorder(new CompoundBorder(new TitledBorder(null,"", TitledBorder.LEFT,TitledBorder.TOP),new EmptyBorder(5,5,5,5))); body.add(inBody, BorderLayout.CENTER);
mainPanel = new JPanel(new BorderLayout(5,5) ); mainPanel.add(header,BorderLayout.NORTH); mainPanel.add(body,BorderLayout.CENTER); mainPanel.add(footer,BorderLayout.SOUTH);
super.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); super.setSize(500,300);
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); Dimension frameSize = super.getSize();
if (frameSize.height > screenSize.height) { frameSize.height = screenSize.height; } if (frameSize.width > screenSize.width) { frameSize.width = screenSize.width; }
Semua komponen-komponen yang ada dalam tampilan GUI seperti gambar di atas dibuat dengan menggunakan dengan syntax tersebut.
4.3.3 Kode Activity_Menu utama Saat Pintu Gerbang Terbuka, Tertutup Maupun Terhenti Menggunakan Aplikasi Java
Syntax yang digunakan untuk ketiga tampilan tersebut : public void actionPerformed(ActionEvent e) {
if(e.getSource()==bukaBT){ AlarmOff();
dataInput.setText("null"); //data input ga berubah setingannya dibuat null actInput.setText("Buka Pintu"); disableBT(); TimerBukaPintu.start(); TimerTutupPintu.stop(); try { CheckTutupPintuClass.stop();
43 }
catch (Exception ex){ } }else if(e.getSource()==tutupBT){ AlarmOff(); dataInput.setText("null"); actInput.setText("Tutup Pintu"); disableBT(); TimerTutupPintu.start(); TimerBukaPintu.stop(); try { CheckTutupPintuClass.stop(); AutoCloseClass.stop(); }
catch (Exception ex){ } }else if(e.getSource()==pauseBT){ AlarmOff(); dataInput.setText("null"); actInput.setText("Stop Pintu"); enableBT(); TimerBukaPintu.stop(); TimerTutupPintu.stop(); try { CheckTutupPintuClass.stop(); AutoCloseClass.stop(); }
catch (Exception ex){ }
}else if(e.getSource()== SetDegreeBT){ if (OpenSetDegree == false){
OpenSetDegree = true; }else{
44 }
}else if(e.getSource()== exitBT){ System.exit(0);
}
}Penjelasan dari syntax di atas :
Ketika tombol buka ditekan maka akan menjalankan timer 1 dan memanggil kelas public Action bukaPintu(). Setelah itu, pada kelas publik Action bukapintu() akan diatur berapa derajat motor tersebut dapat bergerak dan pengaturan pemberian bit pada simulasinya. Begitu juga sebaliknya, jika tombol tutup ditekan maka akan menjalankan timer 2 dan memanggil kelas public Action tutupPintu(). Setelah itu, pada kelas publik Action tutuppintu() akan diatur berapa derajat biner sehingga pintu dapat menutup.
4.3.4 Kode Activity_Menu Utama Saat Pintu Gerbang Terbuka, Tertutup Maupun Terhenti Menggunakan Ponsel
Syntax yang digunakan untuk ketiga tampilan tersebut: private class ActionDoIt extends Thread {
String NamaFileBuka = "buka.vcf"; //buka pintu String NamaFileTutup = "tutup.vcf"; //tutup pintu String NamaFilePause = "Pause.vcf"; //Stop pintu File FileBuka = new File(NamaFileBuka); //buka pintu File FileTutup = new File(NamaFileTutup); //tutup pintu File FilePause = new File(NamaFilePause);//Stop pintu public void run(){
for(;;){ //perulangan tak terbatas
if(FileBuka.exists()){ //1# Jika FileBuka ada
System.out.println("Berkas " + NamaFileBuka + " ada"); dataInput.setText(NamaFileBuka);
actInput.setText("Buka Pintu"); disableBT();
TimerBukaPintu.start(); TimerTutupPintu.stop();
45 try {
CheckTutupPintuClass.stop(); }
catch (Exception ex){ }
}else if(FileTutup.exists()) { // isi file File tutup ini a/ tutup.vcf System.out.println("Berkas " + NamaFileBuka + " ada"); dataInput.setText(NamaFileTutup); actInput.setText("Tutup Pintu"); disableBT(); TimerTutupPintu.start(); TimerBukaPintu.stop(); FileTutup.delete();// idem try { CheckTutupPintuClass.stop(); AutoCloseClass.stop(); }
catch (Exception ex){ }
}else if(FilePause.exists()) { // isi file File stop ini a/ pause.vcf System.out.println("Berkas " + NamaFilePause + " ada"); dataInput.setText(NamaFilePause); actInput.setText("Pause Pintu"); disableBT(); TimerTutupPintu.stop(); TimerBukaPintu.stop(); FilePause.delete();// idem try { CheckTutupPintuClass.stop(); AutoCloseClass.stop(); }
catch (Exception ex){ }
46
System.out.println("Berkas tidak ada / sudah dihapus"); }
try {//
Thread.sleep(1000);// tiap satu detik dia ngecek file ada yg baru apa ga? } catch (InterruptedException e) {
System.out.println("erorr : " + e); }
} }
}//akhir dari class ActionDoIt
Selama program ini dijalankan maka akan terus mengecek file yang dikirim melalui ponsel. Ketika ponsel mengirim file berupa phone book yang berupa buka.vcf kemudian program java akan menghapus file tersebut dan menjalankan class bukaPintu() yang berisi syntax untuk membuka pintu gerbang tersebut dan Ketika program menerima file yang berisi tutup.vcf maka program java akan menghapus file tersebut dan menjalankan class tutupPintu() yang berisi syntax untuk menutup pintu gerbang tersebut sehingga dapat tertutup. Setelah ini, syntax pemberian bit pada simulasi sama dengan syntax untuk mengakses pintu gerbang tersebut menggunakan cara manual.
4.3.5 Kode Activity_Menu Utama Saat menjalankan Timer Otomatis Ketika User Lupa Menutup Pintu Gerbang
Selain itu, dalam program aplikasi yang telah dibuat diberikan juga waktu delay selama 30 detik yang hanya berjalan ketika pintu gerbang dalam keadaan terbuka. Hal ini berlaku baik pengaksean melalui ponsel maupun pengaksesan secara manual.
Syntax yang digunakan :
public class lihatkondisi extends Thread {
javax.swing.Timer timerBuka; //timerBuka : yang memberikan waktu tunda proses dari buka pintu
javax.swing.Timer timerCheck,timerCheckJalan; //timerTutup : yang memberikan waktu tunda proses dari tutup pintu
47
public void run(){
timerCheck = new javax.swing.Timer(1000,checkPintu()); timerCheckJalan = new javax.swing.Timer(20,checkPintuJalan());
timerCheck.start(); }
public Action checkPintu() { //pelaksanaan waktu tunda selama 30 detik return new AbstractAction("text load action") {
public void actionPerformed (ActionEvent e) { if(reX!=waktuLama) {
reX = reX + 1;
System.out.println("Pengecekan detik ke-" + reX); }else { if(kondisiPintu==true){ disableBT(); timerCheckJalan.start(); kondisiPintu = false; }else{ enableBT(); kondisiPintu = true; timerCheck.stop(); } } } }; }
4.4 PENGUJIAN DENGAN BLACKBOX
Pengujian blackbox atau blackbox testing adalah salah satu metode pengujian perangkat lunak yang berfokus pada sisi fungsionalitas, khususnya pada input dan output aplikasi apakah sudah sesuai dengan apa yang diharapkan atau belum. Tahap pengujian atau testing merupakan salah satu tahap yang harus ada dalam sebuah siklus pengembangan perangkat lunak selain tahap perancangan atau desain.
48
4.5 HASIL PENGUJIAN BLACKBOX PADA APLIKASI
No .
Skenario
Pengujian Kasus Uji
Hasil yang
Diharapkan Hasil Pengujian Kesimpulan
1 Menampilkan Halaman Pembuka Klik untuk Membuka Aplikasi Java Menampilkan Halaman Pembuka Halaman pembuka progress bar berhasil ditampilkan Sesuai harapan 2 Menjalankan menu utama Tampilkan menu utama Menampilkan menu utama Halaman menu utama berhasil ditampilkan Sesuai harapan 3 Menampilkan Buka Pintu Gerbang Klik tombol Buka pintu Menampilkan gerakan pintu gerbang ke kanan Halaman menu Buka pintu berhasil ditampilkan Sesuai harapan 4 Menampilkan Tutup Pintu Gerbang Klik tombol Tutup Pintu Menampilkan gerakan pintu gerbang ke kiri Halaman sub menu Tutup pintu berhasil
ditampilkan
Sesuai harapan
5 Menampilkan
Tombol Stop Klik Stop
Menampilkan kondisi pintu yang berhenti bergerak Halaman sub menu Stop berhasil ditampilkan Sesuai harapan 6 Menampilkan Tombol Seet Degree Klik tombol Seet degree Menampilkan pergerakan bukaan pintu sesuai dengan keinginan user Halaman menu seet degree berhasil ditampilkan Sesuai harapan 7 Menampikan Tombol exit Klik tombol exit Keluar dari program aplikasi java Keluar dari program aplikasi java Sesuai harapan
Tabel 4.5.1 Tabel Pengujian Blackbox
4.5.2 Analisis Hasil Pengujian Aplikasi Java
Setelah melakukan pengujian terhadap aplikasi menggunakan metode pengujian black box yang sudah di lakukan, dari hasil pengujian aplikasi semua fungsi dan tombol dan fungsi sudah sesuai dengan apa yang diharapkan.
49 No
. Hasil Tampilan yang Diharapkan Kesimpulan
1 Sesuai Harapan 2 Sesuai Harapan
50 3 Sesuai Harapan 4 Sesuai Harapan
51 5 Sesuai Harapan 6 Sesuai Harapan
52 7 Sesuai Harapan 8 Sesuai Harapan
53 9
Sesuai Harapan
Table 4.5.2 Analisa Hasil Pengujian
4.6 Pengujian Rangkaian Driver Motor Stepper
Rangkaian driver merupakan rangkaian yang dapat menggerakkan beban yang berupa motor stepper. Pada rangkaian ini yang akan diuji adalah besarnya tegangan pada transistor yang berfungsi sebagai saklar dan beroperasi dalam dua keadaan yaitu kondisi saturasi (saklar tertutup) dan kondisi cut off (saklar terbuka). Cara pengukuran dapat di lihat pada gambar 4.6.
Gambar 4.6 Cara Pengukuran Tegangan Pada Driver Motor Stepper Volt meter
54
Untuk pengujian motor stepper, yang akan di ukur di sini adalah tegangan keluaran yang dihasilkan oleh motor stepper itu sendiri yang mempengaruhi kekuatan kumparan pada motor stepper setelah di hubungkan dengan seluruh rangkaian. Dan kecepatan pergerakan pada motor stepper setelah menerima pulsa data berupa tegangan dari driver motor stepper, sesuai dengan waktu tunda pemberian pulsa data.
4.7 Analisis Hasil Pengujian Prototype
Pengujian program aplikasi simulasi pengendali pintu gerbang melalui Bluetooth pada ponsel dilakukan dengan tujuan untuk mengetahui apakah setiap menu yang ada pada programnya dan alat yang telah dibuat dapat berfungsi dengan baik atau tidak. Modul- modul yang diuji adalah modul pengiriman file, modul kontrol program bluetooth dan modul driver motor stepper.
Walaupun ketiga modul ini masing-masing berdiri sendiri, namun pengujian dari ketiga modul ini harus dilakukan secara bersamaan, karena meskipun ketiga modul ini berdiri sendiri tetapi semuanya saling berhubungan. Jadi pengujian tidak dapat dilakukan permodul, karena pengujian satu modul juga akan mempengaruhi modul lainnya. Pengujian dilakukan satu persatu dalam semua kondisi yang mungkin terjadi.
Berdasarkan pengujian yang dilakukan dapat diketahui bahwa pintu gerbang tersebut bergerak bersamaan dengan gerakan motor stepper. Aplikasi java yang dibuat dapat menggerakkan motor stepper sebanyak 4 kali putaran sehingga pintu gerbang tersebut juga ikut bergerak sejauh 22,4 Cm. Dapat diketahui bahwa :
Satu step pergerakan motor stepper = 1,8
Berdasarkan rumus toeri keliling lingkaran gear pada motor stepper :
Keliling lingkaran = 2 x Phi x jari-jari Diketahui r = 0,9 Cm Keliling lingkaran = 2 x 3,14 x 0,9 = 5,6 Cm
Untuk menutup pintu gerbang membutuhkan jarak = 22,4 Cm. Oleh karena itu, untuk jarak tersebut dibutuhkan jumlah putaran pada gear motor stepper :
Jarak / keliling lingkaran = 22,4 / 5.6 = 4 putaran
Berdasarekan teori di atas, untuk membuka atau menutup pintu gerbang dibutuhkan 4 kali putaran dari gear motor stepper, maka step yang dibutuhkan oleh motor stepper ;
Diketahui 1 step = 1,8 1putaran = 360 1 putaran = 360 / 1,8 = 200 step Maka jumlah step 4 putaran :
55 4 putaran = 4 x 200 step = 800 step
Jumlah derajat untuk melakukan 4 putaran sebesar : = jumlah step 4 putaran x 1,8
= 800 step x 1,8 = 1440
Untuk membuka pintu sejauh 5,6 Cm maka dibutuhkan bukaan, sebesar : 200 step x 100 % = 25 %
800 step
Untuk membuka pintu sejauh 11,2 Cm maka dibutuhkan bukaan, sebesar : 400 step x 100 % = 50 %
800 step
Untuk membuka pintu sejauh 16,8 Cm maka dibutuhkan bukaan, sebesar : 600 step x 100 % = 75 %
800 step
Untuk membuka pintu sejauh 22,4 Cm maka dibutuhkan bukaan, sebesar : 800 step x 100 % = 100 %