Pengujian Tingkat Keberhasilan Lengan Robot saat Mengambil dan

return ADCW; } void photodioda { sensor=read_adc02; lcd_gotoxy0,1; sprintfsens,sensor=d,sensor; lcd_putssens; delay_ms10; } Pada listing program diatas, digunakan read_adc0 yang artinya menggunakan PORTA.0 sebagai PORT masukan untuk mengubah tegangan analog menjadi tegangan digital. Pada bagian sensor= read_adc02 maksud dari pembagian 2 yaitu agar nilai desimal ADC maksimal yaitu 1023 dibagi 2 yaitu 511. Sehingga apabila tegangan masukan 0 Volt sampai 5 Volt, akan diubah melalui ADC menjadi 0 desimal hingga 511 desimal. Pada bagian listing program diatas, fungsinya yaitu untuk mengendalikan motor penggerak conveyor yang dikontrol menggunakan PORTD.2. Terdapat nilai 200 pada bagian if sensor =200 ini dimaksudkan untuk membuat PORTD.2 bernilai “0” jika nilai sensor lebih besar sama dengan dari 200 desimal ADC. Hal ini berarti menyebabkan motor pada conveyor berhenti berputar. Jika kondisi sensor kurang dari 200, maka PORTD.2 akan bernilai “1” yang artinya motor conveyor akan terus berputar.

4.3.1.2. Pengendali Komunikasi USART

Pada bagian ini berfungsi sebagai komunikasi serial USART untuk menghubungkan antara mikrokontroler ATmega32 dengan laptop. Baudrate yang digunakan yaitu 9600 bps. Fungsi “getchar” yaitu untuk menerima karakter dari laptop agar mikrokontroler dapat mengerti apa yang dimaksud oleh laptop saat mengirimkan karakter yang mendefinisikan warna benda. Sedangkan fungsi “putchar” yaitu untuk mengirimkan suatu karakter kepada laptop agar laptop dapat memulai proses pengenalan warna benda. int a; unsigned char b[16]; void komunikasi { if sensor=200 {PORTD.2=0;delay_ms5;} else {PORTD.2=1;delay_ms5;} a=getchar; lcd_gotoxy0,0; sprintfb,komunikasi= d ,a; lcd_putsb; delay_ms100; lcd_clear;delay_ms10; } void mainvoid { USART initialization Communication Parameters: 8 Data, 1 Stop, No Parity USART Receiver: On USART Transmitter: On USART Mode: Asynchronous USART Baud Rate: 9600 UCSRA=0x00; UCSRB=0x18; UCSRC=0x86; UBRRH=0x00; UBRRL=0x47; } if sensor=200 {PORTD.2=0;delay_ms5;putchar‘a’;delay_ms1000;} else {PORTD.2=1;delay_ms5;}

4.3.1.3. Pengendali Motor Servo

Program pengendali motor servo menggunakan interrupt timer0 sebagai pembangkit pulsa untuk menggerakan motor servo. Listing program pengendali sudut putar motor servo sebagai berikut : define servo1 PORTB.0 define servo2 PORTB.1 define servo3 PORTB.2 define servo4 PORTB.3 signed int i=0,data1=0,data2=0,data3=0,data4=0; Timer 0 overflow interrupt service routine interrupt [TIM0_OVF] void timer0_ovf_isrvoid { i++; if i864{i=0;} else { if idata1{servo1=1;} else{servo1=0;} if idata2 {servo2=1;} else{servo2=0;} if idata3{servo3=1;} else{servo3=0;} if idata4 {servo4=1;} else{servo4=0;} } } Listing program di atas adalah penyetingan port yang digunakan motor servo. Kodisi nilai i++ artinya adalah timer mulai mencacah dari 0 hingga 255, jika lebih dari itu maka timer overflow dan mulai mengaktifan PWM. Nilai 864 adalah nilai overflow selama perioda motor servo yaitu 20ms. Kemudian pemberian logika high pada tiap port, jika kondisi nilai i lebih kecil dari pada nilai variabel data1, data2, data3, data4 sehingga mulai memberikan pulsa agar motor servo bergerak dan logika low jika kondisinya tidak terpenuhi maka portb akan direset. void siaga { data1=72; delay_ms100; data3=94; delay_ms100; data2=53; delay_ms100; data4=89; delay_ms100; } ……………………… Listing program di atas adalah pemberian nilai OCR yang merupakan cacahan pulsa selama 1ms dan 2ms untuk menggerakan motor servo sesuai dengan sudut yang diinginkan. Pergerakan motor servo tersebut adalah secara bertahap satu persatu. Untuk mempermudah dalam penentuan tahapan sudut motor servo, digunakan fungsi for untuk mencacah nilai OCR secara satu per satu. Dengan cara ini, maka tidak diperlukan menulis nilai OCR secara satu per satu. Tujuannya yaitu agar pergerakan motor servo menjadi lebih halus ketika menggerakan lengan robot. “Void” merupakan perintah untuk membuat suatu fungsi agar ketika dieksekusi selama proses tidak perlu menulis ulang subrutin yang terdapat didalam void. Untuk lanjutan listing program diatas dapat dilihat pada lampiran program CVAVR.

4.3.1.4. Subrutin Program Utama

Pada bagian ini akan dibahas mengenai subrutin program yang akan dieksekusi secara terus menerus karena terdapat didalam fungsi while. Listing program dapat dilihat dibawah ini: while 1 { photodioda; delay_ms10; if sensor=200 { delay_ms100; PORTD.2=0;delay_ms5; z=1; whilez { a=getchar ; ifa==114 { lcd_gotoxy0,1;lcd_putsfBENDA MERAH;delay_ms1000; gerak_merah;delay_ms10; lcd_clear;delay_ms10;z=0; } else ifa==103 { lcd_gotoxy0,1;lcd_putsfBENDA HIJAU;delay_ms1000; gerak_hijau;delay_ms10; lcd_clear;delay_ms10; z=0; } else ifa==98 { lcd_gotoxy0,1;lcd_putsfBENDA BIRU;delay_ms1000; gerak_biru;delay_ms10; lcd_clear;delay_ms10; z=0; } else ifa==97 { lcd_gotoxy0,1;lcd_putsfBUKAN WARNA DASAR;delay_ms1000; PORTD.2=1;delay_ms10; lcd_clear;delay_ms10; z=0; } } else {PORTD.2=1;delay_ms5;} }; Pada bagian listing program diatas, nilai variabel ‘a’ berisi nilai suatu karakter yang dikirim oleh laptop melalui modul USB TO TTL converter. Nilai karakter 114 yang dikirim laptop merupakan nilai yang mendeskripsikan bahwa warna benda yang terdeteksi merupakan