BAB V IMPLEMENTASI DAN PENGUJIAN SISTEM
Pada bab lima ini akan dibahas mengenai pengimplementasian dari masing-masing prototype dan pengujian sistem untuk prototype. Implementasi dan pengujian sistem ini merupakan hasil dari perancangan sistem pada bab empat. 5.1
Prototype Pertama Berdasarkan bab empat pada bagian perancangan perangkat, maka
dilakukan implementasi untuk mengetahui hasil dari perancangan perangkat tersebut. Beberapa hal yang akan dilakukan dalam pengujian implementasi prototype pertama ini diantaranya pengujian sensor detak jantung, sensor suhu tubuh, dan pengiriman data melalui SMS. 5.1.1 Pengimplementasian GSM Shield Seperti yang telah dijelaskan pada bab perancangan, untuk pengiriman data akan digunakan GSM Shield. GSM Shield tersebut akan dipasang SIM Card agar dapat melakukan tugasnya sebagai media pengiriman data seperti pada gambar 5.1 berikut ini.
118
119
Gambar 5.1 GSM Shield dan Pemasangan SIM Card Gambar 5.1 merupakan pemasangan SIM Card pada GSM Shield. Agar dapat digunakan untuk mengirimkan data, GSM Shield harus dipasang SIM Card. Pada implementasi ini akan digunakan SIM Card dari salah satu provider di Indonesia yaitu Telkomsel. Pastikan SIM Card tersebut dalam keadan aktif dan memiliki pulsa yang cukup untuk melakukan SMS.
120
Gambar 5.2 Arduino Uno dan GSM Shield Gambar 5.2 merupakan bagaimana cara memasang GSM Shield pada Arduino. GSM Shield hanya tinggal dipasang pada bagian atas Arduino dan sesuaikan pin-pinnya. Setelah menghubungkan Arduino dengan GSM Shield, upload program untuk mengirimkan SMS dari device tersebut. File program bisa didapatkan pada dokumentasi di website Arduino.[5] sending_sms.ino #include
#define PINNUMBER ""
// initialize the library instance GSM gsmAccess; // include a 'true' parameter for debug enabled GSM_SMS sms;
121
// char array of the telephone number to send SMS // change the number 081585177776 to a number // you have access to char remoteNumber[20]= "081585177776"; // char array of the message char txtMsg[200]="Ini adalah pesan dari Perangkat Arduino dan GSM Shield";
void setup() { // initialize serial communications Serial.begin(9600);
Serial.println("SMS Messages Sender");
// connection state boolean notConnected = true;
// Start GSM shield // If your SIM has PIN, pass it as a parameter of begin() in quotes while(notConnected) { if(gsmAccess.begin(PINNUMBER)==GSM_READY) notConnected = false; else { Serial.println("Not connected"); delay(1000); } } Serial.println("GSM initialized");
122
sendSMS(); }
void loop() { // nothing to see here }
void sendSMS(){
Serial.print("Message to mobile number: "); Serial.println(remoteNumber);
// sms text Serial.println("SENDING"); Serial.println(); Serial.println("Message:"); Serial.println(txtMsg);
// send the message sms.beginSMS(remoteNumber); sms.print(txtMsg); sms.endSMS(); Serial.println("\nCOMPLETE!\n"); }
Setelah program di upload, dapat kita lihat perangkat akan mengirimkan SMS pada nomor yang ada pada file program tersebut, dalam hal ini perangkat
123
akan mengirimkan SMS dengan isi pesan “Ini adalah pesan dari Perangkat Arduino dan GSM Shield” dengan nomor tujuan 081585177776.
Gambar 5.3 Pesan Dari Perangkat Pengiriman SMS yang dilakukan oleh perangkat dapat dilihat pada serial monitor yang ada pada SDK Arduino. Pada saat awal, perangkat akan melakukan proses inisialisasi untuk ketersediaan jaringan GSMnya. Apabila jaringan tersedia perangkat akan memeriksa nomor tujuan dan melakukan pengiriman SMS. Berikut adalah gambaran proses dari pengiriman SMS yang dilakukan oleh perangkat yang dapat dilihat pada serial monitor di SDK Arduino.
124
Gambar 5.4 Pengiriman SMS Oleh Perangkat 5.1.2 Pengimplementasian Sensor Detak Jantung Seperti yang sudah dibahas pada bab perancangan, sensor yang akan digunakan untuk mendeteksi detak jantung pasien adalah HeartBeat Modul Version 1 yang akan dihubungkan dengan Arduino seperti gambar 5.3 berikut ini.
Gambar 5.5 Arduino Uno, GSM Shield, dan Sensor Detak Jantung
125
Seperti pada gambar 5.5, pin A0 pada sensor detak jantung dihubungkan ke analog pin 0 pada Arduino Uno, VCC pada sensor detak jantung dihubungkan ke 3,3v pada Arduino Uno, dan pin GND pada sensor detak jantung dihubungkan ke GND pada Arduino Uno. Setelah semua pin terhubung, upload program untuk sensor detak jantung. Program ini dibuat oleh pengembang dari pulsesensor.com dan dapat diunduh langsung dari website tersebut. Berikut adalah source code yang akan digunakan untuk mendeteksi detak jantung pada pasien. PulseSensorAmped_Arduino_1dot2.ino /* >> Pulse Sensor Amped 1.2 << This code is for Pulse Sensor Amped by Joel Murphy and Yury Gitman www.pulsesensor.com */ // VARIABLES int pulsePin = 0;
// Pulse Sensor purple wire connected to analog
pin 0 int blinkPin = 13;
// pin to blink led at each beat
int fadePin = 5;
// pin to do fancy classy fading blink at each beat
int fadeRate = 0;
// used to fade LED on with PWM on fadePin
int count = 0; float sumBPM = 0; float avrBPM = 0; // these variables are volatile because they are used during the interrupt service routine! volatile int BPM;
// used to hold the pulse rate
volatile int Signal;
// holds the incoming raw data
volatile int IBI = 600; seeded!
// holds the time between beats, must be
126
volatile boolean Pulse = false;
// true when pulse wave is high, false when
it's low volatile boolean QS = false;
// becomes true when Arduoino finds a beat.
void setup(){ pinMode(blinkPin,OUTPUT);
// pin that will blink to your heartbeat!
//pinMode(fadePin,OUTPUT);
// pin that will fade to your heartbeat!
Serial.begin(115200); interruptSetup();
// we agree to talk fast! // sets up to read Pulse Sensor signal every 2mS
// UN-COMMENT THE NEXT LINE IF YOU ARE POWERING The Pulse Sensor AT LOW VOLTAGE, // AND APPLY THAT VOLTAGE TO THE A-REF PIN // analogReference(EXTERNAL); hasil(); } void loop(){ } void hasil(){ while(count < 100){ if (QS == true){
// Quantified Self flag is true when arduino
finds a heartbeat fadeRate = 128;
// Set 'fadeRate' Variable to 255 to fade LED
with pulse //Serial.println(Signal); sumBPM = sumBPM+BPM; String sBPM = String(BPM); Serial.println("BPM: " +sBPM);
QS = false; count++; }
// reset the Quantified Self flag for next time
127
ledFadeToBeat(); //count++; delay(20); //just here to slow down the output so it is easier to read } avrBPM = (sumBPM/count); String sAvrBPM = String(int(avrBPM))+"."+String(getDecimal(avrBPM)); Serial.println("Average BPM: " +sAvrBPM); } void ledFadeToBeat(){ fadeRate -= 15;
// set LED fade value
fadeRate = constrain(fadeRate,0,255);
// keep LED fade value from
going into negative numbers! analogWrite(fadePin,fadeRate);
// fade LED
} long getDecimal(float val) { int intPart = int(val); long decPart = 1000*(val-intPart); //I am multiplying by 1000 assuming that the foat values will have a maximum of 3 decimal places //Change to match the number of decimal places you need if(decPart>0)return(decPart);
//return the decimal part of float number
if it is available else if(decPart<0)return((-1)*decPart); //if negative, multiply by -1 else if(decPart=0)return(00); is not available }
//return 0 if decimal part of float number
128
interrupt.ino volatile int rate[10];
// array to hold last ten IBI values
volatile unsigned long sampleCounter = 0;
// used to determine pulse
timing volatile unsigned long lastBeatTime = 0;
// used to find IBI
volatile int P =512;
// used to find peak in pulse wave, seeded
volatile int T = 512;
// used to find trough in pulse wave, seeded
volatile int thresh = 512;
// used to find instant moment of heart
beat, seeded volatile int amp = 100;
// used to hold amplitude of pulse
waveform, seeded volatile boolean firstBeat = true;
// used to seed rate array so we startup
with reasonable BPM volatile boolean secondBeat = false;
// used to seed rate array so we
startup with reasonable BPM
void interruptSetup(){ // Initializes Timer2 to throw an interrupt every 2mS. TCCR2A = 0x02;
// DISABLE PWM ON DIGITAL PINS 3 AND 11,
AND GO INTO CTC MODE TCCR2B = 0x06;
// DON'T FORCE COMPARE, 256 PRESCALER
OCR2A = 0X7C;
// SET THE TOP OF THE COUNT TO 124 FOR
500Hz SAMPLE RATE TIMSK2 = 0x02;
// ENABLE INTERRUPT ON MATCH BETWEEN
TIMER2 AND OCR2A sei();
// MAKE SURE GLOBAL INTERRUPTS ARE ENABLED
}
// THIS IS THE TIMER 2 INTERRUPT SERVICE ROUTINE. // Timer 2 makes sure that we take a reading every 2 miliseconds ISR(TIMER2_COMPA_vect){
// triggered when Timer2
129
counts to 124 cli();
// disable interrupts while we do this
Signal = analogRead(pulsePin);
// read the Pulse Sensor
sampleCounter += 2;
// keep track of the time in mS with
this variable int N = sampleCounter - lastBeatTime;
// monitor the time since the last
beat to avoid noise
// find the peak and trough of the pulse wave if(Signal < thresh && N > (IBI/5)*3){
// avoid dichrotic noise by
waiting 3/5 of last IBI if (Signal < T){ T = Signal;
// T is the trough // keep track of lowest point in pulse wave
} }
if(Signal > thresh && Signal > P){
// thresh condition helps avoid
noise P = Signal; }
// P is the peak // keep track of highest point in pulse wave
// NOW IT'S TIME TO LOOK FOR THE HEART BEAT // signal surges up in value every time there is a pulse if (N > 250){
// avoid high frequency noise
if ( (Signal > thresh) && (Pulse == false) && (N > (IBI/5)*3) ){ Pulse = true;
// set the Pulse flag when we think there
is a pulse digitalWrite(blinkPin,HIGH); IBI = sampleCounter - lastBeatTime;
// turn on pin 13 LED // measure time between beats
in mS lastBeatTime = sampleCounter;
// keep track of time for next
130
pulse
if(secondBeat){
// if this is the second beat, if secondBeat
== TRUE secondBeat = false;
// clear secondBeat flag
for(int i=0; i<=9; i++){
// seed the running total to get a realisitic
BPM at startup rate[i] = IBI; } }
if(firstBeat){
// if it's the first time we found a beat, if
firstBeat == TRUE firstBeat = false; secondBeat = true; sei(); return;
// clear firstBeat flag // set the second beat flag // enable interrupts again // IBI value is unreliable so discard it
}
// keep a running total of the last 10 IBI values word runningTotal = 0;
for(int i=0; i<=8; i++){ rate[i] = rate[i+1]; runningTotal += rate[i];
// clear the runningTotal variable
// shift data in the rate array // and drop the oldest IBI value // add up the 9 oldest IBI values
}
rate[9] = IBI; runningTotal += rate[9]; runningTotal /= 10;
// add the latest IBI to the rate array // add the latest IBI to runningTotal // average the last 10 IBI values
131
BPM = 60000/runningTotal;
// how many beats can fit into a
minute? that's BPM! QS = true;
// set Quantified Self flag
// QS FLAG IS NOT CLEARED INSIDE THIS ISR } }
if (Signal < thresh && Pulse == true){ // when the values are going down, the beat is over digitalWrite(blinkPin,LOW);
// turn off pin 13 LED
Pulse = false;
// reset the Pulse flag so we can do it again
amp = P - T;
// get amplitude of the pulse wave
thresh = amp/2 + T; P = thresh;
// set thresh at 50% of the amplitude // reset these for next time
T = thresh; }
if (N > 2500){ thresh = 512;
// if 2.5 seconds go by without a beat // set thresh default
P = 512;
// set P default
T = 512;
// set T default
lastBeatTime = sampleCounter; firstBeat = true; secondBeat = false;
// bring the lastBeatTime up to date
// set these to avoid noise // when we get the heartbeat back
}
sei(); }// end isr
// enable interrupts when youre done!
132
Ketika selesai melakukan upload, pembacaan sensor detak jantung dapat dilihat pada serial monitor di SDK Arduino. Berikut adalah pembacaan data yang dilakukan sensor detak jantung.
Gambar 5.6 Pembacaan Data Dari Sensor Detak Jantung 5.1.3 Pengimplementasian Sensor Suhu Sensor suhu yang digunakan adalah DS18B20 Temperature Sensor. Sensor akan dihubungkan pada Arduino seperti pada gambar 5.7 berikut ini.
Gambar 5.7 Pengimplementasian Sensor Suhu Tubuh
133
Seperti pada gambar 5.7, pin DQ pada sensor suhu tubuh dihubungkan ke digital pin 4 pada Arduino Uno, VCC pada sensor suhu tubuh dihubungkan ke 5v pada Arduino Uno, dan pin GND pada sensor suhu tubuh dihubungkan ke GND pada Arduino Uno. Setelah semua pin terhubung, upload program untuk sensor suhu tubuh. Program ini telah disediakan oleh pengembang dari DS18B20 Temperature Sensor dan bisa didapatkan dari dokumentasi. Berikut adalah source code yang akan digunakan untuk mendeteksi suhu tubuh pada pasien. DS18B20.ino #include int DS18S20_Pin = 4; //DS18S20 Signal pin on digital 4 //Temperature chip i/o OneWire ds(DS18S20_Pin); // on digital pin 4 void setup(void) { Serial.begin(9600); } void loop(void) { float temperature = getTemp(); Serial.println(temperature); delay(100); //just here to slow down the output so it is easier to read } float getTemp(){ //returns the temperature from one DS18S20 in DEG Celsius byte data[12]; byte addr[8];
if ( !ds.search(addr)) { //no more sensors on chain, reset search ds.reset_search();
134
return -1000; } if ( OneWire::crc8( addr, 7) != addr[7]) { Serial.println("CRC is not valid!"); return -1000; } if ( addr[0] != 0x10 && addr[0] != 0x28) { Serial.print("Device is not recognized"); return -1000; } ds.reset(); ds.select(addr); ds.write(0x44,1); // start conversion, with parasite power on at the end
byte present = ds.reset(); ds.select(addr); ds.write(0xBE); // Read Scratchpad
for (int i = 0; i < 9; i++) { // we need 9 bytes data[i] = ds.read(); } ds.reset_search();
byte MSB = data[1]; byte LSB = data[0];
float tempRead = ((MSB << 8) | LSB); //using two's compliment float TemperatureSum = tempRead / 16;
return TemperatureSum; }
135
Ketika selesai melakukan upload, pembacaan sensor suhu tubuh dapat dilihat pada serial monitor di SDK Arduino. Berikut adalah pembacaan data yang dilakukan sensor suhu tubuh.
Gambar 5.8 Pembacaan Sensor Suhu Tubuh
5.1.4 Pengujian Prototype Pertama Setelah dilakukan pengimplementasian terhadap keseluruhan komponen untuk membangun perangkat pada prototype pertama, maka akan dilakukan pengujian terhadap pembangunan perangkat pada prototype pertama tersebut. Pengujian ini dilakukan untuk mengetahui fungsional dari masing-masing komponen pembangun perangkat pada prototype pertama. Berikut adalah gambar 5.9 yang merupakan pengimplementasian keseluruhan untuk perangkat pada prototype pertama dan hasil pengujian perangkat prototype pertama.
136
Gambar 5.9 Implementasi Keseluruhan Untuk Prototype Pertama Gambar 5.9 merupakan hasil implementasi keseluruhan dari perangkat prototype pertama. Terlihat pada gambar 5.9 pula cara memasang sensor detak jantung dan sensor suhu tubuh. Sensor detak jantung dipasang pada ibu jari pasien dan sensor suhu tubuh dipasang pada telapak tangan pasien. Tabel 5.1 Pengujian Pembacaan Sensor Detak Jantung No.
Pembacaan Sensor
Perhitungan Detak
Error
Detak Jantung (BPM)
Jantung Secara Manual
(%)
1
89.5
84
6.55
2
79
82
3.66
3
77.5
80
3.13
4
83.2
80
4.00
5
89.2
89
0.22
6
74
82
9.76
7
86
86
0.00
8
74.13
80
7.34
137
9
100
95
5.26
10
97
98
1.02
Rata-rata
84.95
85.60
0.76
Pada pengimplementasian sensor detak jantung telah didapatkan hasil berupa rata-rata jumlah detak jantung selama 1 menit pada ibu jari dan hasil pengukuran seperti pada tabel 5.1 telah dibandingkan dengan pengukuran secara manual. Pengukuran detak jantung secara manual merupakan pengukuruan detak jantung yang dilakukan dengan cara langsung menghitung jumlah detak jantung pada pergelangan tangan selama 1 menit. Dari perbandingan pengukuran tersebut dapat dihitung nilai error. Nilai error yang masih diperbolehkan adalah dibawah 5%[18]. Pada tabel 5.1 dapat terlihat bahwa nilai error untuk perbandingan pengukuran antara hasil pembacaan sensor detak jantung dengan pengukuran detak jantung secara manual memiliki nilai error 0.76%, artinya bahwa nilai error tersebut masih bisa ditoleransi. Tabel 5.2 Pengujian Pembacaan Sensor Suhu Tubuh No.
Pembacaan
Perhitungan Suhu
Error
Sensor Suhu
Tubuh Menggunakan
(%)
Tubuh (Celsius)
Termometer
1
34.75
36.5
4.79
2
35.29
37
4.62
3
35.13
37
5.05
4
34.65
37
6.35
5
36.17
37
2.24
6
36.64
37
0.97
138
7
36.95
37
0.14
8
36.85
37
0.41
9
36.44
37
1.51
10
36.83
37
0.46
Rata-rata
35.97
36.95
2.66
Sedangkan pada pengimplementasian sensor suhu tubuh telah didapatkan hasil berupa rata-rata pengukuran suhu tubuh dan hasil pengukuran seperti pada tabel 5.2 telah dibandingkan dengan pengukuran menggunakan termometer digital. Hasil pengukuran secara menunjukkan bahwa presentase error adalah 2.66%, artinya bahwa nilai error tersebut masih dapat ditoleransi.[18]
Gambar 5.10 Termometer Digital Yang Digunakan
139
Tabel 5.3 Pengujian Pengiriman SMS No.
Pembacaan Sensor
Pembacaan Sensor
Pengiriman SMS
Detak Jantung (BPM)
Suhu Tubuh (Celsius)
1
89.5
34.75
Terkirim
2
79
35.29
Terkirim
3
77.5
35.13
Terkirim
4
83.2
34.65
Terkirim
5
89.2
36.17
Terkirim
6
74
36.64
Terkirim
7
86
36.95
Terkirim
8
74.13
36.85
Terkirim
9
100
36.44
Terkirim
10
97
36.83
Terkirim
Tabel 5.3 merupakan pengujian terhadap pengiriman SMS yang dilakukan perangkat. Dari 10 kali pengujian yang dilakukan, tidak ada SMS yang gagal terkirim. Tapi hal ini tidak menutup kemungkinan SMS akan gagal terkirim, karena hal tersebut merupakan faktor dari provider SIM Card yang digunakan. Dari hasil di atas, maka dapat dideskripsikan hasil pengujian sebagai berikut: 1. Pengukuran detak jantung menggunakan perangkat memiliki nilai error yang masih dapat ditoleransi yakni sebesar 0.76%. 2. Pengukuran suhu tubuh menggunakan perangkat memiliki nilai error sebesar 2.66%, artinya, nilai tersebut masih dapat ditoleransi karena masih dibawah 5%.[18]
140
3. Pengiriman data melalui SMS berhasil dilakukan, hanya saja jika data tersebut ingin dimasukkan ke dalam suatu database, maka harus memasukkannya secara manual. Oleh karena itu, perangkat harus dapat melakukan penyimpanan data kesehatan pada database secara otomatis. 4. Perangkat tidak memiliki suatu indikator yang dapat mengetahui keadaan pengiriman data, sehingga tidak diketahui apabila terjadi kegagalan dalam pengiriman data. Oleh karena itu, diperlukan tambahan indikator pada perangkat agar dapat menanggulangi permasalahan tersebut. Atas dasar deskripsi di atas, maka perlu dilakukan pengembangan untuk prototype kedua pada perangkat untuk menambahkan kekurangan yang ada pada prototype pertama sehingga perangkat dapat berfungsi secara optimal.
5.2
Prototype Kedua Setelah dilakukan analisis dan perancangan kembali pada bab 3 dan 4
untuk prototype kedua, maka dilakukan pengimplementasian dan pengujian sistem untuk prototype kedua ini. Pembahasan mengenai implementasi dan pengujian sistem prototype kedua ini akan membahas tentang pengiriman data melalui internet, penambahan indikator, dan implementasi perangkat lunak untuk prototype kedua.
141
5.2.1 Pengimplementasian Fungsi Pengiriman Data Melalui Internet Pada prototype pertama yang telah dideskripsikan sebelumnya bahwa prototype pertama memiliki kekurangan yaitu, data kesehatan hanya dikirim melalui SMS, sehingga data rawan hilang karena data tidak tersimpan pada database, untuk menyimpan datanya, petugas pelayanan kesehatan harus memasukkan data tersebut secara manual pada database. Oleh karena itu, pada prototype yang kedua ini, perangkat akan ditambahkan fungsi pengiriman data melalui internet, sehingga data kesehatan dapat tersimpan pada database secara otomatis tanpa harus dimasukkan terlebih dahulu oleh petugas kesehatan. Database yang digunakan dalam implementasi ini yaitu MySQL.
Gambar 5.11 Data Kesehatan Yang Tersimpan Dalam Database Gambar 5.11 merupakan tabel yang digunakan untuk menyimpan data kesehatan hasil pembacaan sensor pada perangkat. Tabel tersebut dinamakan tabel data_kesehatan
dan
berikut
field-field
yang
digunakan
data_kesehatan, yang dapat dilihat pada tabel 5.4 berikut ini.
dalam
tabel
142
Tabel 5.4 Tabel data_kesehatan No.
Nama
Tipe
Panjang/Nilai
Atribut
1.
id
Int
11
Primary Key
2.
kode_ardumed
Varchar
50
3.
kode_pasien
Varchar
50
4.
bpm
Float
5.
suhu
Float
6.
tanggal
Timestamp
Gambar 5.12 Data Pasien Yang Menggunakan Perangkat Gambar 5.12 merupakan tabel yang digunakan untuk menyimpan data pasien. Tabel tersebut dinamakan tabel arduino_pasien dan berikut field-field yang digunakan dalam tabel arduino_pasien, yang dapat dilihat pada tabel 5.5 berikut ini. Tabel 5.5 Tabel arduino_pasien No.
Nama
Tipe
Panjang/Nilai
Atribut
1.
kode_pasien
Varchar
50
Primary Key
2.
nama_pasien
Varchar
50
3.
usia_pasien
Int
11
4.
alamat_pasien
Varchar
50
5.
no_hp
Varchar
50
6.
ardumed_id
Varchar
50
7.
isActive
Int
11
143
Pada tabel data_kesehatan, field kode_ardumed akan menampung kode unik pada perangkat, field kode_pasien akan menampung kode dari pasien yang menggunakan
perangkat
tersebut,
kode_pasien
didapatkan
dari
tabel
arduino_pasien, field bpm dan suhu akan menampung hasil pembacaan dari sensor detak jantung dan suhu tubuh, dan field tanggal akan menampung waktu pengiriman dari data tersebut. Pada saat akan memasukkan data-data ke dalam database, diperlukan sebuah konfigurasi yang digunakan untuk menghubungkan atau memilih database yang akan digunakan, maka dari itu dibuat sebuah file konfigurasi yang dinamakan koneksi.php yang berfungsi untuk membuka atau menutup koneksi ke database. Berikut source code yang digunakan dalam konfigurasi. koneksi.php
//database host
$dbUser = "classified"; //username database $dbPass = "classified"; //password database $dbName = 'classified'; //nama database
// membuat koneksi mysql $conn = mysql_connect($dbHost, $dbUser, $dbPass, $dbName);
// Mengecek koneksi mysql if (!$conn) die("Koneksi Gagal: " . mysql_error());
//membuat koneksi database $dbSelected = mysql_select_db($dbName, $conn);
144
// Mengecek koneksi database if (!$dbSelected) die ('Koneksi Database Gagal: ' . mysql_error()); ?>
Selain file kofigurasi, untuk dapat mengirimkan data ke database diperlukan juga sebuah file yang berfungsi sebagai jembatan pengiriman data antara perangkat dan database. File tersebut dinamakan config..php. Berikut source code untuk file tersebut. config.php
$security = "1234"; //Security key the Arduino sketch has to pass to be able to write to db. ?>
Setelah membuat file konfigurasi tersebut, Arduino perlu dimasukkan program untuk dapat menginisialisasi penggunaan GSM Shield untuk pengiriman data melalui internet. GSM Shield akan digunakan sebagai Client yang berfungsi untuk mengirimkan data kesehatan menggunakan metode GET yang nantinya data tersebut akan diproses melalui file pass.php dan akan dimasukkan ke dalam
145
database. Source code yang digunakan diperoleh dari source code example dari library Arduino. Berikut adalah prosedur untuk mengirimkan data dari Arduino ke database server. Daten_senden() //PulseSensorAmped_Arduino_1dot2.ino void Daten_senden() { //Connect to server and pass the data to php script Serial.println("connecting...");
// if you get a connection, report back via serial: if (client.connect(server, port)) { // Make a HTTP request: client.print("GET "); client.print(path); //Path is the URL like http://host.com/pass.php client.print("?data1="); //Send data1 to pass.php client.print(code); client.print("&data2="); //Send data2 to pass.php client.print(avrBPM); client.print("&data3="); //Send data3 to pass.php client.print(avrTemp); client.print("&check="); //Send data4 to pass.php client.print(key); client.println(" HTTP/1.1"); client.print("Host: "); client.println(server); client.println(); Serial.println("Done!"); } else { Serial.println("No Connection");
146
} }
Untuk menerima data yang dikirim dari perangkat Arduino dan menyimpan data kesehatan hasil pembacaan sensor, digunakan source code PHP yang berfungsi untuk memasukkan data yang diperoleh dari perangkat ke dalam database. Berikut adalah source code untuk memasukkan data tersebut. pass.php
$result = mysql_query("SELECT kode_pasien FROM arduino_pasien WHERE ardumed_id='$data1' AND isActive = 1 LIMIT 1"); if (!$result) { // add this check. die('Invalid query: ' . mysql_error()); } else{ while($show=mysql_fetch_array($result)){ $kode_pasien=$show[0];
147
} }
//SQL syntax $sql="INSERT INTO data_kesehatan (kode_ardumed, kode_pasien, bpm, suhu) VALUES ('$data1', '$kode_pasien', $data2, $data3)";
//Compare security key if($check == $security){ $con=mysqli_connect($host,$user,$password,$db_name);
// Check connection if (mysqli_connect_errno()) { echo "Failed to connect to MySQL: " . mysqli_connect_error(); }
// Execute query if (mysqli_query($con,$sql)) { echo "Data written"; echo long2ip($ip); } //Error message else { echo "Error creating table: " . mysqli_error($con); } } ?>
148
5.2.2 Pengimplementasian Modul Indikator Penambahan modul indikator pada perangkat dilakukan untuk mengetahui status pengiriman data dari perangkat. Berikut akan dijelaskan tentang pengimplementasian modul indikator pada perangkat. Pada gambar 5.13 berikut ini adalah gambar ketika indikator dihubungkan dengan Arduino.
Gambar 5.13 Modul Indikator Penambahan modul indikator ini dilakukan untuk mengetahui status dari perangkat. Status yang dipantau adalah pembacaan sensor, inisialisasi GSM, pengiriman SMS, pengiriman data melalui internet. Pada modul indikator ini terdapat 8 pin yang akan terhubung dengan pin-pin pada Arduino Uno. Pin-pin yang akan dihubungkan dengan Arduino Uno tersebut dapat dilihat pada tabel 5.6 berikut ini.
149
Tabel 5.6 Hubungan Pin Modul Indikator Dengan Pin Arduino Uno Modul Indikator
Arduino Uno
GND
GND
Pulse Pin
Digital Pin 13
GSM Initializing Pin
Digital Pin 11
GSM Initialized Pin
Digital Pin 12
SMS Sent Pin
Digital Pin 10
Data Connecting Pin
Digital Pin 9
Data Not Sending Pin
Digital Pin 8
Data Sent Pin
Digital Pin 6
5.2.3 Pengimplementasian Perangkat Prototype Kedua Pengimplementasian perangkat ini merupakan penggabungan dari pengimplementasian modul indikator dan perangkat yang sudah dibangun pada prototype pertama yang sudah dijelaskan pada sub bab sebelumnya. Dengan keseluruhan pengimplementasian ini, maka perangkat telah menjadi satu kesatuan yang dapat berfungsi secara optimal. Berikut adalah gambar 5.14 yang merupakan gambar dari keseluruhan perangkat yang telah diimplementasi seluruh komponennya.
150
Gambar 5.14 Pengimplementasian Perangkat Prototype Kedua Berdasarkan gambar 5.14, dapat dibuat sebuah tabel untuk memperjelas hubungan pin-pin yang saling terhubung antara komponen-komponen dengan Arduino Uno. Berikut akan dijelaskan hubungan pin-pin yang terhubung dengan Arduino Uno pada tabel 5.7. Tabel 5.7 Pin-pin Yang Terhubung Dengan Arduino Arduino Uno &
Sensor Detak
Sensor
Modul Indikator
GSM Shield
Jantung
Suhu
GND
GND
-
-
GND
-
GND
-
GND
-
-
GND
3.3V
VCC
-
-
5V
-
VCC
-
Analog Pin 0
A0
-
-
151
Digital Pin 4
-
DQ
-
Digital Pin 6
-
-
Data Sent Pin
Digital Pin 8
-
-
Data Not Sending Pin
Digital Pin 9
-
-
Data Connecting Pin
Digital Pin 10
-
-
SMS Sent Pin
Digital Pin 11
-
-
GSM Initializing Pin
Digital Pin 12
-
-
GSM Initialized Pin
Digital Pin 13
-
-
Pulse Pin
Pertama kali perangkat akan melakukan GSM Initializing untuk menemukan jaringan GSM, keadaan ini ditandai dengan hidupnya lampu LED berwarna merah untuk GSM Initializing pada modul indikator. Setelah menemukan jaringan GSM, maka keadaan perangkat menjadi GSM Initialized yang ditandai dengan matinya lampu LED untuk GSM Initializing dan hidupnya lampu LED berwarna hijau untuk GSM Initialized pada modul indikator. Kemudian sensor-sensor mulai melakukan pembacaan yang ditandai dengan berkedipnya lampu LED berwarna hijau untuk pulse. Setelah melakukan pembacaan, perangkat akan melakukan pengiriman data. Pengiriman data yang pertama kali yaitu melalui SMS, data akan dikirimkan kepada petugas pelayanan kesehatan, apabila SMS telah terkirim maka lampu LED berwarna hijau untuk SMS Sent akan menyala. Pengiriman data yang kedua adalah melalui internet, pengiriman ini dilakukan setelah perangkat selesai mengirimkan SMS. Untuk mengirimkan data melalui intenet, perangkat terlebih dahulu melakukan pengecekan koneksi internet, keadaan ini ditandai dengan menyalanya lampu LED yang berwarna merah untuk Data Connecting. Setelah selesai melakukan
152
pengecekan koneksi, kemudian perangkat akan mengirimkan data tersebut, apabila data telah terkirim maka lampu LED berwarna hijau untuk Data Sent akan menyala, sedangkan apabila data gagal dikirim maka lampu LED berwarna merah untuk Data Not Sending akan menyala. 5.2.4 Pengimplementasian Perangkat Lunak Seperti yang telah dibahas pada bab sebelumnya, akan dibuat sebuah perangkat lunak yang berfungsi untuk menampilkan data kesehatan yang telah tersimpan pada database. Perangkat lunak yang dibangun merupakan aplikasi berbasi website. Diperlukan sebuah database untuk menunjang aplikasi ini. Database diperlukan untuk menyimpan data-data penting seperti data kesehatan, data perangkat, data pasien, dan data user. Ada 4 tabel yang digunakan pada aplikasi
ini
yaitu,
data_kesehatan,
arduino_pasien,
arduino_user,
dan,
data_arduino. Field-field pada tabel-tabel tersebut akan dijelaskan pada tabel 5.8 sampai dengan 5.11. Tabel 5.8 Tabel data_kesehatan No.
Nama
Tipe
Panjang/Nilai
Atribut
1.
id
Int
11
Primary Key
2.
kode_ardumed
Varchar
50
3.
kode_pasien
Varchar
50
4.
bpm
Float
5.
suhu
Float
6.
tanggal
Timestamp
153
Tabel data_kesehatan merupakan tabel yang akan digunakan untuk menyimpan data kesehatan dari pembacaan perangkat. Data-data yang diperlukan dalam tabel ini adalah id sebagai primary key, kode_ardumed yang akan mengenali setiap perangkat karena setiap memiliki kode tersendiri, kode_pasien akan
menjadi
parameter
untuk
mendapatkan
data
pasien
dari
tabel
arduino_pasien, bpm akan menyimpan data detak jantung pasien, suhu akan menyimpan data suhu tubuh pasien saat pemeriksaan menggunakan perangkat, tanggal akan menyimpan waktu pengiriman yang dilakukan oleh perangkat. Tabel 5.9 Tabel arduino_pasien No.
Nama
Tipe
Panjang/Nilai
Atribut
1.
kode_pasien
Varchar
50
Primary Key
2.
nama_pasien
Varchar
50
3.
usia_pasien
Int
11
4.
alamat_pasien
Varchar
50
5.
no_hp
Varchar
50
6.
ardumed_id
Varchar
50
7.
isActive
Int
11
Tabel arduino_pasien merupakan tabel yang akan digunakan untuk menyimpan data-data pasien. Dalam tabel ini kode_pasien merupakan primary key, nama_pasien untuk menyimpan nama pasien, usia_pasien untuk menyimpan usia pasien, alamat_pasien untuk menyimpan alamat pasien, no_hp untuk menyimpan nomor telepon pasien, ardumed_id merupakan field yang akan berisi
154
status pemakaian perangkat untuk pasien, isActive untuk status aktif atau tidaknya data pasien tersebut. Tabel 5.10 Tabel arduino_user No.
Nama
Tipe
Panjang/Nilai
Atribut
1.
id
Int
11
Primary Key
2.
username
Varchar
50
3.
password
Varchar
50
4.
level
Varchar
50
5.
name
Varchar
50
Tabel arduino_user adalah tabel yang berguna untuk melakukan login pada aplikasi. Dalam tabel ini id sebagai primary key, username dan password untuk melakukan login ke dalam aplikasi, level adalah tingkatan untuk user tersebut, name untuk menyimpan nama user. Tabel 5.11 Tabel data_arduino No.
Nama
Tipe
Panjang/Nilai
Atribut
1.
kode_ardumed
Varchar
50
Primary Key
2.
availability
Varchar
50
3.
isActive
Int
1
Tabel data_arduino adalah tabel yang digunakan untuk menyimpan data perangkat. Dalam tabel ini kode_ardumed sebagai primary key, availability merupakan status pemakaian dari perangkat tersebut, dan isActive merupakan status aktif atau tidaknya perangkat tersebut.
155
Pada pengimplementasian perangkat lunak untuk prototype kedua ini juga dibuat tampilan aplikasi yang akan berhubungan langsung dengan user. Berikut tampilan aplikasi untuk pengimplementasian pada prototype kedua.
Gambar 5.15 Tampilan Login Gambar 5.15 merupakan halaman tampilan untuk login. Sebelum memasuki halaman utama aplikasi, pengguna harus terlebih dahulu melakukan login dengan cara memasukkan username dan password yang benar.
Gambar 5.16 Halaman Utama Aplikasi
156
Gambar 5.16 merupakan tampilan halaman utama aplikasi. Setelah pengguna melakukan login maka pengguna akan diarahkan ke halaman utama ini. Halaman utama ini menampilkan seluruh data kesehatan dari seluruh pasien.
Gambar 5.17 Tampilan View Health Data Gambar 5.17 merupakan tampilan dari view health data. Pengguna terlebih dahulu akan memasukkan kode pasien yang ingin dilihat data kesehatannya, setelah sistem melakukan pencarian terhadap data tersebut, barulah data tersebut akan ditampilkan ke dalam tabel.
157
Gambar 5.18 Tampilan View Graphic Data Gambar 5.18 merupakan tampilan view graphic data. Sama halnya dengan view health data, pada view graphic data pun pengguna terlebih dahulu harus memasukkan kode pasien yang ingin dilihat data kesehatannya. Bedanya pada view graphic data, data akan ditampilkan dalam bentuk grafik.
158
Gambar 5.19 Tampilan Add New Ardumed Gambar 5.19 merupakan rancangan halaman untuk add new ardumed. Pengguna akan memasukkan memasukkan kode ardumed dan menekan tombol Add agar data Ardumed yang baru tersimpan.
159
Gambar 5.20 Tampilan Add Ardumed User Gambar 5.20 menunjukkan gambar tampilan untuk add ardumed user. Pengguna akan memilih kode pasien yang akan diberikan perangkat ardumed baru kemudia menekan tombol search. Sistem akan menampilkan data pasien tersebut dan pengguna juga akan memilih kode ardumed yang akan digunakan lalu menekan tombol add new agar data tersimpan dalam database.
160
Gambar 5.21 Tampilan View, Edit, Delete Device Data Gambar 5.21 merupakan tampilan dari view device data. Pada sub menu ini akan ditampilkan seluruh data ardumed, data akan disajikan dalam bentuk
161
tabel. Pada tabel tersebut nantinya akan ada 2 tombol aksi yaitu, edit dan delete. Edit adalah tombol untuk melakukan perubahan pada data ardumed, sedangkan delete adalah tombol untuk menghapus data ardumed.
Gambar 5.22 Tampilan View Device User Gambar 5.22 merupakan gambar tampilan dari view device user. Pada sub menu ini akan ditampilkan seluruh data dari pasien yang sedang menggunakan ardumed, data akan disajikan dalam bentuk tabel.
162
Gambar 5.23 Tampilan Add New Patient Gambar 5.23 merupakan tampilan untuk add new patient. Pengguna dapat menambahkan data pasien baru pada sub menu ini. Pengguna harus memasukkan data pasien dengan lengkap kemudia menekan tombol save agar data yang telah dimasukkan sebelumnya, disimpan oleh sistem ke dalam database.
163
Gambar 5.24 Tampilan View, Edit, Delete Device Patient Gambar 5.24 merupakan tampilan dari view patient. Pada sub menu ini akan ditampilkan seluruh data pasien, data akan disajikan dalam bentuk tabel.
164
Pada tabel tersebut nantinya akan ada 2 tombol aksi yaitu, edit dan delete. Edit adalah tombol untuk melakukan perubahan pada data pasien, sedangkan delete adalah tombol untuk menghapus data pasien. Selain pengimplementasian di atas, akan dijelaskan file-file fisik yang digunakan dalam pengimplementasian perangkat lunak pada prototype kedua ini. File fisik ini adalah file yang telah diimplementasikan untuk perangkat lunak. File ini merupakan file untuk bahasa pemrograman PHP. Penjelasan mengenai file-file fisik yang digunakan dapat dilihat pada tabel berikut ini. Tabel 5.12 File Fisik Untuk Implementasi Perangkat Lunak No 1.
Use Case Send Data
File Fisik config.php pass.php koneksi.php
2.
Login
login.php index.php login-action.php koneksi.php
3.
View Health Data
koneksi.php index.php dashboard.php getViewPasien.php view-health-data.php
4.
View Graphic Data
koneksi.php index.php dashboard.php getPasien.php
165
view-graphic-data.php 5.
Add Device
koneksi.php index.php dashboard.php add-arduino.php input-arduino.php
6.
Add Device User
koneksi.php index.php dashboard.php add-ardumed-user.php display-patient.php update-ardumed-user.php
7.
View Device User
koneksi.php index.php dashboard.php view-ardumed-user.php
8.
View Device Data
koneksi.php index.php dashboard.php view-ardumed.php edit-ardumed.php delete-ardumed.php
9.
Add Patient
koneksi.php index.php dashboard.php add-patient.php input-pasien.php
10.
View Patient
koneksi.php index.php dashboard.php view-patient.php
166
edit-patient.php delete-patient.php 11.
Edit Patient
koneksi.php index.php dashboard.php view-patient.php edit-patient.php update-patient.php
12.
Delete Pasien
koneksi.php index.php dashboard.php view-patient.php delete-patient.php hapus-pasien.php
13.
Edit Device
koneksi.php index.php dashboard.php view-ardumed.php edit-ardumed.php update-ardumed.php
14.
Delete Device
koneksi.php index.php dashboard.php view-ardumed.php delete-ardumed.php hapus-ardumed.php
167
5.2.5 Pengujian Blackbox Prototype Kedua Setelah dilakukan pengimplementasian terhadap prototype kedua ini, maka dilakukan pengujian blackbox untuk prototype kedua ini untuk menguji kesesuaian fungsionalitas dari sistem yang telah dibangun. Pengujian blackbox yang dilakukan meliputi pengujian pengiriman data melalui internet dan pengujian kesesuaian modul indikator serta kesesuaian data pada aplikasi, database dan hasil pembacaan perangkat. Tabel 5.13 Tabel Pengujian Pengiriman Data Melalui Internet No.
Pembacaan
Pembacaan
Nilai
Nilai Suhu
Pengiriman
Sensor Detak
Sensor Suhu
BPM
Pada
Data
Jantung
Tubuh
Pada
Database
(BPM)
(Celsius)
Database
1
79.63
34.46
79.63
34.46
Berhasil
2
84.57
36.13
84.57
36.13
Berhasil
3
78.13
35.86
78.13
35.86
Berhasil
4
75.53
34.45
75.53
34.45
Berhasil
5
84.8
36.06
84.8
36.06
Berhasil
Pada tabel 5.13 tersebut, diketahui bahwa perangkat berhasil melakukan pengiriman data ke database. Data yang dikirimkan dari perangkat sesuai dengan yang ada pada database. Dari pengujian pada tabel 5.13 di atas, terlihat bahwa semua pengiriman data berhasil dilakukan oleh perangkat, tetapi tidak menutup kemungkinan bila pada suatu saat terjadi kegagalan pengiriman data. Pengiriman
168
data yang gagal dikirim bisa disebabkan oleh faktor dari provider dan permasalahan pada koneksi internet. Tabel 5.14 Tabel Pengujian Kesesuaian Modul Indikator Status
Lampu LED Yang Menyala
Arduino
Keterangan
Perangkat
Pada Modul Indikator
Pin
Initializing
GSM Initializing (Merah)
11
Sesuai
GSM Initialized (Hijau)
12
Sesuai
Sensor
GSM Initialized (Hijau), Pulse
13
Sesuai
Reading
(Hijau)
SMS Sent
GSM Initialized (Hijau), Pulse
10
Sesuai
9
Sesuai
8
Sesuai
6
Sesuai
GSM GSM Initialized
(Hijau), SMS Sent (Hijau) Data
GSM Initialized (Hijau), Pulse
Connecting
(Hijau), SMS Sent (Hijau), Data Connecting (Merah)
Data Not
GSM Initialized (Hijau), Pulse
Sending
(Hijau), SMS Sent (Hijau), Data Not Sending (Merah)
Data Sent
GSM Initialized (Hijau), Pulse (Hijau), SMS Sent (Hijau), Data Sent (Hijau)
Pada tabel 5.14 dapat dilihat bahwa modul indikator berfungsi sesuai dengan status dari perangkat. Seperti yang telah dijelaskan pada sub bab sebelumnya bahwa pada modul indikator terdapat 7 lampu LED yang berwarna
169
merah dan hijau. Ketujuh lampu LED tersebut masing-masing mewakili status dari perangkat seperti yang telah dijelaskan pada tabel 5.13.
Tabel 5.15 Pengujian Kesesuai Data Bentuk
Kesesuaian Data
Kesesuaian Data Dengan Hasil
Penyajian Data
Dengan Database
Pembacaan Dari Perangkat
Tabel
Sesuai
Sesuai
Grafik
Sesuai
Sesuai
Tabel 5.15 merupakan tabel pengujian untuk kesusaian data pada tampilan di aplikasi dengan data yang ada pada database dan data hasil pembacaan perangkat. Dari tabel 5.15 terlihat bahwa terjadi kesinambungan antara data yang ada aplikasi dengan data yang ada pada database dan data hasil pembacaan dari perangkat. 5.2.6 Hasil Implementasi dan Pengujian Prototype Kedua Setelah dilakukan implementasi dan pengujian pada prototype kedua, didapatkan hasil dari implementasi dan pengujian pada prototype kedua ini. Hasil dari implementasi dan pengujian pada prototype kedua ini telah mencapai tujuan untuk menanggulangi kekurangan pada saat implementasi dan pengujian pada prototype pertama. Pada prototype kedua ini, perangkat ditambahkan fungsi agar bisa menyimpan data ke dalam database melalui internet dan menambahkan modul indikator untuk mengetahui status dari perangkat. Selain menambahkan
170
fungsi tersebut, pada prototype kedua ini juga dibangun aplikasi berbasis website untuk menampilkan data hasil pembacaan sensor yang dilakukan perangkat. Semua pengembangan yang dilakukan pada prototype kedua ini telah mencapai tujuan yang diharapkan sebelumnya. Selain itu, pengembangan perangkat pada prototype kedua ini juga telah terintegrasi dengan baik dari segi perangkat itu sendiri maupun dari segi perangkat lunak. Seperti yang telah dijelaskan sebelumnya, perangkat mengalami penambahan fungsi yaitu fungsi untuk menyimpan data hasil pembacaan sensor ke dalam database, sehingga petugas pelayanan kesehatan tidak perlu lagi memasukkan data secara manual karena perangkat sudah melakukannya dengan otomatis. Perangkat juga ditambahkan modul indikator yang berguna untuk mengetahui status dari perangkat, modul indikator akan memantau status dari pengiriman data dari perangkat, sehingga kegagalan pengiriman data dapat ditanggulangi.