• Tidak ada hasil yang ditemukan

HASIL DAN PEMBAHASAN

4.3 Analisa Program

Dalam melakukan kegiatan ini, peneliti membuat program dengan menggunakan 2 buah software yaitu software RoboPlus dan AVR. Software RoboPlus digunakan untuk membantu peneliti menentukan pergerakan motor servo dan melihat kinerja dari sensor

gyro, seluruh data yang diambil dari setiap proses gerakan sebelum masuk ke AVR diolah terlebih dahulu di RoboPlus ini. Dari software ini peneliti menentukan kecepatan, delay

dan pola gerakan setiap robot selain melakukan pegamatan terhadap gerakan tubuh manusia yang di selaraskan dengan gerakan robot.

Setelah mengetahui gerakan dan kinerja sensor selanjutnya masuk ke penggunaan AVR sebagai software untuk membuat program gerakan dan komunikasi antara servo dan

controller mengunakan bahasa C. Dalam pemrograman ini langkah-langkah yang harus dilakukan yaitu menentukan PORT yang digunakan oleh aktuator dan sensor dari

controller, untuk mengetahui PORT yang digunakan peneliti mendapatkan informasi posisi dan PORT apa saja yang digunakan dari RoboPlus. Setelah mengetahui PORT apa saja yang digunakan oleh aktuator dan sensor, peneliti mulai membuat header untuk controller

yang digunakan, header ini selanjutnya dimasukkan kedalam library agar dapat digunakan sebagai header. Program untuk controller ini beriskan list seperti berikut.

void buzzInit() {

DDRB = 0x20; PORTB = 0x00; }

void buzzOn(int times) {

for (int i=0;i<times;i++) { _delay_ms(1); PORTB |= 0x20; _delay_ms(1); PORTB &= ~0x20; } } void buzzOff() { PORTB &= ~0x20; }

Dari potongan program diatas merupakan potongan program untuk pengendalian

buzzer pada controller waktu yang digunakan untuk menghidupkan buzzer tersebut adalah 1 ms, dan proses menghidupkan buzzer ini akan terjadi secara berulang-ulang ketika

controller sedang on, melakukan download, perpindahan mode dan pada saat mematikan

void ledInit() {

DDRC = 0x7F; PORTC = 0x7F; }

void ledOn(unsigned char ledId) {

//PORTC &= ~LED_AUX; PORTC &= ~ledId; }

void ledOff(unsigned char ledId) {

//PORTC &= ~LED_AUX; PORTC |= ledId; } void allLedOff() { PORTC = LED_BAT|LED_TxD|LED_RxD|LED_AUX|LED_MANAGE|LED_PROGRAM|LED_PLAY; _delay_ms(1); //PORTC = LED_TxD|LED_RxD|LED_AUX|LED_MANAGE|LED_PROGRAM|LED_PLAY; } void allLedOn() { PORTC = ~(LED_BAT|LED_TxD|LED_RxD|LED_AUX|LED_MANAGE|LED_PROGRAM|LED_PLAY); _delay_ms(1); //PORTC = LED_TxD|LED_RxD|LED_AUX|LED_MANAGE|LED_PROGRAM|LED_PLAY; }

Potongan program diatas merupakan potongan program untuk mengontrol led, led ini digunakan sebagai indikator untuk mengetahui mode-mode yang sedang berjalan dan untuk mengetahui proses downloading dan komunikasi serial yang apa sedang dilakukan atau tidak, pengendalian led ini dilakukan pada PORTC.

Setelah program untuk controller selasai, langkah selanjutnya adalah membuat data pada controller yang berisikan data-data array untuk melakukan gerakan terlentang, duduk, berdiri dan berjalan. Data array yang digunakan seperti pada potongan listing program berikut dibawah ini.

RIGHT_FRONT[7][18]=

{235,788,279,744,462,561,358,666,495,504,345,679,247,778,643,379,495,504} {235,788,279,744,462,561,358,666,490,499,348,677,253,773,640,381,490,499} {235,788,279,744,462,561,358,666,486,495,351,674,260,767,637,384,486,495} {235,788,279,744,462,561,358,666,479,502,344,671,245,761,644,387,482,492} {235,788,279,744,462,561,358,666,468,520,327,669,212,757,661,389,479,490} {235,788,279,744,462,561,358,666,463,529,320,668,197,755,668,390,477,489};

Potongan listring program diatas merupakan salah satu contoh array yang berisi data motor servo untuk suatu gerakan, pada gambar 4.15 merupakan potongan listing untuk gerakan melangkah kaki kanan ini disimpan pada program KontrolBioloid.h. Pengiriman data akan dilakukan secara terus menerus dan sesuai dengan address dan ID motor itu sendiri secara berurutan mulai dari M1 hingga M18.

Array melangkah kaki kanan merupakan data hasil pecobaan dan pengamatan yang telah dilakukan oleh peneliti terdiri dari 7 baris yang berisi paket data untuk 18 motor servo yang terdiri dari M1 hingga M18. Pada baris pertama berisi paket data yang bertujuan agar tubuh robot sebelah kanan mendapatkan beban lebih banyak dibandingkan tubuh robot sebelah kiri. Pada baris kedua, paket data tersebut bertujuan untuk mengerakkan kedua tangan robot tangan kanan ke belakang dan tangan kiri kedepan. Pada baris ketiga, membuat tubuh robot sebelah kiri lebih berat di bandingkan sebelah kanan. Pada baris ke empat, mulai mengangkat kaki sedikit keatas sehingga membentuk pola

support polygon. Baris ke lima, mendukung dan membantu menyeimbangkan robot. Pada baris ke enam, mendaratkan kaki kanan. Dan pada baris terakhir, memposisikan tubuh robot seperti pada gambar 4.11.

Dalam melakukan setiap gerakan dibutuhkan array yang berisi paket data mulai dari M1 hingga M18, dan data yang tersedia pada array tersebut didapatkan dari hasil pengamatan dan percobaan yang telah dilakukan. Setiap 1 buah array berisi perintah untuk melakukan kegiatan atau gerakan tersendir, jadi setiap array yang tersedia pada list program pada lampiran memiliki tujuan atau hasil akhir yang berbeda-beda pula.

Setelah proses pemasukan data untuk setiap gerakan selesai, langkah selanjutnya adalah membuat program utama yang berisikan perintah dan fungsi untuk melakukan suatu gerakan. Berikut potongan listing program yang digunakan untuk fungsi sensor gyro. void SVC_IN()

{

char SVC[2]= {

{311} // Stand Up

{313}, // Move

}; unsigned char counter = 0, i = 0; unsigned char step = 0, j = 0; while(getchar() != '\n'); do{ Balance[counter] = getchar(); counter++; } while(Balance[counter-1] != '\n'); Balance[counter-1] = 0; for(i=0;i<counter;i++) { if(Balance[i] == ',') { step++; j=0; } else { SVC[step][j] = Balance[i]; j++; } } step = 0; j = 0; counter = 0; detect = atoi(SVC[0]); servox = atoi(SVC[1]); servoy = atoi(SVC[2]); servox_goal = atoi(SVC[1]); servoy_goal = atoi(SVC[2]); }

Cara menentukan nilai SVC untuk sensor gyro dilakukan dengan cara melakukan percobaan seperti pada tabel 4.2, data dari tabel tersebut digunakan sebagai acuan untuk menentukan gerakan ketika data ADC kurang dari 311 maka controller akan memberikan perintah untuk berdiri. Perintah berdiri tersebut terdiri dari perintah untuk kembali terlentang dilanjutkan perintah untuk gerakan duduk, lalu perintah untuk gerakan berdiri itu sendiri.

bioloid.setNextPose(RIGHT_FRONT,bioloid.getNextPose(RIGHT_FRONT) - rstep); bioloid.setNextPose(LEFT_FRONT,bioloid.getNextPose(LEFT_FRONT) - lstep); bioloid.setNextPose(RIGHT_REAR,bioloid.getNextPose(RIGHT_REAR) + rstep); bioloid.setNextPose(LEFT_REAR,bioloid.getNextPose(LEFT_REAR) + lstep);

Potongan listing program diatas merupakan, potongan program untuk memanggil

array yang diletakkan pada program controller. Dalam proses pemanggilan ini, peneliti memanfaatkan library yang ada pada controller yang berisi pengaturan untuk program

Load untuk bioloid.loadPose. Dari library tersebut peneliti menambahkan perintah untuk lakukan gerakan setting untuk posisi gerakan berikutnya dengan nama bioloid.setNextPose yang berdisi perintah pengendalian dan pemanggilan array, data array tersebut selanjutnya akan dikirim ke setiap motor servo sesuai ID yang telah di tentukan. ID motor servo tersebut langsung di ambil dari library dari controller yang berisikan perintah untuk pengiriman data ke setiap ID motor servo secara berurutan. Program untuk biolodi.nextPose berisi perintah pengiriman pengiriman data ke setiap ID nomor servo, data tersebut berupa posisi dan data tersebut dapat dipanggil langsung lewat array yang telah disimpan pada controller, proses pemanggilan untuk motor servo seperti pada potongan program dibawah ini. Dan proses dibawah ini disimpan pada program KontroBioloid.h.

Serial.print("servoNum:"); Serial.println(servoNum); Serial.print("servoPos:"); Serial.println(servoPos);

BAB V

Dokumen terkait