BAB V. KESIMPULAN DAN SARAN
5.2 Saran
Beberapa saran yang dapat penulis berikan pada Tugas Akhir ini adalah : 1. Nilai ketinggian yang diperoleh berubah-ubah setiap waktu, sehingga
pengukuran ketinggian ground level dengan ketinggian objek sebaiknya dilakukan secepat mungkin.
2. Untuk ketinggian objek yang baru, sebaiknya menggunakan nilai ketinggian ground level yang baru.
3. Untuk mendapatkan hasil pengukuran yang maksimal, jumlah sampel data yang digunakan sebaiknya ditingkatkan.
ix
DAFTAR PUSTAKA
[1] “Indonesian Wikipedia,” Wikimedia Foundation, Inc., 6 Agustus 2014. [Online]. Available: http://id.wikipedia.org/wiki/Tekanan. [Diakses 11 November 2014]. [2] “English Wikipedia,” Wikimedia Foundation, Inc., 8 November 2014. [Online].
Available: http://en.wikipedia.org/wiki/Atmospheric_pressure. [Diakses 11 November 2014].
[3] K. Sohraby, D. Minoli dan T. Znati, Wireless Sensor Networks : Technology, Protocols, and Applications, New Jersey: John Wiley & Sons, Inc., 2007.
[4] W. Dargie dan C. Poellabauer, Fundamentals of Wireless Sensor Networks : Theory and Practice, United Kingdom: John Wiley and Sons, Ltd., 2010.
[5] D. Gislason, ZigBee Wireless Networking, USA: Newnes, 2008.
[6] J. Axelson, Serial Port Complete : COM Ports, USB Virtual COM Ports, and Ports for Embedded Systems, 2nd penyunt., Madison: Lakeview Research LLC, 2007. [7] AN232B-04 : Data Throughput, Latency and Handshaking, United Kingdom: Future
Technology Devices International Ltd., 2006.
[8] P. Tarigan, Sistem Tertanam, Yogyakarta: Graha Ilmu, 2011.
[9] “English Wikipedia,” Wikimedia Foundation, Inc., 21 March 2015. [Online]. Available:
http://en.wikipedia.org/wiki/Universal_asynchronous_receiver/transmitter. [Diakses 1 April 2015].
[10] Xbee/XBee-PRO OEM RF Modules, Lindon: MaxStream, Inc., 2006. [11] “Scilab,” Scilab Enterprises S.A.S, [Online]. Available:
https://www.scilab.org/scilab/about. [Diakses 25 November 2014]. [12] “Scilab,” Scilab Enterprises S.A.S, [Online]. Available:
https://www.scilab.org/download/requirements. [Diakses 25 November 2014]. [13] “English Wikipedia,” Wikimedia Foundation, Inc., 2 March 2015. [Online]. Available:
Lampiran 1
Kode Program Untuk Perangkat Arduino
#include <Wire.h>
#include <Adafruit_BMP085.h>
Adafruit_BMP085 tinggi; // create a BMP085 object char input; void setup() { Serial.begin(9600); Wire.begin(); tinggi.begin(); } void loop() { input = Serial.read(); switch(input) {
case 'R': // R is sent from Scilab to ask whether Radio is ready or not Serial.println("Ready");
break;
case 'P': // P is sent from Scilab to command Radio start sending data Serial.println(tinggi.readAltitude());
break; } }
Lampiran 2
Kode Program Untuk Scilab
/////////////////////////////////////////////////////////////////////////////// // CREATE A WINDOW AND ITS COMPONENTS ///////////////////////////////////////////////////////////////////////////////
clear;
gui = createWindow(); gui.axes_size = [770480]; gui.figure_name = "Skripsi"; gui.backgroundcolor = [111]; gui.figure_position = [32080]; gui.resize = "off";
handles.gui = 1;
/////////////////////////////////////////////////////////////////////////////// // Connect Button
pbConnect = uicontrol(gui, 'Style', 'pushbutton', 'Units', 'points', ...
'position', [202807020], 'String', 'Connect', ...
'HorizontalAlignment', 'center', 'Callback', 'connect');
// Disconnect Button
pbDisconnect = uicontrol(gui, 'Style', 'pushbutton', 'Units', 'points', ...
'position', [202407020], 'String', 'Disconnect', ...
'HorizontalAlignment', 'center', 'Callback', 'disconnect');
// Plotting Button
pbPlot = uicontrol(gui, 'Style', 'pushbutton', 'Units', 'points', ...
'position', [202007020], 'String', 'Plot', ...
'HorizontalAlignment', 'center', 'Callback', 'dataPlot');
// Stop the Plotting Button
pbStop = uicontrol(gui, 'Style', 'pushbutton', 'Units', 'points', ...
'position', [201607020], 'String', 'Stop Plotting', ...
'HorizontalAlignment', 'center', 'Callback', 'stop');
// Load Data Button
pbCallLoad = uicontrol(gui, 'Style', 'pushbutton', 'Units', 'points', ...
'position', [201207020], 'String', 'Load', ...
'HorizontalAlignment', 'center', 'Callback', 'callDataLoad');
// Save and Exit Button
pbCallSaveandExit = uicontrol(gui, 'Style', 'pushbutton', 'Units', 'points', ...
'position', [03487020], 'String', 'Save & Exit', ...
'HorizontalAlignment', 'center', ...
'Callback', 'callSaveExit');
/////////////////////////////////////////////////////////////////////////////// // A place for Axes
handles.frame4axes = uicontrol(gui, 'Style', 'frame', 'Position', [150120450360], ...
'HorizontalAlignment', 'center', ...
'Background', [111]);
// A place for Status Text
handles.frame4status = uicontrol(gui, 'Relief', 'solid', ...
'Style', 'frame', 'Position', [403069580], ...
'HorizontalAlignment', 'center', ...
'Background', [111]);
// Title for the place of Status Text
handles.frame4statusTitle = uicontrol(gui, 'Style', 'text', 'String', 'Status', ...
'Position', [601005020], ...
'HorizontalAlignment', 'center', ...
'Background', [111]);
// Status Text
handles.txtStatus = uicontrol(gui,'Style', 'text', 'Position', [504067560], ...
'FontSize', [16], 'FontWeight', 'bold', ...
'HorizontalAlignment', 'left', ...
'Background', [111]);
set(handles.txtStatus,"String","Welcome");
/////////////////////////////////////////////////////////////////////////////// // A place for Height Variable each second
parameter = [" ""Height"];
awalTabel1 = ["detik 1""detik 2""detik 3""detik 4""detik 5""detik 6", ...
"detik 7""detik 8""detik 9""detik 10"]'; awalTabel2 = [" "" "" "" "" "" "" "" "" "" "]'; table = [parameter; [ awalTabel1 awalTabel2 ]];
handles.tableTinggi = uicontrol(gui, 'Style', 'table', 'String', table, ...
'Position', [600163150187]);
/////////////////////////////////////////////////////////////////////////////// // What is the height now?
handles.txtHeight = uicontrol(gui,'Style', 'text', 'Position', [6004206020], ...
'FontSize', [12], 'FontWeight', 'bold', ...
'HorizontalAlignment', 'left', ...
'Background', [111]);
set(handles.txtHeight,"String","Height :");
handles.txtHeightVar = uicontrol(gui,'Style', 'text', 'Position', [6604205020], ...
'FontSize', [12], 'FontWeight', 'bold', ...
'HorizontalAlignment', 'center', ...
'Background', [111]);
handles.txtMeter = uicontrol(gui,'Style', 'text', 'Position', [7104204020], ...
'FontSize', [12], 'FontWeight', 'bold', ...
'HorizontalAlignment', 'right', ...
'Background', [111]);
set(handles.txtMeter,"String","Meter");
/////////////////////////////////////////////////////////////////////////////// // Creating an Axes
handles.axes1 = newaxes(handles.frame4axes);
// Axes1 title and axis
handles.axes1.title.text = "Height"; handles.axes1.title.font_size = 4;
handles.axes1.data_bounds = [0,0;10,150]; handles.axes1.axes_visible = "on";
// Axes1 X label
handles.axes1.x_label.text = "Time (Second)"; handles.axes1.x_label.font_size = 2;
// Axes1 Y label
handles.axes1.y_label.text = "Height (Meter)"; handles.axes1.y_label.font_size = 2;
// Initialization
globalbthpanjangtinggiGUIstatusPLOTstatusSAVEstatusFilePathk
GUIstatus = 0; PLOTstatus = 0; SAVEstatus = 0; k = 0;
panjang = 41; // terdapat 41 sampel data ketinggian
b = zeros(1,panjang); // membuat tempat 1 x 41 untuk data ketinggian
tinggi = zeros(1,10); // variabel untuk data ketinggian per detik
t = 0:0.25:10; // banyaknya waktu sampel
h = 150; // tinggi pada axis Y
FilePath = 'C:\Users\ASUS\Desktop\DATA\Scilab files\SOD files\';
/////////////////////////////////////////////////////////////////////////////// // CALLBACK FOR EACH BUTTON
/////////////////////////////////////////////////////////////////////////////// // Connect to Arduino through Radio
function connect globalradioGUIstatus
// Koneksi antara penerima dan pengirim belum terhubung (GUIstatus = 0)
if GUIstatus == 0then
radio = openserial(6, "9600,n,8,1"); sleep(2000);
writeserial(radio,"R"); sleep(1000);
set(handles.txtStatus,"String",readserial(radio)); readserial(radio);
GUIstatus = 1; else
messagebox("Laptop has connected to Arduino.", "MA Corp", "info"); end
endfunction
// Disconnect from Arduino
function disconnect globalradioGUIstatus
// Menutup koneksi jika penerima dan pengirim masih terhubung (GUIstatus = 1)
if GUIstatus == 1then closeserial(radio);
set(handles.txtStatus,"String","Disconnected."); GUIstatus = 0;
else
messagebox("Arduino is not connected.", "Error", "error"); end
endfunction
function dataPlot
globalabtzkpanjangheighttinggiradioGUIstatusPLOTstatusSAVEstatus
awalTabel2 = [" "" "" "" "" "" "" "" "" "" "]'; table = [parameter; [ awalTabel1 awalTabel2 ]];
set(handles.tableTinggi,"String",table); // Menghapus tabel
delete(handles.axes1.children); // Menghapus grafik
// Membuat tombol selain tombol "Stop Plotting" dalam keadaan OFF
set(pbConnect,'Enable','Off'); set(pbDisconnect,'Enable','Off'); set(pbPlot,'Enable','Off'); set(pbCallLoad,'Enable','Off'); set(pbCallSaveandExit,'Enable','Off');
if GUIstatus == 1then PLOTstatus = 1;
set(handles.txtStatus,"String","Processing and Plotting Data..."); for z = 1:panjang
//Terdapat 40 data sampel, sehingga untuk mengumpulkannya selama
//10 detik, 1 data sampel membutuhkan 0.25 detik
//0.250 - 0.041 - 0.005 = 0.204 = 203
writeserial(radio,"P"); // 0.001 second
sleep(203); // 0.204
a = strtod(readserial(radio)); // 0.001 second, data diubah dari
//string menjadi double
b(z) = a; // 0.001 second
plot(t(1:z),b(1:z)); // 0.041 second
// Interupsi jika tombol "Stop Plotting" ditekan (k = 1)
if k == 1then// 0.001 second
k = 0; break; end
set(handles.txtHeightVar,"String",sci2exp(a)); // 0.001 second
end
set(handles.txtStatus,"String","Done."); SAVEstatus = 1;
// Memuat data ketinggian setiap detik dalam tabel
for z = 1:10
tinggi(z) = b(z*4); end
height = tinggi';
awalTabel2 = string([height]);
table = [parameter; [ awalTabel1 awalTabel2 ]]; set(handles.tableTinggi,"String",table);
else
messagebox("Arduino is not connected.", "Warning", "passwd"); end
PLOTstatus = 0; // Tidak ada plotting yang berjalan
// Membuat tombol kembali ke keadaan ON
set(pbConnect,'Enable','On'); set(pbDisconnect,'Enable','On'); set(pbPlot,'Enable','On'); set(pbCallLoad,'Enable','On'); set(pbCallSaveandExit,'Enable','On'); endfunction
// Interrupt and stop the plot
function stop
globalkradioPLOTstatusSAVEstatus
if PLOTstatus == 1then k = 1;
else
messagebox("Nothing Happened.","MA Corp","warning"); end
endfunction
// Load and plot the saved data
function callDataLoad
globalFilePathFileNameH1FileNameH0FullPathguiLoad
guiLoad = createWindow(); guiLoad.axes_size = [22080];
guiLoad.figure_name = "Load File Name"; guiLoad.backgroundcolor = [111]; guiLoad.figure_position = [620200]; guiLoad.resize = "off";
FileNameH1 = uicontrol(guiLoad,'Style', 'edit', ...
'Position', [35812320], ...
'FontSize', [10], 'HorizontalAlignment', 'left'); set(FileNameH1,"String","H1 File Name...");
FileNameH0 = uicontrol(guiLoad,'Style', 'edit', ...
'Position', [31612320], ...
'FontSize', [10], 'HorizontalAlignment', 'left'); set(FileNameH0,"String","H0 File Name...");
pbLoad = uicontrol(guiLoad, 'Style', 'pushbutton', 'Units', 'points', ...
'position', [101257020], 'String', 'Load', ...
'HorizontalAlignment', 'center', 'Callback', 'dataLoad'); endfunction
function dataLoad
globalSAVEstatusFilePathFileNameH1FileNameH0FullPathguiLoad
SAVEstatus = 0;
delete(handles.axes1.children);
//Memuat data b, t, dan tinggi untuk H0 dengan dari file LoadFileNameH0
LoadFileNameH0 = get(FileNameH0,"String"); FullPath = strcat([FilePath,LoadFileNameH0]);
// Memuat data b, t, dan tinggi FileName dengan path FullPath
load(FullPath,'b','t','tinggi'); H0Data = b;
H0 = tinggi';
//Memuat data b, t, dan tinggi untuk H1 dengan dari file LoadFileNameH1
LoadFileNameH1 = get(FileNameH1,"String"); FullPath = strcat([FilePath,LoadFileNameH1]);
load(FullPath,'b','t','tinggi'); H1Data = b;
H1 = tinggi';
// Memuat data dalam grafik
plot(t,H1Data,'b-',t,H0Data,'r-');
legends(['H1';'H0'],[[2;1],[5;1]],opt="ur");
// Memuat data dalam tabel
parameter = [" ""H1""H0"]; awalTabel2 = string([H1]); awalTabel3 = string([H0]);
table = [parameter; [ awalTabel1 awalTabel2 awalTabel3 ]]; set(handles.tableTinggi,"String",table);
set(handles.txtStatus,"String","Loaded."); close(guiLoad);
endfunction
// Save data and exit
function callSaveExit
globalSAVEstatusFileNameguiSave
if SAVEstatus == 1then guiSave = createWindow(); guiSave.axes_size = [22040];
guiSave.figure_name = "Save File Name"; guiSave.backgroundcolor = [111]; guiSave.figure_position = [620240]; guiSave.resize = "off";
FileName = uicontrol(guiSave,'Style', 'edit', 'Position', [31512320], ...
'FontSize', [10], 'HorizontalAlignment', 'left'); set(FileName,"String","Enter File Name...");
pbSaveandExit = uicontrol(guiSave, 'Style', 'pushbutton', 'Units', 'points', ...
'position', [101107020], 'String', 'Save', ...
'HorizontalAlignment', 'center', 'Callback', 'saveExit'); else
set(handles.txtStatus,"String","Nothing to be saved."); sleep(1000);
set(handles.txtStatus,"String","Closing GUI..."); sleep(1000);
close(gui); end
endfunction function saveExit
globalbttinggiFilePathFileNameFullPathguiSave
// Menyimpan variabel b, t, dan tinggi ke FullPath
// Disimpan dengan nama SaveFileName
SaveFileName = get(FileName,"String"); FullPath = strcat([FilePath,SaveFileName]); save(FullPath,'b','t','tinggi');
close(guiSave);
set(handles.txtStatus,"String","Saving..."); sleep(1000);
close(gui); endfunction