• Tidak ada hasil yang ditemukan

Bagian Perhitungan nilai sudut Azimuth, dan Elevasi Antenna Parabola

Dalam dokumen BAB III PERENCANAAN DAN PEMBUATAN SISTEM (Halaman 43-58)

3.3. Pembuatan Sistem Kendali Otomatis Antenna Parabola

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 }

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

// 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

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° +4660= 0° + 0.7667° =0,7667°

Gambar 3.27 Besaran gaya tolak medan magnet Jakarta Barat di situs

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.magnetic-declination.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

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(1-cos(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 TGY-R5180MG. Gambar 3.28 menunjukkan servo yang digunakkan dalam

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,

Stasiun bumi berada pada arah mata angin selisih kurang dari 180° sudut azimuth

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)

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,

𝑠𝑠𝑠𝑠𝑑𝑑𝑠𝑠𝑚𝑚 𝑘𝑘𝑑𝑑𝐴𝐴𝑎𝑎𝑑𝑑𝐴𝐴𝐴𝐴𝑎𝑎𝐴𝐴𝑎𝑎 𝑠𝑠𝑑𝑑𝐴𝐴𝑠𝑠𝑅𝑅 𝐴𝐴𝑎𝑎𝑎𝑎𝑚𝑚𝑠𝑠𝑚𝑚ℎ

= 𝐴𝐴𝐴𝐴𝐴𝐴ℎ 𝑚𝑚𝐴𝐴𝑚𝑚𝐴𝐴 𝐴𝐴𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎 − 𝑠𝑠𝑠𝑠𝑑𝑑𝑠𝑠𝑚𝑚 𝐴𝐴𝑎𝑎𝑎𝑎𝑚𝑚𝑠𝑠𝑚𝑚ℎ − 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

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

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; }

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

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_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; } }

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; } }}

3.3.3. Bagian Fungsi Interface Keypad dan LCD

Dalam dokumen BAB III PERENCANAAN DAN PEMBUATAN SISTEM (Halaman 43-58)

Dokumen terkait