• Tidak ada hasil yang ditemukan

Proses Pengenalan Bentuk dan Warna Benda

BAB IV HASIL PENGAMATAN DAN PEMBAHASAN

4.3. Analisa dan Pembahasan Perangkat Lunak

4.3.2. Aplikasi MATLAB

4.3.2.5. Proses Pengenalan Bentuk dan Warna Benda

Berdasarkan nilai-nilai dari tabel 4.10, maka dibuat sebuah range yang menentukan bentuk benda tersebut. Untuk benda kotak range data yang digunakan yaitu untuk warna kotak merah ((R > G) dan (data>30)&&(data<=45)), bola merah ((R > G) dan (data>=15)&&(data<=30)), kotakhijau ((R<G) dan (data>30)&&(data<=45)), bola hijau ((R>G) dan (data>=15)&&(data<=30)), maka dapat dibuat range nilai untuk mengetahui dan mengenali dari masing-masing bentuk benda. Listing program ditunjukan gambar 4.31.

Gambar 4.34. Listing Program Pengenalan Bentuk dan Warna % --- Proses pengenalan Warna dan Bentuk --- % if(((merah>hijau))&&((data>30)&&(data<=45))) set(handles.edit9, 'String', 'KOTAK MERAH'); kotakmerah=kotakmerah +1;

set(handles.edit1,'String', kotakmerah); guidata(hObject,handles);

elseif(((merah>hijau))&&((data>=15)&&(data<=30))) set(handles.edit9, 'String', 'BOLA MERAH'); bolamerah=bolamerah +1;

set(handles.edit2,'String', bolamerah); guidata(hObject,handles);

set(handles.edit9, 'String', 'KOTAK HIJAU'); kotakhijau=kotakhijau +1;

set(handles.edit3,'String', kotakhijau); guidata(hObject,handles);

elseif(((merah<hijau))&&((data>=15)&&(data<=30))) set(handles.edit9, 'String', 'BOLA HIJAU');

bolahijau=bolahijau +1;

set(handles.edit4,'String', bolahijau); guidata(hObject,handles);

else

set(handles.edit9, 'String', 'REJECT'); reject=reject +1;

set(handles.edit5,'String', reject); guidata(hObject,handles);

% Open Port

fopen(komunikasi); %--open the serial port to the PIC

% Send Serial Data

Proses akan beroperasi jika data memiliki nilai antara ((R>G) dan (data>30)&&(data<=45)) maka ditampilan pada “edit9” bahwa benda yang terdeteksi adalah kotak merah, kemudian menjumlahkan nilai warna dan nilai biner benda yang terdeteksi sebanyak satu kemudian hasil penjumlahan tersebut ditampilkan pada “edit1” lalu mengirimkan karakter ‘d’ secara serial dan memberi jeda selama satu detik. Jika data memiliki nilai ((R>G) dan (data>=15)&&(data<=30)) maka akan ditampilkan pada “edit9“ bahwa benda yang terdeteksi adalah bola merah, kemudian menjumlahkan nilai warna dan nilai biner benda yang terdeteksi sebanyak satu kemudian hasil penjumlahan tersebut ditampilkan pada “edit2” lalu mengirimkan karakter ‘b’ secara serial dan memberi jeda selama satu detik.

Jika data memiliki nilai ((R<G) dan (data>30)&&(data<=45)) maka akan ditampilkan pada “edit9” bahwa yang terdeteksi adalah kotak hijau kemudian menjumlahkan nilai warna dan nilai biner benda yang terdeteksi sebanyak satu kemudian hasil penjumlahan tersebut ditampilkan pada “edit3” lalu mengirimkan karakter ‘e’ secara serial dan memberi jeda selama satu detik. Bila nilai ((R<G) dan (data>=15)&&(data<=30)), maka akan ditampilkan pada “edit9” bahwa yang terdeteksi adalah bola hijau kemudian menjumlahkan nilai warna dan nilai biner benda yang terdeteksi sebanyak satu kemudian hasil penjumlahan tersebut ditampilkan pada “edit4” lalu mengirimkan karakter ‘c’ secara serial dan memberi jeda selama satu detik. Apabila data berada pada nilai selain data yang telah disebutkan maka akan ditampilkan “edit9” bahwa yang terdeteksi reject kemudian menjumlahkan nilai warna dan nilai biner benda yang terdeteksi sebanyak satu kemudian hasil penjumlahan tersebut ditampilkan pada “edit5” lalu mengirimkan karakter ‘a’ secara serial dan memberi jeda selama satu detik.

4.3.3. Analisis

a. Sumber tegangan yang digunakan untuk menghidupkan conveyor diperolehi dari inverter yang menghasilkan tegangan 24v kemudian disambungkan ke regulator 12v kemudian digunakan untuk mengaktifkan mikrokontroler,motor dc serta komponen-komponen pendukung lainnya.

b. Benda yang dipakai sebagai input masukan terbuat dari styrofoam yang dibagian luarnya dibungkus kertas payung untuk bentuk kotak dan untuk bentuk bola terbuat dari plastik.

c. Pada proses pengambilan data yaitu proses pengenalan bentuk benda dan warna menggunakan aplikasi matlab berhasil diperolehi sesuai dengan keinginan.

d. Pada bagian mekanik alat conveyor pintar ini sudah sepenuhnya berhasil dioperasikan secara otomatis. Komunikasi serialnya berjalan sesuai dengan perancangan.

4.4. Pembahasan Software

Pada tugas akhir ini software yang digunakan antara lain:

a. CodeVision AVR Evalution versi 2.05.0 dengan Compiler Bahasa C. IC (Integrated Circuit) yang digunakan adalah ATMega32 jenis DT-AVR Low Cost Micro System Merk Innovattive Electronics.

b. Software simulasi yang digunakan adalah Proteus ISIS 7.1 SPO (Build 12325). Simulasi ini bertujuan untuk mengetahui rangkaian yang akan digunakan telah berkerja dengan baik atau belum.

c. Proses pembuatan PCB juga menggunakan Proteus ISIS 7.1 SPO (Build 12325). Jenis komponen yang digunakan sampai desain rangkaian sudah dirancang dengan baik, selanjutnya membuat rangkaian PCB hingga rapi. d. Program Mikrokontroler yang sudah dibuat lalu disimulasikan, kemudian

dimasukkan kedalam ATMega32. Downloder yang digunakan adalah USBasp for Atmel AVR controller 2011. Proses download program ke mikrokontroler menggunakan program Extreme Burner.

e. Program Matlab R2010a digunakan untuk menunjukkan benda tersebut memiliki bentuk dan warna apa. Selain itu, program ini juga mampu melakukan perhitungan berapa banyak benda yang telah terdeteksi

84

BAB V

KESIMPULAN DAN SARAN

5.1. Kesimpulan

Dari hasil pengujian serta pengambilan data pada aplikasi pengenalan benda menggunakan webcam untuk conveyor pintar pemilah benda berdasarkan warna dan bentuk benda, dapat diambil kesimpulan:

1. Program Matlab Gui untuk proses pengenalan bentuk dan warna benda yang menggunakan webcam sebagai pengenal benda sudah mampu untuk mengenali bentuk serta warna benda sehingga mampu melakukan proses pemilah dan berhasil melakukan counting sesuai dengan jumlah benda yang terdeteksi. Memiliki tingkat keberhasilan 100% dalam proses pengindentifikasi benda.

2. Program avr untuk menggerakan conveyor sudah berhasil sepenuhnya dan bisa diterapkan pada hardware sehingga bisa membuat conveyor bergerak sesuai dengan perancangan dan bagian mekanik ini juga sama memiliki tingkat keberhasilan 100% dalam proses memilah benda berdasarkan bentuk dan warna benda. Untuk komunikasi serial juga sudah mampu mengirim data string dari program Matlab ke mikrokontroler untuk mengendalikan gerakkan conveyor 1 dan conveyor 2.

3. Sistem conveyor pintar ini sudah mampu berkerja sesuai dengan perancangan awal dan memiliki tingkat keberhasilan 100%.

5.2. Saran

Saran bagi pengembangan selanjutnya adalah:

1. Menyiapkan lebih banyak lagi variasi bentuk benda serta warna benda agar dalam proses pembandingkan memiliki tingkat keakuratan nilai RGB di dalam sistem.

2. Waktu untuk proses pengenalan benda dibuat dengan lebih cepat. 3. Kecepatan conveyor dibuat lebih cepat lagi agar bisa menghemat waktu.

85

Daftar Pustaka

[1] Bagus Dean Mahendra, Richard. 2011. Aplikasi Pengenalan Warna Menggunakan Webcam Untuk Lengan Robot Pemisah Benda Brdasarkan warna, Skripsi, Universitas Sanata Dharma, Yogyakarta.

[2] Hasan, Irvan. 2011. Aplikasi Pengenalan Objek Untuk Lengan Robot Pemisah Benda Berdasarkan Bentuk Benda, Skripsi, Universitas Sanata Dharma, Yogyakarta. [3] http://www.automatedconveyors.com/slider-bed-belt, diakses pada tanggal 29 Juli

2016

[4] https://pccontrol.wordpress.com/2013/07/04/pengetahuan-dasar-pemrograman-usart-serial-komunikasi-avr-microcontroller/, diakses pada tanggal 10 Agustus 2016 [5] Winato, A,, 2002, Mikrokontroler AVR ATMEGA8/32/8532 dan pemrograman

dengan Bahasa C pada WinAVR, INFORMATIKA, Bandung.

[6] Heryanto, M.A., ST., Ir. Wisni Adi P., 2008, Pemrograman Bahasa C untuk Mikrokontroler ATMEGA32, 1st ed, C.V ANDI OFFSET, Yogyakarta.

[7] Bejo, A., 2008, C dan AVR Rahasia Kemudahan Bahasa C dalam Mikrokontrol ATMEGA32, 1st ed, GRAHA ILMU, Yogyakarta.

[8] Adrianto, H., 2008, Pemrograman Mikrokontroler AVR ATMEGA 16, 1st ed, INFORMATIKA, Bandung.

[9] Sumbodo, W ., 2008, Jilid 3, Teknik Produksi Mesin Industri, Direktorat Pembinaan Sekolah Menengah Kejurusan, Dirjen Manajemen Pendidikan Dasar dan Menengah, Hak Cipta Depdiknas.

[10] http://www.learningaboutelectronics.com/Articles/How-to-connect-a-voltage-regulator-in-a-circuit/, diakes pada tanggal 29 Juli 2016

[11] Honeycutt, R.A., 1988, Op Amps and Linear Integrated Circuits, Delmar Publishers Inc., New York

[12] Boylestad, R and Nashelsky. L., Electronic Devices and Circuit Theory, seventh edition, Prentice Hall, New Jersey Columbus, Ohio.

[13] http://elektronika-dasar.web.id/model-warna-citra-digital/diakses pada tanggal 29 Juli 2016

[14] http://elektronika-dasar.web.id/limit-switch-dan-saklar-push-on/, diakses pada tanggal 05 Juli 2016.

86

[15] http://rumahshaleh.com/pengertian-webcam-dan-jenisnya/, diakses pada tanggal 07 Juli 2016.

[16] http://zonaelektro.net/motor-dc/, diakses pada tanggal 09 Juli 2016.

[17] http://www.rumusmatematika.org/2015/06/bangun-ruang.html/, diakses pada tanggal 10 Juli 2016.

[18] http://www.romlisapermana.com/2015/07/pengertian-citra-dan-pengolahan-citra.html, diakses pada tanggal 10 Juli 2016.

[19] Ervi, J., 2010, Pembuatan Perangkat Lunak Menggunakan Paradigma Perangkat Lunak Secara Waterfall, UNIKOM.

[20] Alfatah, H., 2007, Konversi Format Citra RGB ke Grayscale Menggunakan Visual Basic, STIMK AMIKOM Yogyakarta.

[21] http://www.mathworks.com/help/images/ref/imcrop.html, diakses pada tanggal 10 Juli 2016

[22] Putra, D., 2010, Pengolahan Citra Digital, Andi Offset, Yogyakarta. [23] ---, 2013, Data sheet Ic LM7805

[24] http://www.rangkaianelektronika.org/rangkaian-sensor-sederhana.htm, diakses pada tanggal 30 Juli 2016

[25] https://kurangsangu.wordpress.com/2011/04/19/sistem-minimum-atmega16/, diakses pada tanggal 30 Juli 2016

[26] http://elektronikadasar.info/sensor-cahaya.htm/, diakses pada tanggal 30 Juli 2016 [27] http://teknikelektronika.com/jenis-ic-voltage-regulator-pengatur-tegangan/, diakses

pada tanggal 30 Juli 2016

[28] http://elektronika-dasar.web.id/driver-motor-dc-h-bridge-transistor/ diakses pada tanggal 30 Juli 2016

[29] http://teknikelektronika.com/pengertian-relay-fungsi-relay/ diakses pada tanggal 18 maret 2017

[30] https://rohmadi.com/2013/12/09/modul-relay-2-channel-arduino/ diakses pada tanggal 18 maret 2017

PC6/TOSC1PC1/SDAPC0/SCLPC5PC4PC3PC2282726252423 22 PC7/TOSC229 PA6/ADC634 PA5/ADC535 PA4/ADC436 PA3/ADC337 PA2/ADC238 PA1/ADC139 PA0/ADC040 PA7/ADC733 PB6/MISO 7PB5/MOSI 6PB4/SS 5PB3/AIN1/OC0 4PB2/AIN0/INT2 3PB1/T1 2PB0/T0/XCK 1 PB7/SCK 8 PD6/ICP1 20PD5/OC1A 19PD4/OC1B 18PD3/INT1 17PD2/INT0 16PD1/TXD 15PD0/RXD 14 PD7/OC2 21 RESET 9 XTAL1 13 XTAL2 12 AVCCAREF3032 U1 ATMEGA8535 VI 1 VO3 G N D 2 U2 7805 D1 1N4001 C1 100uF C2 100uF Regulator Tegangan 5V DC Saklar R1 330 D2 LED X1 CRYSTAL C4 22pF C5 22pF R2 4k7 C6 1uF 1 2 3 4 10 9 8 7 5 6 J4 CONN-DIL10 Downloader 1 2 3 4 5 6 7 8 J5 CONN-SIL8 1 2 3 4 5 6 7 8 J6 CONN-SIL8 1 2 3 4 5 6 7 8 J7 CONN-SIL8 1 2 3 4 5 6 7 8 J8 CONN-SIL8 GND+5V MOSI Reset SCK MISO DC Source 1234 1 0 987 5 6 J1 CONN-DIL10 +VDC GND1234 8765 J2 CONN-DIL8 1 2 3 J3 CONN-SIL3 1 2 3 J9 CONN-SIL3 123 J10 CONN-SIL3 Push Button PB PD PC PA ARev 1 2 3 J11 CONN-SIL3 R7 100R R8 25k R16 20k R15 100R R11 100R R9 100R R10 25k R12 25k D8 PHOTODIODE D7 IR D16 PHOTODIODE D15 IR D9 IR D10 PHOTODIODE D11 IR D12 PHOTODIODE D13 IR D14 PHOTODIODE R13 100R R14 20k 1 2 3 4 5 6 7 8 J1 PORT C 1 2 3 4 5 6 7 8 J2 PORT B R5 100R R6 20K D5 iR D6 photo D4 PHOTO D3 IR D1 IR D2 PHOTO R2 20k R4 20k R1 100R R3 100 1 J3 PORT D.2 1 J4 CONN-SIL1

Rangkaian Minimum System ATmega32

Rangkaian Untuk Sensor

Rangkaian Relay 5v

Rangkaian Regulator 12v

Rangkaian Reset ATmega32

Webcam Logitech C170h [15]

Spesifikasi Webcam Logitech C170h :

1GHz (1.6GHz )

512 MB RAM atau lebih

200 MB hard drive

Internet koneksi

Usb 1.1 port (2.0)

Modul Relay 5vdc

Deskripsi Produk :

Modul Relay 2-ch 5vdc Arduino dan Relay 1-ch5vdc.

Motor Dc Conveyor 1 Spesifikasi :

Motor Dc 24v, 2amp

Gear ratio = 1:20.26

Teg = 12v, arus = 0,26amp, kecep = 65rpm (test motor)

Teg = 24v, arus = 0,48amp, kecep = 139rpm (test motor)

Panjang = 12,5cm

Diameter = 7,7cm Motor Dc Conveyor 2

Limit Switch Spesifikasi limit switch :

- Bisa berkerja pada tegangan 5 vdc

- Sebagai saklar

- Memiliki berbagai bentuk

LISTING PROGRAM GUI MATLAB

/***************************************************** Project : PROTOTIPE PEMILAH BENDA BERDASARKAN BENTUK DAN

WARNA MENGGUNAKAN CONVEYOR Date : 18-Dec-2016 / 16:16:32

Project : Mesin Konveyor Version : v2.5

Pencipta : Erik Firmanto Da Loves / 125114013

******************************************************/ function varargout = untitled(varargin)

% UNTITLED M-file for untitled.fig

% UNTITLED, by itself, creates a new UNTITLED or raises the existing % singleton*.

%

% H = UNTITLED returns the handle to a new UNTITLED or the handle to % the existing singleton*.

%

% UNTITLED('CALLBACK',hObject,eventData,handles,...) calls the local

% function named CALLBACK in UNTITLED.M with the given input arguments. %

% UNTITLED('Property','Value',...) creates a new UNTITLED or raises the % existing singleton*. Starting from the left, property value pairs are % applied to the GUI before untitled_OpeningFcn gets called. An

% unrecognized property name or invalid value makes property application % stop. All inputs are passed to untitled_OpeningFcn via varargin.

%

% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one % instance to run (singleton)".

%

% See also: GUIDE, GUIDATA, GUIHANDLES

% Edit the above text to modify the response to help untitled % Last Modified by GUIDE v2.5 18-Dec-2016 16:16:32 % Begin initialization code - DO NOT EDIT

gui_Singleton = 1;

'gui_Singleton', gui_Singleton, ...

'gui_OpeningFcn', @untitled_OpeningFcn, ... 'gui_OutputFcn', @untitled_OutputFcn, ... 'gui_LayoutFcn', [] , ...

'gui_Callback', []); if nargin && ischar(varargin{1})

gui_State.gui_Callback = str2func(varargin{1}); end

if nargout

[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else

gui_mainfcn(gui_State, varargin{:}); end

% End initialization code - DO NOT EDIT end

% --- Executes just before untitled is made visible.

function untitled_OpeningFcn(hObject, ~, handles, varargin) % This function has no output args, see OutputFcn.

% hObject handle to figure

% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % varargin command line arguments to untitled (see VARARGIN) % Choose default command line output for rgb and realtime

%clean Terminal & Set The Parameter clc; cla; set(handles.edit1, 'String','0'); set(handles.edit2, 'String','0'); set(handles.edit3, 'String','0'); set(handles.edit4, 'String','0'); set(handles.edit5, 'String','0'); set(handles.edit6, 'String','' ); set(handles.edit7, 'String','' ); set(handles.edit8, 'String','' ); set(handles.edit9, 'String','' ); handles.output = hObject; % Global Variable global kotakmerah global bolamerah global kotakhijau global bolahijau global reject

%Set Global Variabel kotakmerah=0;

bolamerah=0; kotakhijau=0; bolahijau=0; reject=0; guidata(hObject,handles); % Update handles structure guidata(hObject, handles); end

% UIWAIT makes untitled wait for user response (see UIRESUME) % uiwait(handles.figure1);

% --- Outputs from this function are returned to the command line. function varargout = untitled_OutputFcn(~, ~, handles)

% varargout cell array for returning output args (see VARARGOUT); % hObject handle to figure

% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure varargout{1} = handles.output;

end

% Set PORT Communication

% --- Executes on selection change in popupmenu1. function popupmenu1_Callback(hObject, ~, handles) contents = get(hObject,'Value'); switch contents case 1 handles.PORT='COM1'; case 2 handles.PORT='COM2'; case 3 handles.PORT='COM3'; case 4 handles.PORT='COM4'; case 5 handles.PORT='COM5'; case 6 handles.PORT='COM6'; case 7 handles.PORT='COM7'; case 8 handles.PORT='COM8'; case 9 handles.PORT='COM9'; case 10 handles.PORT='COM10';

case 11 handles.PORT='COM11'; case 12 handles.PORT='COM12'; case 13 handles.PORT='COM13'; case 14 handles.PORT='COM14'; case 15 handles.PORT='COM15'; case 16 handles.PORT='COM16'; case 17 handles.PORT='COM17'; end guidata(hObject,handles); end

% hObject handle to popupmenu1 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)

% Hints: contents = cellstr(get(hObject,'String')) returns popupmenu1 contents as cell array % contents{get(hObject,'Value')} returns selected item from popupmenu1

% --- Executes during object creation, after setting all properties. function popupmenu1_CreateFcn(hObject, ~, ~)

% hObject handle to popupmenu1 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: popupmenu controls usually have a white background on Windows. % See ISPC and COMPUTER.

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))

set(hObject,'BackgroundColor','white'); end

end

% --- Executes on button press in pushbutton5 --- % function pushbutton5_Callback(hObject, eventdata, handles) % hObject handle to pushbutton5 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) clc; global kotakmerah global bolamerah global kotakhijau global bolahijau

global reject

guidata(hObject,handles);

%Serial setting baudrate and etc komunikasi=serial(handles.PORT); baudr=9600; databit=8; stopbit=1; guidata(hObject,handles); %Hardware Setting set(komunikasi,'BaudRate',baudr,'DataBits',databit,'parity','none','StopBits',stopbit,'FlowCo ntrol','none');

% --- Proses inisialisasi webcam --- % vid=videoinput('winvideo',2,'YUY2_320x240');

% --- Proses capture gambar --- %

gambar1=getsnapshot(vid); %--Ambil gambar--%

gambar=yuy2torgb(gambar1); %--Kemudian di ubah ke RGB--%

% --- Proses rgb ke gray --- % grey=rgb2gray(gambar);

% --- Proses grey ke biner --- % biner=im2bw(grey); % --- Proses cropping --- % crop1=imcrop(biner,[17.51 60.51 255.98 176.98]); crop2=imcrop(gambar,[125.51 140.51 31.98 27.98]); crop3=imcrop(gambar,[17.51 60.51 255.98 176.98]); % --- Proses resizing --- % y=imresize(crop1,[16 16]); c=double(y); % --- Menjumlahkan keseluruhan --- % data=sum(sum(c));

% --- Proses merubah ke bentuk rgb --- % red=crop2(:,:,1);

green=crop2(:,:,2);

% --- Ubah ke nilai matrik real --- % c1=double(red)/255;

c2=double(green)/255; merah=sum(sum(c1/50)); hijau=sum(sum(c2/50));

% --- Tampilkan pada axes --- % axes(handles.axes1); imshow(crop3); set(handles.edit1,'string','0'); set(handles.edit2,'string','0'); set(handles.edit3,'string','0'); set(handles.edit4,'string','0'); set(handles.edit5,'string','0'); set(handles.edit8,'string',data); set(handles.edit9,'string',''); set(handles.edit6,'string',merah); set(handles.edit7,'string',hijau);

% --- Proses pengenalan Warna dan Bentuk --- % if(((merah>hijau))&&((data>30)&&(data<=45))) set(handles.edit9, 'String', 'KOTAK MERAH'); kotakmerah=kotakmerah +1;

set(handles.edit1,'String', kotakmerah); guidata(hObject,handles);

% Open Port

fopen(komunikasi); %--open the serial port to the PIC

% Send Serial Data

fprintf(komunikasi,'d#'); %'d' = untuk kotak merah pause(0.5) % Close Connection fclose(komunikasi); guidata(hObject,handles); elseif(((merah>hijau))&&((data>=15)&&(data<=30))) set(handles.edit9, 'String', 'BOLA MERAH');

bolamerah=bolamerah +1;

set(handles.edit2,'String', bolamerah); guidata(hObject,handles);

% Open Port

fopen(komunikasi); %--open the serial port to the PIC

% Send Serial Data

fprintf(komunikasi,'b#'); %'b' = untuk bola merah pause(0.5) % Close Connection fclose(komunikasi); guidata(hObject,handles); elseif(((merah<hijau))&&((data>30)&&(data<=45)))

set(handles.edit9, 'String', 'KOTAK HIJAU'); kotakhijau=kotakhijau +1; set(handles.edit3,'String', kotakhijau); guidata(hObject,handles); % Open Port

fopen(komunikasi); %--open the serial port to the PIC

% Send Serial Data

fprintf(komunikasi,'e#'); %'e' = untuk kotak hijau pause(0.5) % Close Connection fclose(komunikasi); guidata(hObject,handles); elseif(((merah<hijau))&&((data>=15)&&(data<=30))) set(handles.edit9, 'String', 'BOLA HIJAU');

bolahijau=bolahijau +1;

set(handles.edit4,'String', bolahijau); guidata(hObject,handles);

% Open Port

fopen(komunikasi); %--open the serial port to the PIC

% Send Serial Data

fprintf(komunikasi,'c#'); %'c' = untuk bola hijau pause(0.5) % Close Connection fclose(komunikasi); guidata(hObject,handles); else

set(handles.edit9, 'String', 'REJECT'); reject=reject +1;

set(handles.edit5,'String', reject); guidata(hObject,handles);

% Open Port

fopen(komunikasi); %--open the serial port to the PIC

% Send Serial Data

fprintf(komunikasi,'a#'); %'a' = untuk Reject pause(0.5)

% Close Connection fclose(komunikasi);

guidata(hObject,handles); end % --- menghapus koneksi --- % delete(komunikasi); clear komunikasi clc; end

% --- Executes on button press in pushbutton6. --- % function pushbutton6_Callback(hObject, ~, handles) global kotakmerah global bolamerah global kotakhijau global bolahijau global reject guidata(hObject,handles); cla; kotakmerah=0; set(handles.edit1,'String',kotakmerah); set(handles.edit6,'String',kotakmerah); bolamerah=0; set(handles.edit2,'String',bolamerah); set(handles.edit6,'String',bolamerah); kotakhijau=0; set(handles.edit3,'String',kotakhijau); set(handles.edit7,'String',kotakhijau); bolahijau=0; set(handles.edit4,'String',bolahijau); set(handles.edit7,'String',bolahijau); reject=0; set(handles.edit5,'String',reject); set(handles.edit9,'String',reject); nilaibinearbenda=0; set(handles.edit8,'String',nilaibinearbenda); end

% hObject handle to pushbutton6 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)

% --- Executes on button press in pushbutton7. --- % function pushbutton7_Callback(hObject, ~, handles)

guidata(hObject,handles); close all;

clear all;

% hObject handle to pushbutton7 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)

end

% --- Executes during object creation, after setting all properties. function edit1_CreateFcn(~, ~, ~)

% hObject handle to edit1 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called

end

LISTING PROGRAM CVAVR

/***************************************************** Project : PROTOTIPE PEMILAH BENDA BERDASARKAN

BENTUK DAN WARNA MENGGUNAKAN CONVEYOR

Date : 03/01/2017

Project : Mesin Conveyor Version : 2.0

Pencipta : Erik Firmanto Da Loves / 125114013 Chip type : ATmega32A

Program type : Application AVR Core Clock frequency : 11.059200 MHz Memory model : Small

External RAM size : 0 Data Stack size : 512

**********************************************************/ //Library yang digunakan

#include <mega32a.h> // Library Atmega32A #include <delay.h> // Library Delay

#include <stdio.h> // Library Standar Input Output // Mengaktifkan fungsi ADC

#define ADC_VREF_TYPE 0x40

//========================================================= // PORT YANG DIGUNAKAN

// Port yang digunakan

//define PORTA.0 pd1 // Photodioda Konveyor 2 pertama //define PORTA.1 pd2 // Photodioda konveyor 2 ke-dua //define PORTA.2 pd3 // Photodioda Konveyor 2 ke-tiga //define PORTA.3 pd4 // Photodioda konveyor 2 ke-empat //define PORTA.4 pd5 // Photodioda Konveyor 2 ke-lima //define PORTA.5 pd6 // Photodioda konveyor 1 pertama //define PORTA.6 ls // Limit Switch

//========================================================== // Read the AD conversion result

unsigned int read_adc(unsigned char adc_input) {

ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);

// Delay needed for the stabilization of the ADC input voltage delay_us(10);

// Start the AD conversion ADCSRA|=0x40;

// Wait for the AD conversion to complete while ((ADCSRA & 0x10)==0);

ADCSRA|=0x10; return ADCW; }

// Variabel yang digunakan

int pd1,pd2,pd3,pd4,pd5,pd6,ls,status,k,l,m,n,o,x=0; // Menampung photodioda dan limit switch

int flag1,flag2,flag3,flag4,flag5,flag6,flag7=0; // penanda objek char dataString[2]; // Penampung untuk komunikasi USART

//Fungsi Komunikasi USART

// Membersihkan variabel penampung untuk menerima data selanjutnya void clearStringBuffer(){

unsigned char i=0; for (i=0;i<16;i++){ dataString[i]=''; }

}

// Menerima dan memeriksa karakter kemudian mengubahnya kedalam string void getString(){

unsigned char i=0,temp; clearStringBuffer(); temp = getchar();

while (temp!='#'){ dataString[i]=temp;

i++; temp = getchar(); } } //Relay1 //ON void relay1ON(){

PORTC.0=0; // Kondisi port yang digunakan }

//OFF

void relay1OFF(){

PORTC.0=1; // Kondisi port yang digunakan }

//Relay2 // ON

void relay2ON(){ // kekiri start

PORTC.1=0; // Kondisi port yang digunakan }

// OFF

void relay2OFF(){ // stop

PORTC.1=1; // Kondisi port yang digunakan }

//Relay3 // ON

void relay3ON(){ // kekanan start

PORTC.2=0; // Kondisi port yang digunakan }

// OFF

void relay3OFF(){ // stop

PORTC.2=1; // Kondisi port yang digunakan }

//Relay4 //ON

void relay4ON(){

PORTC.3=0; // Kondisi port yang digunakan }

//OFF

void relay4OFF(){

PORTC.3=1; // Kondisi port yang digunakan }

//Relay 5 //ON

void relay5ON(){

PORTC.4=1; // Kondisi port yang digunakan }

//OFF

void relay5OFF(){

PORTC.4=0; // Kondisi port yang digunakan } // Konveyor1ON void konOn(){ relay5ON(); } // Konveyor 1OFF void konOff(){ relay5OFF(); }

// Motor Searah Jarum Jam ON void kananOn(){

relay1ON(); relay2ON(); }

// Motor Searah Jarum Jam OFF void kananOff(){

relay1OFF(); relay2OFF(); }

// Motor Berlawanan Arah Jarum Jam ON void kiriOn(){

relay3ON(); relay4ON(); }

// Motor Berlawanan Arah Jarum Jam OFF void kiriOff(){

relay3OFF(); relay4OFF(); }

//=============================================================== === //= Ada Objek di PD 1 //=============================================================== ===

pd1=read_adc(0); //Membaca adc 0 kemudian disimpan pada pd1 if(pd1>=900){ // Angka diubah sesuai kalibrasi

flag1=1; // flag=1 berarti ada objek

} else if(pd1<900){ // Angka diubah sesuai kalibrasi flag1=0; // flag=0 berarti tidak ada objek } //=============================================================== === //=============================================================== === //= Ada Objek di PD 2 //=============================================================== ===

pd2=read_adc(1); //Membaca adc 1 kemudian disimpan pada pd2 if(pd2>=1000){ // Angka diubah sesuai kalibrasi

flag2=1; // flag=1 berarti ada objek

} else if(pd2<1000){ // Angka diubah sesuai kalibrasi flag2=0; // flag=0 berarti tidak ada objek } //=============================================================== === //=============================================================== === //= Ada Objek di PD 3 //=============================================================== ===

pd3=read_adc(2); //Membaca adc 2 kemudian disimpan pada pd3 if(pd3>=1000){ // Angka diubah sesuai kalibrasi

flag3=1; // flag=1 berarti ada objek

} else if(pd3<1000){ // Angka diubah sesuai kalibrasi flag3=0; // flag=0 berarti tidak ada objek }

//=============================================================== === //=============================================================== === //= Ada Objek di PD 4 //=============================================================== ===

pd4=read_adc(3); //Membaca adc 3 kemudian disimpan pada pd4 if(pd4>=1000){ // Angka diubah sesuai kalibrasi

flag4=1; // flag=1 berarti ada objek

} else if(pd4<1000){ // Angka diubah sesuai kalibrasi flag4=0; // flag=0 berarti tidak ada objek } //=============================================================== === //=============================================================== === //= Ada Objek di PD 5 //=============================================================== ===

pd5=read_adc(4); //Membaca adc 4 kemudian disimpan pada pd5 if(pd5>=1000){ // Angka diubah sesuai kalibrasi

flag5=1; // flag=1 berarti ada objek

} else if(pd5<1000){ // Angka diubah sesuai kalibrasi flag5=0; // flag =0 berarti tidak ada objek } //=============================================================== === //=============================================================== ===

//= Ada Objek di Konveyor 1

//=============================================================== ===

pd6=read_adc(5); //Membaca adc 5 kemudian disimpan pada pd6 if(pd6>=900){ // Angka diubah sesuai kalibrasi

if(pd6>=900){ // Angka diubah sesuai kalibrasi flag6=1; // flag=1 berarti ada objek

} else if(pd6<900){ // Angka diubah sesuai kalibrasi flag6=0; // flag=0 berarti tidak ada objek } //=============================================================== === //=============================================================== ===

//= Ada Objek di LIMIT SWITCH

//=============================================================== ===

ls=PINA.6; //Membaca adc 6 limit switch kemudian disimpan pada ls if(ls==1){ // Angka sesuai kalibrasi

Dokumen terkait