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.
Gambar 4.2.1 Implementasi Halaman Pembuka 34
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
2) Tampilan Halaman Menu Tutup Pintu
35
3) Tampilan Halaman Menu Stop
4) Tampilan Halaman Buka Pintu Melalui Ponsel
36
5) Tampilan Halaman Tutup Pintu melalui Ponsel
6) Tampilan Halaman Stop Pintu Melalui Ponsel
37
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) { }
38
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; 39
} 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(); } 40
/// 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"); 41
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(); 42
} 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{ OpenSetDegree = false; 43
} }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(); FileBuka.delete();/ ketika pintu terbuka lgsung delete file 44
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){ } }else { 45
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 int waktuLama =30,reX=0;//mengatur detik untuk menutup pintu otomatis 46
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. 47
4.5
HASIL PENGUJIAN BLACKBOX PADA APLIKASI
No Skenario Pengujian .
Kasus Uji
Hasil yang Diharapkan
Hasil Pengujian
1
Menampilkan Halaman Pembuka
Klik untuk Membuka Aplikasi Java
Menampilkan Halaman Pembuka
Halaman pembuka progress Sesuai harapan bar berhasil ditampilkan
2
Menjalankan menu utama
Tampilkan menu utama
Menampilkan menu utama
Halaman menu utama berhasil ditampilkan
Klik tombol Buka pintu
Menampilkan gerakan pintu gerbang ke kanan
Klik tombol Tutup Pintu
Menampilkan gerakan pintu gerbang ke kiri
3
Menampilkan Buka Pintu Gerbang
4
Menampilkan Tutup Pintu Gerbang
5
Menampilkan Tombol Stop
Klik Stop
6
Menampilkan Tombol Seet Degree
Klik tombol Seet degree
7
Menampikan Tombol exit
Klik tombol exit
Halaman menu Buka pintu berhasil ditampilkan
Kesimpulan
Sesuai harapan
Sesuai harapan
Halaman sub menu Tutup pintu berhasil ditampilkan
Sesuai harapan
Menampilkan kondisi pintu yang berhenti bergerak Menampilkan pergerakan bukaan pintu sesuai dengan keinginan user
Halaman sub menu Stop berhasil ditampilkan
Sesuai harapan
Halaman menu seet degree berhasil ditampilkan
Sesuai harapan
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.
48
No .
Hasil Tampilan yang Diharapkan
Kesimpulan
1
Sesuai Harapan
2
Sesuai Harapan
49
3
Sesuai Harapan
4
Sesuai Harapan
50
5
Sesuai Harapan
6
Sesuai Harapan
51
7
Sesuai Harapan
8
Sesuai Harapan
52
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.
Volt meter
Gambar 4.6 Cara Pengukuran Tegangan Pada Driver Motor Stepper 53
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 putaran
= 1,8
1putaran
= 360 / 1,8
= 360 = 200 step
Maka jumlah step 4 putaran : 54
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 % 800 step
55