• Tidak ada hasil yang ditemukan

4. PERCOBAAN dan ANALISA DATA

N/A
N/A
Protected

Academic year: 2022

Membagikan "4. PERCOBAAN dan ANALISA DATA"

Copied!
37
0
0

Teks penuh

(1)

4.1. Perangkat Keras Percobaan

Perangkat keras yang dipakai dalam penelitian adalah:

1. Silinder pneumatik linear tanpa batang Nomor seri : DGP-18-PPV-A-B Produsen : Festo AG & Co.

Panjang langkah : 500 mm Diameter piston : 18 mm

Tekanan kerja : 2 – 8 bar (0.2 – 0.8 MPa) Operasi : langkah ganda

2. Katup elektronik Proportional 5/3,

Tipe : MPYE-5-1/8-HF-420-B

Produsen : Festo AG & Co.

Tekanan kerja : -0.9 – 8 bar Fungsi valve : 5/3

Tegangan kerja : 5-6 bar dengan arus 12 mA pada posisi tengah Media kerja : udara

3. Displacement Encoder, Linear potentiometer Nomor seri : MLO-POT-500-TLF Produsen : Festo AG & Co.

Resistansi : 5 kOhm Panjang langkah : 500 mm Kecepatan maks : 10 m/s Tegangan minimal : 8 volt DC Tegangan maksimal : 42 volt DC 4. Mikro kontroler DT-AVR

Spesifikasi DT-AVR adalah sebagai berikut:

• Mikro kontroler Atmega 8535 yang mempunyai 8 kb Flash memori dan 8 channel ADC dengan resolusi 10 bit.

• Memilki jalur input atau output higga 35 pin.

(2)

• Terdapat eksternal brown out detector sebagai rangkaian reset.

• Konfigurasi jumper untuk melakukan pemilihan beberapa model pengambilan tegangan referensi.

• Frekuensi osilator sebesar 4MHz.

• Tersedia jalur komunikasi serial UART RS-232.

• Tegangan input power supply 9-12 VDC dan output tegangan 5 VDC 5. Operational amplifiers (VIC)

6. Kabel USB RS-232 merupakan kabel penghubung USB PC dengan serial port pada mikrokontroller. Yang berguna untuk mengontrol kontroller dari PC.

7. Komputer Intel Pentium Centrino. Kapasitas harddisk 40 GB. Memori 256 MB.

Sistim operasi, Microsoft Windows XP. Dilengkapi dengan keyboard dan mouse.

Komponen-komponen perangkat keras di atas disusun seperti gambar di bawah ini:

Gambar 4.1. Susunan komponen-komponen percobaan 2

3 1

7 4

6 5

(3)

Keterangan nomor:

1. Silinder linear rodless 500 mm 2. Potensiometer linear 5 kOhm 500 mm 3. Katup elektronik Proportional 5/3 4. proportional amplifiers

5. Mikro kontroler ATmega 8535 6. Power supply adaptor ± 12 volt

7. Power supply katup proporsional 24 volt

4.1.1. Unit Sensor Posisi

Sensor posisi terdiri dari sebuah linear potensiometer sepanjang 500 mm, 5 Kohm. Terbagi menjadi 1006 posisi dengan ketelitian 0,49 mm tiap beda posisinya.

Gambar 4.2. Potensiometer linear

Sumber : http://www.festo.com/INetDomino/31171c.htm

4.1.2. Unit Pneumatik /Penggerak

Komponen yang menajdi unit pneumatik adalah silinder pneumatik rodless sepanjang 500 mm, sebuah katup proporsional 5/3, sebuah pressure regulator dan dua buah check valve (katup pencekik) aliran satu arah.

(4)

Gambar 4.3. Unit pneumatik

4.1.3. Unit Mikro Kontroler dan Opertional Amplifiers

Unit mikro kontroler terdiri dari sebuah minimum sistim mikro kontroler DT-Basic Mini System, dan operational amplifiers yang berfungsi mengubah tegangan dari mikrokontroller menjadi arus untuk menggerakkan katup proporsional.

Gambar 4.4. Unit mikro kontroler dan operatonal amplifiers

(5)

4.1.4. Unit interface Data Input dan Output

Untuk interface data inputan digunakan laptop. Dalam melakukan interface, mikro kontroler dihubungkan dengan komputer menggunakan kabel data serial RS232 melalui USB port pada PC, ke port serial yang dihubungkan pada mikro kontroler. Kabel dongle digunakan untuk mendownload program pada CodeVisionAVR pada mikroprosesor Atmega 8535.

Gambar 4.5 Kabel Dongle dan Kabel Serial RS232

4.1.5. Unit Power Supply

Unit power supply terdiri dari beberapa power supply, yaitu: power supply tegangan 8 volt DC untuk unit sensor posisi yang didapat dari operational

amplifiers, power supply tegangan 9 volt DC untuk mikro kontroler yang didapat dari operational amplifiers, power supply 24 volt DC untuk katup proporsional, power supply tegangan 12 volt untuk operational amplifiers.

(6)

Gambar 4.6. Power supply untuk operational amplifiers

Gambar 4.7. Power supply untuk katup proporsional

4.2. Pemograman Mikro Kontroller

Perangkat lunak yang dipakai dalam percobaan adalah program Code Vision AVR dengan menggunakan bahasa pemograman C dan Delphi 7 sebagai interface (tampilan) pada PC.

Program editor berfungsi untuk membuat program kontroler yang kemudian didownload ke dalam mikro kontroler. Di dalam Code Vision AVR editor ini, kita menuliskan program menggunakan perintah-perintah dalam bahasa yang khusus untuk mikro kontroler Atmega 8535.

(7)

Program Code Vision AVR yang didown load ke dalam mikro kontroler adalah program dengan kontroler feeback posisi. Algoritma dan listing programnya yaitu:

*********************************************

This program was produced by the CodeWizardAVR V1.24.0 Standard Automatic Program Generator

© Copyright 1998-2003 HP InfoTech s.r.l.

http://www.hpinfotech.ro e-mail:[email protected] Chip type : ATmega8535 Program type : Application Clock frequency : 4.000000 MHz Memory model : Small

External SRAM size : 0 Data Stack size : 128

*********************************************/

#include <mega8535.h>

#include <delay.h>

#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)

(8)

unsigned int hasil, input,input1;

unsigned int trima[2];

int error;

int ke;

char masukkan;

int temp;

int bedaposisi;

int sebelum;

int beda[7];

// USART Receiver buffer

#define RX_BUFFER_SIZE 8 char rx_buffer[RX_BUFFER_SIZE];

unsigned char rx_wr_index,rx_rd_index,rx_counter;

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

// USART Receiver interrupt service routine

#pragma savereg-

interrupt [USART_RXC] void usart_rx_isr(void) {

char status,data;

#asm push r26 push r27 push r30 push r31 in r26,sreg push r26

#endasm status=UCSRA;

data=UDR;

(9)

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;

};

};

#asm pop r26 out sreg,r26 pop r31 pop r30 pop r27 pop r26

#endasm }

#pragma savereg+

#ifndef _DEBUG_TERMINAL_IO_

// Get a character from the USART Receiver buffer

#define _ALTERNATE_GETCHAR_

#pragma used+

char getchar(void) {

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")

(10)

--rx_counter;

#asm("sei") return data;

}

#pragma used-

#endif

// USART Transmitter buffer

#define TX_BUFFER_SIZE 8 char tx_buffer[TX_BUFFER_SIZE];

unsigned char tx_wr_index,tx_rd_index,tx_counter;

// USART Transmitter interrupt service routine

#pragma savereg-

interrupt [USART_TXC] void usart_tx_isr(void) {

#asm push r26 push r27 push r30 push r31 in r26,sreg push r26

#endasm if (tx_counter) {

--tx_counter;

UDR=tx_buffer[tx_rd_index];

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

};

#asm pop r26 out sreg,r26 pop r31

(11)

pop r30 pop r27 pop r26

#endasm }

#pragma savereg+

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

unsigned int adc_data;

#define ADC_VREF_TYPE 0x00 // ADC interrupt service routine

#pragma savereg-

(12)

interrupt [ADC_INT] void adc_isr(void) {

#asm push r30 push r31

#endasm

// Read the AD conversion result adc_data=ADCW;

#asm pop r31 pop r30

#endasm }

#pragma savereg+

// Read the AD conversion result // with noise canceling

unsigned int read_adc(unsigned char adc_input) {

ADMUX=adc_input|ADC_VREF_TYPE;

#asm

in r30,mcucr cbr r30,__sm_mask

sbr r30,__se_bit | __sm_adc_noise_red out mcucr,r30

sleep

cbr r30,__se_bit out mcucr,r30

#endasm return adc_data;

}

void baca_adc(void) {

(13)

read_adc(0);

delay_ms(1);

hasil = adc_data;

}

// Declare your global variables here void main(void)

{

// Declare your local variables here // Input/Output Ports initialization // Port A initialization

// Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In

// State0=T State1=T State2=T State3=T State4=T State5=T State6=T State7=T PORTA=0x00;

DDRA=0x00;

// Port B initialization

// Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In

// State0=T State1=T State2=T State3=T State4=T State5=T State6=T State7=T PORTB=0x00;

DDRB=0x00;

// Port C initialization

// Func0=Out Func1=Out Func2=Out Func3=Out Func4=Out Func5=Out Func6=Out Func7=Out

// State0=0 State1=0 State2=0 State3=0 State4=0 State5=0 State6=0 State7=0 PORTC=0x00;

DDRC=0xFF;

// Port D initialization

// Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In

// State0=T State1=T State2=T State3=T State4=T State5=T State6=T State7=T PORTD=0x00;

(14)

DDRD=0x00;

// 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: Timer 1 Stopped // Mode: Normal top=FFFFh // OC1A output: Discon.

// OC1B output: Discon.

// Noise Canceler: Off

// Input Capture on Falling Edge TCCR1A=0x00;

TCCR1B=0x00;

TCNT1H=0x00;

TCNT1L=0x00;

OCR1AH=0x00;

OCR1AL=0x00;

OCR1BH=0x00;

OCR1BL=0x00;

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

TCCR2=0x00;

(15)

TCNT2=0x00;

OCR2=0x00;

// External Interrupt(s) initialization // 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: 19200 UCSRA=0x00;

UCSRB=0xD8;

UCSRC=0x86;

UBRRH=0x00;

UBRRL=0x0C;

// Analog Comparator initialization // Analog Comparator: Off

// Analog Comparator Input Capture by Timer/Counter 1: Off // Analog Comparator Output: Off

ACSR=0x80;

SFIOR=0x00;

// ADC initialization

// ADC Clock frequency: 125.000 kHz // ADC Voltage Reference: AREF pin // ADC High Speed Mode: On

// ADC Auto Trigger Source: None

(16)

ADMUX=ADC_VREF_TYPE;

ADCSRA=0x8D;

SFIOR&=0xEF;

SFIOR|=0x10;

// Global enable interrupts

#asm("sei") ke = 0;

bedaposisi = 0;

putchar('s');

delay_ms(1);

baca_adc();

temp = hasil / 256;

putchar(temp);

delay_ms(1);

temp = hasil % 256;

putchar(temp);

delay_ms(1);

sebelum = hasil;

beda[0] = -10;

beda[1] = -5;

beda[2] = -2;

beda[3] = 0;

beda[4] = 2;

beda[5] = 5;

beda[6] = 10;

while (1) {

// Place your code here baca_adc();

// Cek perbedaan posisi bedaposisi = sebelum - hasil;

sebelum = hasil;

(17)

// Ambil Inputan if (ke < 2) {

input1 = getchar();

delay_ms(1);

if (ke == 1) {

// simpan ke dalam trima 2 dan langsung geser trima[1] = input1;

// gabungkan if (trima[1]==0)

{input = 0 + trima[0];}

if (trima[1]==1)

{input = 254 + trima[0];}

if (trima[1]==2)

{input = 511 + trima[0];}

if (trima[1]==3)

{input = 767 + trima[0];}

ke = 2;

if (input == 100) {putchar('b');

delay_ms(1);}

// isi dengan default bukaan valve // kiri = ??

// Kanan = ??

}

if (ke == 0) {

// simpan ke dalam trima 1 trima[0] = input1;

ke = 1;

putchar('a');

(18)

delay_ms(1);

} } if (ke == 2) {

// if (hasil < input) // {

// putchar('n');

// delay_ms(1);

// error = input - hasil;

// PORTC = 0x66;

// geserkanan();

// }

// if (hasil > input) // {

// putchar('i');

// delay_ms(1);

// error = hasil - input;

// PORTC = 0xCA;

// geserkiri();

// }

error = input - hasil;

// Rule baris 1

if ((error <= -410) && (bedaposisi <= beda[0])) {

PORTC = PORTC;

}

if ((error <= -410) && (bedaposisi > beda[0]) && (bedaposisi <= beda[1])) {

PORTC = PORTC + 1;

}

if ((error <= -410) && (bedaposisi > beda[1]) && (bedaposisi <= beda[2]))

(19)

{

PORTC = PORTC + 2;

}

if ((error <= -410) && (bedaposisi > beda[2])) {

PORTC = PORTC + 3;

}

// Rule baris 2

if ((error <= -102) && (error > -410) && (bedaposisi <= beda[0])) {

PORTC = PORTC - 1;

}

if ((error <= -102) && (error > -410) && (bedaposisi > beda[0]) &&

(bedaposisi <= beda[1])) {

PORTC = PORTC;

}

if ((error <= -102) && (error > -410) && (bedaposisi > beda[1]) &&

(bedaposisi <= beda[2])) {

PORTC = PORTC + 1;

}

if ((error <= -102) && (error > -410) && (bedaposisi > beda[2]) &&

(bedaposisi <= beda[3])) {

PORTC = PORTC + 2;

}

if ((error <= -102) && (error > -410) && (bedaposisi > beda[0])) {

PORTC = PORTC + 3;

}

// Rule baris 3

(20)

if ((error <= -1) && (error > -102) && (bedaposisi <= beda[0])) {

PORTC = PORTC - 2;

}

if ((error <= -1) && (error > -102) && (bedaposisi > beda[0]) && (bedaposisi

<= beda[1])) {

PORTC = PORTC - 1;

}

if ((error <= -1) && (error > -102) && (bedaposisi > beda[1]) && (bedaposisi

<= beda[2])) {

PORTC = PORTC;

}

if ((error <= -1) && (error > -102) && (bedaposisi > beda[2]) && (bedaposisi

<= beda[3])) {

PORTC = PORTC + 1;

}

if ((error <= -1) && (error > -102) && (bedaposisi > beda[0])) {

PORTC = PORTC + 3;

}

// Rule baris 5

if ((error >= 1) && (error < 102) && (bedaposisi >= beda[6])) {

PORTC = PORTC + 2;

}

if ((error >= 1) && (error < 102) && (bedaposisi < beda[6]) && (bedaposisi

>= beda[5])) {

PORTC = PORTC + 1;

(21)

}

if ((error >= 1) && (error < 102) && (bedaposisi < beda[5]) && (bedaposisi

>= beda[4])) {

PORTC = PORTC;

}

if ((error >= 1) && (error < 102) && (bedaposisi < beda[4]) && (bedaposisi

>= beda[3])) {

PORTC = PORTC - 1;

}

if ((error >= 1) && (error < 102) && (bedaposisi < beda[3])) {

PORTC = PORTC - 3;

}

// Rule baris 6

if ((error >= 103) && (error < 410) && (bedaposisi >= beda[6])) {

PORTC = PORTC + 1;

}

if ((error >= 103) && (error < 410) && (bedaposisi < beda[6]) &&

(bedaposisi >= beda[5])) {

PORTC = PORTC;

}

if ((error >= 103) && (error < 410) && (bedaposisi < beda[5]) &&

(bedaposisi >= beda[4])) {

PORTC = PORTC - 1;

}

if ((error >= 103) && (error < 410) && (bedaposisi < beda[4]) &&

(bedaposisi >= beda[3]))

(22)

{

PORTC = PORTC - 2;

}

if ((error >= 103) && (error < 410) && (bedaposisi < beda[3])) {

PORTC = PORTC - 3;

}

// Rule baris 7

if ((error >= 410) && (bedaposisi >= beda[6])) {

PORTC = PORTC;

}

if ((error >= 410) && (bedaposisi < beda[6]) && (bedaposisi >= beda[5])) {

PORTC = PORTC - 1;

}

if ((error >= 410) && (bedaposisi < beda[5]) && (bedaposisi >= beda[4])) {

PORTC = PORTC - 2;

}

if ((error >= 410) && (bedaposisi < beda[4])) {

PORTC = PORTC - 3;

}

// Rule Baris 4

if ((hasil == input) || ((hasil + 1) == input) || ((hasil + 2) == input) || ((hasil - 1)

== input)|| ((hasil - 2) == input)) {

PORTC = 0x96;

if (hasil == input) {

ke = 0;

(23)

putchar('s');

PORTC = 0x96;

delay_ms(1);

// Kirim Posisi temp = hasil / 256;

putchar(temp);

delay_ms(1);

temp = hasil % 256;

putchar(temp);

delay_ms(1);

} } } };

}

Untuk interfacenya yaitu program Delphi 7 adalah sebagai berikut:

unit Unit1;

interface uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, CPort, ExtCtrls;

type

TForm1 = class(TForm) Label1: TLabel;

Edit1: TEdit;

Button1: TButton;

Label2: TLabel;

Button2: TButton;

Label3: TLabel;

Label4: TLabel;

(24)

Edit2: TEdit;

Label5: TLabel;

Button3: TButton;

Button4: TButton;

Label6: TLabel;

Button5: TButton;

Button6: TButton;

Label8: TLabel;

Edit3: TEdit;

Label9: TLabel;

ComPort1: TComPort;

Memo1: TMemo;

Timer1: TTimer;

procedure Kirim();

procedure Button1Click(Sender: TObject);

procedure FormShow(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure Button4Click(Sender: TObject);

procedure Button5Click(Sender: TObject);

procedure Button6Click(Sender: TObject);

procedure ComPort1RxChar(Sender: TObject; Count: Integer);

procedure FormClose(Sender: TObject; var Action: TCloseAction);

procedure Timer1Timer(Sender: TObject);

private

{ Private declarations } public

{ Public declarations } end;

var

Form1: TForm1;

posisi : integer;//untuk menyimpan posisi terakhir

(25)

result1 : Integer;

DC : real;

ke1,ke2 : byte;

status1 : String;

jarak1,awal1 : real;

ms1 : real;

implementation {$R *.dfm}

procedure TForm1.Kirim();

var

temp : integer;

begin

if result1 = 0 then result1 := 1;

ms1 := 0;

awal1 := StrToFloat(Edit2.Text);

// 00 1111 1111 = 255 ke1 := (result1 - 1) and 255;

// 11 0000 0000 = 768 temp := (result1 - 1) and 768;

ke2 := temp shr 8;

//ShowMessage(inttostr(ke2) + '-' + inttostr(ke1));

Edit2.Text := inttostr(ke2) + '-' + inttostr(ke1);

// Kirim ke1 dan ke2

comport1.writestr(char(ke1));

end;

procedure TForm1.Button1Click(Sender: TObject);

var

temp : real;

(26)

begin

temp := StrToFloat(Edit1.Text);

result1 := round((temp * 10) / dc);

// kirim result

Label2.Caption := IntToStr(result1);

Kirim;

end;

procedure TForm1.FormShow(Sender: TObject);

begin

Dc := 500 / 996;

if not(ComPort1.Connected) then begin

ComPort1.Open;

Status1 := 'None';

end;

end;

procedure TForm1.Button3Click(Sender: TObject);

var

temp : integer;

begin

temp := StrToInt(Edit3.Text);

result1 := posisi - round((temp * 10) / dc);

// Kirim result Kirim;

end;

procedure TForm1.Button4Click(Sender: TObject);

var

temp : integer;

begin

(27)

temp := StrToInt(Edit3.Text);

result1 := posisi + round((temp * 10) / dc);

// Kirim result Kirim;

end;

procedure TForm1.Button5Click(Sender: TObject);

begin

result1 := 1;

// Kirim result Kirim;

end;

procedure TForm1.Button6Click(Sender: TObject);

begin

result1 := round((50 * 10) / dc);

// Kirim result Kirim;

end;

procedure TForm1.ComPort1RxChar(Sender: TObject; Count: Integer);

var

str : String;

begin

comport1.readstr(str,count);

// ShowMessage(str);

// Memo1.Lines.Add(str);

if status1 = 'Posisi1' then begin

posisi := posisi + ord(str[1]);

Edit2.Text := FloatToStr(posisi*DC/10);

if Timer1.Enabled then

(28)

begin

Timer1.Enabled := False;

Memo1.Lines.Add('Posisi : ' + edit2.Text);

Memo1.Lines.Add('Waktu : ' + Floattostr(ms1) + ' ms');

if awal1 < StrToFloat(Edit2.Text) then Jarak1 := StrToFloat(Edit2.Text) - awal1 else

Jarak1 := awal1 - StrToFloat(Edit2.Text);

Memo1.Lines.Add('Jarak : ' + FloatToStr(Jarak1));

Memo1.Lines.Add('Kecepatan : ' + FloatToStr(jarak1/ms1) +' cm / ms');

end else

Memo1.Lines.Add('Reset');

status1 := 'None';

end;

if status1 = 'Posisi' then begin

posisi := ord(str[1]) * 256;

status1 := 'Posisi1';

end;

if status1 = 'None' then begin

if str = 'a' then begin

Timer1.Enabled := True;

memo1.Lines.Add('***********************************');

Memo1.Lines.Add('Posisi Awal : ' + FloatToStr(awal1));

comport1.writestr(char(ke2));

Button1.Enabled := false;

Button2.Enabled := false;

Button3.Enabled := false;

Button4.Enabled := false;

(29)

Button5.Enabled := false;

Button6.Enabled := false;

end;

if str = 's' then begin

Button1.Enabled := true;

Button2.Enabled := true;

Button3.Enabled := true;

Button4.Enabled := true;

Button5.Enabled := true;

Button6.Enabled := true;

Status1 := 'Posisi';

end;

end;

end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);

begin

ComPort1.Close;

end;

procedure TForm1.Timer1Timer(Sender: TObject);

begin

ms1 := ms1 + 1;

end;

end.

(30)

Dari program delphi 7 diatas maka tampilannya seperti ini:

Gambar 4.8. Tampilan Menggunakan Delphi Keterangan Gambar:

1. kotak penunjuk posisi piston saat ini

2. tempat input tujuan atau tempat memberikan perintah posisi piston 3. tombol membatalkan perintah

4. tempat input besar pergerseran untuk tombol 6 dan 10 5. tombol untuk menggerakkan piston ke posisi 50 Cm 6. tombol untuk menggerakkan piston ke arah kanan 7. tampilan

8. tombol untuk melaksanakan perintah

9. tombol untuk menggerakkan piston ke posisi 0 Cm 10. tombol untuk menggerakkan piston ke arah kiri

Input berupa data digital dari delphi akan ditransfer ke Code Vision AVR menggunakan komponen dari delphi yaitu Comport. Sehingga data tersebut dapat diproses di Code Vision AVR, dari hasil perhitungan mikrokontroller akan menghasilkan tegangan tertentu. Tegangan tersebut diubah menjadi arus dengan

1 2

4 5

7 9

3

6 8

10

(31)

operational amplifiers sehingga dapat mengatur besar bukaan katup untuk membuka, menutup dan mengalirkan udara bertekanan ke dalam silinder, sehingga piston bergerak dan dapat tiba pada titik posisi yang diinginkan. Setelah piston berhenti pada posisi yang diinginkan potensiometer memberikan data posisi pada mikrokontroller. Data tersebut akan ditransfer ke Delphi sehingga posisi piston dapat terbaca pada tampilan.

Percobaan dilakukan dengan prosedur sebagai berikut : 1. Mempersiapkan perangkat keras:

• Memasang selang udara pada port supply udara dari kompresor.

• Membuka katup supply udara dari kompresor.

• Mengatur pressure regulator hingga tekanan mencapai 5-6 Bar.

• Memasang sumber tegangan yang sesuai pada masing-masing komponen yaitu katup dan operational amplifiersnya.

• Memasang kabel data RS232 pada USB port komputer dan serial port mikro kontroler.

2. Melakukan reset pada mikrokontroller hingga ada tampilan di kotak posisi piston di program delphi

3. Menjalankan program dan mengisi data berupa titik set poin, pada program.

4. Melihat kerja sistim yaitu ketepatan piston berhenti pada titik yang ditentukan.

5. Mencatat data berupa selisih dari set poin yang diberikan dan posisi akhir piston.

4.3. Hasil Uji Coba 4.3.1. Uji Coba I

Uji coba pertama dilakukan dengan memberikan set poin yang sama, dilakukan sebanyak 5 kali, dengan tekanan sebesar 5-6 Bar pada set poin 50 cm dan dimulai dari posisi 0 cm. Hasil percobaan adalah sebagai berikut:

(32)

Tabel 4.1. Hasil Uji Coba I Uji

Coba

Posisi Awal

Posisi Akhir

Waktu Jarak Perpindahan

Kecepatan Error

1 0 49.899 cm 3,78 s 49.899 cm 13,2 cm/s -0.101 cm 2 0 49.899cm 3,80 s 49.899 cm 13,1 cm/s -0.101 cm 3 0 49.899 cm 3,57 s 49.899 cm 13,9 cm/s -0.101 cm 4 0 49.899 cm 3,72 s 49.899 cm 13,4 cm/s -0.101 cm 5 0 49.899 cm 3,61 s 49.899 cm 13,8 cm/s -0.101 cm

Dari 5 kali percobaan dengan posisi 0 cm ke 50 cm menunjukkan bahwa posisi piston tidak dapat sampai pada posisi 50 cm, memiliki waktu tempuh yang berbeda dan memiliki keakuratan yang cukup tinggi.

4.3.2. Uji Coba ke II

Uji coba kedua dilakukan dengan memberikan set poin yang sama, dilakukan sebanyak 5 kali, dengan tekanan sebesar 5-6 Bar pada set poin 0 cm dan dimulai dari posisi 50 cm. Hasil percobaan adalah sebagai berikut:

Tabel 4.2. Hasil Uji Coba II Uji

Coba

Posisi Awal

Posisi Akhir

Waktu Jarak Perpindahan

Kecepatan Error

1 49.899 cm 0 cm 1,67 s 49.899 cm 29,8 cm/s -0.101 cm 2 49.899 cm 0 cm 1,64 s 49.899 cm 30,4 cm/s -0.101 cm 3 49.899 cm 0 cm 1,72 s 49.899 cm 29,0 cm/s -0.101 cm 4 49.899 cm 0 cm 1,67 s 49.899 cm 13,4 cm/s -0.101 cm 5 49.899 cm 0 cm 1,66 s 49.899 cm 29,8 cm/s -0.101 cm

Dari 5 kali percobaan dengan posisi 50 cm ke 0 cm memiliki beda waktu dan kecepatan yang cukup jauh jika dibandingkan dengan perpindahan dari 0 cm ke 50 cm.

(33)

4.3.3. Uji Coba ke III

Uji coba ketiga dilakukan dengan melakukan pergeseran sebesar 1 cm ke kiri dan ke kanan. Hasil percobaan adalah sebagai berikut:

Tabel 4.3. Hasil Uji Coba III ke kiri Uji

Coba

Posisi Awal

Posisi Akhir

Waktu Jarak Perpindahan

Kecepatan Error

1 24.84 cm 25.75 cm 1,14 s 0.903 cm 0,7 cm/s -0,097 cm 2 24.59 cm 25.45 cm 1,00 s 0.853 cm 0,8 cm/s -0,147 cm 3 24.29 cm 25.15 cm 0,96 s 0.853 cm 0,8 cm/s -0,147 cm 4 24.84 cm 25.75 cm 0,75 s 0.903 cm 1,2 cm/s -0,097 cm 5 24.59 cm 25.45 cm 0,72 s 0.853 cm 1,1 cm/s -0,147 cm

Tabel 4.4. Hasil Uji Coba III ke kanan Uji

Coba

Posisi Awal

Posisi Akhir

Waktu Jarak Perpindahan

Kecepatan Error

1 25.75 cm 24.59 cm 0,38 s 1.154 cm 3 cm/s +0.154 cm 2 25.45 cm 24.29 cm 0,38 s 1.154 cm 3 cm/s +0.154 cm 3 25.15 cm 23.99 cm 0,47 s 1.154 cm 2,4 cm/s +0.154 cm 4 25.75 cm 24.59 cm 0,36 s 1.154 cm 3,2 cm/s +0.154 cm 5 25.45 cm 24.29 cm 0,40 s 1.154 cm 2,8 cm/s +0.154 cm

Begitu juga terlihat pada uji coba ketiga ini jika dibandingkan antara jarak perpindahannya pada waktu piston ke kiri tidak pernah sampai 1 cm tetapi kebalikan dari perpindahan piston ke arah kanan jarak perpindahannya lebih dari 1 cm. Waktu dan kecepatan antara ke kiri dan ke kanan juga jauh berbeda.

Kepresisian pada saat berpindah dengan jarak 1 cm juga tidak akurat.

4.3.4. Uji Coba ke IV

Uji coba keempat dilakukan dengan melakukan pergeseran ke kiri. Posisi dan Hasil percobaan adalah sebagai berikut:

(34)

Tabel 4.5. Hasil Uji Coba dari posisi 0 ke 10 Uji

Coba

Posisi Awal

Posisi Akhir

Waktu Jarak Perpindahan

Kecepatan Error

1 0 cm 9.939 cm 4,2 s 9.939 cm 2,3 cm/s -0.061 cm 2 0 cm 9.939 cm 3,49 s 9.939 cm 2,8 cm/s -0.061 cm 3 0 cm 9.939 cm 3,43 s 9.939 cm 2,8 cm/s -0.061 cm

Tabel 4.6. Hasil Uji Coba dari posisi 0 ke 20 Uji

Coba

Posisi Awal

Posisi Akhir

Waktu Jarak Perpindahan

Kecepatan Error

1 0 cm 19.829 cm 5,17 s 19.829 cm 3,8 cm/s -0.171 cm 2 0 cm 19.829 cm 4,63 s 19.829 cm 4,2 cm/s -0.171 cm 3 0 cm 19.829 cm 4,74 s 19.829 cm 4,1 cm/s -0.171 cm

Tabel 4.7. Hasil Uji Coba dari posisi 0 ke 30 Uji

Coba

Posisi Awal

Posisi Akhir

Waktu Jarak Perpindahan

Kecepatan Error

1 0 cm 29.919 cm 4,44 s 29.919 cm 6,7 cm/s -0.081 cm 2 0 cm 29.919 cm 4,03 s 29.919 cm 7,4 cm/s -0.081 cm 3 0 cm 29.919 cm 4,24 s 29.919 cm 7,0 cm/s -0.081 cm

Tabel 4.8. Hasil Uji Coba dari posisi 0 ke 40 Uji

Coba

Posisi Awal

Posisi Akhir

Waktu Jarak Perpindahan

Kecepatan Error

1 0 cm 39.909 cm 4,89 s 39.909 cm 8,1 cm/s -0.061 cm 2 0 cm 39.909 cm 3,92 s 39.909 cm 10,1 cm/s -0.061 cm 3 0 cm 39.909 cm 4,05 s 39.909 cm 9,8 cm/s -0.061 cm

(35)

Tabel 4.9. Hasil Uji Coba dari posisi 0 ke 50 Uji

Coba

Posisi Awal

Posisi Akhir

Waktu Jarak Perpindahan

Kecepatan Error

1 0 cm 49.899 cm 5,42 s 49.899 cm 9,2 cm/s -0.101 cm 2 0 cm 49.899 cm 4,79 s 49.899 cm 10,4 cm/s -0.101 cm 3 0 cm 49.899 cm 4,42 s 49.899 cm 11,2 cm/s -0.101 cm

Dari hasil uji coba diatas piston dapat berhenti pada posisi yang akurat meskipun jarak perpindahannya semakin jauh akan tetapi kepresisian perhentian piston tetap stabil. Juga dapat dilihat semakin jauh jarak perpindahannya semakin besar pula kecepatan gerak piston.

4.3.5. Uji coba V

Pada uji coba yang ke lima dilakukan pergeseran ke kanan sebesar 10 cm dimulai dari posisi 50 cm dan diberi beban kurang lebih 1 kg. Uji coba kali ini bertujuan untuk mengetahui apakah kecepatan dan gerakan piston relatif stabil meskipun diberi beban. Berikut hasil uji coba ke lima:

Tabel 4.10. Hasil Uji Coba posisi 50 cm ke 40 cm Uji

Coba

Posisi Awal

Posisi Akhir

Waktu Jarak Perpindahan

Kecepatan Error

1 49.89 cm 39.909 cm 1,53 s 9.989 cm 6,5 cm/s -0.011 cm 2 49.89 cm 39.909 cm 1,53 s 9.989 cm 6,5 cm/s -0.011 cm 3 49.89 cm 39.909 cm 1,54 s 9.989 cm 6,4 cm/s -0.011 cm

Tabel 4.11. Hasil Uji Coba posisi 40 cm ke 30 cm Uji

Coba

Posisi Awal

Posisi Akhir

Waktu Jarak Perpindahan

Kecepatan Error

1 39.909 cm 29.919 cm 1,50 s 9.989 cm 6,6 cm/s -0.011 cm 2 39.909 cm 29.919 cm 1,41 s 9.989 cm 7,0 cm/s -0.011 cm 3 39.909 cm 29.919 cm 1,34 s 9.989 cm 7,4 cm/s -0.011 cm

(36)

Tabel 4.12. Hasil Uji Coba posisi 30 cm ke 20 cm Uji

Coba

Posisi Awal

Posisi Akhir

Waktu Jarak Perpindahan

Kecepatan Error

1 29.91 cm 19.829 cm 1,47 s 10.090 cm 6,8 cm/s +0.09 cm 2 29.91 cm 19.829 cm 1,38 s 10.090 cm 7,3 cm/s +0.09 cm 3 29.91 cm 19.829 cm 1,28 s 10.090 cm 7,8 cm/s +0.09 cm

Tabel 4.13. Hasil Uji Coba posisi 20 cm ke 10 cm Uji

Coba

Posisi Awal

Posisi Akhir

Waktu Jarak Perpindahan

Kecepatan Error

1 19.82 cm 9.939 cm 1,36 s 9.889 cm 7,2 cm/s -0.111 cm 2 19.82 cm 9.939 cm 1,33 s 9.889 cm 7,4 cm/s -0.111 cm 3 19.82 cm 9.939 cm 1,32 s 9.889 cm 7,4 cm/s -0.111 cm

Tabel 4.14. Hasil Uji Coba posisi 10 cm ke 0 cm Uji

Coba

Posisi Awal

Posisi Akhir

Waktu Jarak Perpindahan

Kecepatan Error

1 9.93 cm 0 cm 7,03 s 9.939 cm 1,4 cm/s -0.061 cm 2 9.93 cm 0 cm 1,63 s 9.939 cm 6,0 cm/s -0.061 cm 3 49.89 cm 0 cm 1,57 s 9.939 cm 6,3 cm/s -0.061 cm

Dari uji coba di atas dengan jarak perpindahan sebesar 10 cm dapat disimpulkan bahwa mesikipun diberi beban sebesar kurang lebih 1 kg piston masih mampu bergerak dan kecepatannya relatif stabil begitu juga dengan waktu tempuhnya.

Tetapi pada uji coba 1 dari posisi 10 cm ke 0 cm. Piston lama untuk mencapai posisi 0 cm sampai membutuhkan waktu 703 ms. Hal ini dikarenakan terjadi error pada kontroler sehingga piston susah untuk mencapai target.

(37)

4.4. Analisa Uji Coba

Dari uji coba I, II dan III, terlihat jika piston pindah dengan jarak perpindahan yang besar atau jauh seperti pada uji coba I dan II dengan jarak perpindahan sebesar 50 cm. Maka piston dapat berhenti pada posisi yang tepat atau lebih presisi. Tetapi pada uji coba ke III yang dengan jarak perpindahan sebesar 1 cm. Posisi berhenti piston menjadi tidak akurat dan tidak stabil. Hal lain yang muncul dalam beberapa kali uji coba alat adalah perbedaan kecepatan rata- rata gerak piston. Kecepatan rata-rata gerak piston ke kanan lebih besar daripada kecepatan gerak piston ke kiri. Dari uji coba diatas didapatkan kecepatan gerak piston ke kanan 2 kali lebih besar dari kecepatan gerak piston ke kiri. Meskipun belum didapatkan kecepatan yang konstan dari alat ini, dari uji coba I dan II dengan jarak perpindahan sebesar 50 cm. Didapatkan bahwa piston berhenti dengan perpindahan jarak yang relatif stabil. Kestabilan itu dapat dilihat dari uji coba I dan II dengan jarak perpindahan sebesar 49.899 cm dan cenderung tidak berubah ubah besarnya.

Dari uji coba V dengan jarak perpindahan sebesar 10 cm dan diberi beban sebesar kurang lebih 1 kg, dapat diketahui bahwa perpindahan piston tetap stabil meskipun pada jarak yang berbeda-beda. Dengan jarak perpindahan sebesar 10 cm kecepatan piston relatif sama dan piston dapat berhenti pada posisi yang akurat.

Sistim pneumatik jenis ini dengan tekanan udara sebesar 5-6 bar mampu memindahkan beban tersebut dengan cepat dan akurat.

Berdasarkan pada uji coba yang telah dilakukan, sistim pneumatik ini dapat diaplikasikan untuk material handling. Misalnya untuk memindahkan barang-barang elektronik yang tidak berat, membutuhkan waktu yang cepat dan presisi.

Kecepatan pergerakan piston ke arah kanan dan ke arah kiri tidak sama besar. Hal ini disebabkan karena susahnya mengetahui besar bukaan pada katup proporsional. Besar bukaan katup ini susah diperhitungkan karena banyaknya faktor seperti besar tekanan udara pada kompressor juga arus yang sampai pada katup. Besar Arus tidak 100% dapat tersampaikan di katup karena terhambat atau hilang karena panjang kabel dan bahan kabel yang digunakan.

Gambar

Gambar 4.1. Susunan komponen-komponen percobaan 2 317465
Gambar 4.2. Potensiometer linear
Gambar 4.3. Unit pneumatik
Gambar 4.5 Kabel Dongle dan Kabel Serial RS232
+7

Referensi

Dokumen terkait

Hanya mempunyai 1 alat pengukuran fluktuasi tinggi muka air tanah dengan menggunakan datalogger ( water sensor ) atau alat pengukuran kadar air ( volumetric moisture content

Faktor penyebaran Islam ke Eropah pada zaman kerajaan Turki Uthmaniyah dari segi politik ialah. F1 Pertelingkahan antara kerajaan kecil F2 jatuhan

bahwa berdasarkan Undang-Undang Nomor 32 Tahun 2004 tentang Pemerintahan Daerah dan Peraturan Pemerintah Nomor 41 Tahun 2007 tentang Organisasi Perangkat Daerah,

Dalam penelitian ini, penulis mengumpulkan data terkait dengan penanganan keluhan pelanggan melalui media (complaint handling in media) yang dilakukan oleh perusahaan

Segala puji dan syukur bagi Tuhan Yang Maha Esa karena telah memberikan segala kelancaran sehingga peneliti dapat menyelesaikan skripsi dengan judul “KAJIAN

Di sini peran orang tua sewaktu mengontrol anaknya pada keluarga elit agama peran orang tua itu benar-benar aktif untuk menjaga pergaulan anaknya selama

Penelitian ini menggunakan bahan limbah daun jambu sebagai komposit dengan polimer alami getah karet diharapkan dapat menjadi salah satu solusi alternatif untuk