SKRIPSI
ARDI SAHPUTRA
141401077
SKRIPSI
Diajukan untuk melengkapi tugas dan memenuhi syarat memperoleh ijazah Sarjana Ilmu Komputer
ARDI SAHPUTRA
141401077
PERSETUJUAN
Kategori : SKRIPSI
Komisi Pembimbing:
Pembimbing 2 Pembimbing 1
Ketua,
PERNYATAAN
SKRIPSI
Saya mengakui bahwa skripsi ini adalah hasil karya saya sendiri, kecuali beberapa
kutipan dan ringkasan yang masing-masing telah disebutkan sumbernya.
Ardi Sahputra
141401077
PENGHARGAAN
1. Bapak Prof. Dr. Runtung Sitepu, SH., M.Hum sebagai Rektor Universitas
Sumatera Utara.
2. Bapak Prof. Dr. Opim Salim Sitompul, M.Sc sebagai Dekan Fakultas Ilmu
Komputer dan Teknologi Informasi Universitas Sumatera Utara.
3. Bapak Dr. Poltak Sihombing, M.Kom sebagai Ketua Program Studi S1 Ilmu
Komputer Fakultas Ilmu Komputer dan Teknologi Informasi Universitas
Sumatera Utara.
4. Bapak Jos Timanta Tarigan, S.Kom., M.Sc sebagai Dosen Pembimbing I yang
telah membimbing dan memberikan dukungan kepada penulis selama
mengerjakan skripsi ini.
5. Ibu Elviwani, S.Kom, M.Kom sebagai Dosen Pembimbing II yang telah
membimbing dan memberikan dukungan kepada penulis selama mengerjakan
skripsi ini.
6. Seluruh Dosen serta staf Pegawai di Program Studi S1 Ilmu Komputer Fakultas
Ilmu Komputer dan Teknologi Informasi Universitas Sumatera Utara.
7. Kedua orang tua penulis Ibunda Susi Sapartinah dan Ayahanda Zainal Arifin
Sinaga yang telah memberikan dukungan semangat dan motivasi sehingga penulis
dapat menyelesaikan skripsi ini.
8. Teman-teman kom B yang selama ini banyak memberikan pelajaran hidup dan
bantuan kepada penulis, terkhususnya Sasmita Azzahra, Maya Masitha, Novianti
Artika Sari.
9. Kepada Cindy Pakpahan, Adib Rizkan, Farhan Rangkuti, Rizky Hakim Lubis,
Kevin Rinanda, Dianda Rizki, Muhammad Rinaldi dan teman teman stambuk
2014 yang telah memberikan banyak semangat selama mengerjakan skripsi.
10. Semua pihak yang terlibat langsung ataupun tidak langsung yang tidak dapat
penulis ucapkan satu-persatu yang telah membantu penyelesaian skripsi ini.
Semoga Allah SWT memberikan berkah, kesehatan, dan keselamatan bagi semua
pihak yang telah mendukung penulis untuk menyelesaikan skripsi ini. Semoga
penelitian ini bermanfaat kepada seluruh orang terutama kepada penulis sendiri.
Ardi Sahputra
ABSTRAK
ABSTRACT
DAFTAR ISI
Halaman
PERSETUJUAN ii
PERNYATAAN iii
PENGHARGAAN iv
ABSTRAK vi
ABSTRACK vii
DAFTAR ISI viii
DAFTAR TABEL xi
DAFTAR GAMBAR xii
DAFTAR LAMPIRAN xiv
BAB 1. PENDAHULUAN
1.1. Latar Belakang 1
1.1 Rumusan Masalah 2
1.2 Batasan Masalah 3
1.3 Tujuan Penelitian 3
1.4 Manfaat Penelitian 3
1.5 Metodologi Penelitian 4
1.6 Sistematika Penulisan 5
Daftar Pustaka 49
DAFTAR TABEL
Halaman
Tabel 4.1 Hasil Uji Lubang 1 45
Tabel 4.2 Hasil Uji Lubang 2 45
Tabel 4.3 Hasil Uji Lubang 3 45
Tabel 4.4 Hasil Uji Jalan Datar 46
DAFTAR GAMBAR
Halaman
Gambar 2.1 Sumbu XYZ Accelerometer pada Telepon Seluler 6
Gambar 2.2 Ilustrasi Sensor Gyroscope pada Telepon Seluler 7
Gambar 2.3 Cara Kerja API (Application Programming Interface) 9
Gambar 3.1 Diagram Umum Sitem 14
Gambar 3.2 Use Case Diagram Penelitian 15
Gambar 3.3 Activity Diagram 16
Gambar 3.4 Sequence Diagram Sistem 17
Gambar 3.5 Flowchart Sistem 18
Gambar 3.6 Rancangan Interface Halaman Splash 20
Gambar 3.7 Rancangan Interface Halaman Utama 21
Gambar 3.8 Rancangan Interface Halaman Utama Lanjutan 22
Gambar 4.1 Halaman Splashscreen 23
Gambar 4.2 Halaman Home 24
Gambar 4.3 Grafik Accelerometer Getaran Mobil 26
Gambar 4.4 Grafik Gyroscope Getaran Mobil 26
Gambar 4.5 Pengujian Lubang 1 27
Gambar 4.6 Gambar Lubang 1 28
Gambar 4.7 Grafik Accelerometer Lubang 1 28
Gambar 4.8 Grafik Gyroscope Lubang 1 29
Gambar 4.9 Grafik Accelerometer Lubang 1 (40 Km/Jam) 30
Gambar 4.10 Grafik Gyroscope Lubang 1 (40 Km/Jam) 30
Gambar 4.11 Pengujian Lubang 2 31
Gambar 4.12 Gambar Lubang 2 32
Gambar 4.13 Grafik Accelerometer Lubang 2 32
Gambar 4.14 Grafik Gyroscope Lubang 2 33
DAFTAR LAMPIRAN
Halaman
Lampiran 1 Listing Program A-1
Lampiran 2 Curriculum Vitae B-1
PENDAHULUAN
teknik ini adalah pengambilan gambar dilakukan secara manual, sehingga penilaian
kondisi jalan akan memerlukan waktu yang lama, meskipun hasil yang dicapai
cukup baik. Sehingga informasi kerusakan tersebut akan kurang bermanfaat bagi
pengendara secara cepat.
Sistem pemantauan yang dilakukan di Amerika Serikat, melalui sebuah
sistem yang dikembangkan bernama Pothole Patrol. Pothole patrol merupakan
sistem pamantauan jalan berlubang secara otomatis memanfaatkan metode getaran
yang didapat dari akselerometer sebagai sensor getaran. Tujuan dari sistem ini
untuk menurunkan tingkat kecelakaan dan klaim asuransi akibat kerusakan jalan
yang tinggi di Amerika. Sistem diuji di area kota Boston dengan jarak mencapai ±
1000 KM. Sistem ini menghasilkan akurasi 92% dalam mendeteksi jalan rusak.
Sistem ini juga dilengkapi dengan data lokasi yang bersumber dari sensor GPS,
sehingga setiap lokasi yang berhasil dideteksi oleh sistem akan diketahui titik
lokasinya secara jelas. Namun sistem ini memanfaatkan dua alat sensor untuk
menggumpulkan data, yaitu akselerometer sebagai sensor untuk data getaran dan
GPS Tracker yang membutuhkan biaya yang mahal dan kurang praktis.
Selain itu sistem pemantauan jalan secara otomatis juga dilakukan di Sri
Lanka yang menggunakan akselerometer sebagai alat ukur getaran dan GPS
sebagai alat untuk mendapatkan data lokasi. Sistem ini dibangun untuk mengatasi
permasalahan pelaporan jalan berlubang. Namun kekurangan pada sistem ini adalah
lokasi kerusakan jalan yang sulit dikenali, karena alat yang digunakan untuk
mengumpulkan data getaran yang mengindikasikan jalan rusak dan data lokasi
yang berbeda, sehingga terdapat jarak penggambilan data yang tidak sama, serta
kekurangan juga terdapat pada algoritma yang digunakan untuk mendeteksi jalan
rusak.
Sering kali kondisi jalan yang rusak membahayakan pengguna jalan sehingga
diperlukan sebuah aplikasi menggunakan sensor Accelerometer dan Gyroscope
yang dapat mencatat dan menandai jalan yang kurang baik secara cepat dan akurat.
Tujuan Penelitian ini adalah untuk menganalisa, mencatat dan menandai lokasi
jalan dengan kondisi jalan yang kurang baik ke dalam Google Maps dengan
menggunakan sensor Accelerometer, Gyroscope dan GPS pada telepon seluler.
Bab ini berisi kesimpulan dan uraian setiap bab sebelumnya dan
saran berdasarkan hasil pengujian yang diharapkan dapat
bermanfaat untuk pengembangan sistem selanjutnya.
LANDASAN TEORI
Google Maps adalah layanan pemetaan web yang dikembangkan oleh Google.
Layanan ini memberikan citra satelit, peta jalan, panorama 360 derajat, kondisi lalu
lintas, dan perencanaan rute untuk bepergian dengan berjalan kaki, mobil, sepeda, atau
angkutan umum. Google Maps dimulai sebagai program desktop C++, dirancang oleh
Lars dan Jens Eilstrup Rasmussen pada Where 2 Technologies. Pada Oktober 2004,
perusahaan ini diakuisisi oleh Google, yang diubah menjadi sebuah aplikasi web.
Setelah akuisisi tambahan dari perusahaan visualisasi data geospasial dan analisis lalu
lintas, Google Maps diluncurkan pada Februari 2005. Layanan ini menggunakan
Javascript, XML, dan AJAX.
Google Maps menyediakan layanan berupa pemetaan jalan, rute, dan navigasi
untuk berbagai rute perjalanan sehingga dapat digunakan untuk mempercepat
pencarian sebuah lokasi dalam waktu yang singkat, dan juga menunjukkan jalan mana
saja yang harus ditempuh untuk mencapai tujuan. Teknologi Google Maps
menggunakan citra satelit untuk melakukan pemetaan objek yang ada di permukaan
bumi secara realtime , dalam hal ini peta yang ada pada Google Maps di update dalam
kurun waktu tertentu.
Google Maps dapat ditambahkan dalam web, blog maupun aplikasi mobile
dengan menggunakan Google Maps API . Dalam implementasinya Google Maps juga
dapat disesuaikan dengan kebutuhan aplikasi yang akan dibuat sehingga aplikasi dapat
menggunakan fitur fitur yang tersedia didalam Google Maps.
API adalah singkatan dari Application Programming Interface, dan
memungkinkan developer untuk mengintegrasikan dua bagian dari aplikasi atau
dengan aplikasi yang berbeda secara bersamaan. API terdiri dari berbagai elemen
seperti function, protocols, dan tools lainnya yang memungkinkan developers untuk
membuat aplikasi.
Tujuan penggunaan API adalah untuk mempercepat proses development
dengan menyediakan function secara terpisah sehingga developer tidak perlu membuat
fitur yang serupa.
Google Maps API adalah library javascript yang dibuat oleh Google Maps
untuk membantu para develepor menggunakan fungsi yang terdapat didalam Google
Maps sehingga mempermudah developer dalam membangun aplikasinya.
Google maps API terbagi menjadi 4 Platform yaitu Android, iOS, Web dan
Webservice. Untuk Webservice sendiri merupakan layanan yang sifatnya Platform
netral karena output dari webservice adalah JSON. Artinya kita bisa membangun
aplikasi mobile, web,desktop bahkan embeded system (Seperti GPS tracker di mobil)
dengan Google Maps API Webservice.
Jika semua data telah difilter maka akan didapatkan nilai yang menunjukan
apakah jalan tersebut berlubang atau tidak. Jika nilai terdeteksi sebagai jalan yang
berlubang maka sistem akan otomatis mencatat dan menandai koordinat jalan tersebut
kedalam Google Maps menggunakan GPS dan Google Maps API.
ANALISIS PERANCANGAN
Langkah pertama yang harus dilakukan dalam membuat suatu sitem yaitu
menganalisis sistem yang akan dibuat. Analisis sitem diperlukan untuk mengetahui
berbagai hambatan atau masalah yang akan terjadi pada sistem sehingga dapat
dilakukan perbaikan atau penanggulangan. Ada beberapa tahap dalam melakukan
analisis sitem yaitu melakukan identifikasi terhadap masalah dan menganalisa
kebutuhan yang akan dibuat dalam sistem.
Pada tahap analisis sistem akan dilakukan analisis masalah terlebih dahulu. Pada tahap
analisis masalah akan dilakukan identifikasi penyebab terhadap masalah yang terjadi.
Saat ini pembangunan infrastruktur jalan di Indonesia sedang berkembang pesat.
Faktor keamanan dan kenyamanan dalam berkendara di jalan merupakan salah satu
poin penting dalam pembangunan infrastruktur jalan. Namun kurangnya pengawasan
kondisi jalan menimbulkan suatu masalah baru yaitu kondisi jalan yang kurang baik
dan kurang nyaman dilalui oleh masyarakat. Salah satu cara untuk meningkatkan
pengawasan kondisi jalan adalah dengan menggunakan alat yang cepat, efektif dan
terintegrasi langsung sehingga akan lebih mudah menangani permasalahan jalan yang
kurang baik tersebut. Masalah dalam sistem ini adalah bagaimana memanfaatkan
sensor Accelerometer dan Gyroscope yang ada pada telepon seluler sebagai sarana
untuk mendeteksi kondisi jalan.
Setelah dilakukan analisis terhadap masalah maka akan dilakukan analisis kebutuhan .
Analisis kebutuhan dibagi menjadi dua bagian, yaitu kebutuhan fungsional dan
kebutuhan nonfungsional. Kebutuhan fungsional mendeskripsikan aktivitas yang
disediakan suatu sistem. Sedangkan kebutuhan nonfungsional mendeskripsikan fitur,
karakteristik dan batasan lainnya.
Sistem yang akan dibangun harus memiliki beberapa fungsi fungsi wajib untuk
mencapai tujuan sistem. Dengan dibuatnya kebutuhan fungsional sistem, akan terlihat
hal-hal yang harus dapat dilakukan oleh sistem yang akan dibangun. Kebutuhan
fungsional yang dapat dilakukan oleh sistem yaitu :
- Sistem dapat merekam nilai Accelerometer dan Gyroscope pada telepon
seluler.
- Sistem dapat merekam nilai latitude dan longitude GPS pada telepon
seluler.
- Sistem dapat menandai lokasi pada Google Maps.
- Sistem dapat menganalisa kondisi jalan berdasarkan nilai Accelerometer dan
Gyroscope yang sudah terekam.
Diagram umum sistem pada penelitian ini dijelaskan pada gambar 3.1 berikut:
Adapun penjelasan dari gambar 3.1 bahwa pengguna mengendarai mobil dan
meletakkan smartphone didalam mobil, kemudian mobil dijalankan dan pengguna
menekan tombol start yang terdapat didalam aplikasi smartphone . Seiring berjalannya
mobil data akan tercatat di smartphone dan disimpan kedalam database.
Pemodelan sistem dilakukan bertujuan untuk menentukan fungsi dan tujuan dari
sistem yang akan dibangun. . Pemodelan sistem yang dilakukan dengan melakukan
pembuatan Use Case Diagram, Activity Diagram dan Sequence Diagram. Pemodelan
sistem dapat memudahkan dalam menganalisa kebutuhan user dan memperoleh
gambaran umum kerja dari sistem yang akan dibangun.
Use case diagram dibuat bertujuan untuk mengetahui hal apa saja yang dapat
dilakukan oleh pengguna serta gambaran kebutuhan sistem secara fungsional sehingga
dapat memudahkan pengguna untuk mengetahui kegunaan dari sistem yang akan
dibangun. Use case diagram pada penelitian ini dapat dilihat pada gambar 3.2
Pada gambar 3.2 dapat dijelaskan bahwa pengguna (user) dapar melakukan proses
pengecekan jalan dan menampilkan hasil dengan melakukan pembacaan data dan perangkat.
Pembacaan data dan perangkat menggunakan sistem gyroscope, accelerometer dan GPS. Data
GPS diambil melalui Google Maps API dan menampilkan data untuk user.
Activity diagram dibuat bertujuan untuk menggambarkan alur ataupun proses dari
aktifitas antara user dan sistem secara sistematis. Pada sistem ini terdapat sebuah
activity yang dapat dilihat pada gambar 3.3 :
Pada gambar 3.3 menjelaskan activity digram yang menjelaskan aktivitas alur
antara pengguna dengan sistem. Dapat dilihat pada gambar 3.3 hal pertama yang
dilakukan pengguna setelah menekan aplikasi akan muncul halaman utama dimana
pengguna harus mengetikkan nama file yang akan dibuat lalu tekan tombol start.
Setelah menekan tombol start sistem akan melakukan reading accelerometer dan
gyroscope serta koordinat gps. Jika Z accelerometer lebih besar dari 11,5 maka akan
dilakukan mark koordinat gps atau menandakan adanya jalan berlubang jika tidak
maka akan dilakukan read accelorometer kembali. Jika ingin berhenti maka tekan
button stop jika tidak maka sitem akan melakukan read accelerometer kembali.
Sequence diagram digunakan untuk menggambarkan rangkaian antara objek yang ada
serta interaksi antara satu objek dengan objek lainnya. Berikut Sequence Diagram dari
sistem yang akan dibangun.
Pada gambar 3.4 menjelaskan sequence diagram sistem dimana pada sistem
terdapat 4 aktivitas yang akan dilakukan yaitu meletakkan perangkat, inputan,
merekam nilai dan output. Pada aktivitas pertam actor meletakkan perangkat didalam
mobil dan menjalankan mobil. Kemudian actor melakukan input nama file . Setelah
selesai input nama file lalu actor menekan tombol start dan sistem mulai merekam
nilai. Setelah selesai melakukan rekam nilai maka akan didapatkan hasil jalan
berlubang dan hasilnya dapat dilihat dengan adanya tanda yang terdapat di gps.
3.1.5 Flowchart
Flowchart adalah gambaran yang memiliki bentuk diagram alir yang saling
berhubungan satu dengan yang lain atau proses-proses yang saling terkait yang
menyatakan arah alur program tersebut. Digram alur ini memberikan solusi untuk
membantu menyelesaikan dan memberikan solusi pada suatu permasalahan. Flowchart
yang dibuat pada penelitian ini yaitu: flowchart sistem.
Keterangan gambar :
1. Textview untuk menampilkan judul skripsi.
2. Textview untuk menampilkan kata “Skripsi”.
3. Textview untuk menampilkan identitas penulis.
4. Imageview untuk menampilkan logo USU.
5. Textview untuk menampilkan nama program studi.
6. Textview untuk menampilkan nama fakultas.
7. Textview untuk menampilkan nama universitas.
8. Textview untuk menampilkan kota universitas.
9. Textview untuk menampilkan tahun.
Keterangan gambar :
- EditText untuk menginput nama file yang ingin disimpan.
- Button untuk menjalankan perekaman aplikasi.
- Textview untuk menampilkan Latitude.
- Textview untuk menampilkan Longitude.
- Google Maps API untuk menampilkan Google Maps.
- Textview untuk menampilkan kecepatan.
- Textview untuk menampilkan nilai x Accelerometer.
- Textview untuk menampilkan nilai y Accelerometer.
- Textview untuk menampilkan nilai z Accelerometer.
- Fragment Graphic Accelerometer untuk menampilkan grafik Accelerometer.
- Textview untuk menampilkan kata “Acclerometer”.
Keterangan gambar :
1. Textview untuk menampilkan nilai x Gyroscope.
2. Textview untuk menampilkan nilai y Gyroscope.
3. Textview untuk menampilkan nilai z Gyroscope.
4. Fragment Graphic Gyroscope untuk menampilkan grafik Gyroscope.
5. Textview untuk menampilkan kata “Gyroscope”.
Pada penelitian kali ini implementasi sitem dilakukan dengan menggunakan bahasa
java dengan software Android Studio. Implementasi sitem terbagi menjadi 3 halaman
yaitu : halaman splashscreen, halaman utama dan halaman bantuan.
Pada halaman utama terdapat kolom isian yang digunakan untuk membuat file baru
untuk mencatat hasil kualitas jalan yang akan disimpan kedalam database. Disebelah
kolom isian terdapat tombol start yang digunakan untuk memulai mencatat kualitas
jalan. Pada bagian bawah tombol start dan kolom isian terdapat halaman google maps
yang akan menunjukan alur jalan yang dilalui pengguna. Pada bagian bawah setelah
tampilan gmaps terdapat tampilan data Accelorometer dan gyroscope. Setelah tombol
start ditekan maka tombol akan berubah tulisan menjadi “Stop” Berikut halaman
Home yang ditampilkan pada gambar 4.2. :
Pengujian sistem dilakukan untuk menguji sistem dapat berjalan dengan baik dan hasil
yang didapatkan setelah proses melihat data jalan berlubang atau tidak. Pengujian
dilakukan di beberapa titik jalan. Kriteria pengujian sebagai berikut :
1. Jalan yang dilalui adalah jalan Karya Wisata – AH Nasution – Jamin Ginting-
Dr Mansyur – Jalan Universitas .
2. Perekaman data menggunakan kendaraan roda 4 Mitsubishi Mirage, dengan
kekuatan mesin mobil 1193, tenaga mobil 76 Horse Power, suspensi depan
mobil MacPherson strut suspension with Coil Spring dan suspensi belakang
mobil Torsion beam suspension with Coil Spring serta ukuran ban mobil
175/55r15.
3. Telepon seluler diletakan pada tempat yang datar.
4. Menggunakan Google Maps API untuk Android.
5. Pengaplikasian menggunakan bahasa pemograman java .
6. Pengaplikasian menggunakan software android studio 3.1.2.
7. Pengaplikasian menggunakan OS Android 7.0 dengan RAM 3 Gb.
8. Parameter untuk menentukan jalan berlubang adalah sumbu Z Accelerometer
melebihi nilai 11.5.
Pada bagian ini pengujian dilakukan dengan melakukan perekaman data pada saat
mobil dihidupkan dan dalam kondisi tidak berjalan atau diam. Hasil Rekaman terlihat
pada gambar 4.3, gambar 4.4 dan gambar 4.5.
12
10
8
ACC X
6
ACC Y
4
ACC Z
2
-2
Terlihat pada Gambar 4.3 grafik Accelerometer getaran mobil menunjukan pola grafik
getaran yang terlihat seperti bergelombang dan konsisten karena kondisi mobil yang
tidak bergerak.
0.05
0.04
0.03
0.02
GYRO X
0.01
GYRO Y
0
GYRO Z
-0.01
-0.02
-0.03
-0.04
Terlihat pada gambar 4.4. Grafik getaran gyroscope pada pengujian getaran mobil.
Dikarenakan mobil tidak bergerak, nilai getaran yang dihasilkan tidak tinggi dan
cenderung konsisten pola getarannya.
Pada bagian pengujian lubang akan dibagi pada 3 bentuk lubang yang berbeda,
masing-masing bentuk lubang akan menampilkan grafik yang bebeda pula. Pada tahap
Pengujian lubang akan dilakukan perekaman data dengan kecepatan 20 km/jam dan 40
km/jam.
Pada halaman utama user melakukan input nama file yang akan disimpan datanya.
Kemudian klik start dibagian sebelah kanan. Lokasi akan berjalan ketika mobil
bejalan. Ketika ada lubang maka program akan melakukan mark pada lokasi seperti
pada gambar 4.5. :
Terlihat pada gambar 4.5. lokasi pengujian lubang 1 di tandai dengan tanda merah
pada google maps.
Terlihat pada gambar 4.6 adanya lubang di lokasi pada gambar 4.6. Maka pada layar
utama aplikasi akan menunjukan grafik accelerometer dan gyroscope akan begerak
ketika mobil melintasi jalan berlubang. Pergerakan grafik akan ditunjukanpada
gambar 4.7 dan gambar 4.8.
20
15
10
SUMBU X
5
SUMBU Y
0 SUMBU Z
-5
-10
Dapat dilihat pada gambar 4.7. nilai Accelerometer pada sumbu Z melebihi 11,5
dengan nilai tertinggi melebihi angka 15 yang menandakan adanya getaran yang tinggi
ketika kendaraan melewati lubang 1.
0.6
0.4
0.2
SUMBU X
0
SUMBU Y
-0.2
SUMBU Z
-0.4
-0.6
-0.8
Dapat dilihat pada grafik gyroscope pada gambar 4.10 menunjukkan adanya
pergerakan pada sumbu X,Y,Z yang menandakan adanya getaran yang terjadi pada
kendaraan dikarenakan adanya lubang yang dilalui.
Pada pengujian lubang 1 dengan kecepatan 40 km/jam dilakukan ditempat dan lubang
yang sama dengan pengujian lubang 1 dengan kecepatan 20 km/jam.Pengujian ini
dilakukan untuk mengetahui apakah ada pengaruh kecepatan kendaraan pada saat
perekaman.
35
30
25
20
15 SUMBU X
10 SUMBU Y
5 SUMBU Z
0
-5
-10
-15
Dapat dilihat pada gambar 4.9. nilai Accelerometer pada sumbu Z melebihi 11,5
dengan nilai tertinggi melebihi angka 30 yang menandakan adanya getaran yang tinggi
ketika kendaraan melewati lubang 1. Nilai ini sangat jauh dibandingk an dengan
perekaman pada saat kecepatan 20Km/Jam yang nilai tertingginya adalah 15.
1.5
1
SUMBU X
0.5
SUMBU Y
0
SUMBU Z
-0.5
-1
-1.5
Dapat dilihat pada grafik gyroscope pada gambar 4.10. menunujukan adanya
pergerakan grafik yang tinggi dikarenakan faktor benturan terhadap lubang. Grafik ini
sangat berbeda dengan grafik lubang 1 dengan kecepatan 20 Km/Jam, ini dikarenakan
pengaruh kecepatan kendaraan pada saat berbenturan dengan lubang.
Pada pengujian lubang 2 terdapat perbedaan bentuk lubang yang akan diuji. Cara
melakukan pengujian sama dengan cara pengujian pada lubang 1. Pada halaman
utama user melakukan input nama file yang akan disimpan datanya. Kemudian klik
start dibagian sebelah kanan. Lokasi akan berjalan ketika mobil bejalan. Ketika ada
lubang maka program akan melakukan mark pada lokasi seperti pada gambar 4.11. :
Terlihat pada gambar 4.11. lokasi perekaman lubang 2 yang ditandai dengan warna
lingkaran biru.
Terlihat pada gambar 4.12. adanya lubang yang terdapat pada lokasi gambar 4.11.
Maka pada layar utama aplikasi akan menunjukan grafik accelerometer dan gyroscope
akan begerak ketika mobil melintasi jalan berlubang. Pergerakan grafik akan
ditunjukan pada gambar 4.13 dan gambar 4.14.
20
15
10
SUMBU X
5 SUMBU Y
SUMBU Z
0
-5
-10
Terlihat pada Gambar 4.13. sumbu Z yang melewati nilai batas yaitu 11,5 dan hampir
menyentuh angka 15.
0.4
0.3
0.2
0.1
0 SUMBU X
-0.1 SUMBU Y
-0.2 SUMBU Z
-0.3
-0.4
-0.5
-0.6
Terlihat pada gambar 4.14. pergerakan sumbu X,Y,Z yang dinamis dikarenakan
kondisi jalan yang memiliki banyak lubang.
Pada pengujian lubang 1 dengan kecepatan 40 km/jam dilakukan ditempat dan lubang
yang sama dengan pengujian lubang 1 dengan kecepatan 20 km/jam.
20
15
10
SUMBU X
5 SUMBU Y
SUMBU Z
0
-5
-10
Terlihat pada gambar 4.15. adanya pergerakan sumbu Accelerometer X,Y,Z yang
dinamis dan tinggi. Sumbu Z yang merukapan sumbu penentu memiliki angka
melebihi 15 yang lebih tinggi dari pada percobaan dengan kecepatan 20Km/Jam.
3
2.5
2
1.5
1
SUMBU X
0.5
SUMBU Y
0
SUMBU Z
-0.5
-1
-1.5
-2
-2.5
Terlihat pada gambar 4.16. adanya pergerakan grafik gyroscope yang naik turun
secara cepat hal ini terjadi dikarenakan benturan pada saat kendaraan melewati lubang
2.
Pada pengujian lubang 3 terdapat perbedaan bentuk lubang yang akan diuji. Cara
melakukan pengujian sama dengan cara pengujian pada lubang 1 dan 2. Pada halaman
utama user melakukan input nama file yang akan disimpan datanya. Kemudian klik
start dibagian sebelah kanan. Lokasi akan berjalan ketika mobil bejalan. Ketika ada
lubang maka program akan melakukan mark pada lokasi seperti pada gambar 4.17. :
Terlihat pada gambar 4.17. lokasi pengujian lubang 3 yang ditandai dengan tanda
warna merah karena berhasil diidentifikasi sebagai lubang oleh sistem.
Terlihat pada gambar 4.18. adalah lubang yang terdapat pada lokasi pada gambar 4.17.
Maka pada layar utama aplikasi akan menunjukan grafik accelerometer dan gyroscope
akan begerak ketika mobil melintasi jalan yang berlubang. Pergerakan grafik akan
ditunjukan pada gambar 4.19. dan gambar 4.20.
14
12
10
8
6 SUMBU X
4 SUMBU Y
2 SUMBU Z
0
-2
-4
-6
Terlihat pada gambar 4.19. hasil dari perekaman Accelerometer pada lubang 3 dengan
kecepatan 20Km/Jam.
0.3
0.2
0.1
SUMBU X
0 SUMBU Y
SUMBU Z
-0.1
-0.2
-0.3
Terlihat pada gambar 4.20. hasil perekaman Gyroscope dengan kecepatan 20 Km/Jam.
Pada pengujian lubang 1 dengan kecepatan 40 km/jam dilakukan ditempat dan lubang
yang sama dengan pengujian lubang 1 dengan kecepatan 20 km/jam.
20
15
10 SUMBU X
SUMBU Y
5 SUMBU Z
-5
Terlihat pada gambar 4.21. Nilai Sumbu X,Y,Z Accelerometer yang berbeda jauh pada
saat percobaan lubang 3 dengan kecepatan 20 Km/Jam.
0.8
0.6
0.4 SUMBU X
0.2 SUMBU Y
0 SUMBU Z
-0.2
-0.4
-0.6
Terlihat pada gambar 4.22. sumbu pada gyroscope bergerak secara tidak menentu
dikarenakan benturan yang kuat saat melewati lubang dengan kecepatan 40 Km/Jam.
User melakukaan input nama file pada halaman utama aplikasi lalu klik start untuk
memulai menjalankan aplikasi. Kendaraan akan melakukan mark pada lokasi yang
terdapat polisi tidur. Lokasi yang terdapat polisi tidur pada pengujian aplikasi ini
terdapat pada gambar 4.23.
Terlihat pada gambar 4.23. adanya tanda merah pada peta yang menunjukkan lokasi
polisi tidur yang teridentifikasi sebagai jalan yang kuran baik.
Terlihat pada gambar 4.23. adanya polisi tidur di lokasi pada gambar 4.24. Maka pada
layar utama aplikasi akan menunjukan grafik accelerometer dan gyroscope akan
begerak ketika mobil melintasi jalan polisi tidur. Pergerakan grafik akan ditunjukan
pada gambar 4.25. dan gambar 4.26.
20
15
10
5 SUMBU X
SUMBU Y
0 SUMBU Z
-5
-10
-15
Terlihat pada gambar 4.25. Nilai Sumbu Z Accelerometer yang melewati angka 11.5
meskipun tidak ada lubang yang dilalui kendaraan saat perekaman. Sehingga Polisi
tidur dideteksi sebagai jalan yang kurang baik oleh sistem.
0.3
0.2
0.1
SUMBU X
0 SUMBU Y
SUMBU Z
-0.1
-0.2
-0.3
Dapat dilihat pada grafik groscope pada gambar 4.26 menunjukan adanya pergerakan
pada sumbu X,Y,Z yang menandakan adanya getaran yang terjadi pada kendaraan
dikarenakan melewati polisi tidur.
Pada bagian pengujian jalan datar akan dibagi menjadi 2 kecepatan yang berbeda yaitu
Jalan datar dengan kecepatan 20 Km/Jam dan jalan datar dengan kecepatan 40
Km/Jam. masing-masing kecepatan akan menampilkan grafik yang bebeda pula.
User melakukaan input nama file pada halaman utama aplikasi lalu klik start untuk
memulai menjalankan aplikasi. Kendaraan akan melakukan pengecekan jalan yang
tidak berlubang dan tidak terdapat tanjakan ataupun polisi tidur . Lokasi pengujian
aplikasi ini terdapat pada gambar 4.27.
Terlihat pada gambar 4.28. lokasi pengujian jalan datar dengan kecepatan 20 Km/Jam.
Pengujian ini dilakukan untuk mengetahui bagaimana grafik Accelerometer dan
Gyroscope pada saat melewati jalan yang baik tanpa ada lubang atau polisi tidur.
Terlihat pada gambar 4.28 tidak ada jalan yang rusak maupun jalan yang menanjak.
Maka pada layar utama aplikasi akan menunjukan grafik accelerometer dan gyroscope
akan begerak ketika mobil melintasi jalan datar. Pergerakan grafik akan ditunjukan
pada gambar 4.29. dan gambar 4.30.
12
10
8
6
4 SUMBU X
SUMBU Y
2
SUMBU Z
0
-2
-4
-6
Terlihat pada gambar 4.29. Nilai sumbu Z Accelerometer tidak ada yang melebihi
angka 11.5. yang menandakan tidak ada nya jalan yang kurang baik.
0.2
0.15
0.1
SUMBU X
0.05
SUMBU Y
0
SUMBU Z
-0.05
-0.1
-0.15
Terlihat pada gambar 4.30 grafik gyroscope menunjukkan adanya pergerakan grafik
meskipun kondisi jalan tidak rusak. Hal ini dikarenakan beberapa faktor yaitu getaran
pada kendaraan saat berjalan dan juga perilaku pengemudi dalam berkendara yang
menyebabkan getaran pada accelerometer dan gyroscope.
Pengujian jalan datar dengan kecepatan 40 Km/Jam dilakukan ditempat yang sama
dengan pengujian jalan datar dengan kecepatan 20 Km/Jam. Hal ini bertujuan agar
dapat diketahui pengaruh faktor kecepatan dalam analisa accelerometer dan
gyroscope.
Terlihat pada gambar 4.31. lokasi pengujian jalan datar dengan kecepatan 40 Km/Jam
sama dengan lokasi pengujian jalan datar dengan kecepatan 20 Km/Jam.
20
15
10 SUMBU X
SUMBU Y
5 SUMBU Z
-5
Terlihat pada gambar 4.32. Nilai Sumbu Z Accelerometer menunjukkan angka yang
melebihi ambang batas jalan baik yaitu 11.5. Hal ini menyebabkan sistem
mengidentifikasi jalan baik ini sebagai jalan yang kurang baik. Hal ini disebabkan oleh
kecepatan yang cukup tinggi pada saat perekaman yang membuat getaran pada
kendaraan semakin kuat.
0.25
0.2
0.15
0.1
0.05 SUMBU X
0
SUMBU Y
-0.05
-0.1 SUMBU Z
-0.15
-0.2
-0.25
-0.3
Terlihat pada gambar 4.32. dan gambar 4.33. terdapat perbedaan grafik yang cukup
signifikan dengan 4.29. dan gambar 4.30. Hal ini terjadi karena adanya perbedaan
kecepatan pada saat perekaman yang menyebabkan grafik accelerometer dan
gyroscopenya berbeda.
Lubang 1
Accelerometer Gyroscope
KecepatanSumbu X Sumbu Y Sumbu Z Sumbu X Sumbu Y Sumbu Z
20Km/Jam 2.488098 3.005661 15.474747 0.313995 0.453812 0.101364
40Km/Jam 4.216721 7.595352 30.284363 0.658524 1.485443 0.76976
Pada Tabel 4.1. Hasil uji lubang 1 dengan kecepatan 40 Km/Jam memiliki nilai sumbu
Accelerometer dan Gyroscope yang lebih besar dibandingkan kecepatan 20 Km/Jam.
Lubang 2
Accelerometer Gyroscope
KecepatanSumbu X Sumbu Y Sumbu Z Sumbu X Sumbu Y Sumbu Z
20Km/Jam 2.976517 4.585831 14.315948 0.277451 0.31842 0.124237
Pada Tabel 4.2. Hasil uji lubang 2 juga menunjukkan perbedaan antara hasil uji
dengan kecepatan 40 Km/jam dengan 20 Km/Jam.
Lubang 3
Accelerometer Gyroscope
KecepatanSumbu X Sumbu Y Sumbu Z Sumbu X Sumbu Y Sumbu Z
20Km/Jam 2.5336 1.274658 12.996735 0.272446 0.194946 0.198303
40Km/Jam 2.253479 3.00087 17.347 0.310181 0.267838 0.807037
Pada Tabel 4.3. Hasil uji lubang 3 juga mengalami perbedaan yang cukup besar antara
kecepatan 40 Km/Jam dengan 20 Km/Jam.
Jalan Datar
Accelerometer Gyroscope
KecepatanSumbu X Sumbu Y Sumbu Z Sumbu X Sumbu Y Sumbu Z
20Km/Jam 2.301361 0.752716 10.781265 0.14418 0.117737 0.063034
40Km/Jam 2.31572 1.315353 14.349472 0.095169 0.193375 0.057709
Pada tabel 4.3. diatas menunjukan bahwa meskipun jalan yang dilalu bukan jalan yang
berlubang, perbedaan nilai antara kecepatan 40 Km/Jam dengan 20 Km/Jam masih
cukup besar dilihat dari sumbu Z Accelerometer. Hal ini menunjukkan semakin cepat
kendaraan berjalan saat perekaman maka getaran terhadap sumbu X, Y, Z pada
Accelerometer dan sumbu X, Y, Z pada Gyroscope semakin tinggi pula.
Berdasarkan grafik Accelerometer dan Gyroscope pada gambar 4.7, 4.8, 4.13,
4.14, 4.19 dan 4.20, sensor Gyroscope menghasilkan nilai yang sangat kecil
dibandingkan sensor Accelerometer, yang menyebabkan sulitnya proses identifikasi
jalan menggunakan sensor Gyroscope. Sumbu sumbu sensor Gyroscope menghasilkan
nilai yang kecil dan tidak berubah terlalu signifikan karena sensor gyroscope tidak
terlalu terpengaruh oleh getaran yang dihasilkan saat melewati jalan rusak. Sensor
Gyroscope akan bekerja maksimal ketika telepon seluler berotasi, bergerak vertikal
atau horizontal. Sehingga dapat disimpulkan kalau sensor Gyroscope tidak berperan
dalam pendeteksian jalan berlubang ini.
5.1. Kesimpulan
5.2. Saran
Berikut saran yang dapat dipertembangkan untuk memperbaiki penelitian ini untuk
dilakukan di penelitian selanjutnya, yaitu :
DAFTAR PUSTAKA
D., Girisha De Silva, S., Ravin Perera, M., Nayanajith. 2008. “Automated Pothole
Detection System”. University of Colombo School of Computing. Sri Lanka:
Colombo.
Daru, Setiyono C. 2014. “Sistem Deteksi Kerusakan Permukaan Jalan Raya dengan
Metode Template Matching”. Fakultas Teknik Universitas Merdeka Madiun.
Eriksson, Jacob, dkk. 2008. “The Pothole Patrol: Using a Mobile Sensor Network for
Road Surface Monitoring”. Breckenridge, U.S.A.
Kim, Taehyeong dan Ryu, Seung-ki. 2014. “Review and Analysis of Pothole
Detections Methods. Journal of Emerging Trends in Computing and Reformation
Sciences”. Volume 5 , No. 8.
LAMPIRAN 1
LISTING PROGRAM
1. Main Activity.java
package detector.app.spj;
import android.Manifest;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Color;
import android.hardware.Sensor; import
android.hardware.SensorEvent; import
android.hardware.SensorEventListener; import
android.hardware.SensorManager; import
android.location.Location;
import android.location.LocationListener; import
android.location.LocationManager; import
android.support.annotation.NonNull; import
android.support.v4.app.ActivityCompat; import
android.support.v4.content.ContextCompat; import
android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log; import
android.view.Menu; import
android.view.MenuInflater; import
android.view.MenuItem; import
android.view.View; import
android.widget.Button; import
android.widget.EditText; import
android.widget.TextView;
import android.widget.Toast;
import com.google.android.gms.location.FusedLocationProviderClient;
import com.google.android.gms.location.LocationServices;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng; import
com.google.android.gms.maps.model.Polyline; import
com.google.android.gms.tasks.OnCompleteListener; import
com.google.android.gms.tasks.Task;
import com.google.android.gms.maps.model.PolylineOptions;
import com.google.android.gms.maps.model.MarkerOptions;
import com.google.android.gms.maps.model.Polyline;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Locale;
//accelerometer
public final static short TYPE_ACCELEROMETER
= Sensor.TYPE_ACCELEROMETER; public
Boolean tekan=false;
//gyroscope
public final static short TYPE_GYROSCOPE
= Sensor.TYPE_GYROSCOPE;
//google maps
String Fine = Manifest.permission.ACCESS_FINE_LOCATION;
String Course =
Manifest.permission.ACCESS_COARSE_LOCATION;
public static Boolean izin_lokasi = false;
private static final int kode_izin_lokasi = 1234;
GoogleMap mMap;
private FusedLocationProviderClient fusedLocationProviderClient;
TextView latlang;
Boolean maju=false;
LocationManager locManager;
LocationListener li;
public String namafile;
public float kecepatan=0;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
Inflate the menu; this adds items to the action bar if it is
present. MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.optionmenu, menu);
//getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
latlang=findViewById(R.id.latlang);
manager = (SensorManager)
getSystemService(Context.SENSOR_SERVICE);
simpan=findViewById(R.id.savename);
mulai=findViewById(R.id.start_btn); mainActivity
= MainActivity.this; points = new
ArrayList<LatLng>();
temp=new ArrayList<LatLng>();
biru=new ArrayList<LatLng>();
acc=new ArrayList<Float>();
jalan=false;
getLocationPermission();
locManager=(LocationManager)getSystemService(Context.LOCATI
ON_SERVICE);
li=new speed();
locManager.requestLocationUpdates(LocationManager.NETWORK_
PROVIDER, 0, 0, li);
mulai.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.d("nilai",mulai.getText().toString());
if (mulai.getText().toString().equals("start"))
{
if (!simpan.getText().toString().equals(""))
{
namafile=simpan.getText().toString();
mulai.setText("STOP");
manager.registerListener(MainActivity.this,
manager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), 100);
manager.registerListener(MainActivity.this,
manager.getDefaultSensor(Sensor.TYPE_GYROSCOPE), 100);
jalan=true;
}
}
else
{
save();
mulai.setText("start");
manager.flush(MainActivity.this);
manager.unregisterListener(MainActivity.this);
jalan=false;
try {
writer.close();
} catch (IOException e) {
e.printStackTrace();
// options.addAll(temp);
for (int i=0;i<acc.size();i++)
{
// points.add(temp.get(i));
if (acc.get(i)>11.5)
{
markerOptions.position(temp.get(i));
mMap.addMarker(markerOptions);
options.color(Color.RED);
markerOptions.position(temp.get(i));
mMap.addPolyline(options);
}
else
{
// options.color(Color.BLUE);
// PolylineOptions options2 = new
PolylineOptions().width(5).color(Color.BLUE).geodesic(true);
// options2.addAll(biru);
// // markerOptions.position(temp.get(i));
// mMap.addPolyline(options2);
}
// mMap.addPolyline(options);
}
// points.add(latLng);
options.addAll(points);
markerOptions.position(latLng);
mMap.addPolyline(options);
}
}
});
}
@Override
public void onProviderDisabled(String arg0) {}
@Override
public void onProviderEnabled(String arg0) {}
@Override
public void onStatusChanged(String arg0, int arg1, Bundle arg2) {}
if
(ContextCompat.checkSelfPermission(this.getApplicationContext(),Fine)
1. PackageManager.PERMISSION_GRANTED)
{
if(ContextCompat.checkSelfPermission(this.getApplicationContext(),Cour
se) == PackageManager.PERMISSION_GRANTED)
{
izin_lokasi=true;
initMap();
}
else
{
ActivityCompat.requestPermissions(this,izin,kode_izin_lokasi );
}
}
else
{
ActivityCompat.requestPermissions(this,izin,kode_izin_lokasi );
}
}
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
if (izin_lokasi) {
getDeviceLocation(true);
if (ActivityCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_FINE_LOCATION) !=
PackageManager.PERMISSION_GRANTED &&
ActivityCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_COARSE_LOCATION)
!= PackageManager.PERMISSION_GRANTED) {
return;
}
mMap.setMyLocationEnabled(true);
mMap.setOnMyLocationButtonClickListener(new
GoogleMap.OnMyLocationButtonClickListener() {
@Override
public boolean onMyLocationButtonClick() {
Log.d("TES","AAA");
tekan=true;
getDeviceLocation(tekan);
return false;
}
});
mMap.setOnMyLocationChangeListener(new
GoogleMap.OnMyLocationChangeListener() {
@Override
public void onMyLocationChange(Location location) {
getDeviceLocation(false);
}
});
}
private void getDeviceLocation(final Boolean tekan)
{
fusedLocationProviderClient =
LocationServices.getFusedLocationProviderClient(this);
try
{
if(izin_lokasi)
{
final Task lokasi =
fusedLocationProviderClient.getLastLocation();
lokasi.addOnCompleteListener(new OnCompleteListener()
{ @Override
public void onComplete(@NonNull Task task) {
if (task.isSuccessful())
{
Location clocation =(Location)
task.getResult(); float default_zoom =18;
lat=clocation.getLatitude();
lang=clocation.getLongitude();
MoveCamera(new
LatLng(clocation.getLatitude(),clocation.getLongitude()),default_zoom,te
kan);
latlang.setText("Lat = "+clocation.getLatitude()+" Long =
"+clocation.getLongitude());
}
else
{
2.Toast.makeText(Map.this,"Gagal
Menandai Lokasi",Toast.LENGTH_SHORT).show();
}
}
});
}
}catch (SecurityException e )
{
}
}
private void MoveCamera(LatLng latLng, float default_zoom,Boolean
tekan) {
if (tekan)
{
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng,defa
ult_zoom));
}
else
{
mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
}
Log.d("latlang",""+latLng);
2. MarkerOptions markerOptions = new MarkerOptions();
3. PolylineOptions options = new
2. points.add(latLng);
3. options.addAll(points);
4. markerOptions.position(latLng);
// mMap.addPolyline(options);
// mMap.addMarker(markerOptions);
}
private void initMap()
{
SupportMapFragment mapFragment = (SupportMapFragment)
getSupportFragmentManager().findFragmentById(R.id.map);
mapFragment.getMapAsync(MainActivity.this);
}
@Override
public void onSensorChanged(SensorEvent evt) {
Log.d("kecepatan",""+kecepatan);
4. Log.d("jalan",""+loc.hasSpeed());
if (jalan) {
try {
switch (evt.sensor.getType()) {
case Sensor.TYPE_ACCELEROMETER:
LatLng tes = new LatLng(lat, lang);
Log.d("acc", "" + evt.values[2]);
Log.d("lat", "" + tes);
acc.add(evt.values[2]);
temp.add(tes);
@Override
public void onAccuracyChanged(Sensor sensor, int i) {
}
}
import java.text.DecimalFormat;
import java.util.LinkedList;
Context context;
return maxPoints;
}
history.get(key).addLast(data);
series.get(key).setModel(history.get(key),
SimpleXYSeries.ArrayFormat.Y_VALS_ONLY);
}
public synchronized void draw()
{
plot.redraw();
}
public void addSeriesPlot(String seriesName, int key, int color)
{
history.append(key, new LinkedList<Number>());
formatter.setLinePaint(linePaint);
formatter.setVertexPaint(vertexPaint);
plot.addSeries(series.get(key), formatter);
history.get(key).removeAll(history.get(key));
history.remove(key);
series.remove(key);
}
this.plot.setRangeBoundaries(minRange,
maxRange, BoundaryMode.FIXED);
this.plot.setRangeLabel(this.yTitle);
this.plot.getRangeLabelWidget().pack();
this.plot.setRangeStep(XYStepMode.INCREMENT_BY_VAL,
2); this.plot.setRangeValueFormat(new DecimalFormat("#"));
this.plot.setGridPadding(0, 0, 0, 0);
plot.getLegendWidget().setVisible(false);
//Colours
Paint blackPaint = new Paint();
blackPaint.setColor(Color.rgb(0, 0, 0));
this.plot.getGraphWidget().setGridBackgroundPaint(null);
this.plot.getGraphWidget().setBackgroundPaint(null);
this.plot.getGraphWidget().setBorderPaint(null);
this.plot.getGraphWidget().setDomainOriginLinePaint(blackPaint);
this.plot.getGraphWidget().setRangeOriginLinePaint(blackPaint);
this.plot.setBorderPaint(null);
this.plot.setBackgroundPaint(null);
plot.getRangeLabelWidget().getLabelPaint().setColor(Color.BLACK);
plot.getGraphWidget().getRangeLabelPaint().setColor(Color.BLACK);
plot.getGraphWidget().getRangeLabelPaint().setTextSize(px);
plot.getRangeLabelWidget().getLabelPaint().setTextSize(px);
plot.getRangeLabelWidget().pack();
plot.getGraphWidget().setMarginBottom(10);
plot.getGraphWidget().setMarginTop(40);
plot.getGraphWidget().setMarginLeft(10);
plot.getGraphWidget().setMarginRight(10);
plot.getGraphWidget().position(0.03f,
XLayoutStyle.RELATIVE_TO_LEFT,
0.0f, YLayoutStyle.RELATIVE_TO_TOP);
plot.getGraphWidget().setSize(
new SizeMetrics(1.0f, SizeLayoutType.RELATIVE,
0.98f, SizeLayoutType.RELATIVE));
this.plot.redraw();
}
}
3. Accelerometer Fragment.java
package detector.app.spj;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.app.Fragment;
import android.support.v4.content.ContextCompat;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.androidplot.xy.XYPlot;
SensorManager sensorManager;
Sensor sensor;
Sensor accelerometer;
Sensor magnetic;
Sensor gravity;
Handler handler;
Runnable runnable;
TextView textViewXAxis;
TextView textViewYAxis;
TextView textViewZAxis;
float[] accData;
float[] gravData;
float[] magData;
float[] plotData;
XYPlot plot;
DynamicLinePlot dynamicPlot;
public AccelerometerFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup
container,
Bundle savedInstanceState) {
//Get checkboxes
//Sensor manager
sensorManager = (SensorManager)
getContext().getSystemService(Context.SENSOR_SERVICE);
accelerometer =
sensorManager.getDefaultSensor(MainActivity.TYPE_ACCELEROMET
ER);
//Create graph
accData = new float[3];
return view;
}
@Override
public void onResume() {
super.onResume();
sensorManager.registerListener(this, accelerometer,
SensorManager.SENSOR_DELAY_FASTEST);
sensorManager.registerListener(this, magnetic,
SensorManager.SENSOR_DELAY_FASTEST);
sensorManager.registerListener(this, gravity,
SensorManager.SENSOR_DELAY_FASTEST)
; handler.post(runnable);
}
@Override
public void onPause() {
super.onPause();
sensorManager.unregisterListener(this);
handler.removeCallbacks(runnable);
}
@Override
public void onSensorChanged(SensorEvent event)
{ sensor = event.sensor;
int i = sensor.getType();
if (i == MainActivity.TYPE_ACCELEROMETER) {
accData = event.values;
}
}
@Override
return data;
}
return data;
}
plotData = accData;
dynamicPlot.setData(plotData[0], 0);
dynamicPlot.setData(plotData[1], 1);
dynamicPlot.setData(plotData[2], 2);
dynamicPlot.draw();
}
4. Gyroscope Fragment.java
package detector.app.spj;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.app.Fragment;
import android.support.v4.content.ContextCompat;
import android.view.LayoutInflater; import
android.view.View;
import android.view.ViewGroup;
import android.widget.RadioButton;
import android.widget.TextView;
import com.androidplot.xy.XYPlot;
SensorManager sensorManager;
Sensor sensor;
Sensor gyroscope;
Handler handler;
Runnable runnable;
TextView textViewXAxis;
TextView textViewYAxis;
TextView textViewZAxis;
RadioButton gyroCalibrated;
RadioButton gyroUncalibrated;
float[] gyroData;
XYPlot plot;
DynamicLinePlot dynamicPlot;
public GyroscopeFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup
container,
Bundle savedInstanceState) {
// gyroCalibrated.setChecked(true);
//Sensor manager
sensorManager = (SensorManager)
getContext().getSystemService(Context.SENSOR_SERVICE);
gyroscope =
sensorManager.getDefaultSensor(MainActivity.TYPE_GYROSCOPE);
//Create graph
gyroData = new float[3];
updateGyroText();
}
};
return view;
}
@Override
public void onResume() {
super.onResume();
sensorManager.registerListener(this, gyroscope,
SensorManager.SENSOR_DELAY_FASTEST)
; sensorManager.registerListener(this,
sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE_UNCALI
BRATED), SensorManager.SENSOR_DELAY_FASTEST);
handler.post(runnable);
}
@Override
public void onPause() {
super.onPause();
sensorManager.unregisterListener(this);
handler.removeCallbacks(runnable);
}
@Override
public void onSensorChanged(SensorEvent event)
{ sensor = event.sensor;
int i = sensor.getType();
gyroData = event.values;
// if(gyroCalibrated.isChecked() & i ==
MainActivity.TYPE_GYROSCOPE){
// gyroData = event.values;
// } else if(gyroUncalibrated.isChecked() & i ==
Sensor.TYPE_GYROSCOPE_UNCALIBRATED){
// gyroData = event.values;
// }
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
//Safe not to implement
}
dynamicPlot.draw();
}
CURRICULUM VITAE
DATA DIRI
RIWAYAT PENDIDIKAN
S1 Ilmu Komputer
Universitas Sumatera Utara, Medan
2014
Sekolah Dasar
Dr. CIPTO MK PERDAGANGAN
2002-2008
KEAHLIAN