BAB III PERENCANAAN DAN PEMBUATAN SISTEM
3.1.Perencanaan Sistem Perencanaan sistem kendali otomatis antenna parabola dengan cara kerja mikrokontroller arduino mega 2560 R3 memerintahkan dan menerima informasi dari GPS shield Ublox LEA-5H, kemudian informasi ini diolah dan dipilah- pilah menjadi informasi lokasi keberadaan stasiun bumi yaitu tempat Sistem Kendali Otomatis Antenna Parabola sedang beroperasi, kemudian dengan berdasarkan informasi koordinat lokasi stasiun bumi dan koordinat satelit yang dituju, dapat diperoleh nilai sudut azimuth dan elevasi dengan berdasarkan sumbu utara bumi. Dengan demikian diperlukan sensor kompas untuk melakukan koreksi sudut azimuth dan elevasi untuk pergerakan servo antenna parabola. Dan dengan variasi kemiringan tempat stasiun bumi, dapat menyebabkan pembacaan arah mata angin meleset, sehingga diperlukan sensor akselerometer yang dapat mengurangi ketidak akuratan pembacaan arah mata angin akibat kemiringan lokasi. Setelah didapatkan nilai azimuth dan elevasi yang tepat, nilai ini harus dikonversikan kedalam derajat pergerakan servo antenna parabola. Terdapat dua servo di sistem kendali otomatis antenna parabola yang dibuat, yaitu servo azimuth dan servo elevasi yang masing- masing bergerak secara terpisah sesuai dengan perintah mikrokontroller.
35
36
Gambar 3.1 berikut menjelaskan bagan alur kerja sistem kendali otomatis antenna parabola yang dirancang, Mulai
Menyiapkan Sistem
Melakukan pengumpulan data dari Sensor GPS, Sensor Accelerometer (kemiringan) dan Sensor mata angin (kompas) Ulangi pengumpulan Data
Kumpulkan data parameter sensor
Mengulangi proses dari Awal
Data OK?
Perhitungan sudut azimuth dan elevasi Antena
Pengaturan manual posisi Antena Parabola
Eksekusi posisi Antena
Eksekusi
Selesai
Gambar 3.1 Bagan alur kerja sistem kendali otomatis antenna parabola
37
3.1.1.
Pembacaan Koordinat satelit dengan sensor GPS a.
Metode Pembacaan kode GPS dan pemisahan baris kode untuk pembacaan koordinat GPS Informasi yang didapatkan oleh mikrokontroller dari sensor GPS merupakan suatu deret kode data NMEA (The National Marine Electronics Association) yang harus dipisah- pisahkan menjadi beberapa
informasi
yaitu
UTC
(Penunjuk
Waktu
Universal
berdasarkan lokasi), Latitude (Lintang Bumi), Longitude (Bujur Bumi), Latitude Direction (Orientasi arah Lintang), Longitude Direction (Orientasi arah Bujur), Altitude (Tinggi permukaan tempat GPS receiver beroperasi), Kecepatan gerak GPS receiver, Hari dan Tanggal pada posisi GPS receiver beroperasi, dan informasi lainnya. Sensor GPS yang digunakan pada arduino mega 2560 R3 sistem kendali otomatis antenna parabola ini adalah arduino shield dari Ublox LEA-5H. Gambar 3.2 menunjukkan perangkat gps shield untuk arduino dengan chip Ublox LEA-5H sebagai GPS receiver.
38
Gambar 3.2 GPS Shield Ublox LEA-5H dari DFRduino Modul chip Ublox LEA-5H adalah modul yang didesain sebagai perangkat penerima GPS dengan performat tinggi, GPS receiver ini memiliki memori flash yang tertanam didalam chip yang memudahkan dalam pembaruan firmware dan pengaturan kerja modul penerima GPS. Berikut spesifikasi dari gps shield ublox LEA-5H, •
Teknologi kickstart untuk mempercepat penerimaan informasi GPS meskipun dalam kondisi sinyal yang lemah
•
Tegangan operasi pada 2,7 hingga 3,6V
•
Frekuensi rentang pembaruan posisi 2Hz
•
Memiliki
memori
flash
untuk
pembaruan
penyimpanan untuk menyimpan pengaturan
firmware
dan
39 •
Perlindungan dan deteksi short dan open circuit pada antenna eksternal
•
Memiliki interface UART 1 buah, USB 1 buah dan DDC 1 buah
•
Sudah mendukung GALILEO
•
Mampu menampung 50 kanal
•
Sensitifitas dalam ruangan -160 dBm
•
Mendukung SBAS
•
Rentang temperatur kerja -40°C hinggan 85°C
Informasi yang dikirimkan oleh satelit kepada GPS receiver berupa baris informasi NMEA. Berikut adalah contoh informasi yang diterima oleh GPS dari satelit dan akan diproses menjadi informasi- informasi yang terpisah 225446,A,4916.45,N,12311.12,W,000.5,054.7,191194,020.3,E*68 Dari baris kode NMEA tersebut dapat diambil beberapa informasi yang terpisah oleh tanda “ , ”diantaranya adalah: •
225446 =
menunjukkan waktu UTC pada lokasi yaitu pukul
22:54:46 •
A = peringatan pada penerima GPS yang menunjukkan kode A yang berarti posisi valid, jika V berarti peringatan
•
4916.45, N = menunjukkan koordinat lintang dengan format derajat waktu menit yaitu 49 derajat 16.45 menit Lintang Utara yang ditunjukkan oleh kode N yang berarti North
40 •
12311.12,W = menunjukkan koordinat bujur dengan format derajat waktu menit yaitu 123 derajat 11.12 menit Bujur Barat yang ditunjukkan oleh kode W yang berarti West
•
000.5 = menunjukkan kecepatan diatas permukaan tanah, dalam satuan knot
•
054.7 = Panduan arah derajat mata angin dari kutub utara bumi, tidak cukup akurat, oleh karena itu lebih akurat menggunakan sensor kompas
•
191194 = menunjukkan tanggal bulan dan hari sesuai UTC yaitu 19 Nopember 1994
•
020.3,E = menunjukkan variasi medan magnet di lokasi sebesar 20.3 derajat timur, yang berguna untuk faktor koreksi kompas didaerah tersebut
•
*68 = kode penanda sebagai bit koreksi dalam pengiriman informasi
Dari contoh diatas dapat diperoleh beragam informasi dari satelit GPS, yang kemudian dapat diolah kembali untuk mendapatkan nilai sudut azimuth dan elevasi dari perhitungan bersama dengan nilai arah mata angin. b.
Konversi sudut derajat waktu ke sudut derajat desimal Informasi koordinat lintang dan bujur yang diterima oleh mikrontroller dari sensor GPS masih berupa dalam satuan derajat menit dan detik
41
sehingga perlu diubah menjadi derajat satuan desimal, untuk melakukan perubahan satuan tersebut maka perlu diketahui jika, pergeseran satu derajat koordinat bumi sama dengan 60 menit dan sama dengan 3600 detik sehingga 1º = 60' = 3600" dan satu menit sama dengan 1/60 derajat = 0.01666667º, sedangkan satu detik sama dengan 1/3600 derajat = 2.77778e-4º = 0.0000277778º. sehingga untuk mengubah nilai satuan derajat menit detik menjadi derajat desimal menggunakan persamaan berikut, •
Bentuk satuan derajat menit detik = dº m' s"
•
Bentuk satuan derajat desimal = dd
•
Sehingga dapat diketahui nilai derajat desimal adalah
Contoh:
𝑑𝑑𝑑𝑑 = 𝑑𝑑 +
𝑚𝑚 𝑠𝑠 + … … … … … … … … … (3.1) 60 3600
Konversi koordinat 6 derajat 10 menit 45 detik menjadi derajat desimal, d = 6°, m=10, s=45 𝑑𝑑𝑑𝑑 = 𝑑𝑑 + 𝑚𝑚/60 + 𝑠𝑠/3600 = 6° + 10′/60 + 45"/3600 = 6.179° ≅ 6.18°
Pembacaan koordinat dalam derajat desimal berfungsi untuk memudahkan dalam perhitungan untuk mencari derajat nilai sudut
42
azimuth dan elevasi. Serta pembacaan dalam derajat desimal juga dapat memudahkan pembacaan koordinat oleh pengguna karena tidak perlu memperhatikan dan menghitung lagi nilai menit dan detik. 3.1.2.
Pembacaan Sensor Kompas Sensor kompas berguna untuk membaca arah prototype sistem kendali otomatis Antena Parabola menghadap, sehingga dapat menentukan jumlah derajat sudut yang diperlukan untuk mengarah ke sudut azimuth dan elevasi yang tepat. Sensor kompas yang digunakan pada tugas akhir ini adalah sensor kompas HMC5983,
Gambar 3.3 Sensor kompas HMC5983 Beberapa fitur dari modul sensor kompas HMC5983 adalah sebagai berikut, •
Kompensasi offset otomatis
•
I2C
43 •
Tingkat keluaran maksimum pada frekuensi kerja 220Hz
•
Memiliki fitur pengujian diri atau kalibrasi
•
Tegangan operasi rendan antara 2,16V hingga 3,6V dengan arus rendah 100µA
•
Medan magnet jangkauan lebar +- 8 Oe
Spesifikasi pin dari sensor kompas HMC5983 adalah sebagai berikut, • VIN = pin power input bekerja pada tegangan 3-5V DC • GND = Ground • 3vo = pin output power tegangan 3,3V dengan arus 100mA untuk
mensupplai tegangan perangkat lain • SDA dan SCL = pin i2C data dan Clock yang digunakan untuk
mengirim dan menerima data dari modul ke mikrokontroller. Menggunakan pull up resistor 10KΩ dari Vin ke pin SDA dan SCL • RDY = merupakan pin output “data ready”.
dengan tiga sumbu axis yaitu X, Y dan Z. Sensor kompas akan menghasilkan informasi arah mata angin dalam format sumbu X, Y, dan Z, informasi ini berisi besaran medan magnet yang ada di masingmasing sumbu X, Y dan Z.
44
Gambar 3.4 Sumbu X, Y, dan Z pada kompas Arah mata angin merupakan nilai dari besaran magnet sumbu X, Y dan Z yang diolah melalui perhitungan sehingga didapatkan arah mata angin dengan patokan sumbu utara kutub bumi, sehingga untuk mendapatkan nilai derajat arah mata angin dari sumbu utara diperlukan persamaan berikut, 𝐴𝐴𝐴𝐴𝐴𝐴ℎ 𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚 𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎 = 𝑎𝑎𝑎𝑎𝑎𝑎 𝑡𝑡𝑡𝑡𝑡𝑡 ( 3.1.3.
𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛 𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑 𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠 𝑌𝑌 ) … … … … … … … … … (3.2) 𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛 𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑 𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠 𝑋𝑋
Pembacaan Sensor Akselerometer Pada pembahasan sebelumnya sensor kompas berfungsi untuk menentukan nilai arah mata angin, maka sensor akselerometer berfungsi untuk mengukur gaya percepatan gravitasi pada sumbusumbunya. Gaya percepatan gravitasi ini merupakan gaya konstan dan statik seperti medan gravitasi, dan dapat pula dinamis jika disebabkan oleh getaran atau pergerakan akselerometer. Dengan pengukuran
45
percepatan gravitasi statis dapat ditemukan nilai sudut kemiringan benda terhadap permukaan bumi, sedangkan dengan melakukan perhitungan percepatan dinamis dapat dianalisa arah pergerakan benda. Prinsip kerja akselerometer adalah seperti sebuah bola yang melayang berada dalam kotak jika tidak ada pergerakan dan gravitasi sama dengan nol.
Gambar 3.5 Ilustrasi kerja akselerometer gravitasi nol
Dan jika kotak ini dipindahkan dari posisi sekarang ke posisi lain, meskipun tidak ada gravitasi, posisi bola akan terpengaruh dan bergerak ke arah sumbu X, Y atau Z sesuai pergerakan dan perpindahan kotak.
46
Gambar 3.6 Ilustrasi kerja akselerometer ketika benda bergerak Akselerometer selalu bekerja dan mendeteksi gaya berlawanan dengan arah gerak benda. Kemudian jika diibaratkan kotak berisi bola yang mengapung tersebut ditempatkan pada bidang bergravitasi misalkan bumi, maka gambar 3.7 dapat menjelaskan kondisi tersebut,
Gambar 3.7 Ilustrasi kerja akselerometer pada bidang gravitasi
47
Akselerometer dalam keadaan diam masih bekerja dan membaca nilai gravitasi sebesar -1g pada sumbu Z. tekanan bola dalam kotak pada bidang Z disebabkan oleh gravitasi. Medan magnet juga dapat berpengaruh pada akselerometer, sehingga jika diletakkan logam bermedan magnet disalah satu sisi kotak, maka bola akan bergerak ke arah medan magnet tersebut. Begitu pula ketika akselerometer diputar maka bola akan selalu bergerak mengikuti medan magnet atau gravitasi.
Gambar 3.8 Ilustrasi kerja Akselerometer ketika berguling dalam medan gravitasi Pada sistem kendali otomatis antenna parabola, akselerometer bekerja sebagai faktor koreksi pembacaan arah mata angin pada kompas.
48
Prinsip kerja dari gabungan sensor kompas dan akselerometer adalah sebagai berikut, • Sensor kompas membaca arah mata angin berdasarkan perhitungan
dari nilai medan magnet di sumbu X, Y dan Z berdasarkan kutubkutub magnet bumi • Sensor akselerometer berfungsi untuk membaca faktor kemiringan
dari sensor kompas terhadap permukaan bumi. • Sensor
akselerometer akan menjadi seperti waterpass yang
mengkoreksi kemiringan bumi hingga derajat tertentu. • Berdasarkan nilai kemiringan yang diberikan sensor akselerometer,
sensor kompas dapat memberikan nilai arah mata angin lebih akurat.
Pada perancangan sistem kendali otomatis antenna parabola berbasis arduino, digunakan sensor akselerometer ADXL345.
49
Gambar 3.9 Sensor Akselerometer ADXL345 Untuk melakukan kompensasi pembacaan nilai arah mata angin sensor kompas, diperlukan nilai pitch dan roll dari akselerometer. Gambar 3.10 menunjukkan ilustrasi dari pitch dan roll pada akselerometer. Dan gambar 3.11 menunjukkan sumbu X, Y, dan Z pada akselerometer.
Gambar 3.10 Ilustrasi pitch dan roll pada akselerometer
50
Gambar 3.11 Sumbu X, Y, dan Z pada akselerometer Nilai pitch dan roll dapat dihitung melalu perhitungan sebagai berikut, 𝑅𝑅𝑅𝑅𝑅𝑅𝑅𝑅 (𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑 𝑟𝑟𝑎𝑎𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑)
𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛 𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎 𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠 𝑌𝑌 ) … … … … … … … … … (3.3) 𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛 𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠 𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎 𝑍𝑍
= 𝑎𝑎𝑎𝑎𝑎𝑎 𝑡𝑡𝑡𝑡𝑡𝑡 (
𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃ℎ (𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑 𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟)
𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛 𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎 𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠 𝑋𝑋 ) … … … … … … … … … (3.4) 𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛 𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠 𝑎𝑎𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘 𝑍𝑍
= 𝑎𝑎𝑎𝑎𝑎𝑎 𝑡𝑡𝑡𝑡𝑡𝑡 (
Setelah menghitung nilai pitch dan roll. Dapat dihitung nilai derajat toleransi sumbu X dan sumbu Y pada sensor kompas. Yaitu dengan persamaan berikut, 𝑁𝑁𝑁𝑁𝑁𝑁𝑁𝑁𝑁𝑁 𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡 𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠 𝑋𝑋 𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘 = 𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑗𝑗𝑎𝑎𝑎𝑎 𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠 𝑋𝑋 𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘 ∗
cos(𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃ℎ) + 𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑 𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠 𝑍𝑍 𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘 ∗ sin(𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃ℎ) … … … … … … … … … (3.5)
𝑁𝑁𝑁𝑁𝑁𝑁𝑁𝑁𝑁𝑁 𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡 𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠 𝑌𝑌 𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘 = (𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑 𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠 𝑋𝑋 𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘 ∗ sin(𝑅𝑅𝑅𝑅𝑅𝑅𝑅𝑅) ∗ sin(𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃ℎ)) + (𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑 𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠 𝑌𝑌 𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘 ∗
51 cos(𝑅𝑅𝑅𝑅𝑅𝑅𝑅𝑅)) − (𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑 𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠 𝑍𝑍 𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘 ∗ sin(𝑅𝑅𝑅𝑅𝑅𝑅𝑅𝑅) ∗ cos(𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃ℎ)) … … … … … … … … … (3.6)
Sehingga dengan demikian dapat dihitung arah mata angin sensor kompas dengan toleransi dari sensor akselerometer kemiringan benda terhadap permukaan bumi dengan menggunakan persamaan 3.2. Rangkaian untuk menggabungkan sensor GPS, sensor kompas, dan sensor accelerometer menggunakan komunikasi i2c dapat dilhat pada gambar 3.12, koneksi i2c dengan menggunakan pin SDA dan SCL pada masing- masing sensor terhubung paralel terhadap pin SDA dan SCL pada arduino mega 2560 R3, menggunakan resistor 4,7KΩ sebagai pull up resistor untuk menjaga supaya keadaan pin SDA dan SCL ketika tidak ada perintah dari arduino untuk melakukan instruksi selalu dalam keadaan HIGH-STATE, dan ketika ada instruksi menjadi LOW-STATE, dengan demikian tidak terjadi keadaan mengambang yang menyebabkan komponen aktif secara tidak sengaja dikarenakan short dalam circuit.
52
5V FROM ARDUINO
BAGIAN SENSOR PENERIMAAN SINYAL GPS, KOMPAS, DAN GRAVITASI SDA
GPS1
SCL
GPS SHIELD UBLOX LEA-5H 1
VCC
R2
4
SDA
4.7K 2
GND
R3
5
SCL
4.7K
GPS SHIELD
COMP1 1
VCC
R4
5
SDA
4.7K 3
GND
R5
4
SCL
4.7K
COMPASS
ACC1 ACCELEROMETER ADXL345 2
VCC
R6
7
SDA
4.7K 1
GND
R7
8
SCL
4.7K
ACCELEROMETER
SDA
14 15 16 17 18 19 20 21
PA0/AD0 PA1/AD1 PA2/AD2 PA3/AD3 PA4/AD4 PA5/AD5 PA6/AD6 PA7/AD7 PC7/A15 COMUNICATION PC6/A14 PC5/A13 PC4/A12 PC3/A11 PC2/A10 PC1/A9 PC0/A8 PD7/T0 PG2/ALE PG1/RD PG0/WR PL7 PL6 PL5/OC5C PL4/OC5B PL3/OC5A PL2/T5 PL1/ICP5 PL0/ICP4 PB3/MISO/PCINT3 PB2/MOSI/PCINT2 PB1/SCK/PCINT1 PB0/SS/PCINT0
DIGITAL
ATMEGA2560 16AU 1126
PK0/ADC8/PCINT16 PK1/ADC9/PCINT17 PK2/ADC10/PCINT18 PK3/ADC11/PCINT19 PK4/ADC12/PCINT20 PK5/ADC13/PCINT21 PK6/ADC14/PCINT22 PK7/ADC15/PCINT23
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
A8 A9 A10 A11 A12 A13 A14 A15
A0 A1 A2 A3 A7 A6 A5 A4
PF0/ADC0 PF1/ADC1 PF2/ADC2 PF3/ADC3 PF7/ADC7/TDI PF6/ADC6/TDO PF5/ADC5/TMS PF4/ADC4/TCK
ANALOG IN
RESET
ARDUINO MEGA2560 R3
VCC=9V FROM AC ADAPTER
MIKROKONTROLLER
PWM
TX3 PJ1/TXD3/PCINT10 RX3 PJ0/RXD3/PCINT9 TX2 PH1/TXD2 RX2 PH0/RXD2 TX1 PD3/TXD1/INT3 RX1 PD2/RXD1/INT2 SDA PD1/SDA/INT1 SCL PD0/SCL/INT0
7 6 5 4 3 2 1 0 PH4/OC4B PH3/OC4A PE3/OC3A/AIN1 PG5/OC0B PE5/OC3C/INT5 PE4/OC3B/INT4 TX0 PE1/TXD0/PDO RX0 PE0/RXD0/PCINT8
AREF
PB7/OC0A/OC1C/PCINT7 PB6/OC1B/PCINT6 PB5/OC1A/PCINT5 PB4/OC2A/PCINT4 PH6/OC2B PH5/OC4C
13 12 11 10 9 8
SCL
Gambar 3.12 Rangkaian koneksi i2c sensor GPS, kompas, dan accelerometer dengan arduino
53
3.1.4.
Pengendalian motor Servo Sistem Kendali Otomatis Antenna Parabola menggunakan motor servo sebagai mesin mekanik penggerak antenna, dengan spesifikasi pergerakan maksimal ayunan adalah 180 derajat berlawanan arah jarum jam. Servo yang digunakan adalah jenis servo untuk RC. Untuk mengendalikan gerak servo dapat menggunakan kode sederhana sebagai berikut, #include <Servo.h> Servo myservo; void setup() { myservo.attach(9); myservo.write(90); }
// atur servo bergerak ke titik tengah
void loop() {}
Kode program diatas berfungsi untuk memerintahkan servo pada pin 9 pada arduino untuk bergerak sebesar 90 derajat. Namun dengan menggunakan kode program diatas, gerak servo akan tidak akurat pada sudut- sudut minimum dan maksimum, sehingga untuk meningkatkan akurasi gerak servo, perlu menggunakan fungsi pulsa pada servo. Kode program untuk menggerakan servo dengan fungsi pulsa pada satuan waktu milidetik adalah sebagai berikut, #include <Servo.h> Servo myservo; void setup() { myservo.attach(9); myservo.writeMicroseconds(1500); tengah }
// atur pergerakan servo ke titik
54
void loop() {}
Kode program diatas berfungsi sama seperti kode program yang dicantumkan sebelumnya, yaitu menggerakan servo pin 9 pada arduino ke titik tengah, namun perbedaan terdapat pada perintah myservo.writeMicroseconds(1500); pernyataan ini berisi perintah untuk menggerakan motor servo selama 1500 milidetik kemudian berhenti dan menahan posisi sampai ada perintah lebih lanjut. Pengiriman pulsa pada waktu milidetik menyebabkan servo bergerak sesuai dengan perintah pulsa yang dikirimkan oleh mikrokontroller pada rentang waktu milidetik. Namun setiap servo memiliki nilai pulsa yang berbeda untuk mencapai sudut 0, sudut 90, dan sudut 180, sehingga perlu dilakukan percobaan berkali- kali untuk mendapatkan nilai pulsa, dan waktu yang tepat untuk mencapai sudut yang sesuai dan akurat.
3.2.Parameter Desain Sistem kendali otomatis antenna parabola menggunakan desain parameter input terdiri dari sensor GPS, sensor kompas, dan sensor accelerometer serta keypad sebagai input perintah yang diberikan pada arduino, dengan parameter proses pada mikrokontroller arduino mega 2560 R3, dan output ditampilkan pada display LCD dan motor servo sebagai penggerak utama antenna parabola. Gambar 3.13 menunjukkan gambar model desain sistem kendali
55
otomatis antenna parabola yang dibuat. Sistem kendali dibuat menggunakan media akrilik, dua motor servo sebagai alat simulasi penggerak antenna parabola azimuth dan elevasi, dua penggaris busur 360 derajat digunakan sebagai alat ukur untuk meneliti tingkat akurasi sudut yang dihasilkan program sesuai dengan yang digerakan oleh motor servo.
Gambar 3.13 Desain sistem kendali otomatis antenna parabola berbasis arduino
56
3.2.1.
Sistem Kendali Gabungan Kerja sensor GPS, Kompas, Akselerometer dan motor Servo Parameter desain sistem kendali otomatis antenna parabola berbasis arduino terbagi menjadi tiga bagian proses, yaitu input, proses, dan output. Bagian input berisi komponen yang berfungsi menyediakan informasi untuk diolah pada bagian proses yaitu sensor GPS, sensor kompas, sensor akselerometer dan keypad. Bagian proses merupakan mikrokontroller arduino mega 2560 R3 yang merupakan pusat pengolahan informasi yang diterima dari bagian input yang kemudian memberikan instruksi pada komponenkomponen pada bagian output, yaitu servo dan LCD display. Servo berfungsi sebagai perangkat mekanik penggerak antenna parabola bergerak azimuth dan elevasi mengarah ke satelit yang digunakan. Sedangkan LCD Display sebagai fungsi interface untuk menampilkan informasi dan perintah- perintah yang dilaksanakan oleh sistem kendali otomatis antenna parabola. Gambar 3.14 menunjukkan bagan hubungan kerja sistem kendali otomatis antenna parabola.
57
Gambar 3.14 Bagan hubungan kerja sistem kendali otomatis antenna parabola
3.2.2.
Fungsi Interface Sistem Kendali Otomatis Antenna Parabola dengan LCD dan Keypad Fungsi interface sistem kendali otomatis antenna parabola terdiri dari dua komponen yaitu LCD display dan keypad. Keypad yang digunakan adalah keypad matrix 4x4 yang dapat digunakan untuk memasukkan input numerik koordinat satelit, koordinat lokasi,
58
besaran offset antenna, mengatur gerak servo, menggerakan servo azimuth dan elevasi secara manual, serta untuk melakukan perpindahan menu pada layar. LCD display berfungsi untuk menampilkan proses yang dikerjakan dari mikrokontroller sehingga pengguna dapat lebih mudah memahami proses yang terjadi pada sistem kendali otomatis antenna parabola. Susunan menu interface sistem kendali otomatis antenna parabola disusun sebagai berikut, • Menu Utama
- Menu
Otomatis
(berisi
pengaturan
otomatis
untuk
menggerakan antenna parabola) Ant. Center Fokus (pilihan menu otomatis untuk tipe antenna center fokus) Palapa D Telkom 1 Telkom 2 Asiasat 3 Asiasat 5 Input Manual (menu untuk melakukan input manual koordinat lokasi, koordinat satelit, dan offset antenna)
Ant. Offset Fokus (pilihan menu otomatis untuk tipe antenna offset fokus)
59 Palapa D Telkom 1 Telkom 2 Asiasat 3 Asiasat 5 Input Manual (menu untuk melakukan input manual koordinat lokasi, koordinat satelit, dan offset antenna) - Menu Manual (berisi pengaturan manual terkait pergerakan servo) - Panduan pengguna (berisi tutorial penggunaan alat) - Tentang skripsi (berisi informasi tentang alat) - Tentang saya (berisi informasi tentang penulis yang membuat tugas akhir sistem kendali otomatis antenna parabola) Komponen LCD display yang digunakan adalah LCD numerik 4 baris 20 kolom atau 20 karakter per baris. Fungsi menu interface yang digunakan pada tugas akhir ini menggunakan library program menu buatan Liu yaitu Phi Interface (http://liudr.wordpress.com/libraries/phi_interfaces). Dengan menggunakan library tersebut dapat memudahkan dalam pembuatan interface menu bertingkat, dan memaksimalkan kinerja keypad dan LCD untuk beragam fungsi yang berbeda.
60
3.3.
Pembuatan Sistem Kendali Otomatis Antenna Parabola Sistem kendali otomatis antenna parabola berbasis arduino telah dibuat dengan menggunakan rancangan desain penggerak motor servo untuk azimuth dan elevasi, keypad matrix 4x4, lcd display, dan sensor – sensor. Dalam suatu rangkaian kerja sistem, gambar 3.15 menunjukkan rangkaian sistem kendali otomatis antenna parabola secara keseluruhan. Tegangan suplai mikrokontroller arduino dihasilkan dari adapter AC to DC 9V 1A, yang diinputkan pada arduino yang kemudian menyuplai daya pada sensor GPS, sensor kompas, sensor accelerometer dan motor servo azimuth dan elevasi dengan tegangan 5V, dengan banyak komponen yang terpasang, menjadikan display LCD mendapatkan arus tegangan yang tidak stabil sehingga dibuat percabangan keluaran adapter AC to DC 9V menggunakan rangkaian regulator menjadi tegangan 5V secara terpisah untuk mensuplai daya display LCD. Rangkaian regulator sederhana menggunakan kapasitor 10µF pada sisi input dan output regulator IC 7805 sebagai pengurang ripple tegangan, dan dilengkapi LED disusun seri dengan resistor sebagai indikator tegangan keluaran regulator. Tegangan 5V keluaran regulator menjadi suplai utama LCD, dan input karakter berasal dari arduino, untuk mengatur kecerahan layar menggunakan potensiometer 10KΩ terhubung pada pin 3 LCD. Sisi motor servo dilengkapi diode 1N007 dengan arah arus masuk ke motor, digunakan untuk mencegah arus balik ke sistem yang diakibatkan
61
gerakan motor dari pengaruh eksternal seperti memutar- mutar motor servo dengan tangan yang mengakibatkan motor menghasilkan arus listrik yang mengalir ke sistem mikrokontroller. Kapasitor sebesar 100µF dipasang pada antara input Vcc dan GND pada motor servo untuk menstabilkan ripple yang terjadi akibat instruksi yang diberikan oleh arduino.
62
5V FROM ARDUINO
BAGIAN SENSOR PENERIMAAN SINYAL GPS, KOMPAS, DAN GRAVITASI
MKP1
SDA
GPS1 VCC
SDA
R2
4
4.7K 2
GND
SCL
R3
5
COMP1
3
4
A
1
2
3
A
A
B
6
5
4
B
B
VCC
SDA
C
7
8
9
C
C
0
#
D
D
2
3
4
R4
5
4.7K 3
2
4.7K
GPS SHIELD
1
GND
SCL
R5
4
D
4.7K
COMPASS
1
ACC1 ACCELEROMETER ADXL345 VCC
SDA
GND
SCL
R6
7
4 3 2 1 A B C D
2
KEYPAD PENGENDALI SISTEM
1
4.7K 1
R7
8
4.7K
ACCELEROMETER
SDA SCL
14 15 16 17 18 19 20 21
PK0/ADC8/PCINT16 PK1/ADC9/PCINT17 PK2/ADC10/PCINT18 PK3/ADC11/PCINT19 PK4/ADC12/PCINT20 PK5/ADC13/PCINT21 PK6/ADC14/PCINT22 PK7/ADC15/PCINT23
D0 D1 D2 D3 D4 D5 D6 D7 7 8 9 10 11 12 13 14
VSS VDD VEE
RS RW E 4 5 6
LCD 5V
POTENSIO
10K
KONVERTER TEGANGAN 9V KE 5V SUPLAI TEGANGAN KE LCD TERPISAH DARI SISTEM SUPAYA TIDAK TERJADI BAD CHARACTER DISPLAY
A8 A9 A10 A11 A12 A13 A14 A15
9V FROM AC ADAPTER
LCD 5V
REGULATOR 7805
C1 10u
VI
VO
R1
3
100Ohm
GND
1
C2 2
A0 A1 A2 A3 A7 A6 A5 A4
PF0/ADC0 PF1/ADC1 PF2/ADC2 PF3/ADC3 PF7/ADC7/TDI PF6/ADC6/TDO PF5/ADC5/TMS PF4/ADC4/TCK
ANALOG IN
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
1 2 3
PA0/AD0 PA1/AD1 PA2/AD2 PA3/AD3 PA4/AD4 PA5/AD5 PA6/AD6 PA7/AD7 PC7/A15 COMUNICATION PC6/A14 PC5/A13 PC4/A12 PC3/A11 PC2/A10 PC1/A9 PC0/A8 PD7/T0 PG2/ALE PG1/RD PG0/WR PL7 PL6 PL5/OC5C PL4/OC5B PL3/OC5A PL2/T5 PL1/ICP5 PL0/ICP4 PB3/MISO/PCINT3 PB2/MOSI/PCINT2 PB1/SCK/PCINT1 PB0/SS/PCINT0
DIGITAL
ATMEGA2560 16AU 1126
RESET
ARDUINO MEGA2560 R3
VCC=9V FROM AC ADAPTER
SISTEM KENDALI OTOMATIS ANTENNA PARABOLA BERBASIS ARDUINO MIKROKONTROLLER UNTUK SATELLITE GATHERING NEWS VAN UNIT PT MEDIA TELEVISI INDONESIA
PWM
DISPLAY MENAMPILKAN MENU DAN PROSES KERJA SISTEM
TX3 PJ1/TXD3/PCINT10 RX3 PJ0/RXD3/PCINT9 TX2 PH1/TXD2 RX2 PH0/RXD2 TX1 PD3/TXD1/INT3 RX1 PD2/RXD1/INT2 SDA PD1/SDA/INT1 SCL PD0/SCL/INT0
7 6 5 4 3 2 1 0 PH4/OC4B PH3/OC4A PE3/OC3A/AIN1 PG5/OC0B PE5/OC3C/INT5 PE4/OC3B/INT4 TX0 PE1/TXD0/PDO RX0 PE0/RXD0/PCINT8
AREF
PB7/OC0A/OC1C/PCINT7 PB6/OC1B/PCINT6 PB5/OC1A/PCINT5 PB4/OC2A/PCINT4 PH6/OC2B PH5/OC4C
13 12 11 10 9 8
LCD DISPLAY
10u
D1 LED-RED
5V FROM ARDUINO
SERVO AZIMUTH
D2 DIODE
C3 100u +88.8 TGY-R5180-MG
D3
SERVO ELEVASI
DIODE
C4 100u +88.8 TGY-R5180-MG
PENGGERAK MOTOR ANTENNA
GND GND
Gambar 3.15 Rangkaian Sistem Kendali Otomatis Antenna Parabola berbasis Arduino
1
KEYPAD-4X4ABCD
SCL
GPS SHIELD UBLOX LEA-5H
63
3.3.1. a.
Bagian Pembacaan Koordinat Lokasi Stasiun Bumi Pembacaan koordinat lokasi dengan sensor GPS Perancangan pembacaan koordinat lokasi sudah dijelaskan pada bagian metode pembacaan koordinat GPS dari baris informasi NMEA yang dikirimkan oleh satelit GPS ke perangkat GPS receiver, yaitu dengan memisah- misahkan informasi berdasarkan tanda pemisah “,”. Dengan demikian dapat dibuat program untuk memisah- misahkan informasi yang dikirimkan menjadi beberapa informasi terpisah yang dapat digunakan kembali dalam proses mendapatkan nilai sudut azimuth dan elevasi. Untuk melakukan pembacaan informasi dari satelit GPS, komunikasi menggunakan wire i2c, yaitu port SDA pada pin 20 arduino Mega 2560 R3 dengan jumper dihubungkan dengan port SDA pada GPS shield Ublox LEA-5H pada pin 5, dan port SCL pada pin 21 arduino Mega 2560 R3 dengan jumper dihubungkan dengan port SCL pada GPS shield Ublox LEA-5H pada pin 4.
64
Gambar 3.16 Koneksi jumper i2C arduino dengan GPS shield Berikut kode program untuk memanggil dan memerintahkan GPS Shield,
65
#if defined(ARDUINO) && ARDUINO >= 100 #include "Arduino.h" #define WireSend(args) Wire.write(args) //menyederhanakan perintah Wire.write menjadi WireSend #define WireRead(args) Wire.read(args) //menyederhanakan perinta Wire.read menjadi WireRead #define printByte(args) Serial.write(args) //menyederhanakan perintah Serial.write menjadi printByte #define printlnByte(args) Serial.write(args),Serial.println() #else #include "WProgram.h" #define WireSend(args) Wire.send(args) #define WireRead(args) Wire.receive(args) #define printByte(args) Serial.print(args,BYTE) #define printlnByte(args) Serial.println(args,BYTE) //menyederhanakan perintah Serial.println menjadi printlnByte #endif #include <Wire.h> #define BUFFER_LENGTH 10//Menentukan panjang buffer sebesar 10bit untuk mencakup seluruh kode informasi dari satelit ke GPS int GPSAddress = 0x42; //Menentukan alamat i2C pada GPS yang akan diakses
Arduino mega 2560 R3 menggunakan library Arduino.h, Wprogram.h dan Wire.h untuk melakukan komunikasi wire i2c antar dua sistem pada alamat 0x42 yang merupakan alamat i2c unik pada sensor GPS ublox LEA-5h, menggunakan lebar buffer 10bit cukup untuk menampung deret kode informasi yang diterima oleh sensor GPS yang kemudian dikirimkan ke mikrokontroller untuk kemudian diolah lebih lanjut. Dan untuk memulai pengambilan data menggunakan kode berikut beserta penjelasan,
66
//Inisialisasi data logging dari GPS double Datatransfer(char *data_buf,char num) { double temp=0.0; unsigned char i,j; if(data_buf[0]=='-') { i=1; while(data_buf[i]!='.') temp=temp*10+(data_buf[i++]-0x30); for(j=0;j
Pada baris program diatas membuat fungsi Datatransfer dengan definisi *data_buf dan num sebagai char, sedangkan temp sebagai definisi sementara dari baris informasi yang diterima dari GPS yang kemudian akan dipisah- pisah menjadi informasi tersendiri. Pada baris program diatas berisi perintah untuk menyusun deret informasi dari satelit GPS ke GPS receiver. Pada baris kode berikut berisi baris program void rec_init() yang memerintahkan GPS shield untuk memulai transmisi dengan wire dengan melakukan permintaan kode $GPGGA (Global Positioning System Fix Data)
67
void rec_init() { Wire.beginTransmission(GPSAddress); WireSend(0xff); Wire.endTransmission(); Wire.beginTransmission(GPSAddress); Wire.requestFrom(GPSAddress,10); } char ID() { char i = 0; char value[7]={ '$','G','P','G','G','A',',' char buff[7]={ '0','0','0','0','0','0','0'
}; };
while(1) { rec_init(); while(Wire.available()) { buff[i] = WireRead(); if(buff[i]==value[i]) { i++; if(i==7) { Wire.endTransmission(); return 1; } } else i=0; } Wire.endTransmission(); } }
Setelah arduino melalui GPS shield melakukan pengiriman permintaan informasi lokasi ke satelit, maka perlu perintah pembacaan informasi dari GPS, pada baris program berikut void rec_data() berfungi untuk merekam informasi yang dikirim satelit ke GPS shield, ketika format permintaan $GPGGA dikirimkan GPS shield akan selalu melakukan perintah pengiriman informasi melalui rec_init(); dan sementara dilakukan hubungan wire, mikrokontroller akan selalu menyimpan informasi yang diterima dengan penanda “,” sehingga jika masih
68
terdapat tanda “,” pada informasi yang dikirimkan maka penerimaan informasi per karakter akan selalu direkam, dan jika selama perekaman informasi jumlah karakter yang diterima sudah habis maka transmisi komunikasi wire dihentikan. void rec_data(char *buff,char num1,char num2) { char i=0,count=0; if(ID()) { while(1) { rec_init(); while(Wire.available()) { buff[i] = WireRead(); if(count!=num1) { if(buff[i]==',') count++; } else { i++; if(i==num2) { Wire.endTransmission(); return; } } } Wire.endTransmission(); } } }
Setelah informasi lokasi diterima oleh mikrokontroller dari GPS shield, informasi yang diterima dipilih berdasarkan kebutuhan. Sistem kendali otomatis antenna parabola berbasis arduino yang dirancang hanya menggunakan informasi koordinat lintang dan bujur, sehingga hanya diperlukan baris program sebagai berikut yaitu void latitiude() untuk menentukan koordinat lintang, void lat_dir() untuk menentukan orientasi arah lintang, void longitude() untuk menentukan koordinat
69
bujur bumi, dan void lon_dir() untuk menentukan orientasi arah bujur bumi, void latitude() { char dir[1]={'0'}; //membuat karakter dir untuk arah lintang terdiri dari satu karakter rec_data(dir,2,1); //mengambil data dari rec_data() pada posisi titik koma kedua (karakter koma ketiga karena dalam desimal bilangan dimulai dari nol) char lat[10]={ '0','0','0','0','0','0','0','0','0','0' }; //membuat karakter lat untuk lintang sebanyak 10 karakter rec_data(lat,1 ,10); //mengambil data dari rec_data() pada posisi titik koma kesatu sebanyak 10 karakter // konversi nilai char lintang menjadi string String latstring =
lat;
// konversi string menjadi bilangan angka karena string tidak dapat dimasukkan dalam format kalkulasi angka latstring.toCharArray(lat, sizeof(lat)); // pemisahan nilai koordinat dan proses pengubahan nilai derajat detik menit menjadi derajat desimal float lat2floatawal = atof(lat); //mengubah nilai lintang menjadi tipe float int lat2digitawal = lat2floatawal/100; //mempersiapkan bilangan untuk digit awal derajat float latfloat = (lat2floatawal - lat2digitawal*100)/60; //mempersiapkan bilangan untuk bilangan desimal float latdeg=lat2digitawal + latfloat; //menggabungkan bilangan derajat dengan bilangan desimal switch (dir[0]) { case 'N': latdeg=latdeg; //jika orientasi arah sama dengan utara nilai lintang positif case 'S': latdeg=-1*latdeg; //jika orientasi arah sama dengan selatan nilai lintang negatif default : break; } koordinat_lat=latdeg; //hasil akhir koordinat lintang } void lat_dir() { char lintang; char dir[1]={'0'}; //membuat karakter dir untuk arah lintang terdiri dari satu karakter rec_data(dir,2,1); //mengambil data dari rec_data() pada posisi titik koma kedua (karakter koma ketiga karena dalam desimal bilangan dimulai dari nol) switch (dir[0]) {
70
// mengubah tanda baca utara dan selatan dari north dan south untuk memudahkan pembacaan case 'N': lintang = 'U'; case 'S': lintang = 'S'; default : break; } arah_lat=lintang; } void longitude() { char dir[1]={'0'}; //membuat karakter dir untuk arah bujur terdiri dari satu karakter rec_data(dir,4,1); //mengambil data dari rec_data() pada posisi titik koma keempat (karakter koma kelima karena dalam desimal bilangan dimulai dari nol) char lon[11]={ '0','0','0','0','0','0','0','0','0','0','0' }; //membuat karakter lon untuk bujur sebanyak 10 karakter rec_data(lon,3,11); //mengambil data dari rec_data() pada posisi titik koma ketiga sebanyak 10 karakter
// konversi nilai char lintang menjadi string String lonstring =
lon;
// konversi string menjadi bilangan angka karena string tidak dapat dimasukkan dalam format kalkulasi angka lonstring.toCharArray(lon, sizeof(lon)); // pemisahan nilai koordinat dan proses pengubahan nilai derajat detik menit menjadi derajat desimal
float lon2floatawal = atof(lon); //mengubah karakter longitude menjadi float int lon2digitawal = lon2floatawal/100; //memisahkan karakter derajat awal dengan desimal setelah koma float lonfloat = (lon2floatawal - lon2digitawal*100)/60; //mengubah bilangan menit menjadi desimal float londeg = lon2digitawal + lonfloat; //menggabungkan bilangan derajat dengan bilangan desimal switch (dir[0]) //mengubah nilai bujur berdasarkan orientasi arah { case 'W': londeg=-1*londeg; //jika berada di barat, bujur bernilai negatif case 'E': londeg=londeg; //bujur bernilai posifit jika bujur timur default : break; } koordinat_long=londeg; //hasil akhir koordinat bujur } void lon_dir() { char bujur;
71
char dir[1]={'0'}; //membuat karakter dir untuk arah bujur terdiri dari satu karakter rec_data(dir,4,1); //mengambil data dari rec_data() pada posisi titik koma keempat (karakter koma kelima karena dalam desimal bilangan dimulai dari nol) switch (dir[0]) { // mengubah tanda baca barat dan timur dari west dan east untuk memudahkan pembacaan case 'W': bujur = 'B'; case 'E': bujur = 'T'; default : break; } arah_long=bujur; } //Selesai
b.
Data koordinat Satelit yang digunakan unit Van SNG PT MEDIA TELEVISI INDONESIA Sistem kendali otomatis Antenna Parabola berbasis Arduino untuk unit Van SNG PT MEDIA TELEVISI INDONESIA menggunakan beberapa satelit yang digunakan untuk mengirimkan informasi video dan audio melalui transmisi satelit ke studio. Beberapa satelit yang digunakan yaitu,
72
• Satelit Palapa D pada koordinat 113° Bujur Timur
Gambar 3.17 Satelit Palapa D pada situs lyngsat.com Satelit Palapa D dibuat oleh Thales Alenia Space Prancis dan diluncurkan di cina pada 31 agustus 2009. Satelit mulai melayani secara komersial pada lintasan orbit 113° Bujur timur sejak 14 Nopember 2009. Satelit Palapa D memberikan pelayanan pada sektor penyiaran, akses internet, VSAT dan layanan backbone jaringan seluler. Berikut lingkup area yang dilayani oleh satelit palapa D,
73
Gambar 3.18 Coverage Satelit Palapa D Lingkup Asia Pasifik
Gambar 3.19 Coverage Satelit Palapa D Lingkup ASEAN
Gambar 3.20 Coverage Satelit Palapa D lingkup Indonesia
74
• Satelit Telkom 1 dan Telkom 2
Satelit Telkom 1 beroperasi pada 108° Bujur Timur sedangkan Satelit Telkom 2 beroperasi pada 118° Bujur Timur.
Gambar 3.21 Satelit Telkom 1 pada situs lyngsat.com
Gambar 3.22 Satelit Telkom 2 pada situs lyngsat.com Satelit Telkom 1 diluncurkan pada 12 Agustus 1999 sedangkan Satelit Telkom 2 diluncurkan pada 16 Nopember 2005. Kedua satelit ini
75
berguna untuk melayani berbagai siaran televisi di indonesia, internet, layanan telekomunikasi, dan komunikasi militer. Cakupan wilayah coverage dan beberapa fitur satelit Telkom adalah seperti ditunjukkan pada gambar 3.23 dan gambar 3.24.
Gambar 3.23 Ruang lingkup jangkauan dan fitur Satelit Telkom 1
Gambar 3.24 Ruang lingkup jangkauan dan fitur satelit Telkom 2
76
• Satelit Asiasat 3S dan Asiasat 5
Satelit Asiasat 3S beroperasi pada koordinat 120° Bujur Timur sedangkan Satelit Asiasat 5 beroperasi pada koordinat 100,5° Bujur Timur. Satelit Asiasat 3S diluncurkan pada 21 maret 1999 sedangkan satelit Asiasat 5 diluncurkan pada 11 agustus 2009. Satelit Asiasat digunakan untuk transmisi video dan audio dari stasiun televisi di luar negeri ke studio stasiun televisi di PT MEDIA TELEVISI INDONESIA.
Gambar 3.25 Satelit Asiasat 3S pada situs lyngsat.com
Gambar 3.26 Satelit Asiasat 5 pada situs lyngsat.com
77
3.3.2.
Bagian Perhitungan nilai sudut Azimuth, dan Elevasi Antenna Parabola
a.
Pembacaan sensor Kompas, dan Akselerometer Sedangkan untuk membaca informasi arah mata angin dari chip HMC5983 pada mikrokontroller arduino diperlukan kode program sebagai berikut, #include <Wire.h> #include "compass.h" void setup(){ Serial.begin(9600); //memulai komunikasi serial Wire.begin(); //memulai komunikasi wire i2c //data perbaikan offset dan error pada kompas untuk memperbaiki pembacaan kompas compass_x_offset = 122.17; compass_y_offset = 230.08; compass_z_offset = 389.85; compass_x_gainError = 1.12; compass_y_gainError = 1.13; compass_z_gainError = 1.03; compass_init(2); //menjalankan kompas setelah dua detik compass_debug = 1; // masukkan angka 1 untuk menjalankan debug kompas dan mendapatkan nilai offset dan error yang dapat dimasukkan pada baris program, angka 0 untuk menon aktifkan fungsi debug compass_offset_calibration(3); // fungsi kalibrasi kompas berjalan setelah 3 detik, ketika menjalankan kalibrasi putar sensor kompas 360 derajat perlahan selama 2 menit } void loop(){ compass_scalled_reading(); //memanggil nilai baca kompas pada sumbu X, Y, dan Z Serial.print("x = "); Serial.println(compass_x_scalled); Serial.print("y = "); Serial.println(compass_y_scalled); Serial.print("z = "); Serial.println(compass_z_scalled);
compass_heading(); // memanggil nilai baca arah mata angin kompas Serial.print ("Heading angle = "); Serial.print (bearing); Serial.println(" Degree"); delay(3000); // delay selama 3 detik per operasi program }
78
Program diatas merupakan referensi program kompas dari module chip kompas HMC5983 yang kemudian akan dimodifikasi supaya sesuai dengan penggunaan pada sistem kendali otomatis antenna parabola. Pada pembahasan selanjutnya, sensor kompas memiliki kendala ketika berada pada kemiringan tertentu maka sensor kompas akan mengalami kesalahan perhitungan, sehingga untuk meminimalisir masalah tersebut diperlukan sensor akselerometer. Sensor akselerometer pada bagian perancangan telah dibahas berfungsi untuk mentoleransi pembacaan sensor kompas akibat kemiringan sehingga nilai arah mata angin yang dibaca lebih akurat. Dengan menggunakan persamaan 3.2, 3.5 dan 3.6, 𝑁𝑁𝑁𝑁𝑁𝑁𝑁𝑁𝑁𝑁 𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡 𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠 𝑋𝑋 𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘 = 𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑 𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠 𝑋𝑋 𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘 ∗
cos(𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃ℎ) + 𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑 𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠 𝑍𝑍 𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘 ∗ sin(𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃ℎ)
𝑁𝑁𝑁𝑁𝑁𝑁𝑁𝑁𝑁𝑁 𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡 𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠 𝑌𝑌 𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘 = (𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑 𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠 𝑋𝑋 𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘 ∗ sin(𝑅𝑅𝑅𝑅𝑅𝑅𝑅𝑅) ∗ sin(𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃ℎ)) + (𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑 𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠 𝑌𝑌 𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘 ∗
cos(𝑅𝑅𝑅𝑅𝑅𝑅𝑅𝑅)) − (𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑 𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠 𝑍𝑍 𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘𝑘 ∗ sin(𝑅𝑅𝑅𝑅𝑅𝑅𝑅𝑅) ∗ cos(𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃ℎ)) 𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛 𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡 𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠 𝑌𝑌 ) 𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛 𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡 𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠 𝑋𝑋
𝐴𝐴𝐴𝐴𝐴𝐴ℎ 𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚 𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎 = 𝑎𝑎𝑎𝑎𝑎𝑎 tan(
Dan memasukkan kedalam kode program sensor arah mata angin melalui arduino IDE, maka dapat dibuat baris program sebagai berikut
79
// Program Kompas dan Akselerometer // Mengambil data Kompas void kompas() { compass_scalled_reading(); //Pembacaan sumbu X, Y, Z kompas float Xcom=compass_x_scalled; float Ycom=compass_y_scalled; float Zcom=compass_z_scalled; //Mengambil data Accelerometer sensors_event_t event; accel.getEvent(&event); //Pembacaan sumbu X, Y, Z accelerometer float Xacc=event.acceleration.x; float Yacc=event.acceleration.y; float Zacc=event.acceleration.z;
Sebagai program terpisah untuk memudahkan memahami alur kerja sistem, dibuat void kompas(), pada bagian awal program dibuat pembacaan kompas pada sumbu X, Y dan Z serta pembacaan sensor akselerometer
pada
sumbu
X,
Y
dan
Z,
kemudian
dengan
memperhitungkan roll dan pitch dari sensor accelerometer, dapat dihitung nilai toleransi sumbu X dan sumbu Y sensor kompas berdasarkan perhitungan terhadap roll dan pitch sensor akselerometer. //Menghitung Pitch dan Roll accelerometer float rollRadians = atan2 (Yacc, Zacc) ; float pitchRadians = atan2 (Xacc, Zacc) ; //Menghitung arah kompas dengan toleransi Accelerometer float cosRoll = cos(rollRadians); float sinRoll = sin(rollRadians); float cosPitch = cos(pitchRadians); float sinPitch = sin(pitchRadians); float Xtol = Xcom * cosPitch + Zcom * sinPitch; float Ytol = Xcom * sinRoll * sinPitch + Ycom * cosRoll - Zcom * sinRoll * cosPitch; mata_angin=atan2(Ytol, Xtol);
Perhitungan program diatas telah menghasilkan nilai arah mata angin yang telah ditoleransi kemiringan benda oleh sensor kompas, namun untuk menambah akurasi pembacaan sensor kompas terhadap gaya tolak
80
medan magnet lokasi perlu ditambahkan parameter gaya tolak medan magnet
yang
dapat
diperoleh
nilai
dari
situs
www.magnetic-
declination.com , melalui situs tersebut besaran gaya tolak medan magnet di kota jakarta didapatkan senilai 0° 46 menit, bilangan tersebut perlu diubah menjadi satuan derajat desimal menggunakan persamaan 3.1 sehingga didapat nilai gaya tolak medan magnet sebesar 𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑 𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑 = 0° +
46 60
= 0° + 0.7667° =0,7667°
Gambar 3.27 Besaran gaya tolak medan magnet Jakarta Barat di situs magnetic-declination.com
81
Kemudian memasukkan parameter gaya tolak medan magnet kedalam program beserta perubahan nilai radian menjadi derajat desimal dan penyesuaian jika nilai mata angin yang didapat melebihi 360° menjadi sebagai berikut, // Koreksi sudut dengan pengaruh deklinasi magnetik dari www.magneticdeclination.com float sudut_deklinasi = 0.7667; mata_angin = mata_angin + sudut_deklinasi; // Perbaikan jika simbol negatif if(mata_angin < 0) mata_angin = mata_angin + 2*PI; // Cek penambahan deklinasi if(mata_angin > 2*PI) mata_angin = mata_angin - 2*PI; // Ubah nilai radians ke degree untuk mempermudah pembacaan mata_angin = mata_angin * 180/PI; //koreksi sumbu Utara karena Antena mengarah ke Barat mata_angin = mata_angin - 90; //koreksi jika mata_angin bernilai negatif if (mata_angin<0) mata_angin = mata_angin+360; } // Selesai
b. Perhitungan nilai sudut Azimuth dan Elevasi dengan menggunakan faktor koreksi dari Arah Mata Angin Sudut azimuth dan sudut elevasi pada sistem kendali otomatis antenna parabola dapat diperoleh dengan menggunakan persamaan 2.1 dan 2.2 pada bab 2. Pada Arduino IDE persamaan tersebut dapat dimasukkan kedalam baris pemrograman seperti berikut, // Perhitungan rumus azimuth dan elevasi void perhitungan_az_el() { float beda_long=(koordinat_long-satelit)/57.29578; //menghitung selisih koordinat bujur satelit dengan bujur stasiun bumi dalam derajat, 1 derajat = 57.29578 radian Azimuth=180+57.29578*atan(tan(beda_long)/sin((koordinat_lat/57.2957 8))); if (koordinat_lat<0) Azimuth=Azimuth-180; // jika orientasi lintang negatif (selatan khatulistiwa) azimuth dikurangi 180
82
derajat if (Azimuth<0) Azimuth=Azimuth+360.0; //jika azimuth bernilai negatif tambahkan 360 derajat
float koordinat_latr=koordinat_lat/57.29578; //mengubah koordinat lintang kedalam radian float r1=1+35786/6378.16; //parameter radian keliling bumi float v1=r1*cos(koordinat_latr)*cos(beda_long)-1; float v2=r1*sqrt(1cos(koordinat_latr)*cos(koordinat_latr)*cos(beda_long)*cos(beda_lon g)); Elevasi=57.29578*atan(v1/v2)-ant_offset; //mengubah nilai elevasi dari radian ke derajat dengan mengalikan terhadap 57.29578 dan menambahkan parameter antena offset if (Elevasi < 0) Elevasi = NAN; // jika elevasi kurang dari nol, tampilkan error kode NAN yang berarti satelit berada sangat jauh dari stasiun bumi atau berada pada sisi lain bumi //perhitungan polar, display opsional untuk parameter polar Polar=-57.29578*atan(sin(beda_long)/tan(koordinat_latr)); }
Baris program diatas menunjukkan perhitungan nilai sudut azimuth dan elevasi, namun nilai tersebut adalah nilai sudut azimuth dan elevasi terhadap sumbu arah utara kutub bumi, sehingga untuk membuat antenna parabola bergerak ke sudut azimuth dan elevasi yang tepat meski alat sistem kendali otomatis antenna parabola menghadap kearah mana saja perlu ditambahkan parameter nilai arah mata angin dari sensor kompas. Penggunaan sensor kompas untuk mendapatkan nilai derajat yang diperlukan untuk pergerakan servo azimuth dan elevasi memerlukan beberapa kriteria disebabkan pergerakan servo yang terbatas 180° berlawanan arah jarum jam. Servo yang digunakkan untuk prototype sistem kendali otomatis antenna parabola ini adalah servo turnigy TGYR5180MG. Gambar 3.28 menunjukkan servo yang digunakkan dalam
83
model prototype sistem kendali otomatis antenna parabola berbasis arduino.
Gambar 3.28 Motor Servo Turnigy TGY-R5180MG Dikarenakan keterbatasan pergerakan servo tersebut, maka harus dimasukkan beberapa parameter perhitungan untuk mendapatkan nilai derajat servo azimuth dan elevasi yang tepat untuk mencapai nilai sudut azimuth dan elevasi satelit. Berikut 4 kondisi keadaan posisi stasiun bumi dibandingkan dengan posisi sudut azimuth dan sudut elevasi,
84 •
Stasiun bumi berada pada arah mata angin selisih kurang dari 180° sudut azimuth
Arah mata angin
Gambar 3.29 Selisih arah mata angin kurang dari 180° sudut azimuth
Kondisi ini terjadi ketika stasiun bumi menghadap kearah lebih barat daripada arah sudut azimuth hasil perhitungan, dan selisih derajat arah mata angin dengan sudut azimuth hasil perhitungan kurang dari 180° sehingga motor servo masih dapat bergerak ke sudut azimuth hasil perhitungan karena masih dalam rentang batas gerak motor servo yaitu 180° berlawanan arah jarum jam. Sehingga dapat diketahui derajat pergerakan motor servo azimuth dan elevasi melalui persamaan berikut, 𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠 𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝 𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠 𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎ℎ = 𝑎𝑎𝑎𝑎𝑎𝑎ℎ 𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚 𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎
− 𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠 𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎ℎ … … … … … … … … … (3.7)
𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑡𝑡 𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝 𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠 𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒
= 𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠 𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒 … … … … … … … … … (3.8)
85 •
Stasiun bumi berada pada arah mata angin selisih lebih dari 180° hingga kurang dari 360° sudut azimuth
Gambar 3.30 Selisih arah mata angin lebih dari 180° dan kurang dari 360° sudut azimuth Kondisi ini terjadi ketika stasiun bumi menghadap kearah lebih barat daripada arah sudut azimuth hasil perhitungan, dan selisih derajat arah mata angin dengan sudut azimuth hasil perhitungan lebih dari 180° dan kurang dari 360° sehingga motor servo tidak dapat mencapai sudut azimuth hasil perhitungan karena gerakan servo diluar rentang batas gerak motor servo yaitu 180° berlawanan arah jarum jam. Sehingga untuk dapat mencapai sudut azimuth yang tepat, dapat dilakukan dengan memutar balik 180° motor servo elevasi dan menggerakan motor servo azimuth hingga selisih antara sudut azimuth dan antenna parabola adalah 180° sehingga dapat diketahui derajat pergerakan motor servo azimuth dan elevasi melalui persamaan berikut,
86 𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠 𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝 𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠 𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎ℎ
= 𝑎𝑎𝑎𝑎𝑎𝑎ℎ 𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚 𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎 − 𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠 𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎ℎ − 180° … … … … … … … … … (3.9)
𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠 𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝 𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠 𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒
= 180° − 𝑠𝑠𝑢𝑢𝑑𝑑𝑑𝑑𝑑𝑑 𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒 … (3.10)
•
Stasiun bumi berada pada arah mata angin selisih kurang dari 0° hingga lebih dari -180° sudut azimuth
Gambar 3.31 Selisih arah mata angin kurang dari 0° dan lebih dari 180° sudut azimuth Kondisi ini terjadi ketika stasiun bumi menghadap kearah lebih timur daripada arah sudut azimuth hasil perhitungan, dan selisih derajat arah mata angin dengan sudut azimuth hasil perhitungan kurang dari 0° dan lebih dari -180° sehingga motor servo tidak dapat mencapai sudut azimuth hasil perhitungan karena gerakan servo diluar rentang batas gerak motor servo yaitu 180° berlawanan arah jarum jam. Sehingga untuk dapat mencapai
87
sudut azimuth yang tepat, dapat dilakukan dengan memutar balik 180° motor servo elevasi dan menggerakan motor servo azimuth hingga selisih antara sudut azimuth dan antenna parabola adalah 180° sehingga dapat diketahui derajat pergerakan motor servo azimuth dan elevasi melalui persamaan berikut, 𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠 𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝 𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠 𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎ℎ
= 𝑎𝑎𝑎𝑎𝑎𝑎ℎ 𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚 𝑎𝑎𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛 − 𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠 𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎ℎ + 180° … … … … … … … … … (3.11)
𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠 𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝 𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠 𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒 •
= 180° − 𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠 𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒 … (3.12)
Stasiun bumi berada pada arah mata angin selisih kurang dari -180° hingga lebih dari -360° sudut azimuth
Gambar 3.32 Selisih arah mata angin kurang dari -180° dan lebih dari -360° sudut azimuth Kondisi ini terjadi ketika stasiun bumi menghadap kearah lebih timur daripada arah sudut azimuth hasil perhitungan, dan selisih derajat arah mata angin dengan sudut azimuth hasil perhitungan
88
kurang dari -180° dan lebih dari -360° sehingga motor servo masih dapat bergerak ke sudut azimuth hasil perhitungan karena masih dalam rentang batas gerak motor servo yaitu 180° berlawanan arah jarum jam. Sehingga dapat diketahui derajat pergerakan motor servo azimuth dan elevasi melalui persamaan berikut, 𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠 𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝 𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠 𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎ℎ
= 𝑎𝑎𝑎𝑎𝑎𝑎ℎ 𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚 𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎 − 𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠 𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎ℎ + 360° … … … … … … … … … (3.13)
𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠 𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝 𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠 𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒 = 𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠 𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒 … (3.14) Setelah
mengetahui
parameter
gerak
motor
servo
dengan
menggunakan parameter nilai arah mata angin dan perhitungan sudut azimuth dan elevasi, dapat dibuat kode program yang sesuai sebagai berikut, // Parameter pergerakan azimuth dan elevasi ke servo dikarenakan pergerakan servo terbatas 180 derajat berlawanan arah jarum jam, sedangkan azimuth searah jarum jam hingga 360 derajat void arah_servo() { float koreksi=mata_angin-Azimuth; if(koreksi >= 0 && koreksi <= 180) { az=koreksi; el=Elevasi; } if(koreksi > 180 && koreksi < 360) { az=koreksi-180; el=180-Elevasi; } if(koreksi <= 0 && koreksi >= -180) { az=180+koreksi; el=180-Elevasi; }
89
if(koreksi < -180 && koreksi > -360) { az=360+koreksi; el=Elevasi; } } // Selesai
c.
Konversi Sudut Azimuth dan Elevasi ke Pergerakan motor Servo Pembahasan perhitungan nilai sudut Azimuth dan Elevasi dengan menggunakan faktor koreksi dari Arah Mata Angin telah memberikan nilai pergerakan yang tepat bagi motor servo untuk bergerak ke sudut azimuth dan sudut elevasi sesuai perhitungan, sehingga dapat dibuat kode program pergerakan servo sebagai berikut, // Pergerakan Servo void servo_elevasi() { //elevasi pulse_el = sudut_el * 5.58 + 935; servo_elev.writeMicroseconds(pulse_el); delay(15); } void servo_azimuth() { //azimuth pulse_az = sudut_az * 5.49 + 974; servo_azim.writeMicroseconds(pulse_az); delay(15); }
Melalui percobaan beberapa kali untuk mendapatkan pulsa milidetik pergerakan servo didapatkan servo elevasi memerlukan waktu 935 milidetik untuk mencapai sudut 0° dan maksimum 1940 milidetik untuk mencapai 180° sedangkan servo azimuth memerlukan waktu 974 milidetik untuk mencapai sudut 0° dan maksimum 1962 milidetik untuk mencapai 180°. Nilai tersebut diperoleh setelah melalui program Arduino IDE dilakukan input penulisan program berulang- ulang pada
90
motor servo untuk mendapatkan waktu yang tepat untuk mencapai nilai titik tengah pergerakan motor servo yaitu 90°. Pergerakan motor servo sudah sesuai ke sudut azimuth dan sudut elevasi yang tepat, kemudian supaya motor servo tidak selalu bergerak kembali ke posisi 0° ketika terjadi perubahan data dan perintah pergerakan servo, maka perlu dibuat karakter bersama pulsa sudut azimuth dan sudut elevasi. Kemudian implementasi untuk pergerakan servo tersebut dapat dibuat dalam kode program berikut, // Pergerakan servo otomatis mengingat berdasarkan nilai sudut ter set sebelumnya void servo_otomatis() { if (el<0) el=0; if (el>180) el=180; if (az<0) az=0; if (az>180)az=180; if (sudut_az
az) { for(sudut_az=sudut_az;sudut_az>=az;sudut_az--) { servo_azimuth(); } sudut_az=az; } if(sudut_el<el) { for(sudut_el=sudut_el;sudut_el<=el;sudut_el++) { servo_elevasi(); } sudut_el=el; } if(sudut_el>el) { for(sudut_el=sudut_el;sudut_el>=el;sudut_el--) { servo_elevasi(); } sudut_el=el; } }
91
Kemudian pada program yang dibuat, motor servo juga dapat dikendalikan secara manual melalui keypad yaitu pergerakan servo elevasi dan azimuth dengan pertambahan dan pengurangan 1°, fitur ini berguna untuk melakukan koreksi manual sudut antenna parabola sehingga sinyal penerimaan yang diterima dari satelit menjadi lebih baik. Berikut baris program untuk mengimplementasikan fungsi tersebut, void gerak_servo_manual() { while(1) { char temp=my_btns.getKey(); //membuat karakter sementara temp sebagai input penerima dari keypad switch(temp) { case 'B': //tombol B berfungsi untuk kembali return; break; case '2': //tombol 2 berfungsi untuk menggerakan servo elevasi +1 derajat el++; servo_otomatis(); break; case '8': //tombol 8 berfungsi untuk menggerakan servo elevasi -1 derajat el--; servo_otomatis(); break; case '6': //tombol 6 berfungsi untuk menggerakan servo azimuth +1 derajat az++; servo_otomatis(); break; case '4': //tombol 4 berfungsi untuk menggerakan servo azimuth -1 derajat az--; servo_otomatis(); break; default: //jika tidak ada input yang sesuai dengan pilihan sebelumnya maka sistem break break; } }}
92
3.3.3. a.
Bagian Fungsi Interface Keypad dan LCD Pembuatan tampilan LCD Sistem kendali otomatis antenna parabola yang dibuat dirancang untuk dapat menampilkan berbagai informasi dan memiliki berbagai fungsi untuk dijalankan, sehingga display LCD diperlukan sebagai penunjuk bagi pengguna yang menggunakan alat ini. Lcd yang digunakan adalah LCD alphanumerik 4x20 dengan 16 pin konektor yang harus dihubungkan ke mikrokontroller arduino mega 2560 R3. Gambar 3.33 menunjukkan LCD display 4x20 dan gambar 3.34 wiring ke mikrokontroller.
Gambar 3.33 LCD Display 4x20
93
Gambar 3.34 Koneksi jalur LCD ke Arduino Mega 2560 R3 Interface yang digunakan pada tugas akhir ini menggunakan library interface buatan Dr. Liu (http://liudr.wordpress.com/libraries/phi_interfaces/) yang sudah disertakan dalam paket library program menu, kendali keypad, dan kendali LCD. Pengaturan penggunaan LCD pada library di Arduino IDE adalah dengan mengubah beberapa baris program dari File > Examples > Phi_Prompt > dan pilih contoh program library untuk LCD 4x20. Gambar 3.35 menunjukkan menu pilihan pada Arduino IDE,
94
Gambar 3.35 Arduino IDE Phi Prompt Interface Kemudian dengan memodifikasi beberapa baris pada bagian LCD sesuai dengan sistem yang akan dibuat yaitu sebagai berikut, //Inisialisasi LCD #define lcd_rows 4 #define lcd_columns 20 #define #define #define #define #define #define
LCD_RS LCD_EN LCD_D4 LCD_D5 LCD_D6 LCD_D7
22 24 26 28 30 32
#include "LCD.h" #include "LiquidCrystal.h" LiquidCrystal lcd(LCD_RS,LCD_EN,LCD_D4,LCD_D5,LCD_D6,LCD_D7); // Selesai
Baris program diatas mengatur mikrokontroller untuk menggunakan LCD dengan baris 4 dan kolom 4, pin RS LCD pada pin 22 arduino, pin Enable LCD pada pin 24, pin D4, D5, D6 dan D7 LCD berurutan pada pin 26,28,30 dan 32 pada board arduino. Backlight LCD display menggunakan potensiometer 10KΩ yang terhubung pada pin 3 LCD seperti ditunjukkan pada gambar 3.34
95
b. Pembuatan fungsi perintah Keypad Interface keypad pada sistem kendali otomatis antenna parabola menggunakan phi interface sebagai library pengendali. Keypad matrix 4x4 digunakan pada tugas akhir ini, fungsi yang diberikan dijelaskan pada bagian 3.2.2 Fungsi Interface Sistem Kendali Otomatis Antenna Parabola dengan LCD dan Keypad. Gambar 3.36 menunjukkan keypad matrix 4x4 yang sudah dimodifikasi mengikuti fungsi yang diimplementasikan pada sistem kendali otomatis antenna parabola yang dibuat
Gambar 3.36 Keypad matrix 4x4 Gambar 3.37 menunjukkan hubungan rangkaian pada keypad terhadap arduino. Rangkaian keypad matrix menggunakan metode matrix untuk mengaktifkan tombol yang dipilih, merupakan rangkaian switch sederhana yang terhubung paralel dengan resistor, yang bekerja jika satu tombol ditekan, akan mengaktifkan dua switch resistor yang tersusun
96
secara matrix dan mengirimkan pesan pada mikrokontroller tombol mana yang diaktifkan.
MKP1 KEYPAD-4X4ABCD
1
2
3
4
A
1
2
3
A
A
B
6
5
4
B
B
C
7
8
9
C
C
0
#
D
D
2
3
4
D
4 3 2 1 A B C D
1
SDA SCL
14 15 16 17 18 19 20 21
A0 A1 A2 A3 A7 A6 A5 A4
PK0/ADC8/PCINT16 PK1/ADC9/PCINT17 PK2/ADC10/PCINT18 PK3/ADC11/PCINT19 PK4/ADC12/PCINT20 PK5/ADC13/PCINT21 PK6/ADC14/PCINT22 PK7/ADC15/PCINT23
RS RW E
D0 D1 D2 D3 D4 D5 D6 D7 7 8 9 10 11 12 13 14
4 5 6
VSS VDD VEE
LCD 5V
POTENSIO
10K
A8 A9 A10 A11 A12 A13 A14 A15
PF0/ADC0 PF1/ADC1 PF2/ADC2 PF3/ADC3 PF7/ADC7/TDI PF6/ADC6/TDO PF5/ADC5/TMS PF4/ADC4/TCK
ANALOG IN
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
1 2 3
PA0/AD0 PA1/AD1 PA2/AD2 PA3/AD3 PA4/AD4 PA5/AD5 PA6/AD6 PA7/AD7 PC7/A15 COMUNICATION PC6/A14 PC5/A13 PC4/A12 PC3/A11 PC2/A10 PC1/A9 PC0/A8 PD7/T0 PG2/ALE PG1/RD PG0/WR PL7 PL6 PL5/OC5C PL4/OC5B PL3/OC5A PL2/T5 PL1/ICP5 PL0/ICP4 PB3/MISO/PCINT3 PB2/MOSI/PCINT2 PB1/SCK/PCINT1 PB0/SS/PCINT0
DIGITAL
ATMEGA2560 16AU 1126
RESET
ARDUINO MEGA2560 R3
VCC=9V FROM AC ADAPTER
MIKROKONTROLLER
PWM
DISPLAY MENAMPILKAN MENU DAN PROSES KERJA SISTEM
TX3 PJ1/TXD3/PCINT10 RX3 PJ0/RXD3/PCINT9 TX2 PH1/TXD2 RX2 PH0/RXD2 TX1 PD3/TXD1/INT3 RX1 PD2/RXD1/INT2 SDA PD1/SDA/INT1 SCL PD0/SCL/INT0
7 6 5 4 3 2 1 0 PH4/OC4B PH3/OC4A PE3/OC3A/AIN1 PG5/OC0B PE5/OC3C/INT5 PE4/OC3B/INT4 TX0 PE1/TXD0/PDO RX0 PE0/RXD0/PCINT8
AREF
PB7/OC0A/OC1C/PCINT7 PB6/OC1B/PCINT6 PB5/OC1A/PCINT5 PB4/OC2A/PCINT4 PH6/OC2B PH5/OC4C
13 12 11 10 9 8
LCD DISPLAY
Gambar 3.37 Rangkaian keypad terhadap arduino Baris program pada phi interface perlu diubah karena secara default, program library menggunakan switch button. Berikut baris program yang sudah dimodifikasi supaya mikrokontroller dapat mengenali input dari keypad. // Inisialisasi Keypad dan Menu Navigasi
97
#include "phi_interfaces.h" #include "phi_prompt.h" char mapping[]={'1','2','3','A','4','5','6','B','7','8','9','C','.','0','','D'}; byte pins[]={29, 27, 25, 23, 37, 35, 33, 31}; phi_matrix_keypads my_btns(mapping, pins, 4, 4); phi_serial_keypads debug_keypad(&Serial,38400); multiple_button_input * keypads[] = {&my_btns,&debug_keypad,0}; char up_keys[]={"2"}; char down_keys[]={"8"}; char left_keys[]={" "}; char right_keys[]={" "}; char enter_keys[]={'A','5'}; char escape_keys[]={" "}; char * function_keys[]={up_keys,down_keys,left_keys,right_keys,enter_keys,escap e_keys}; // Selesai
Pengaturan mapping keypad dapat dilihat pada baris char mapping dan pengaturan pin yang digunakan pada baris byte pins, untuk fungsi debug menggunakan komunikasi serial pada baudrate 38400. Baris program tersebut juga menentukan fungsi tombol pada keypad untuk berpindah menu pada program, ditunjukkan pada inisialisasi char up_keys, down_keys, left_keys, right_keys, enter_keys dan escape_keys. Fungsi keypad yang berhubungan dengan gerak antena azimuth dan elevasi secara manual pertambahan 1 derajat ditambahkan pada masingmasing fungsi program dengan membuat program panggil karakter sementara pembacaan input keypad yaitu temp dan menggunakan pernyataan switch-case, seperti ditunjukkan pada baris program berikut, void gerak_servo_manual() { lcd.noBlink(); while(1) { char temp=my_btns.getKey(); switch(temp) { case 'B':
98
return; break; case '2': el++; servo_otomatis(); break; case '8': el--; servo_otomatis(); break; case '6': az++; servo_otomatis(); break; case '4': az--; servo_otomatis(); break; default: break; } } }
Program gerak_servo_manual() digunakkan untuk menggerakan motor servo azimuth dan elevasi secara manual, dengan menggunakan tombol arah 2, dan 8 untuk elevasi dan tombol 4 dan 6 untuk azimuth. Fungsi input parameter koordinat satelit, koordinat stasiun bumi, dan offset fokus antenna parabola menggunakan keypad dengan membaca karakter input keypad, pengubahan definisi input string menjadi bilangan digunakkan pada program, sehingga program dapat membaca input bilangan angka, negatif, dan desimal, serta perlu dilakukan batas- batas supaya input dari keypad hanya karakter numerik “0 hingga 9”, karakter “-“ dan karakter “.” untuk penanda desimal, serta digunakan batas- batas jumlah karakter maksimal yang dapat dimasukkan serta nilai maksimal
99
kondisi koordinat lintang bumi, bujur bumi. Baris program untuk fungsi tersebut diuraikan seperti berikut, i=0; bufsat[0] = '\0'; lcd.clear(); lcd.blink(); //… // // … while( i < sizeof(bufsat) - 1) { char temp=my_btns.getKey(); if (temp == 'A') { break; } if (temp == 'B') { menu_otomatis(); } if (temp == 'C' || temp == 'D') { i=i; } else if ( temp != NO_KEY) { bufsat[i] = temp; i++; bufsat[i]= '\0'; } lcd.setCursor(4,0); lcd.print(bufsat); } String sat = bufsat; sat.toCharArray(bufsat, sizeof(bufsat)); float sat2 = atof(bufsat);
Baris program diatas membaca karakter input “A” keypad untuk keluar dari while-loop dan menuju ke baris program selanjutnya diluar whileloop, karakter input “B” memerintahkan program kembali ke program menu_otomatis() sedangkan karakter input “C” dan “D” akan menganggap tidak ada input karakter keypad, serta pernyataan “i = i” untuk mencegah proses counter pada while_loop sehingga cursor pada LCD display tidak berpindah. Ketika karakter lain selain karakter “A, B, C dan D” yaitu karakter numerik “0 hingga 9” dimasukkan maka akan direkam sebagai nilai bufsat dan counter i bertambah satu satuan dan
100
cursor LCD display bergeser ke kolom menunggu karakter input selanjutnya, hingga tersimpan seluruh karakter kedalam definisi bufsat, yang kemudian diubah menjadi string dan menjadi bilangan float untuk dimasukkan pada proses perhitungan azimuth dan elevasi. c.
Kendali Sistem dari Interface LCD dan Keypad Tampilan menu yang dirancang untuk sistem kendali otomatis antenna parabola menggunakan library program menu phi interface. Berikut desain program yang dibuat, • Tampilan awal untuk kalibrasi motor servo
Tampilan awal berfungsi menunjukkan proses kalibrasi motor servo untuk kembali pada posisi awal sudut 0 derajat dan pesan awal yang ditampilkan tentang sistem kendali otomatis antenna parabola yang dibuat.
Gambar 3.38 Tampilan awal kalibrasi servo • Tampilan menu utama
Gambar 3.39 Tampilan menu utama
101
• Tampilan menu set Otomatis
Gambar 3.40 Tampilan menu set otomatis • Tampilan menu input manual
Gambar 3.41 Tampilan menu input manual • Tampilan pesan ketika terjadi Error
Gambar 3.42 Tampilan pesan ketika terjadi error
102
• Tampilan menu input offset Antenna
Gambar 3.43 Tampilan menu input offset Antenna • Tampilan menu otomatis satelit
Gambar 3.44 Tampilan menu otomatis satelit • Tampilan menu Set Manual
Gambar 3.45 Tampilan menu set manual • Tampilan pesan tentang pembuat alat tugas akhir
Gambar 3.46 Tampilan pesan tentang pembuat alat tugas akhir