GUI Kecepatan Mesin dengan Fuzzy Logic MatLab

mesin

Visual Graphical User Interface (GUI) di atas dibuat menggunakan fuzzy logic FIS Mamdani dengan fungsi keanggotaan Gauss. Input yang digunakan adalah suhu dan cahaya sedangkan output berupa kecepatan mesin. Berikut ini adalah diagram alur (flowchart) program yang telah dibuat :

flowchart

Berdasarkan program dan flowchart yang telah dibuat di atas, maka dapat dijelaskan sebagai berikut :

1.  Form 1 (Login)

User harus login terlebih dahulu untuk masuk ke form perhitungan kecepatan mesin.

login

Dalam program ini username dan password tidak dihubungkan ke database namun di-setting untuk satu user dengan username = “aprilia” dan password = “123”. Password dapat ditampilkan ataupun hidden dengan klik check box. Selanjutnya akan dilakukan pengecekan username dan password, jika terdapat kesalahan maka program akan muncul warning dan user harus melakukan input ulang. Berikut ini tampilan warning yang dirancang :

warn login

Jika username dan password telah sesuai maka user dapat klik push button login.

2.  Form 2 (Perhitungan Kecepatan Mesin)

Pada perhitungan kecepatan mesin, user hanya perlu menginputkan suhu dan cahaya yang dapat memilih langsung input dengan menggerakkan slider atau secara manual kemudian menekan tombol hitung pada GUI.

  • Input parameter secara manual

Sedangkan ketika user melakukan input suhu dan cahaya secara manual, sistem akan melakukan pengecekan nilai input terlebih dahulu apakah input sesuai dengan rules atau tidak. Selanjutnya user harus menekan push button hitung terlebih dahulu untuk menjalankan fuzzy logic kecepatan mesin sehingga hasil fuzzy logic kecepatan mesin akan muncul pada display. Berikut ini adalah tampilan warning ketika user melakukan input suhu dan cahaya diluar rentang yang ditentukan :

  • Input parameter menggunakan slider

Ketika user melakukan input data suhu dan cahaya dengan menggeser slider maka hasil fuzzy logic kecepatan mesin akan langsung muncul. Sistem tidak akan melakukan pengecekan nilai input dikarenakan nilai input pada slider sudah di setting sesuai dengan rules yaitu untuk suhu 0-50 0C dan cahaya 0-100 Cd. Selanjutnya hasil fuzzy logic kecepatan mesin akan langsung muncul dan ditampilkan.

Ketika user telah melakukan input data parameter dan hasil fuzzy logic kecepatan mesin telah ditampilkan maka dapat dilanjutkan pada proses berikutnya dengan menekan push button Reset atau Exit. Push button Reset berfungsi untuk menghilangkan data input dan hasil perhitungan. Sedangakan push button Exit berfungsi untuk keluar dari form perhitungan kecepatan mesin dan akan muncul form exit.

3.  Form 3 (Exit)

Form exit akan muncul ketika user menekan push button Exit pada form (2) perhitungan kecepatan mesin.

exit

Pada form ini terdapat statement “Are you really want to exit the application?” dan pilihan push button Yes dan No. Push button Yes berfungsi untuk mengakhiri program. Sedangkan Push button No berfungsi untuk kembali ke form sebelumnya yaitu form perhitungan kecepatan mesin.

.

LAMPIRAN SCRIPT GUI

Form 1. Login

function varargout = login(varargin)

gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...

'gui_Singleton',  gui_Singleton, ...
'gui_OpeningFcn', @login_OpeningFcn, ...
'gui_OutputFcn',  @login_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

function login_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
guidata(hObject, handles);

function varargout = login_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;

function checkbox4_Callback(hObject, eventdata, handles)

function edit7_Callback(hObject, eventdata, handles)

function edit7_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

function edit8_Callback(hObject, eventdata, handles)

function edit8_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

function pushbutton4_Callback(hObject, eventdata, handles)

function pushbutton4_Callback(hObject, eventdata, handles)
username = get(handles.edit7,'string');
password = get(handles.edit8,'string');
if strcmp(username,'aprilia') && strcmp(password,'123')
close;

aprilia_mesin_gauss();
else
msgbox('Username / Password yang Anda input salah');
end

Form 2. Perhitungan kecepatan mesin dengan fuzzy logic

function varargout = aprilia_mesin_gauss(varargin)
  
gui_Singleton = 1; 
gui_State = struct('gui_Name',       mfilename, ...
'gui_Singleton',  gui_Singleton, ...
   
function varargout = aprilia_mesin_gauss(varargin)  
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
'gui_Singleton',  gui_Singleton, ...
'gui_OpeningFcn', @aprilia_mesin_gauss_OpeningFcn, ...
'gui_OutputFcn',  @aprilia_mesin_gauss_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

function aprilia_mesin_gauss_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
img = imread('STMKG.png'); image(img, 'Parent', handles.axes3)
axis off;
guidata(hObject, handles);
   
function varargout = aprilia_mesin_gauss_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;

function togglebutton1_Callback(hObject, eventdata, handles)

function togglebutton2_Callback(hObject, eventdata, handles)

function togglebutton3_Callback(hObject, eventdata, handles)

function edit1_Callback(hObject, eventdata, handles)

function edit1_CreateFcn(hObject, eventdata, handles)

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

function edit2_Callback(hObject, eventdata, handles)

function edit2_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

function edit3_Callback(hObject, eventdata, handles)

function edit3_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
 
function edit4_Callback(hObject, eventdata, handles)
 
function edit4_CreateFcn(hObject, eventdata, handles)

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

function edit5_Callback(hObject, eventdata, handles)

function edit5_CreateFcn(hObject, eventdata, handles)

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
 
function edit6_Callback(hObject, eventdata, handles)

function edit6_CreateFcn(hObject, eventdata, handles) 
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))  
set(hObject,'BackgroundColor','white'); 
end
 
function uipanel2_SizeChangedFcn(hObject, eventdata, handles)

function edit10_Callback(hObject, eventdata, handles)
suhu=str2num(get(handles.edit10, 'String'));
handles.suhu=suhu;
guidata(hObject, handles)
if suhu > 50
msgbox('Suhu tidak boleh lebih dari 50 Celcius','Warning!!!','warn');
else if suhu < 0
msgbox('Suhu tidak boleh kurang dari 0 Celcius','Warning!!!','warn');
return
end 
end
 
function edit10_CreateFcn(hObject, eventdata, handles) 
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

function edit11_Callback(hObject, eventdata, handles)
cahaya=str2num(get(handles.edit11, 'String')); 
handles.cahaya=cahaya;
guidata(hObject, handles)
if cahaya > 100
msgbox('Cahaya tidak boleh lebih dari 100 Cd','Warning !!!','warn');
else if cahaya < 0
msgbox('Cahaya tidak boleh kurang dari 0 Cd','Warning !!!','warn'); 
return 
end 
end
   
function edit11_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white'); 
end

function edit12_Callback(hObject, eventdata, handles)

function edit12_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

function slider7_Callback(hObject, eventdata, handles)
slider_suhu = get(hObject,'Value');
slider_suhu_real=slider_suhu*50;
set(handles.edit10, 'string',slider_suhu_real);
if slider_suhu_real >= 36
set(handles.edit18, 'String','PANAS');
else if (28 <= slider_suhu_real) && (slider_suhu_real <=40)
set(handles.edit18, 'String','HANGAT');
else if (21 <= slider_suhu_real) && (slider_suhu_real <=30)
set(handles.edit18, 'String','NORMAL');
else if (11 <= slider_suhu_real) && (slider_suhu_real <=25)
set(handles.edit18, 'String','SEJUK');
else if slider_suhu_real <=15
set(handles.edit18, 'String','DINGIN'); 
end 
end
end 
end
end

slider_cahaya_real = get(handles.slider8,'Value');
input=[slider_suhu_real slider_cahaya_real];
fis = readfis('aprilia_mesin_gauss');
out = evalfis(input,fis);

set(handles.edit12, 'string', out);
if out >= 19 
set(handles.edit20, 'String','CEPAT'); 
else if (11 <= out) && (out <=21)
set(handles.edit20, 'String','SEDANG');
else if output <= 15 
set(handles.edit20, 'String','LAMBAT');  
end
end 
end

function slider7_CreateFcn(hObject, eventdata, handles)
if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor',[.9 .9 .9]); 
end
 
function slider8_Callback(hObject, eventdata, handles)
slider_cahaya = get(hObject,'Value');
slider_cahaya_real=slider_cahaya*100;
set(handles.edit11, 'string', slider_cahaya_real);
if slider_cahaya_real >= 81
set(handles.edit21, 'String','TERANG');
else if (31 <= slider_cahaya_real) && (slider_cahaya_real <=85)
set(handles.edit21, 'String','NORMAL');
else if slider_cahaya_real <= 35
set(handles.edit21, 'String','GELAP');
end
end
end

slider_suhu_real = get(handles.slider7,'Value');
input=[slider_suhu_real slider_cahaya_real];
fis = readfis('aprilia_mesin_gauss');
out = evalfis(input,fis);

set(handles.edit12, 'string', out);
if out >= 19
set(handles.edit20, 'String','CEPAT');
else if (11 <= out) && (out <=21)
set(handles.edit20, 'String','SEDANG');
else if out <= 15
set(handles.edit20, 'String','LAMBAT');
end
end
end

function slider8_CreateFcn(hObject, eventdata, handles)
if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor',[.9 .9 .9]);
end
   
function edit18_Callback(hObject, eventdata, handles)
   
function edit18_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
   
function edit20_Callback(hObject, eventdata, handles)

function edit20_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

function edit21_Callback(hObject, eventdata, handles)

function edit21_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

function pushbutton3_Callback(hObject, eventdata, handles)

exit();

function pushbutton2_Callback(hObject, eventdata, handles)
set(handles.edit10,'string','')
set(handles.edit11,'string','')
set(handles.edit12,'string','')
set(handles.edit18,'string','')
set(handles.edit21,'string','')
set(handles.edit20,'string','')
set(handles.slider7,'Value',0)
set(handles.slider8,'Value',0)
set(handles.slider9,'Value',0)

guidata(hObject, handles);

function pushbutton1_Callback(hObject, eventdata, handles)
suhu=handles.suhu;
cahaya=handles.cahaya;
fis=readfis('aprilia_mesin_gauss');
output=evalfis([suhu cahaya],fis);
set(handles.edit12, 'string', output);
if suhu >= 36
set(handles.edit18, 'String','PANAS');
else if (28 <= suhu) && (suhu <=40)
set(handles.edit18, 'String','HANGAT');
else if (21 <= suhu) && (suhu <=30)
set(handles.edit18, 'String','NORMAL');
else if (11 <= suhu) && (suhu <=25)
set(handles.edit18, 'String','SEJUK');
else if suhu <=15
set(handles.edit18, 'String','DINGIN');
end
end
end
end
end

if cahaya >= 81
set(handles.edit21, 'String','TERANG');
else if (31 <= cahaya) && (cahaya <=85)
set(handles.edit21, 'String','NORMAL');
else if cahaya <= 35
set(handles.edit21, 'String','GELAP');
end
end
end

if output >= 19
set(handles.edit20, 'String','CEPAT');
else if (11 <= output) && (output <=21)
set(handles.edit20, 'String','SEDANG');
else if output <= 15
set(handles.edit20, 'String','LAMBAT');
end
end
end

Form 3. Exit

function varargout = exit(varargin)

gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
'gui_Singleton',  gui_Singleton, ...
'gui_OpeningFcn', @exit_OpeningFcn, ...
'gui_OutputFcn',  @exit_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

function exit_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
guidata(hObject, handles);

function varargout = exit_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;
   
function togglebutton1_Callback(hObject, eventdata, handles)
close;

aprilia_mesin_gauss();

close;

function togglebutton2_Callback(hObject, eventdata, handles)

close;

aprilia_mesin_gauss();
Advertisement

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.