46
BAB 3 PERANCANGAN SISTEM
Seperti yang telah disampaikan pada bab sebelumnya, pada penelitian ini kami menitikberatkan pada pengunaan GPS sebagai sistem perekam posisi koordinat yang dilalui selama berkendara ataupun saat diam, selama waktu tertentu. Posisi dan waktu akan disimpan di dalam medium penyimpanan, yaitu MMC. Data yang telah disimpan di dalam MMC, merupakan data mentah (RAW data), yang kemudian dapat di olah lebih lanjut untuk mendapatkan hasil yang bermanfaat bagi pengguna. Perihal komponen-komponen yang berkaitan dan mendukung penelitian ini (Hardware dan Software) akan dipaparkan pada bab ini. 3.1.
Perancangan Sistem
Gambar 3.1. Blok diagram perancangan sistem Perancangan sistem ini didasari pada perkembangan teknologi yang bertambah maju sekarang ini, terutama mengenai GPS, sebuah sistem yang dapat menginformasikan koordinat posisi di bumi. Pada penelitian ini, kami memanfaatkan
47
mikrokontroler ATMega 162, yang masih termasuk dalam keluarga AVR, yang berfungsi sebagai otak dari sistem penelitian ini. Seperti yang telah disampaikan sebelumnya, untuk penghitungan jarak antar dua koordinat yang diperoleh dari GPS menggunakan suatu perumusan formula perhitungan yang bernama, Great Circle Distance. Pada saat AVR menerima koordinat posisi pertama, yang secara otomatis data disimpan di dalam memori internal, dan koordinat posisi kedua di dapat, maka proses penghitungan dengan formula tersebut dapat dilakukan. Hasil penghitungan tersebut disimpan di dalam MMC dan juga memori internal pada AVR. Kemudian koordinat posisi yang kedua menjadi koordinat posisi pertama untuk penghitungan jarak pada data selanjutnya, dimana data selanjutnya tersebut merupakan koordinat kedua, dan begitu seterusnya. Data yang telah disimpan dapat ditampilkan di komputer melalui komunikasi serial, yang kemudian hasil data tersebut dapat dikumpulkan untuk penelitian lebih lanjut lagi. 3.2.
Perancangan Perangkat Keras Untuk mendukung kerja penyimpanan data pada GPS ke dalam MMC,
sebagai media penyimpan, dibutuhkan beberapa perangkat keras pendukung agar data yang diterima oleh GPS dapat di simpan di dalam MMC.
48
Gambar 3.2. Skematik Rangkaian GPS Data Logger
49
3.2.1. GPS Pada penelitian ini digunakan GPS receiver buatan US GlobalSat dengan tipe BR-355. GPS ini memiliki chipset SiRF star III, yang merupakan chipset yang terakhir untuk generasi GPS. Receiver ini memiliki sensitifitas tracking hingga sebesar -159dBm, yang berarti GPS ini dapat menangkap sinyal dari satelit hingga kekuatan sinyal terkecil sebesar -159dBm. GPS ini juga dilengkapi dengan extremely fast TTFF (Time To First Fix), hal ini menjelaskan bahwa GPS ini dapat menangkap sinyal pertama dari GPS dengan sangat cepat, meskipun pada level sinyal terendah. Untuk lebih mendukung kualitas GPS untuk menangkap sinyal, alat ini dilengkapi antenna yang telah terintegrasi di dalamnya. Dilengkapi juga dengan sebuah LED yang akan menginformasikan apakah receiver telah menerima power dan memastikan bahwa posisi koordinat telah fix atau sedang mencari sinyal, dan juga receiver mati. Setelah diterima tegangan, maka receiver akan segera mencari sinyal yang dipancarkan oleh satelit, yang kemudian dikirim ke AVR melalui pin 8 MAX 232 yang dilanjutkan oleh pin 9 MAX 232, untuk disimpan di dalam memori internal AVR. Tegangan yang diterima dari sistem dialirkan melalui pin 2 PS/2 untuk GPS Receiver. Sedangkan pin 1 pada PS/2 GPS dihubungkan pada ground. 3.2.2. ATMega 162 Seperti yang telah dijelaskan pada bab sebelumnya, pada penelitian ini digunakan ATMega 162, yang merupakan keluarga megaAVR, yang secara garis besar berfungsi sebagai otak dari sistem ini (pengatur traffic dan pengolah data). AVR ATMega 162 menggunakan logika low, yaitu pin reset akan aktif jika diberikan logika low. Untuk menjaga kestabilan pin reset agar tidak aktif jika terjadi
50
kesalahan pada kelistrikan, maka diberikan kapasitor sebesar 10µF. Untuk menonaktifkan sistem setelah kendaraan sampai di tujuan, dibutuhkan sebuah interrupt eksternal, dimana pada penelitian ini digunakan sebuah push button. Sebuah kaki pada push button, dihubungkan dengan pin reset (p12), dan kaki lainnya dihubungkan dengan ground. Dengan kata lain, jika push button ditekan makan pin reset akan dihubungkan ke ground (short).
Gambar 3.3. Rangkaian Kristal 8 MHz
ATMega 162 juga memerlukan clock eksternal untuk dapat menjalankan keseluruhan sistem. Rangkaian pembangkit pulsa clock terdiri dari sebuah kristal yang memiliki frekuensi sebesar 8 MHz dan dua buah kapasitor bernilai 22pF yang berfungsi untuk merubah sinyal sinusoidal pada kristal menjadi sinyal kotak, sehingga memungkinkan AVR untuk menggunakan clock eksternal. Dimana masingmasing kaki kristal tersebut dihubungkan dengan pin 18 (XTAL2) dan pin 19 (XTAL1). Untuk mengaktifkan mikrokontroler ini, diperlukan catu daya sebesar 5Volt DC. Penelitian ini ditujukan untuk pengguna kendaraan bermotor yang memiliki
51
sumber catu daya dari aki sebesar 12 Volt, maka dibutuhkan IC Regulator untuk merubah tegangan yang masuk menjadi sebesar 5 Volt. IC Regulator yang digunakan adalah LM7805 yang terhubung dengan pin 40 (VCC) dan pin 20 (ground) pada ATMega 162. Pada saat sistem dihubungkan dengan catu daya sebesar 12 Volt, maka IC regulator tersebut akan merubah tegangan 12V menjadi 5V. Untuk menyatakan bahwa sistem telah dialiri tegangan, sistem ini dilengkapi dengan LED yang akan menyala jika sistem telah dialiri tegangan. Ketika sistem telah menerima tegangan, maka AVR akan mengaktifkan komunikasi serial dan mengaktifkan timer yang terdapat pada AVR, sesuai yang dibutuhkan. Timer ini akan berfungsi sebagai sinyal interrupt bagi ATMega162 untuk mengambil data dari GPS nantinya. Penerimaan data dari GPS, digunakan pin 3 (RX) pada AVR yang dihubungkan dengan pin 9 pada MAX 232. Berdasarkan datasheet MAX 232 pin 9 tersebut diteruskan ke pin 8, yang dihubungkan dengan pin 5 (TX) dari GPS Receiver. Setelah AVR mengaktifkan komunikasi serial dan mengaktifkan timer, mikrokontroller ini akan memastikan bahwa MMC dan SPI telah enable dan akan mengecek apakah ada interrupt serial atau tidak, jika ada interrupt maka AVR akan membaca data dari MMC dan menampilkannya ke monitor (PC). Jika tidak, maka AVR akan melakukan log koordinat awal yang datanya di dapat dari GPS receiver. Untuk dapat berkomunikasi dengan MMC, dimanfaatkan pin 6 (MOSI/Master Out Slave In) dan pin 7 (MISO/Master In Slave Out) pada ATMega 162. Pada saat AVR menerima data dari GPS, maka data tersebut akan dikirim ke MMC (pin 2)
52
dengan menggunakan pin 6 pada AVR. Sedangkan pin 7 pada AVR berfungsi untuk menerima data dari MMC (pin 7). Setelah menerima koordinat awal, maka AVR akan memeriksa apakah data yang telah diterima tersebut valid atau tidak. Jika data yang diterima belum valid, maka sistem akan mengambil data untuk dijadikan koordinat awal, sebagai parameter pertama untuk perhitungan jarak tempuh yang dilalui oleh kendaraan, hingga data tersebut valid. Jika data yang diterima telah valid, data akan disimpan di dalam sektor [y] pada memori internal yang terdapat di AVR. Kemudian sistem akan mengaktifkan kembali timer yang telah ditetapkan sebelumnya. Selama sistem tidak menerima sinyal interrupt, maka AVR akan terus mengulang perintah pengulangan (while (1) {}), hingga menerima sinyal interrupt. Pada saat interrupt terjadi, maka untuk sementara AVR akan me-nonaktifkan timer dan mengambil data koordinat terakhir dari GPS dan menyimpannya di dalam memori internalnya sendiri setelah data koordinat tersebut selesai di cek dan fix. Kemudian timer akan kembali ke posisi semula dan diaktifkan kembali. Setelah itu sistem akan memeriksa apakah data pada sektor [y] dari memori internal AVR telah mencapai 512 byte atau tidak. Jika tidak terpenuhi, maka sistem akan kembali ke interrupt. Apabila data yang diterima telah mencapai 512 byte, data akan disimpan di dalam MMC pada sektor [0] hingga sektor [511]. ATMega 162 juga dilengkapi dengan pin SCK (pin 18) yang terhubung dengan pin 5 pada MMC. Pin SCK merupakan serial clock, yaitu dapat memberikan pulsa clock kepada MMC, apakah MMC harus menerima (menyimpan) data atau mengirim data, agar dapat ditampilkan di komputer.
53
Seperti yang telah disebutkan sebelumnya, data yang diterima dapat ditampilkan di komputer untuk penelitian lebih lanjut lagi. Untuk menampilkan hasil data yang telah diterima ke komputer, dibutuhkan MAX 232, yang dihubungkan antara pin 13 (RX) dan pin 14 (TX) AVR dengan pin 3 (TX) dan pin 2 (RX) pada DB9 melalui pin 13 dan 14 pada MAX 232. Dengan catatan bahwa pin 13 dan 14 MAX 232 diteruskan ke pin 12 dan pin 11 pada IC komunikasi serial tersebut. Sistem ini juga dilengkapi tiga buah LED yang menginformasikan apakah MMC telah enable atau belum (LED putih), sistem sedang melakukan penyimpanan data dari GPS ke MMC (LED biru), dan menginformasikan bahwa timer interrupt dari sistem sedang dilakukan (LED merah super bright). 3.2.3. MMC Seperti yang telah dijelaskan pada bab sebelumnya, pada penelitian ini digunakan MMC sebagai media penyimpanan data. Ada beberapa pertimbangan dalam pemilihan MMC sebagai media penyimpanan data pada penelitian ini. Harga per byte yang tergolong murah jika dibandingkan dengan EEPROM & Harddisk, memiliki ukuran yang kecil (seperti perangko), dapat menerima arus daya yang kecil, kecepatan read / write yang tinggi, dapat juga di akses melalui SPI. MMC dihubungkan secara serial ke AVR dengan komunikasi serial RS232 pada baudrate 115.200 bps, satu start bit, 8 data bits, satu stop bit, tanpa parity. Tegangan maksimum yang dapat diterima oleh MMC adalah sebesar +2.8V hingga +3.3V. Untuk mendapatkan tegangan sebesar 3.3V, maka dibutuhkan IC Regulator CX1117 yang dihubungkan dengan pin 4 pada MMC.
54
Setelah AVR memberikan sinyal clock ke MMC, maka pin 1 (Chip Select) pada MMC akan diaktifkan untuk memberikan sinyal pada AVR, bahwa MMC telah enable dan siap digunakan. Agar dapat berkomunikasi dengan AVR, dibutuhkan pembagi tegangan yang terdiri dari 4 pasang resistor yang terhubung pada pin 1 (Chip Select), pin 2 (Data Input), pin 5 (Clock), dan pin 7 (Data Output) pada MMC, dimana masing-masing resistor bernilai 120 Ohm dan 220 Ohm, agar dapat mengurangi tegangan data, sehingga MMC dapat menerima data dari AVR. Ketika data yang terdapat pada RAM pada AVR telah mencapai 512 byte, maka data tersebut akan dikirim ke MMC untuk disimpan pada sektor [0]-[511]. Pada saat inilah pin 2 (DI/Data Input) aktif, yang berarti bahwa MMC menginput (menyimpan) data yang dikirim oleh AVR. Bila data yang telah disimpan pada MMC akan ditampilkan ke monitor (PC), maka pin 7 (DO/Data Output) akan aktif, yang berarti bahwa MMC memberikan output (hasil data yang telah disimpan) melalui pin 7 (MISO) pada AVR. Sedangkan pin 3 dan pin 6 pada MMC dihubungkan ke ground. 3.2.4. IC Regulator
Gambar 3.4. Rangkaian regulator LM7805 dan CX1117
55
Penelitian ini menggunakan IC Regulator LM7805 dan CX1117 yang berfungsi untuk menyediakan tegangan output pada level yang tetap. Dimana IC Regulator LM7805 menahan tegangan yang diterima dan menyalurkannya kembali ke sistem hanya sebesar 5V maksimum, sedangkan IC Regulator CX1117 menahan tegangan dan menyalurkannya kembali ke sistem sebesar 3.3V maksimum. 3.2.5. MAX 232
Gambar 3.5. Rangkaian MAX 232 dan PS/2 untuk GPS
MAX 232 digunakan untuk komunikasi serial antara ATMega 162 dengan komputer dan GPS Receiver. Saat GPS akan mengirim data ke MMC, MAX 232 akan merubah level data dari GPS menjadi level komunikasi yang dapat diterima oleh AVR agar data yang diterima dapat di seleksi oleh AVR dan dikirim ke MMC. Data yang diterima dari satelit oleh GPS akan dikirim ke AVR melalui pin 5 (TX) pada PS/2 GPS ke pin 8 pada IC MAX 232 agar dapat diterima oleh AVR. Berdasarkan datasheet MAX 232, pin 8 tersebut telah diteruskan dengan pin 9 pada MAX 232.
56
Ketika data yang telah dikumpulkan pada MMC akan ditampilkan di komputer, maka data yang telah dikirimkan oleh AVR ke pin 11 (MAX 232) akan diteruskan ke pin 14 (MAX 232) agar dapat diterima oleh pin 2 (RD) pada DB9, sehingga data tersebut dapat dilihat di monitor (PC). Sebelumnya untuk menyatakan bahwa DB9 telah terkoneksi dengan sistem ini, maka pin 3 (TD) pada DB9 akan mengirim sinyal ke pin 10 (RX) pada AVR, melalui pin 13 pada MAX 232 yang diteruskan ke pin 12 sehingga data tersebut dapat diterima oleh AVR.
3.3.
Perancangan Perangkat Lunak Pada subbab ini dibahas mengenai perangkat lunak yang akan mendukung
kerja sistem dari penelitian ini. Bahasa pemrogramman yang digunakan pada penelitian ini adalah CodeVision AVR, yang memiliki perintah sama dengan bahasa pemrogramman C, sehingga mudah untuk dipelajari. Ada beberapa diagram alur yang menjadi dasar pembuatan bahasa pemrogramman untuk alat pada penelitian ini.
57
3.3.1. Diagram Alur Sistem Utama (AVR)
Gambar 3.6. Diagram alur sistem utama
Diagram alur di atas menjelaskan cara kerja sistem utama yang dilakukan oleh AVR, sebagai mikrokontroller yang merupakan otak dari sistem ini. Pada saat sistem diberikan catu daya, maka AVR akan men-setting komunikasi serial dan timer yang berfungsi untuk melakukan interrupt penyimpanan data pada MMC. Setelah itu, maka AVR akan memastikan bawa MMC dan SPI telah enable. Jika belum maka sistem tidak akan bekerja. Untuk menandakan bahwa MMC dan SPI telah enable,
58
rangkaian pada sistem ini dilengkapi LED sebagai indikator. Kemudian sistem akan mengecek apakah variabel flag bernilai 1 atau 0. Jika flag bernilai 1, sistem akan memeriksa apakah ada interrupt serial atau tidak. Jika tidak ada, sistem akan kembali memeriksa flag. Jika ada interrupt serial, sistem akan membaca data yang telah disimpan di dalam MMC dan menampilkannya ke monitor. Interrupt serial terjadi apabila terjadi penekanan tombol enter pada keyboard, karena jalur data yang digunakan pada penelitian ini menggunakan USART0. Jika flag bernilai 0 maka sistem akan melakukan pengambilan koordinat dari receiver, sebagai koordinat awal. Setelah itu, AVR akan memeriksa, apakah data tersebut telah fix atau belum. Jika data yang diterima belum fix, maka AVR akan mengambil data lainnya dari GPS untuk dijadikan koordinat awal, hingga data tersebut telah fix. Jika data tersebut telah fix, maka akan disimpan sementara di dalam memori internal AVR pada variabel array sektor [y]. Data awal tersebut akan dijadikan titik awal untuk perhitungan jarak tempuh. Kemudian timer pada AVR akan dihidupkan dan sistem akan memeriksa apakah terjadi interrupt eksternal dan interrupt timer atau tidak. Jika terjadi, sistem akan melakukan instruksi pada interrupt eksternal atau interrupt timer. Jika kedua interrupt tersebut tidak terjadi, sistem akan terus melakukan pengecekan pada kedua interrupt tersebut.
59
3.3.2. Diagram Alur Interrupt Timer
2
3
4
5
Save $ di sektor [y]
Save P di sektor [y]
Save G di sektor [y]
C=0
y++
y++
y++
d=Getchar1 (); b
W++
W++
W++ d=,?
Save G di sektor [y]
Save G di sektor [y]
Save A di sektor [y]
y++
y++
y++
W++
W++
W++
a Ya
C++ Save data di RAM AVR (Sektor [y]) y++
3
4
Tidak
5
W++
Gambar 3.7. Diagram alur interrupt timer
c=6
60
Diagram alur di atas menjelaskan proses yang terjadi jika sistem mendapat interrupt secara internal. Pada saat interrupt terjadi, sistem akan me-non-aktifkan timer, kemudian akan mengambil karakter ($GPGGA) secara satu persatu. Jika pada saat pengecekan, karakter yang diterima tidak sesuai, AVR akan mengulangnya dari awal lagi (getchar1();). Setelah keenam karakter tersebut telah berhasil diterima, secara satu persatu, mikrokontroller akan menyimpan keenam karakter pada sektor [y]. Pada diagram alur di atas, setelah nilai [y] ditambahkan maka nilai w juga ditambahkan, dimana fungsi dari variabel w ini adalah sebagai pengecek banyaknya data pada sektor y hingga data tersebut fix (jika C=6 bernilai 1).. Untuk memisahkan komponen data (koordinat dan waktu), maka akan disisipkan karakter koma (“,”), dimana pada program dari sistem ini menggunakan variabel c, yang berfungsi sebagai counter untuk koma. Setelah keenam karakter ($GPGGA) tersebut telah disimpan di dalam memori internal AVR, variabel c akan bernilai nol (0). Variabel ini berfungsi sebagai counter untuk pemeriksaan pada koma (“ , ”). Selain variabel c, sistem ini mendefinisikan variabel d sebagai temporary location storage, yang berfungsi untuk membandingkan data yang diterima oleh sistem dari GPS receiver. Setelah kedua variabel tersebut di buat, maka AVR akan memeriksa apakah data yang diterima saat ini berupa koma (“ , ”) atau tidak. Jika koma, maka counter (variabel c) akan ditambahkan dan data tersebut disimpan di dalam memori internal AVR pada sektor [y], yang kemudian variabel y dan w ditambahkan untuk penyimpanan data yang berikutnya.
61
a
C = 1?
Tidak
C = 2?
Tidak
C = 3?
Tidak
Tidak
C = 4?
C = 5?
Tidak
C = 6?
Ya
Ya
Ya
Ya
Ya
Ya
Sektor [y]=d
C=2
C=3 dan C=5
C=4
C=3 dan C=5
C=6 Tidak
y++ w++
d=13?
d=Getchar1();
Tidak
Ya
Sektor[y]=d d=,?
Ya
C++
Sektor [y]=d
Tidak
y++
y++ d=getchar1();
Reset Timer
Timer On
Proses Perhitung an
Timer Interrupt On
Proses Pemisahan data
Save di sektor[y]
Sektor [y]=d Tidak
w++
y++
Y>512?
Cek
y++
Ya
b
Jarak=0
Save di MMC
w++
U=0
Sektor [U]=sektor [512+U]
Lebih=y-511
Ya
U++
U
Tidak
Y=U+1
Gambar 3.8. Diagram alur interrupt timer (pemeriksaan counter)
Jika bukan koma, maka sistem akan terus menghitung counter (variabel c), hingga koma berjumlah 6. Jika pada saat C sama dengan 6 bukan koma, maka sistem
62
akan memeriksa apakah data berikutnya merupakan enter (pindah baris) atau bukan. Jika bukan, maka sektor [y] akan memberikan nilai ASCII 13 (enter) dan array pada sektor [y] akan bertambah, lalu akan kembali mengecek apakah data yang dikirimkan berupa enter atau tidak. Jika data yang diterima merupakan enter, maka sistem akan meriset timer pada AVR dan mengaktifkannya kembali. Setelah itu timer interrupt akan diaktifkan dan sistem akan melakukan perhitungan (konversi antar koordinat menjadi jarak) dan melakukan pemisahan data. Kemudian data yang telah dipisahkan tersebut akan disimpan pada sektor [y] untuk sementara dan nilai array untuk sektor [y] akan ditambahkan. Jika data pada memori internal AVR telah mencapai 512 byte, data akan disimpan di dalam MMC dan kembali pada program utama (pengecekan interrupt eksternal dan interrupt timer). Jika data pada memori internal belum mencapai 512 byte, maka sistem juga akan kembali pada program utama (pengecekan interrupt eksternal dan interrupt timer). Jika counter saat ini memiliki nilai sama dengan satu, maka sektor [y] pada memori internal AVR akan mengambil data pada variabel d (sektor[y]=d), dan kemudian variabel y dan w akan ditambah. Variabel d akan mengambil data yang diterima oleh receiver (getchar1()), kemudian sistem akan memeriksa apakah data yang didapat berupa karakter koma atau bukan. Jika data yang didapat bukan koma, maka hasil data pada variabel d akan disimpan pada array sektor [y]
(memori
internal AVR) dan program akan menambahkan variabel y dan w, dan variabel d akan mengambil data kembali dari receiver hingga menemukan koma. Jika hasil yang didapat adalah koma, maka nilai counter (C) akan ditambahkan dan data yang didapat oleh variabel d akan disimpan pada array sektor [y] (memori internal AVR).
63
Kemudian variabel y dan w akan ditambahkan, dan program akan kembali mengambil data (getchar1()) pada pengecekan koma pertama, setelah C=0) dengan nilai counter sama dengan satu. 3.3.3. Diagram Alur C=2 (interrupt timer)
Gambar 3.9. Diagram alur jika counter sama dengan 2 untuk interrupt timer
Diagram alur di atas menjelaskan jika hasil counter (koma) bernilai dua. Pada saat counter (koma) bernilai 2, maka data yang diterima akan disimpan pada variabel array [y] dan variabel array a[ ]. Variabel array [a] ini dibutuhkan untuk memisahkan antara koordinat dan waktu, dikarenakan format data yang diterima oleh receiver adalah ddmm.mmmm (d=degree, m=minute), dimana variabel array a[ ] berfungsi untuk menyimpan data koordinat, sehingga derajat dan menit dapat dipisahkan.
64
Karakter titik yang diterima oleh receiver berfungsi sebagai acuan pemisahan derajat dan menit. Setelah data disimpan pada variabel array [y], variabel tersebut akan ditambah dan begitu pula dengan variabel w. Kemudian pada sistem akan dibuat sebuah variabel baru (n) untuk menghitung banyaknya data yang disimpan ke dalam variabel array a [ ], dimana variabel ini akan diberi index awal 1, diwakilkan dengan variabel n (a[n]/n=1). Kemudian variabel d akan mengambil data yang diterima oleh receiver, dan sistem akan memeriksa apakah data yang baru didapat adalah karakter titik atau tidak. Jika tidak, maka variabel array a [ ] yang ke n (a[n]) akan menyimpan data dari variabel d dan data pada variabel d tersebut juga disimpan pada sektor [y] (memori internal AVR). Setelah sistem melakukan penambahan pada variabel y dan w, maka sistem akan mengambil data dari receiver dan disimpan di dalam variabel d, hingga data yang diterima merupakan karakter titik (“.”). Jika data tersebut merupakan karakter titik, maka akan disimpan di dalam sektor [y]. Kemudian sistem akan melakukan penambahan pada variabel y dan w, dan program akan memberikan sebuah variabel baru (x) yang diberi nilai nol (0). Variabel ini berfungsi untuk melakukan
proses
matematika.
Proses
matematika
ini
dibutuhkan
untuk
menggabungkan beberapa karakter menjadi satu karakter saja. Hal ini dilakukan karena seluruh variabel, selain array hanya dapat menyimpan satu karakter saja, sedangkan karakter yang akan disimpan lebih dari satu karakter. Variabel (m) dibutuhkan untuk membantu variabel array a[ ] dalam pemisahan data (derajat dan menit), yang diberi nilai awal sama dengan nol (0). Pemberian nilai awal sama dengan nol pada variabel m agar sistem dapat mengambil data koordinat pada array a[0] hingga a[m≤(n-3)]. Jika belum mencapai m≤(n-3) maka, sistem akan melakukan
65
proses matematika yang hasilnya disimpan pada variabel lintang2. Hasil yang terdapat pada variabel lintang2 akan disimpan pada variabel x, dan kemudian program akan kembali memeriksa apakah data yang didapat telah mencapai m≤(n-3) atau belum, setelah variabel m ditambahkan oleh sistem. Jika sudah tercapai, maka nilai pada variabel x akan di-nol-kan kembali. Sistem akan memeriksa apakah nilai pada variabel m lebih kecil dari variabel n (m
66
3.3.4. Diagram Alur C=3 dan C=5 (interrupt timer)
Gambar 3.10. Diagram alur jika counter sama dengan 3 atau 5 untuk interrupt timer
Diagram alur diatas menjelaskan jika counter (variabel C) saat ini bernilai 3. Data yang didapat pada variabel d akan disimpan pada array sektor [y] (memori internal AVR) yang kemudian variabel y dan w akan ditambahkan. Sistem kemudian akan mengirim data ke variabel d dan disimpan kembali pada memori internal AVR, selanjutnya variabel y dan w akan ditambahkan. Setelah kedua variabel tersebut ditambahkan maka program akan kembali mengambil data (getchar(1) pada pengecekan koma pertama, setelah C=0). Diagram alur ini juga menjelaskan pada saat counter memiliki nilai 5. Begitu pula dengan diagram alur C=3 dan C=5 pada log koordinat awal.
67
3.3.5. Diagram Alur C=4 (interrupt timer)
Gambar 3.11. Diagram alur jika counter sama dengan 4 untuk interrupt timer
Diagram alur di atas menjelaskan pada saat counter sama dengan 4. Urutan instruksi yang diberikan untuk dijalankan oleh mikrokontroler tidak jauh berbeda dengan urutan instruksi jika counter sama dengan 2. Perbedaannya adalah, jika pada counter sama dengan 2, perhitungan matematika yang dilakukan disimpan untuk variabel lintang2, maka pada diagram alur ini proses matematika yang dilakukan disimpan dalam variabel bujur1, dan juga penggantian variabel z menjadi variabel o untuk menyatakan bahwa data yang didapat adalah waktu (menit).
68
3.3.6. Diagram Alur C=6 (interrupt timer)
Gambar 3.12. Diagram alur jika counter sama dengan 6 untuk interrupt timer
Pada saat counter bernilai 6, maka sistem akan mengambil data dan memeriksanya, apakah data tersebut bernilai 1 (benar) atau tidak. Jika bernilai 1, maka data tersebut akan disimpan untuk sementara pada sektor [y] (memori internal AVR), dan pointer array y akan ditambahkan. Setelah nilai variabel w di-nol-kan maka sistem akan kembali mengambil data berikut. Jika tidak bernilai 1, maka variabel y akan dikurangkan dengan variabel w, yang kemudian variabel w akan di-nol-kan. Kemudian sistem akan mengambil ulang data dari awal ($GPGGA). Diagram alur di atas juga digunakan pada diagram alur C=6 untuk log koordinat awal.
69
3.3.7. Log Koordinat Awal
Gambar 3.13. Diagram alur log koordinat awal
70
Gambar 3.14. Diagram alur pemeriksaan counter untuk log koordinat awal
Diagram alur di atas merupakan urutan instruksi yang dilakukan oleh AVR pada saat me-logging koordinat awal. Jika dilihat urutan kerja pada diagram alur ini memiliki kesamaan dengan urutan instruksi pada diagram alur untuk interrupt timer. Akan tetapi, jika pada interrupt timer setelah counter melebihi nilai 6, maka akan dilakukan proses perhitungan setelah data mendapat carriage return (tombol enter pada keyboard PC) dan me-reset timer. Sama halnya pada instruksi pada diagram alur interrupt timer, setelah mengembalikan nilai timer, maka timer akan diaktifkan
71
kembali, tetapi pada diagram alur ini, instruksi berikutnya bukanlah proses perhitungan dan menyimpan data yang di dapat pada MMC, melainkan kembali pada instruksi pengecekan dua interrupt (interrupt eksternal dan interrupt timer) pada diagram alur utama. Urutan instruksi pada diagram alur di atas hanya digunakan sekali saja, pada saat mengambil data pertama kali sebagai koordinat awal. 3.3.8. Diagram Alur C=2 (Log Koordinat Awal)
Gambar 3.15. Diagram alur jika counter sama dengan 2 untuk log koordinat awal
Pada dasarnya diagram alur diatas memiliki instruksi yang sama dengan diagram alur pada interrupt timer jika hasil counter sama dengan 2. Akan tetapi ada perbedaan variabel ketika menyimpan hasil proses matematika. Jika pada interrupt
72
timer hasil perhitungan matematika dimasukkan pada variabel lintang2, maka pada diagram ini disimpan pada variabel lintang1. Dan jika pada interrupt timer terdapat variabel z untuk menyatakan bahwa data yang didapat adalah waktu (menit), maka pada diagram alur ini dinyatakan dengan variabel h. 3.3.9. Diagram Alur C=4 (Log Koordinat Awal)
Gambar 3.16. Diagram alur jika counter sama dengan 4 untuk log koordinat awal
Urutan instruksi pada diagram alur di atas memiliki persamaan dengan urutan instruksi pada diagram alur interrupt timer jika hasil counter sama dengan 4. Perbedaannya adalah pada penggantian variabel bujur2 menjadi variabel bujur1 dan variabel o menjadi variabel j.
73
3.3.10. Diagram Alur Interrupt Eksternal
Gambar 3.17. Diagram alur interrupt eksternal
Pada diagram alur utama terdapat pengecekan interrupt eksternal pada sistem, diagram alur di atas menjelaskan urutan instruksi yang dilakukan oleh mikrokontroller jika mendapat interrupt eksternal, dimana interrupt ini terjadi apabila terdapat penekanan tombol (push-button) yang terdapat pada rangkaian sistem ini. Interrupt ini digunakan apabila kendaraan telah mencapai tujuan akhir. Pada saat push-button ditekan, maka AVR akan memeriksa apakah sektor y kurang dari 511 atau tidak. Jika y kurang dari 511, AVR akan memeriksa apakah 511-y lebih besar dari 13 atau tidak. Jika ya, sistem akan melakukan pemisahan data dan menghitung
74
jarak total, kemudian data tersebut disimpan sementara di sektor [y] dan kemudian variabel y ditambahkan. Setelah itu sistem akan mengecek, apakah data yang terdapat pada sektor [y] sudah mencapai 512 byte atau belum. Oleh karena satu sektor pada MMC memiliki kapasitas 512 byte, maka jika hal ini belum terpenuhi sistem akan memenuhi sektor [y] dengan karakter bintang (“*”) dan variabel y (memori internal AVR) akan ditambahkan. Jika data terakhir yang akan dikirim ke MMC sudah mencapai 512 byte, maka data akan disimpan dan nilai pada flag akan bernilai 1. Sistem akan terus berputar pada flag hingga ada penekanan pada keyboard (PC), seperti yang telah dijelaskan sebelumnya. Jika 511-y tidak lebih besar dari 13, sistem akan mengecek, apakah y sudah sama dengan 512 atau belum. Jika tidak, sistem akan memenuhi sektor [y] dengan karakter bintang, sektor y di tambah, dan kembali mengecek apakah y sama 512 atau belum. Jika sudah, data akan disimpan di MMC dan melakukan proses pemisahan data. Jika y kurang dari 511, sistem akan mengecek apakah y==511 atau tidak. Jika ya, sistem akan menyimpan di dalam MMC dan melakukan pemisahan data. Jika tidak, sistem juga akan menyimpan di dalam MMC dengan kondisi u=0, dan hasil pengurangan variabel y-511 disimpan di dalam variabel lebih. Kemudian AVR akan mengecek apakah nilai U lebih kecil dari nilai pada variabel lebih atau tidak. Jika belum, sistem akan melakukan penambahan terhadap variabel U (U+1), yang disimpan di dalam variabel y. Jika lebih besar dari 511, sistem akan menambah sektor U dengan 512 dan disimpan di dalam sektor [U], kemudian kembali mengecek variabel U hingga sudah lebih besar atau sama dengan variabel lebih.
75
3.3.11. Diagram Alur Proses Perhitungan Jarak Proses Perhitungan Jarak
Proses perhitungan perubahan koordinat lintang1 ke dalam radiance
A
Perhitungan Great Circle
Perhitungan jarak antar 2 koordinat Proses perhitungan perubahan koordinat bujur1 ke dalam radiance
Proses perhitungan perubahan koordinat lintang2 ke dalam radiance
Jarak total = jarak total+jarak
lintang1=lintang2
bujur1=bujur2 Proses perhitungan perubahan koordinat bujur2 ke dalam radiance
A
Waktu lintang 1=waktu lintang2 (h=z)
Waktu bujur 1=waktu bujur2 (j=o)
Gambar 3.18. Diagram alur proses perhitungan jarak
Seperti yang telah dijelaskan pada bab sebelumnya, hasil data yang di dapat oleh receiver berupa derajat, dan harus dirubah ke dalam radian. Diagram alur di atas menunjukkan urutan instruksi untuk penghitungan jarak antar dua titik dan total jarak tempuh. Dapat dilihat pada diagram alur di atas, saat jarak total di dapat, maka data pada variabel lintang2 akan disimpan menjadi variabel lintang (lintang=lintang2),
76
begitu pula pada waktu lintang dan waktu bujur, data terakhir akan menjadi data sebelumnya. Hal ini dilakukan agar pada saat menerima data berikutnya, maka data terakhir tersebut menjadi data pertama yang selanjutnya akan dihitung dengan jarak kedua.