• Tidak ada hasil yang ditemukan

Realisasi Lengan Robot Berbasis Mikrokontroler ATMega 16.

N/A
N/A
Protected

Academic year: 2017

Membagikan "Realisasi Lengan Robot Berbasis Mikrokontroler ATMega 16."

Copied!
38
0
0

Teks penuh

(1)

i

REALISASI LENGAN ROBOT BERBASIS

MIKROKONTROLER ATMEGA16

Disusun oleh:

Dicky Fernando

0422038

Jurusan Teknik Elektro, Fakultas Teknik, Universitas Kristen Maranatha,

Jl. Prof. Drg. Suria Sumanti, MPH No.65, Bandung, Indonesia,

E-mail : oranganehgila@yahoo.com

ABSTRAK

Peran robot sebagai pelaksana suatu pekerjaan telah menggeser fungsi

manusia kepada pengawas dan pemberi perintah pada saat-saat tertentu saja. Hal

ini semakin terasa pada pekerjaan-pekerjaan rutin dan berat, karena tenaga robot

akan lebih efisien bila dibandingkan dengan tenaga manusia.

Dalam Tugas Akhir telah direalisasikan lengan robot dengan lima derajat

kebebasan yang menggunakan motor DC dan motor servo sebagai penggeraknya.

Mikrokontroler ATMEGA16 digunakan sebagai pengendali, dan program

user-interface

dibuat dengan VisualBasic6 untuk memudahkan user

dalam

mengendalikan lengan robot.

Pengujian dengan acuan sudut menghasilkan error pada sendi dasar

sebesar 2.7%, sendi pertama sebesar

3.1%

, sendi kedua sebesar

4.7

% dan sendi

ketiga sebesar

5.6

%. Pengujian kedua dilakukan untuk menentukan beban

maksimal yang dapat diangkat lengan, yaitu sebesar 40gram. Pengujian ketiga

dilakukan untuk mendapatkan tingkat akurasi dari lengan dalam mencapai posisi

tertentu dengan error pada sumbu x sebesar 2%, pada sumbu y sebesar 2.8% dan

pada sumbu z sebesar 3.5%. Pengujian terakhir, yaitu pada simulasi pick and

place berhasil dengan baik. Lengan robot dapat mengambil barang pada tempat

(2)

ii

REALIZATION OF ROBOTIC ARM BASED ON

MICROCONTROLLER ATMEGA16

Composed by:

Dicky Fernando

0422038

Electrical Engineering, Maranatha Chirstian University,

Jl. Prof. Drg. Suria Sumanti, MPH No.65, Bandung, Indonesia,

E-mail : oranganehgila@yahoo.com

ABSTRACT

Robot’s role as an executor in a job have made human’s function shifting

to an observer and an instructor in such situations. This things can be felt more

clearly in repeating and heavy works, beca

use robot’s power will be much more

ef

ficient compared to human’s.

In this Last Assignment, a robotic arm with five degrees of freedom which

uses DC motor and servos as its actuators has been realized. Microcontroller

ATMEGA16 is used as controller, and a user-interface is made on VisualBasic6

to simplify things for user in controlling the arm.

Tests have been done. The first one uses degrees as its reference, with

error on base-joint 2.7%, first-joint is

3.1%

, second-joint is

4.7

% and third-joint is

5.6

%. Second test is about power. This test is used to measured how much this

(3)

v

DAFTAR ISI

Halaman

ABSTRAK ... i

ABSTRACT ... ii

KATA PENGANTAR... iii

DAFTAR ISI... v

DAFTAR TABEL ... vii

DAFTAR GAMBAR... viii

BAB I

PENDAHULUAN

I.1

Latar Belakang ... 1

I.2

Identifikasi Masalah... 1

I.3

Tujuan ... 1

I.4

Pembatasan Masalah ... 2

I.5

Spesifikasi Alat ... 2

I.6

Sistematika Penulisan ... 2

BAB II

LANDASAN TEORI

II.1

Motor DC ... 4

II.2

Motor Servo ... 5

II.3

Mikrokontroler ... 7

II.4

Pengenalan Visual Basic... 9

II.4.1

Variabel, Data, Operator ... 9

II.4.2

Conditional Statement dan Looping Statement... 10

(4)

vi

BAB III

PERANCANGAN DAN REALISASI LENGAN ROBOT

BESERTA PENGENDALINYA

III.1

Lengan Robot... 14

III.2

Pengendali Lengan Robot ... 18

III.2.1

Mikrokontroler ATMEGA16... 19

III.2.2

User Interface ... 27

BAB IV

PENGUJIAN DAN ANALISA

IV.1

Pengujian dengan Acuan Sudut ... 34

IV.1.1

Sendi Dasar (Motor DC) ... 34

IV.1.2

Sendi Pertama (servo1 dan servo2)... 35

IV.1.3

Sendi Kedua (servo3)... 36

IV.1.4

Sendi Ketiga (servo4) ... 37

IV.2

Pengujian dengan Acuan Beban ... 37

IV.3

Pengujian Tingkat Akurasi ... 39

IV.4

Pengujian Program AoS... 39

IV.4.1

Pengujian TRAINING Mode... 40

IV.4.2

Pengujian PICK and PLACE Simulation... 43

BAB V

KESIMPULAN DAN SARAN

V.1

Kesimpulan ... 46

V.2

Saran ... 47

DAFTAR PUSTAKA

LAMPIRAN

A Instruksi Mikrokontroler

LAMPIRAN

B Instruksi Program AoS

(5)

vii

DAFTAR TABEL

Halaman

1. Tabel 4.1 Pengujian Sendi Dasar ... 34

2. Tabel 4.1 Pengujian Sendi Dasar (sambungan) ... 35

3. Tabel 4.2 Pengujian Sendi Pertama ... 35

4. Tabel 4.3 Pengujian Sendi Kedua ... 36

5. Tabel 4.4 Pengujian Sendi Ketiga... 37

6. Tabel 4.5 Pengujian dengan Acuan Beban ... 38

(6)

viii

DAFTAR GAMBAR

Halaman

1. Gambar 2.1 (a) Armature, (b) Stator... 4

2. Gambar 2.2 Prinsip Kerja Motor DC ... 5

3. Gambar 2.3 Motor Servo yang Dibongkar... 6

4. Gambar 2.4 Diagram pin ATMEGA16-PDIP ... 9

5. Gambar 3.1 Lengan Robor lynxmotion.com ... 14

6. Gambar 3.2 Sketsa Awal Lengan Robot... 15

7. Gambar 3.3 Gripper... 16

8. Gambar 3.4 Sketsa Pemasangan Pegas ... 17

9. Gambar 3.5 Posisi Menjangkau Maksimum (a) Horizontal, (b) Vertikal... 18

10. Gambar 3.6 Blok Diagram ... 19

11. Gambar 3.7 Diagram Skematik Mikrokontroler ATMEGA16... 20

12. Gambar 3.8 Diagram Alir Mikrokontroler... 21

13.

Gambar 3.9 Diagram Alir ’servo1’

... 22

14.

Gambar 3.10 Diagram Alir ’servo2’

... 23

15.

Gambar 3.11 Diagram Alir ’servo3’

... 24

16.

Gambar 3.12 Diagram Alir ’svrocr’

... 25

17.

Gambar 3.13 Diagram Alir ’dcmtrcw’

... 26

18.

Gambar 3.14 Diagram Alir ’dcmtrccw’

... 27

19. Gambar 3.15 Diagram Alir AoS v3.2 ... 28

20. Gambar 3.16 Tampilan AoS v3.2 ... 28

21. Gambar 3.17 Diagram Alir TRAINING ... 30

22. Gambar 3.18 TRAINING Mode... 31

23. Gambar 3.19 Diagram Alir PICK and PLACE Simulation... 32

24. Gambar 3.20 PICK and PLACE Simulation ... 33

25. Gambar 4.1 TRAINING 1... 41

(7)

ix

27. Gambar 4.3 TRAINING 2... 42

28. Gambar 4.4 Posisi Lengan Robot 2 ... 42

29. Gambar 4.5 TRAINING 3... 43

30. Gambar 4.6 Posisi Lengan Robot 3 ... 43

31. Gambar 4.7 PICK and PLACE, Tahap 1 ... 44

32. Gambar 4.8 PICK and PLACE, Tahap 2 ... 45

(8)

LAMPIRAN - A

(9)

#include <mega16.h> #include <stdio.h> #include <delay.h> bit kirim;

char temp,temp1=6,temp2=15,temp3=6,temp4=0,temp5=0;

#define RXB8 1 #define TXB8 0 #define UPE 2 #define OVR 3 #define FE 4 #define UDRE 5 #define RXC 7

#define FRAMING_ERROR (1<<FE) #define PARITY_ERROR (1<<UPE) #define DATA_OVERRUN (1<<OVR)

#define DATA_REGISTER_EMPTY (1<<UDRE)

#define RX_COMPLETE (1<<RXC)

// USART Receiver buffer #define RX_BUFFER_SIZE 8 char rx_buffer[RX_BUFFER_SIZE];

#if RX_BUFFER_SIZE<256

unsigned char rx_wr_index,rx_rd_index,rx_counter; #else

unsigned int rx_wr_index,rx_rd_index,rx_counter; #endif

// This flag is set on USART Receiver buffer overflow bit rx_buffer_overflow;

// USART Receiver interrupt service routine interrupt [USART_RXC] void usart_rx_isr(void) {

char status,data; status=UCSRA; data=UDR;

if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0) {

rx_buffer[rx_wr_index]=data;

if (++rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0; if (++rx_counter == RX_BUFFER_SIZE)

{

rx_counter=0; rx_buffer_overflow=1; };

};kirim=1; }

#ifndef _DEBUG_TERMINAL_IO_

// Get a character from the USART Receiver buffer #define _ALTERNATE_GETCHAR_

(10)

char data;

while (rx_counter==0); data=rx_buffer[rx_rd_index];

if (++rx_rd_index == RX_BUFFER_SIZE) rx_rd_index=0; #asm("cli") --rx_counter; #asm("sei") return data; } #pragma used-#endif

// USART Transmitter buffer #define TX_BUFFER_SIZE 8 char tx_buffer[TX_BUFFER_SIZE];

#if TX_BUFFER_SIZE<256

unsigned char tx_wr_index,tx_rd_index,tx_counter; #else

unsigned int tx_wr_index,tx_rd_index,tx_counter; #endif

// USART Transmitter interrupt service routine interrupt [USART_TXC] void usart_tx_isr(void) {

if (tx_counter) {

--tx_counter;

UDR=tx_buffer[tx_rd_index];

if (++tx_rd_index == TX_BUFFER_SIZE) tx_rd_index=0; };

}

#ifndef _DEBUG_TERMINAL_IO_

// Write a character to the USART Transmitter buffer #define _ALTERNATE_PUTCHAR_

#pragma used+ void putchar(char c) {

while (tx_counter == TX_BUFFER_SIZE); #asm("cli")

if (tx_counter || ((UCSRA & DATA_REGISTER_EMPTY)==0)) {

tx_buffer[tx_wr_index]=c;

if (++tx_wr_index == TX_BUFFER_SIZE) tx_wr_index=0; ++tx_counter; } else UDR=c; #asm("sei") } #pragma used-#endif

// Standard Input/Output functions #include <stdio.h>

(11)

void servo (char delay1, char delay2, char delay3) {

char i; PORTA.0=1; for(i=0;i<delay1;i++) {delay_us(100);} PORTA.0=0; PORTA.1=1; for(i=0;i<delay2;i++) {delay_us(100);} PORTA.1=0; PORTA.2=1; for(i=0;i<delay3;i++) {delay_us(100);} PORTA.2=0; return; }

void dccw (char delay4) {

char icw,iicw; PORTC.0=1;

for(icw=0;icw<delay4;icw++) {for(iicw=0;iicw<8;iicw++) {servo(temp1,temp2,temp3); delay_ms(15);}

}

PORTC.0=0; return;}

void dcccw (char delay5) {

char iccw,iiccw; PORTC.1=1;

for(iccw=0;iccw<delay5;iccw++) {for(iiccw=0;iiccw<8;iiccw++) {servo(temp1,temp2,temp3); delay_ms(15);}

}

PORTC.1=0; return;}

void main(void) {

// Declare your local variables here

// Input/Output Ports initialization // Port A initialization

// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0

PORTA=0x00; DDRA=0xFF;

// Port B initialization

(12)

PORTB=0x00; DDRB=0x00;

// Port C initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTC=0x00;

DDRC=0xFF;

// Port D initialization

// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0

PORTD=0x00; DDRD=0xFF;

// Timer/Counter 0 initialization // Clock source: System Clock // Clock value: Timer 0 Stopped // Mode: Normal top=FFh // OC0 output: Disconnected TCCR0=0x00;

TCNT0=0x00; OCR0=0x00;

// Timer/Counter 1 initialization // Clock source: System Clock // Clock value: 1500.000 kHz

// Mode: Ph. & fr. cor. PWM top=ICR1 // OC1A output: Non-Inv.

// OC1B output: Non-Inv. // Noise Canceler: Off

// Input Capture on Falling Edge // Timer 1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off TCCR1A=0xA0; TCCR1B=0x12; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x3A; ICR1L=0x98; OCR1AH=0x01; OCR1AL=0xC2; OCR1BH=0x01; OCR1BL=0xC2;

// Timer/Counter 2 initialization // Clock source: System Clock // Clock value: Timer 2 Stopped // Mode: Normal top=FFh // OC2 output: Disconnected ASSR=0x00;

TCCR2=0x00; TCNT2=0x00; OCR2=0x00;

(13)

// INT0: Off // INT1: Off // INT2: Off MCUCR=0x00; MCUCSR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x00;

// 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=0xD8; UCSRC=0x86; UBRRH=0x00; UBRRL=0x4D;

// Analog Comparator initialization // Analog Comparator: Off

// Analog Comparator Input Capture by Timer/Counter 1: Off ACSR=0x80;

SFIOR=0x00;

// Global enable interrupts #asm("sei")

while (1)

{OCR1A=1198;OCR1B=1198; awal:

if(kirim==1) {kirim=0; temp=getchar(); switch(temp) {

case '0':PORTA=0;OCR1A=1198;OCR1B=1198;temp1=6;temp2=6;temp3=6;break; case '1':PORTA=0;PORTA.7=1;goto servo1;break;

case '2':PORTA=0;PORTA.6=1;goto servo2;break; case '3':PORTA=0;PORTA.5=1;goto servo3;break; case '4':PORTA=0;PORTA.4=1;goto srvocr;break; case '5':PORTA=0xf0;goto dcmtrcw;break; case '6':PORTA=0xf0;goto dcmtrccw;break; }}

servo(temp1,temp2,temp3); delay_ms(15);

goto awal;

dcmtrcw: if(kirim==1) {kirim=0; temp=getchar(); switch(temp) {

(14)

case 'b':temp4=4;break; case 'c':temp4=6;break; case 'd':temp4=8;break; case 'e':temp4=10;break; case 'f':temp4=12;break; case 'g':temp4=14;break; case 'h':temp4=16;break; case 'i':temp4=18;break; case 'j':temp4=20;break; case 'k':temp4=22;break; case 'l':temp4=24;break; case 'm':temp4=26;break; case 'n':temp4=28;break; case 'o':temp4=30;break; case 'p':temp4=32;break; case 'q':temp4=34;break; case 'r':temp4=36;break; case '0':PORTA=1;OCR1A=600;OCR1B=600;temp1=6;temp2=6;temp3=6;break; case '1':PORTA=0;PORTA.7=1;goto servo1;break;

(15)

case '2':PORTA=0;PORTA.6=1;goto servo2;break; case '3':PORTA=0;PORTA.5=1;goto servo3;break; case '4':PORTA=0;PORTA.4=1;goto srvocr;break; case '5':PORTA=0xf0;goto dcmtrcw;break; case '6':PORTA=0xf0;goto dcmtrccw;break; }} servo(temp1,temp2,temp3); delay_ms(15); dcccw(temp5); temp5=0; goto dcmtrccw; srvocr: if(kirim==1) {kirim=0; temp=getchar(); switch(temp) { case 'a':OCR1A=550;OCR1B=550;break; case 'b':OCR1A=622;OCR1B=622;break; case 'c':OCR1A=694;OCR1B=694;break; case 'd':OCR1A=766;OCR1B=766;break; case 'e':OCR1A=838;OCR1B=838;break; case 'f':OCR1A=910;OCR1B=910;break; case 'g':OCR1A=982;OCR1B=982;break; case 'h':OCR1A=1054;OCR1B=1054;break; case 'i':OCR1A=1126;OCR1B=1126;break; case 'j':OCR1A=1198;OCR1B=1198;break; case '0':PORTA=0;OCR1A=550;OCR1B=550;temp1=6;temp2=6;temp3=6;break; case '1':PORTA=0;PORTA.7=1;goto servo1;break;

case '2':PORTA=0;PORTA.6=1;goto servo2;break; case '3':PORTA=0;PORTA.5=1;goto servo3;break; case '4':PORTA=0;PORTA.4=1;goto srvocr;break; case '5':PORTA=0xf0;goto dcmtrcw;break; case '6':PORTA=0xf0;goto dcmtrccw;break;

(16)

case 'l':temp1=17;break; case 'm':temp1=18;break; case 'n':temp1=19;break; case 'o':temp1=20;break; case 'p':temp1=21;break; case 'q':temp1=22;break; case 'r':temp1=23;break; case 's':temp1=24;break; case '0':PORTA=0;OCR1A=600;OCR1B=600;temp1=6;temp2=6;temp3=6;break; case '1':PORTA=0;PORTA.7=1;goto servo1;break;

case '2':PORTA=0;PORTA.6=1;goto servo2;break; case '3':PORTA=0;PORTA.5=1;goto servo3;break; case '4':PORTA=0;PORTA.4=1;goto srvocr;break; case '5':PORTA=0xf0;goto dcmtrcw;break; case '6':PORTA=0xf0;goto dcmtrccw;break;

}} servo(temp1,temp2,temp3); delay_ms(15); goto servo1; servo2: if(kirim==1) {kirim=0; temp=getchar(); switch(temp) { case 'a':temp2=6;break; case 'b':temp2=7;break; case 'c':temp2=8;break; case 'd':temp2=9;break; case 'e':temp2=10;break; case 'f':temp2=11;break; case 'g':temp2=12;break; case 'h':temp2=13;break; case 'i':temp2=14;break; case 'j':temp2=15;break; case 'k':temp2=16;break; case 'l':temp2=17;break; case 'm':temp2=18;break; case 'n':temp2=19;break; case 'o':temp2=20;break; case 'p':temp2=21;break; case 'q':temp2=22;break; case 'r':temp2=23;break; case 's':temp2=24;break; case '0':PORTA=0;OCR1A=600;OCR1B=600;temp1=6;temp2=6;temp3=6;break; case '1':PORTA=0;PORTA.7=1;goto servo1;break;

case '2':PORTA=0;PORTA.6=1;goto servo2;break; case '3':PORTA=0;PORTA.5=1;goto servo3;break; case '4':PORTA=0;PORTA.4=1;goto srvocr;break; case '5':PORTA=0xf0;goto dcmtrcw;break; case '6':PORTA=0xf0;goto dcmtrccw;break;

}}

servo(temp1,temp2,temp3); delay_ms(15);

(17)

servo3:

if(kirim==1) {kirim=0; temp=getchar(); switch(temp) {

case 'a':temp3=6;break; case 'b':temp3=7;break; case 'c':temp3=8;break; case 'd':temp3=9;break; case 'e':temp3=10;break; case 'f':temp3=11;break; case 'g':temp3=12;break; case 'h':temp3=13;break; case 'i':temp3=14;break; case 'j':temp3=15;break; case 'k':temp3=16;break; case 'l':temp3=17;break; case 'm':temp3=18;break; case 'n':temp3=19;break; case 'o':temp3=20;break; case 'p':temp3=21;break; case 'q':temp3=22;break; case 'r':temp3=23;break; case 's':temp3=24;break;

case '0':PORTA=0;OCR1A=600;OCR1B=600;temp1=6;temp2=6;temp3=6;break; case '1':PORTA=0;PORTA.7=1;goto servo1;break;

case '2':PORTA=0;PORTA.6=1;goto servo2;break; case '3':PORTA=0;PORTA.5=1;goto servo3;break; case '4':PORTA=0;PORTA.4=1;goto srvocr;break; case '5':PORTA=0xf0;goto dcmtrcw;break; case '6':PORTA=0xf0;goto dcmtrccw;break;

}}

servo(temp1,temp2,temp3); delay_ms(15);

(18)

LAMPIRAN - B

(19)

Dim srv1, srv2, srv3, srv4, dc, ctr As Integer

Private Sub Command1_Click() Label1.Caption = "TRAINING MODE" Label1.Visible = True

HScroll1.Visible = True HScroll2.Visible = True HScroll3(0).Visible = True HScroll3(1).Visible = True Command1.Visible = False Command2.Visible = False Command3.Visible = True Command4.Visible = True Command5.Visible = True Command7.Visible = True Command8.Visible = True Command9.Visible = True Text1.Visible = True Text2.Visible = True Text3.Visible = True Text4.Visible = True Line1.Visible = True Line2.Visible = True Line3.Visible = True Line4.Visible = True Line5.Visible = True Line6.Visible = True Line7.Visible = True Timer1.Enabled = True End Sub

Private Sub Command2_Click()

Label1.Caption = "PICK and PLACE simulation" Label1.Visible = True

Label2.Visible = True Text5.Visible = True Command1.Visible = False Command2.Visible = False Command5.Visible = True

cdc1 = InputBox("clockwise/counter-clockwise (0/1) :", "PICK input", 0) dc1 = InputBox("dc motor (0-180) :", "'PICK' input", 0)

s11 = InputBox("servo1&2 (30-90) :", "'PICK' input", 30) s21 = InputBox("servo3 (50-120) :", "'PICK' input", 50) s31 = InputBox("servo4 (0-180) :", "'PICK' input", 0)

cdc2 = InputBox("clockwise/counter-clockwise (0/1) :", "'PLACE' input", 0) dc2 = InputBox("dc motor (0-180) :", "'PLACE' input", 0)

s12 = InputBox("servo1&2 (30-90) :", "'PLACE' input", 30) s22 = InputBox("servo3 (50-120) :", "'PLACE' input", 50) s32 = InputBox("servo4 (0-180) :", "'PLACE' input", 0)

ctr = InputBox("pengulangan :", "input counter", 1) ctr2 = 0

(20)

MSComm1.Output = "j" Call Pause(1)

For i = 0 To ctr Text5.Text = ctr2

If cdc1 = 0 Then MSComm1.Output = "5" ElseIf cdc1 = 1 Then MSComm1.Output = "6" End If

Call Pause(1) Select Case (dc1)

Case "10": MSComm1.Output = "a" Case "20": MSComm1.Output = "b" Case "30": MSComm1.Output = "c" Case "40": MSComm1.Output = "d" Case "50": MSComm1.Output = "e" Case "60": MSComm1.Output = "f" Case "70": MSComm1.Output = "g" Case "80": MSComm1.Output = "h" Case "90": MSComm1.Output = "i" Case "100": MSComm1.Output = "j" Case "110": MSComm1.Output = "k" Case "120": MSComm1.Output = "l" Case "130": MSComm1.Output = "m" Case "140": MSComm1.Output = "n" Case "150": MSComm1.Output = "o" Case "160": MSComm1.Output = "p" Case "170": MSComm1.Output = "q" Case "180": MSComm1.Output = "r" End Select

Call Pause(1)

MSComm1.Output = "4" Call Pause(1)

Select Case (s11)

Case "30": MSComm1.Output = "b" Case "40": MSComm1.Output = "c" Case "50": MSComm1.Output = "d" Case "60": MSComm1.Output = "e" Case "70": MSComm1.Output = "f" Case "80": MSComm1.Output = "g" Case "90": MSComm1.Output = "h" End Select

Call Pause(1)

MSComm1.Output = "1" Call Pause(1)

Select Case (s21)

(21)

End Select Call Pause(1)

MSComm1.Output = "2" Call Pause(1)

Select Case (s31)

Case "0": MSComm1.Output = "a" Case "10": MSComm1.Output = "b" Case "20": MSComm1.Output = "c" Case "30": MSComm1.Output = "d" Case "40": MSComm1.Output = "e" Case "50": MSComm1.Output = "f" Case "60": MSComm1.Output = "g" Case "70": MSComm1.Output = "h" Case "80": MSComm1.Output = "i" Case "90": MSComm1.Output = "j" Case "100": MSComm1.Output = "k" Case "110": MSComm1.Output = "l" Case "120": MSComm1.Output = "m" Case "130": MSComm1.Output = "n" Case "140": MSComm1.Output = "o" Case "150": MSComm1.Output = "p" Case "160": MSComm1.Output = "q" Case "170": MSComm1.Output = "r" Case "180": MSComm1.Output = "s" End Select

Call Pause(1)

MSComm1.Output = "3" Call Pause(1)

MSComm1.Output = "a" Call Pause(1)

If cdc1 = 0 Then MSComm1.Output = "6" ElseIf cdc1 = 1 Then MSComm1.Output = "5" End If

Call Pause(1) Select Case (dc1)

(22)

End Select Call Pause(1)

If cdc2 = 0 Then MSComm1.Output = "5" ElseIf cdc2 = 1 Then MSComm1.Output = "6" End If

Call Pause(1) Select Case (dc2)

Case "10": MSComm1.Output = "a" Case "20": MSComm1.Output = "b" Case "30": MSComm1.Output = "c" Case "40": MSComm1.Output = "d" Case "50": MSComm1.Output = "e" Case "60": MSComm1.Output = "f" Case "70": MSComm1.Output = "g" Case "80": MSComm1.Output = "h" Case "90": MSComm1.Output = "i" Case "100": MSComm1.Output = "j" Case "110": MSComm1.Output = "k" Case "120": MSComm1.Output = "l" Case "130": MSComm1.Output = "m" Case "140": MSComm1.Output = "n" Case "150": MSComm1.Output = "o" Case "160": MSComm1.Output = "p" Case "170": MSComm1.Output = "q" Case "180": MSComm1.Output = "r" End Select

Call Pause(1)

MSComm1.Output = "4" Call Pause(1)

Select Case (s12)

Case "30": MSComm1.Output = "b" Case "40": MSComm1.Output = "c" Case "50": MSComm1.Output = "d" Case "60": MSComm1.Output = "e" Case "70": MSComm1.Output = "f" Case "80": MSComm1.Output = "g" Case "90": MSComm1.Output = "h" End Select

Call Pause(1)

MSComm1.Output = "1" Call Pause(1)

Select Case (s22)

Case "50": MSComm1.Output = "f" Case "60": MSComm1.Output = "g" Case "70": MSComm1.Output = "h" Case "80": MSComm1.Output = "i" Case "90": MSComm1.Output = "j" Case "100": MSComm1.Output = "k" Case "110": MSComm1.Output = "l" Case "120": MSComm1.Output = "m" End Select

(23)

MSComm1.Output = "2" Call Pause(1)

Select Case (s32)

Case "0": MSComm1.Output = "a" Case "10": MSComm1.Output = "b" Case "20": MSComm1.Output = "c" Case "30": MSComm1.Output = "d" Case "40": MSComm1.Output = "e" Case "50": MSComm1.Output = "f" Case "60": MSComm1.Output = "g" Case "70": MSComm1.Output = "h" Case "80": MSComm1.Output = "i" Case "90": MSComm1.Output = "j" Case "100": MSComm1.Output = "k" Case "110": MSComm1.Output = "l" Case "120": MSComm1.Output = "m" Case "130": MSComm1.Output = "n" Case "140": MSComm1.Output = "o" Case "150": MSComm1.Output = "p" Case "160": MSComm1.Output = "q" Case "170": MSComm1.Output = "r" Case "180": MSComm1.Output = "s" End Select

Call Pause(1)

MSComm1.Output = "3" Call Pause(1)

MSComm1.Output = "j" Call Pause(1)

If cdc2 = 0 Then MSComm1.Output = "6" ElseIf cdc2 = 1 Then MSComm1.Output = "5" End If

Call Pause(1) Select Case (dc2)

Case "10": MSComm1.Output = "a" Case "20": MSComm1.Output = "b" Case "30": MSComm1.Output = "c" Case "40": MSComm1.Output = "d" Case "50": MSComm1.Output = "e" Case "60": MSComm1.Output = "f" Case "70": MSComm1.Output = "g" Case "80": MSComm1.Output = "h" Case "90": MSComm1.Output = "i" Case "100": MSComm1.Output = "j" Case "110": MSComm1.Output = "k" Case "120": MSComm1.Output = "l" Case "130": MSComm1.Output = "m" Case "140": MSComm1.Output = "n" Case "150": MSComm1.Output = "o" Case "160": MSComm1.Output = "p" Case "170": MSComm1.Output = "q" Case "180": MSComm1.Output = "r" End Select

(24)

ctr2 = ctr2 + 1 Next

End Sub

Private Sub Command3_Click() srv4 = 0

Command3.Enabled = False Command4.Enabled = True End Sub

Private Sub Command4_Click() srv4 = 90

Command4.Enabled = False Command3.Enabled = True End Sub

Private Sub Command5_Click() MSComm1.Output = "0"

Label1.Caption = "CHOOSE A MODE" Label1.Visible = True

Label2.Visible = False HScroll1.Visible = False HScroll2.Visible = False HScroll3(0).Visible = False HScroll3(1).Visible = False Command1.Visible = True Command2.Visible = True Command3.Visible = False Command4.Visible = False Command5.Visible = False Command7.Visible = False Command8.Visible = False Command9.Visible = False Text1.Visible = False Text2.Visible = False Text3.Visible = False Text4.Visible = False Text5.Visible = False Line1.Visible = False Line2.Visible = False Line3.Visible = False Line4.Visible = False Line5.Visible = False Line6.Visible = False Line7.Visible = False Timer1.Enabled = False HScroll1.Value = 0 HScroll2.Value = 30 HScroll3(0).Value = 50 HScroll3(1).Value = 0 End Sub

Private Sub Command6_Click() End

End Sub

(25)

If dc = 0 Then dc = dc

ElseIf dc <> 0 Then MSComm1.Output = "5" Call Pause(1)

If dc = 10 Then

MSComm1.Output = "a" ElseIf dc = 20 Then MSComm1.Output = "b" ElseIf dc = 30 Then MSComm1.Output = "c" ElseIf dc = 40 Then MSComm1.Output = "d" ElseIf dc = 50 Then MSComm1.Output = "e" ElseIf dc = 60 Then MSComm1.Output = "f" ElseIf dc = 70 Then MSComm1.Output = "g" ElseIf dc = 80 Then MSComm1.Output = "h" ElseIf dc = 90 Then MSComm1.Output = "i" ElseIf dc = 100 Then MSComm1.Output = "j" ElseIf dc = 110 Then MSComm1.Output = "k" ElseIf dc = 120 Then MSComm1.Output = "l" ElseIf dc = 130 Then MSComm1.Output = "m" ElseIf dc = 140 Then MSComm1.Output = "n" ElseIf dc = 150 Then MSComm1.Output = "o" ElseIf dc = 160 Then MSComm1.Output = "p" ElseIf dc = 170 Then MSComm1.Output = "q" ElseIf dc = 180 Then MSComm1.Output = "r" End If

End If

Timer1.Enabled = True End Sub

Private Sub Command8_Click() Timer1.Enabled = False If dc = 0 Then

dc = dc

ElseIf dc <> 0 Then MSComm1.Output = "6" Call Pause(1)

If dc = 10 Then

(26)

MSComm1.Output = "c" ElseIf dc = 40 Then MSComm1.Output = "d" ElseIf dc = 50 Then MSComm1.Output = "e" ElseIf dc = 60 Then MSComm1.Output = "f" ElseIf dc = 70 Then MSComm1.Output = "g" ElseIf dc = 80 Then MSComm1.Output = "h" ElseIf dc = 90 Then MSComm1.Output = "i" ElseIf dc = 100 Then MSComm1.Output = "j" ElseIf dc = 110 Then MSComm1.Output = "k" ElseIf dc = 120 Then MSComm1.Output = "l" ElseIf dc = 130 Then MSComm1.Output = "m" ElseIf dc = 140 Then MSComm1.Output = "n" ElseIf dc = 150 Then MSComm1.Output = "o" ElseIf dc = 160 Then MSComm1.Output = "p" ElseIf dc = 170 Then MSComm1.Output = "q" ElseIf dc = 180 Then MSComm1.Output = "r" End If

End If

Timer1.Enabled = True End Sub

Private Sub Command9_Click() MSComm1.Output = "4" Call Pause(1)

(27)

MSComm1.Output = "j" End If

Call Pause(1)

For i = 0 To 1 x = HScroll3(i).Value If i = 0 Then

MSComm1.Output = "1" ElseIf i = 1 Then MSComm1.Output = "2" End If

Call Pause(1) If x = 0 Then

MSComm1.Output = "a" ElseIf x = 10 Then MSComm1.Output = "b" ElseIf x = 20 Then MSComm1.Output = "c" ElseIf x = 30 Then MSComm1.Output = "d" ElseIf x = 40 Then MSComm1.Output = "e" ElseIf x = 50 Then MSComm1.Output = "f" ElseIf x = 60 Then MSComm1.Output = "g" ElseIf x = 70 Then MSComm1.Output = "h" ElseIf x = 80 Then MSComm1.Output = "i" ElseIf x = 90 Then MSComm1.Output = "j" ElseIf x = 100 Then MSComm1.Output = "k" ElseIf x = 110 Then MSComm1.Output = "l" ElseIf x = 120 Then MSComm1.Output = "m" ElseIf x = 130 Then MSComm1.Output = "n" ElseIf x = 140 Then MSComm1.Output = "o" ElseIf x = 150 Then MSComm1.Output = "p" ElseIf x = 160 Then MSComm1.Output = "q" ElseIf x = 170 Then MSComm1.Output = "r" ElseIf x = 180 Then MSComm1.Output = "s" End If

Call Pause(1) Next

MSComm1.Output = "3" Call Pause(1)

(28)

MSComm1.Output = "a" ElseIf srv4 = 90 Then MSComm1.Output = "j" End If

End Sub

Private Sub Form_Load() MSComm1.CommPort = 1

MSComm1.Settings = "9600,N,8,1" MSComm1.InputLen = 0

MSComm1.PortOpen = True srv1 = 0

srv2 = 0 srv3 = 0 srv4 = 0 dc = o

Timer1.Enabled = False Command3.Enabled = False Command5.Visible = False

Label1.Caption = "CHOOSE A MODE" Label1.Visible = True

End Sub

Private Sub Timer1_Timer() i1 = HScroll1.Value i1 = i1 \ 10

HScroll1.Value = i1 * 10 Text1.Text = HScroll1.Value dc = HScroll1.Value

i1 = HScroll2.Value i1 = i1 \ 10

HScroll2.Value = i1 * 10 Text2.Text = HScroll2.Value srv1 = HScroll2.Value

i1 = HScroll3(0).Value i1 = i1 \ 10

HScroll3(0).Value = i1 * 10 Text3.Text = HScroll3(0).Value

i1 = HScroll3(1).Value i1 = i1 \ 10

HScroll3(1).Value = i1 * 10 Text4.Text = HScroll3(1).Value End Sub

Sub Pause(ByVal nSecond As Single) Dim t0 As Single

t0 = Timer

Do While Timer - t0 < nSecond Dim dummy As Integer dummy = DoEvents() Loop

(29)

LAMPIRAN

C

(30)

Sejarah Singkat Program AoS

Program AoS v1.0 dibuat pada bulan November 2007. Program ini cukup

sederhana, yaitu hanya mengendalikan lengan secara manual saja. Pengiriman data

dilakukan secara real-time dengan menggunakan sebuah timer. Namun program ini

memiliki kendala besar, yaitu data yang dikirimkan sering tidak dapat diterima oleh

mikrokontroler, sehingga pengaturan lengan menjadi salah.

Kemudian AoS dikembangkan pada AoS v2.0 pada awal bulan Desember

2007. terdapat perubahan yang cukup besar, yaitu mengganti proses pengiriman

secara real-time dengan sebuah tombol SEND. Tombol SEND ini akan mengirimkan

data yang bersangkutan dengan sendi-sendi pada lengan, dengan delay sebesar satu

detik pada tiap pengirimannya. Pada AoS v2.0 ini, pengiriman data pengendali

lengan telah berfungsi dengan baik, dimana data yang dikirimkan diterima

mikrokontroler dan dapat mengendalikan lengan secara akurat.

AoS v2.0 kemudian dikembangkan lagi menjadi AoS v3.0 pada awal bulan

Januari 2008. Pada AoS v3.0 ini, ditambahkan tombol CW dan CCW untuk

mengendalikan motor DC (searah dan berlawanan arah jam) yang sebelumnya hanya

dapat mengendalikan motor DC searah jam saja, dan penambahan menu awal

(sehingga menu pengendali pada program AoS sebelumnya dinamai TRAINING

mode). Pada versi ini juga ditambahkan menu PICK and PLACE simulation.

Terdapat beberapa pengembangan minor seperti perubahan gambar dan penambahan

garis untuk memperbaiki penampilan program AoS. Dan pada akir bulan Januari

2008, diselesaikanlah AoS v3.2 yang digunakan dalam Tugas Akhir ini. AoS v3.2

merupakan versi final dari program pengendali lengan robot.

(31)
(32)
(33)

1

BAB I

PENDAHULUAN

Pada bab ini dibahas mengenai latar belakang, identifikasi masalah, tujuan,

pembatasan masalah, spesifikasi alat dan sistematika pembahasan.

I.1

Latar Belakang

Robotika merupakan bidang teknologi yang sedang berkembang pesat. Hal

ini terlihat dalam meningkatnya kebutuhan otomasi dalam berbagai bidang seperti

dalam bidang industri, lengan robot digunakan untuk melakukan aktifitas pick and

place.

Otomasi menggunakan lengan robot dapat meningkatkan efisiensi kerja.

Karena dengan menggunakan robot sebagai pengganti tenaga manusia,

kepresisian dapat terus dipertahankan walaupun pekerjaan dilakukan secara

berulang dan terus menerus. Selain itu lengan robot juga dapat digunakan dalam

jangka waktu yang lama tanpa memerlukan istirahat seperti layaknya manusia,

sehingga waktu yang digunakan menjadi lebih efisien.

Atas dasar inilah pembelajaran terhadap robotika dirasa penting. Lengan

robot yang dikendalikan oleh sebuah mikrokontroler menjadi topik yang diambil

dalam Tugas Akhir ini. Realisasi lengan robot dibuat menyerupai lengan robot

yang umum digunakan dalam bidang industri untuk aktifitas pick and place, dan

mikrokontroler AT MEGA 16 digunakan sebagai pengendalinya.

I.2

Identifikasi Masalah

Identifikasi masalah Tugas Akhir ini adalah bagaimana cara

merealisasikan lengan robot dan mengendalikan lengan robot menggunakan

mikrokontroler AT MEGA 16.

I.3

Tujuan

(34)

Bab I Pendahuluan

2

I.4

Pembatasan Masalah

Pembuatan lengan robot terbatas pada beberapa hal, yaitu:

1. Lengan robot memiliki lima derajat kebebasan.

2. Pergerakan maksimal pada sendi dasar sebesar 180

o

(0

o

- 180

o

).

3. Pergerakan maksimal pada sendi pertama sebesar 60

o

(30

o

- 90

o

).

4. Pergerakan maksimal pada sendi kedua sebesar 40

o

(30

o

- 70

o

).

5. Pergerakan maksimal pada sendi ketiga sebesar 180

o

(0

o

- 180

o

).

6. Gerakan untuk gripper adalah mencengkram (grip) dan melepas (release).

7. Kemampuan mengangkat lengan maksimal adalah 40gram.

8. Sistem yang digunakan adalah open loop.

9. Realisasi lengan robot diutamakan pada tingkat akurasi (respon dan kecepatan

tidak ditekankan).

I.5

Spesifikasi Alat

Alat-alat yang digunakan dalam merealisasikan lengan robot dan

pengendalinya adalah:

1. Motor DC, 12V, satu buah

2. Motor servo HITEC HS-475HB DELUXE, tiga buah.

3. Motor servo HITEC HS-425BB DELUXE, satu buah.

4. Motor servo HITEC HS-325HB STANDARD, satu buah.

5. Mikrokontroler ATMEGA16 dengan serial port, driver motor dan led test.

6. Rangkaian penyearah dan trafo untuk menghasilkan sumber tegangan 12V

7. Baterai AA 1.2V, 2500mAh, POWEREX 2700 rechargeable, empat buah.

8. Lengan robot lima derajat kebebasan, dibuat dengan bahan dasar aluminium

2.6mm.

9. Program pengendali sebagai user-interface dibuat menggunakan VisualBasic6.

I.6

Sistematika Penulisan

BAB I

Pendahuluan

(35)

Bab I Pendahuluan

3

BAB II

Teori Penunjang

Bab ini berisikan teori yang menunjang Tugas Akhir ini, yaitu: motor DC, motor

servo, mikrokontroler ATMEGA16, Visual Basic6 dan dasar robotik.

BAB III Perancangan dan Realisasi Lengan Robot Beserta Pengendalinya

Bab ini membahas perancangan dan realisasi lengan robot dengan lima derajat

kebebasan beserta pengendalinya yang terdiri dari mikrokontroler dan program

user-interface (yang dinamai AoS).

BAB IV Pengujian dan Analisa

Bab ini membahas pengujian lengan robot terhadap kesalahan sudut dan beban

maksimal. Kemudian menguji program yang dibuat untuk mengendalikan lengan

robot.

BAB V

Kesimpulan dan Saran

(36)

46

BAB V

KESIMPULAN DAN SARAN

Bab ini merupakan penutup dari laporan Tugas Akhir ini. Bab ini berisikan

kesimpulan akhir dari Tugas Akhir, sekaligus beberapa saran yang dirasa perlu

dan bermanfaat untuk pengembangan lebih lanjut dari realisasi lengan robot

berbasis mikrokontroler ATMEGA16.

V.1

Kesimpulan

Dengan memperhatikan data pengamatan dan analisis pada bab

sebelumnya, dapat disimpulakn beberapa hal di bawah ini:

1. Lengan robot dengan lima derajat kebebasan terealisasi dengan batasan

perputaran sendi dasar dari 0

o

sampai dengan 180

o

, sendi pertama dari 30

o

sampai dengan 90

o

, sendi kedua dari 50

o

sampai dengan 120

o

, sendi ketiga

dari 0

o

sampai dengan 180

o

dan gripper melakukan gerakan grip dan release.

2. Penambahan sistem pegas pada lengan robot diperlukan untuk mengantisipasi

kurangnya daya angkat motor pada sendi-sendi tertentu.

3. Error pada pengujian dengan acuan sudut pada sendi dasar sebesar 2.7%,

sendi pertama sebesar

3.1%

, sendi kedua sebesar

4.7

% dan sendi ketiga sebesar

5.6

%.

4. Error pada pengujian tingkat akurasi pada sumbu x sebesar 2%, pada sumbu y

sebesar 2.8% dan pada sumbu z sebesar 3.5%. Sehingga disimpulkan tingkat

akurasi lengan robot lebih besar dari 95%.

(37)

Bab V Kesimpulan dan Saran

47

V.2

Saran

Saran-saran yang dapat diberikan untuk perbaikan dan pengembangan dari

realisasi lengan robot berbasis mikrokontroler ATMEGA16 adalah sebagai

berikut:

1. Penambahan satu derajat kebebasan (menjadi enam derajat kebebasan) pada

bagian gripper, agar gripper mampu berputar dan memegang secara vertikal.

Hal ini akan membuat lengan robot semakin menyerupai lengan manusia.

2. Menghilangkan sistem pegas. Cara yang dapat dilakukan adalah dengan

(38)

DAFTAR PUSTAKA

Budiharto, Widodo., Perancangan Sistem dan Aplikasi Mikrokontroler, PT Elex

Media Komputindo, Jakarta, 2005

Budiharto, Widodo., Belajar Sendiri Membuat Robot Cerdas, PT Elex Media

Komputindo, Jakarta, 2006

Wardhana, Lingga., Belajar Sendiri Mikrokontroler AVR Seri ATMega8535

Simulasi, Hardware dan Aplikasi, Penerbit Andi, Yogyakarta, 2006

http://en.wikipedia.org

http://www.atmel.com

http://www.elektroindonesia.com

http://www.innovativeelectronics.com

http://www.hitecrcd.com

http://www.lynxmotion.com

Referensi

Dokumen terkait

“Kemampuan yang harus dimiliki guru dalam proses membimbing peserta didiknya yaitu: (a) menguasai materi, struktur, konsep, dan pola pikir keilmuan yang mendukung mata pelajaran

Salah saji Potensial, Akuntansi Pengendalian yang Diperlukan, dan Prosedur Audit untuk Pengujian Pengendalian yang dapat Digunakan oleh Auditor terhadap Transaksi Retur

Catatan / hasil keputusan Hasil tes Surat Panggil an Tes Data karaywa n Biodata karyawa n formulir penilaian calon karyawan. 5 Membuat Surat panggilan kerja Surat

Demikian pengumuman ini kami sampaikan, kepada peserta Seleksi Umum diberi kesempatan menyanggah secara tertulis kepada Panitia Pengadaan Barang/Jasa Untuk Kegiatan Non Fisik

Pendaftaran dan pengambilan Dokurnen Pengadaan dapat diwakilkan dengan membawa surat tugas dari direktur utama / pimpinan perusahaan / kepala cabangdan rnembawa kartu

Monitoring dan evaluasi pelaksanaan koordinasi fasilitator ekonomi dengan PT BRI setempat Sesuai dengan kebijakan dari PMU P2KP, saat ini sudah dimobilisasi 59 fasilitator

oleh Bupati Garut, yang menjadi dasar keputusan Dewan Perwakilan. Rakyat Daerah (DPRD) untuk memakzulkannya, dengan

Menimbang : bahwa untuk melaksanakan Pasal 15 Undang-Undang Nomor 31 Tahun 2000 tentang Desain Industri, Pasal 13 Undang-Undang 32 Tahun 2000 tentang Desain Tata Letak