Rancang Bangun Alat Ukur Sisa Volume Tangki Bbm Berbasis Mikrokontroler Atmega 8535 Dengan Tampilan Android Chapter III V

BAB 3
Metodologi Percobaan

3.1.

Diagram Blok Sistem

Gambar 3.1 Diagram blok system

3.2.

Rangkaian Arduino uno

Gambar 3.2. rangkaian arduino uno
12
Universitas Sumatera Utara

Arduino Uno adalah papan sirkuit berbasis mikrokontroler ATmega328. IC (integrated
circuit) ini memiliki 14 input/output digital (6 output untuk PWM), 6 analog input, resonator
kristal keramik 16 MHz, Koneksi USB, soket adaptor, pin header ICSP, dan tombol reset. Hal
inilah yang dibutuhkan untuk mensupport mikrokontrol secara mudah terhubung dengan

kabel power USB atau kabel power supply adaptor AC ke DC atau juga battery.
Arduino Uno berbeda dari semua board mikrokontrol diawal-awal yang tidak
menggunakan chip khusus driver FTDI USB-to-serial. Sebagai penggantinya penerapan USBto-serial adalah ATmega16U2 versi R2 (versi sebelumnya ATmega8U2). Versi Arduino Uno
Rev.2 dilengkapi resistor ke 8U2 ke garis ground yang lebih mudah diberikan ke mode DFU.
3.3.

Rangkaian Driver relay dan pompa

Gambar 3.3. Rangkaian Driver relay dan pompa

Rangkaian driver relay atau sering disebut dengan penggerak relay atau saklar elektrik, ini
menggunakan transistor BC547 sebagai saklar pada relay,

13
Universitas Sumatera Utara

Ketika basis diberikan supply maka colektor dan emitter dalam keadaan satu rasi. Sehingga
relay hidup dan menutup katupnya. Diode berfungsi sebagai menghidari arus balik.
3.4.


Flowchat Sistem

START

INIT

Baca waktu RTC

Bandingkan waktu RTC dgn
waktu Schedule

Waktu sama
? Tdk

Ya

Aktifkan pompa air

Tdk


Ada data
serial ?

Ya
Update data schedule

END

Gambar 3.4. Flowchat Sistem

14
Universitas Sumatera Utara

3.5. Rangkaian RTC
Komponen Realtime clock adalah komponen IC penghitung yang dapat difungsikan sebagai
sumber data waktu baik berupa data jam, hari, bulan maupun tahun. Komponen DS1307
berupa IC yang perlu dilengkapi dengan komponen pendukung lainnya seperti crystal sebagai
sumber clock dan Battery External 3,6 Volt sebagai sumber energy cadangan agar fungsi
penghitung tidak berhenti.Bentuk komunikasi data dari IC RTC adalah I2C yang merupakan
kepanjangan dari Inter Integrated Circuit. Komunikasi jenis ini hanya menggunakan 2 jalur

komunikasi yaitu SCL dan SDA. Semua microcontroller sudah dilengkapi dengan fitur
komunikasi 2 jalur ini, termasuk diantaranya Arduino Microcontroller .

Gambar 3.5. Rangkaian RTC

15
Universitas Sumatera Utara

BAB 4
PENGUJIAN DAN HASIL

4.1.

Pengujian rangkaian Arduino uno
Pengujian sistem arduino uno dilakukan dengan memprogram sistem arduino uno

untuk membuat Pin.4 menjadi nilai positif negative 0 dan 1 yang diulang ulang dengan delay
100 ms. kemudian keluaran tegangan dari Pin.4 akan diukur dengan avometer.
Pengujian sistem arduino uno ini untuk memastikan bahwa sistem arduino yang
digunakan pada penelitian ini tidak rusak. Sehingga program yang ditanamkan pada

microcontroller mampu untuk mengontrol suhu dan kelembaban ruang seperti yang
diharapkan. Untuk pengujian arduino dapat digunaka program standar sebagai berikut :
// INIT Library
#include
#include
#include
#include
#include
AT24CX mem;
const byte addrJam1 = 10;
const byte addrMenit1 = 20;
const byte addrDetik1 = 30;
const byte addrJam2 = 40;
const byte addrMenit2 = 50;
const byte addrDetik2 = 60;
const byte pinPump = 11;
SoftwareSerial mySerial(A0, A1); // RX, TX
long timePump;
int cntPump = 0; // isi dengan satuan detik lamanya pompa aktif
// var untuk Hasil baca dr RTC

byte rJam;
byte rMenit;
byte rDetik;
// var untuk Hasil baca dr eeprom
byte rJam1;
byte rMenit1;
byte rDetik1;
byte rJam2;
byte rMenit2;
byte rDetik2;
// var untuk Set schedule
byte sJam1;
byte sMenit1;

16
Universitas Sumatera Utara

byte
byte
byte

byte

sDetik1;
sJam2;
sMenit2;
sDetik2;

String tJam;
String tDetik;
String tMenit;
byte iJam;
byte iDetik;
byte iMenit;
long timerGetTime;
String inputString = "";
boolean stringComplete = false;
int Proses = 0;
// Init awal arduino
void setup() {
Serial.begin(9600);

pinMode(pinPump,OUTPUT);
digitalWrite(pinPump,LOW);
inputString.reserve(20);
Serial.println("START1#");
mySerial.begin(9600);
mySerial.println("START2#");
LoadTime();
showTime();
}
// System UTAMA
void loop() {
mySerialEvent(); // tunggu data serial masuk
if (stringComplete) { // jika ada data masuk maka
Serial.println(inputString);
// jika perintah untuk seting schedule 1
//AJJMMDD --> A JAM MENIT DETIK
if (inputString.substring(0,1) == "A" && inputString.length() == 7 ) {
Serial.print("Set Schedule 1:");
SplitTime(inputString);
SaveTimeA();

LoadTime();
mySerial.println("#AOK*");
// jika perintah untuk seting schedule 2
}else if (inputString.substring(0,1) == "B" && inputString.length() == 7) {
//BJJMMDD --> B JAM MENIT DETIK
Serial.print("Set Schedule 2:");
SplitTime(inputString);
SaveTimeB();
LoadTime();
mySerial.println("#BOK*");
// jika perintah untuk menghidupkan pompa
}else if (inputString == "P1"){
Serial.println("Pump ON");
//mySerial.println("#P1*");
cntPump = 10;
// jika perintah untuk mematikan pompa
}else if (inputString == "P0"){
Serial.println("Pump OFF");
//mySerial.println("#P0*");
cntPump = 1;

// perintah untuk mengirim waktu RTC
}else if (inputString == "TIME"){
Serial.println("Send Time");
mySerial.print("#");
mySerial.print(rJam); mySerial.print(":");
mySerial.print(rMenit); mySerial.print(":");
mySerial.print(rDetik); mySerial.println("*");

17
Universitas Sumatera Utara

// perintah untuk mengirim waktu schedule
}else if (inputString == "GET"){
LoadTime();
Serial.println("Send Schedule time");
mySerial.print("#");
mySerial.print(rJam1); mySerial.print(":");
mySerial.print(rMenit1); mySerial.print(":");
mySerial.print(rDetik1); mySerial.print("-");
mySerial.print(rJam2); mySerial.print(":");

mySerial.print(rMenit2); mySerial.print(":");
mySerial.print(rDetik2); mySerial.println("!");
}
inputString = "";
stringComplete = false;
}
// baca waktu RTC setiap detik kemudian bandingkan dengan data schedule
if (GetTime(1000)){
CekSchedule();
}
// Jika pompa akan di aktifkan selama isi variabel cntPump
if (cntPump > 0){
//Serial.println(cntPump);
if (millis() > timePump + 1000) {
timePump = millis();
cntPump--;
if (cntPump == 0) {
Serial.println("PUMP AUTO OFF");
mySerial.println("#P0*");
digitalWrite(pinPump,LOW);
}else {
Serial.println("PUMP AUTO ON");
mySerial.println("#P1*");
digitalWrite(pinPump,HIGH);
}
}
}
}
// pisahkan data waktu
void SplitTime(String dtTime){
tJam = dtTime.substring(1,3);
tMenit = dtTime.substring(3,5);
tDetik = dtTime.substring(5,7);
iJam = tJam.toInt();
iMenit = tMenit.toInt();
iDetik = tDetik.toInt();
Serial.print("Split:");
Serial.print(iJam);
Serial.print(":");
Serial.print(iMenit);
Serial.print(":");
Serial.println(iDetik);
}
// simpan waktu schedule 1
void SaveTimeA(){
mem.write(addrJam1, iJam);
mem.write(addrMenit1, iMenit);
mem.write(addrDetik1, iDetik);
Serial.print("SaveA:");
Serial.print(iJam); Serial.print(":");
Serial.print(iMenit); Serial.print(":");
Serial.println(iDetik);
}
// simpan waktu schedule 2
void SaveTimeB(){

18
Universitas Sumatera Utara

mem.write(addrJam2, iJam);
mem.write(addrMenit2, iMenit);
mem.write(addrDetik2, iDetik);
Serial.print("SaveB:");
Serial.print(iJam); Serial.print(":");
Serial.print(iMenit); Serial.print(":");
Serial.println(iDetik);
}
// Ambil data schedule
void LoadTime(){
rJam1 = mem.read(addrJam1);
rMenit1 = mem.read(addrMenit1);
rDetik1 = mem.read(addrDetik1);
rJam2 = mem.read(addrJam2);
rMenit2 = mem.read(addrMenit2);
rDetik2 = mem.read(addrDetik2);
Serial.print("Load:");
Serial.print(rJam1); Serial.print(":");
Serial.print(rMenit1); Serial.print(":");
Serial.print(rDetik1); Serial.print("-");
Serial.print(rJam2); Serial.print(":");
Serial.print(rMenit2); Serial.print(":");
Serial.println(rDetik2);
}
// baca waktu RTC
void showTime(){
tmElements_t tm;
if (RTC.read(tm)) {
rJam = tm.Hour;
rMenit = tm.Minute;
rDetik = tm.Second;
Serial.print("RTC Time :");
Serial.print(rJam);
Serial.print(":");
Serial.print(rMenit);
Serial.print(":");
Serial.println(rDetik);
}
}
// baca waktu RTC dengan interval
boolean GetTime(int Interval){
if (millis() < timerGetTime + Interval) return false;
timerGetTime = millis();
tmElements_t tm;
if (RTC.read(tm)) {
rJam = tm.Hour;
rMenit = tm.Minute;
rDetik = tm.Second;
return true;
}else{
Serial.print("RTC Error");
return false;
}
}
// Cek data schedule dengan waktu RTC
void CekSchedule(){
if (rJam1 == 0 && rMenit1 == 0 && rDetik1 == 0 ){
//Serial.println("Schedule A gak aktif");
}else{
//Serial.println("Schedule A aktif");
if (rJam == rJam1 && rMenit == rMenit1 && rDetik == rDetik1){
cntPump = 10;
}
}
if (rJam2 == 0 && rMenit2 == 0 && rDetik2 == 0 ){
//Serial.println("Schedule B gak aktif");

19
Universitas Sumatera Utara

}else
{
//Serial.println("Schedule B aktif");
if (rJam == rJam2 && rMenit == rMenit2 && rDetik == rDetik2){
cntPump = 10;
}
}
}
// penanganan komunikasi serial
void mySerialEvent() {
while (mySerial.available()) {
char inChar = (char)mySerial.read();
Serial.print(inChar);
if (inChar > 30 ) inputString += inChar;
if (inChar == 13 ) {
stringComplete = true;
}
}
}

Dan kemudian untuk mengupload program, menggunakan tool upload pada arduino.
Apabila pin 13 atau bisa di lihat pada led yang telah disediakan pada arduino, akan terlihat led
akan hidup dan mati selama 1 detik dan berulang ulang. Pengujian ini bertujuan untuk
mengertahui arduino dapat digunakan dengan baik atau tidak.
4.2.

Pengujian rangkaian relay dan pompa
Untuk pengujian relay yaitu diberikan tegangan pada kaki basis di transistor, maka

transistor BC547 akan aktif (satu rasi) . Hal ini menyebabkan kumparan pada relay dialiri arus
listrik. Dengan demikian, kontak relay akan terhubung. Dioda berfungsi sebagai komponen
pengaman transistor arus balik yang mungkin timbul akibat dari aktifnya kumparan relay.
maka transistor dalam keadaan tidak aktif, untuk pengujian relay dengan program di bwah ini.
Void main(){
pinMode(8, OUTPUT);
}
void loop(void) {
digitalWrite(8,HIGH);
delay(1000);
digitalWrite(8,LOW);
delay(1000);
}

Setelah program di download ke mikrokontroler, Relay Akan Mengalami Kondisi
Terbuka Dan Tertutup Selama 1 Detik.
20
Universitas Sumatera Utara

4.3.

Pengujian Rangkaian RTC

Jika sudah terinstall pada software arduino sekarang kita jalankan software arduino
tersebut lalu kita buat sketch seperti dibawah ini :
'-=-=-=-=-=-=-=-=-=-=-=-=-=
Sub Read_date
'-=-=-=-=-=-=-=-=-=-=-=-=-=
' Read Clock Data
I2cstart
' Generate start
I2cwbyte Ds1307w
' Slave address
I2cwbyte Date_addmap
' Address of SECONDS REG
I2cstop
' Generate Stop
I2cstart
' Repeated start
I2cwbyte Ds1307r
' Slave address (read)
I2crbyte Reg_date , Ack
I2crbyte Reg_month , Ack
I2crbyte Reg_year , Nack
I2cstop
' Generate Stop
' set numeric variables
Num_date = Makedec(reg_date)
Num_month = Makedec(reg_month)
Num_year = Makedec(reg_year)
End Sub

Gambar 4.3. Pengujian Rangkaian RTC

21
Universitas Sumatera Utara

4.4.

Pengujian keseluruhan

Pengujian rangkaian yaitu dengan program sebagai berikut.
#Region Project Attributes
#ApplicationLabel: PENYIRAM TANAMAN
#VersionCode: 1
#VersionName:
#SupportedOrientations: portrait
#CanInstallToExternalStorage: true
#End Region
#Region Activity Attributes
#FullScreen: true
#IncludeTitle: false
#End Region
Sub Process_Globals
Dim Serial1 As Serial
Dim AStreams As AsyncStreams
Dim connected As Boolean
Dim TeksSend As String
End Sub
' init global
Sub Globals
Dim S As String
Dim S_in As String
Private lblInfo As Label
Private btnConnect As Button
Private btnDisconnect As Button
Dim DataInOld As String
Dim i As Int
Dim j As Float
Dim idx As Int
Dim ss As String
'Dim dtSchedules(6) As String
Dim dtSchedule(6) As Int
Dim idx As Int
Private btnExit As Button
Private SpnJamA As Spinner
Private SpnMenitA As Spinner
Private SpnDetikA As Spinner
Private btnUpdateA As Button
Private SpnJamB As Spinner
Private SpnMenitB As Spinner
Private SpnDetikB As Spinner
Private btnUpdateB As Button
Private btnPumpOff As Button
Private btnPumpOn As Button
Private btnGetInfo As Button
Private Label1 As Label
End Sub
'kirim data ke
Sub SendData(dt As String)
If connected Then
Dim Buffer() As Byte
TeksSend = dt & Chr(13)
Buffer = TeksSend.GetBytes("UTF8")
AStreams.Write(Buffer)
Log("Send:" & dt)
End If
End Sub
'init serial dan form ketika pertama kali aktif
Sub Activity_Create(FirstTime As Boolean)
If FirstTime = True Then
Serial1.Initialize("Serial1")
End If
Activity.LoadLayout("form")

22
Universitas Sumatera Utara

For i = 0 To 59
If i < 24 Then
SpnJamA.Add(i)
SpnJamB.Add(i)
End If
SpnMenitA.Add(i)
SpnMenitB.Add(i)
SpnDetikA.Add(i)
SpnDetikB.Add(i)
Next
Activity.AddMenuItem("Connect", "mnuConnect")
Activity.AddMenuItem("Disconnect", "mnuDisconnect")
Log ("START")
End Sub
' cek komunikasi bluetooth ketika aktif
Sub Activity_Resume
If Serial1.IsEnabled = False Then
Msgbox("Segera aktifkan Bluetooth ", "")
Else
Serial1.Listen
End If
End Sub
Sub Activity_Pause (UserClosed As Boolean)
If UserClosed Then
AStreams.Close
End If
End Sub
'Listing program pada menu connect, berfungsi untuk menkoneksi ke baluetooth
Sub mnuConnect_Click
Dim PairedDevices As Map
PairedDevices = Serial1.GetPairedDevices
Dim l As List
l.Initialize
For i = 0 To PairedDevices.Size - 1
l.Add(PairedDevices.GetKeyAt(i)) 'add the friendly name to the list
Next
Dim res As Int
res = InputList(l, "Pilih device", -1) 'show list with paired devices
If res DialogResponse.CANCEL Then
Serial1.Connect(PairedDevices.Get(l.Get(res))) 'convert the name to
mac address
End If
End Sub
'Listing program pada menu disconnect, berfungsi untuk memutuskan komunikasi ke
baluetooth
Sub mnuDisconnect_Click
If connected Then AStreams.Close
lblInfo.Text = "Disconnect"
End Sub
' status koneksi bluettoh
Sub Serial1_Connected (Success As Boolean)
If Success Then
ToastMessageShow("Koneksi berhasil", False)
AStreams.Initialize (Serial1.InputStream ,Serial1.OutputStream
,"AStreams")
connected = True
lblInfo.Text = "Connect"
btnConnect.Visible = False
btnDisconnect.Visible = True
SendData("GET")
Else
connected = False
lblInfo.Text = "Disconnect"
btnConnect.Visible = True
btnDisconnect.Visible = False
Msgbox(LastException.Message, "Koneksi gagal")
End If
End Sub
' pengolahan data yang masuk melalui bluetooth
Sub AStreams_NewData (Buffer() As Byte)
Dim DataIn As String

23
Universitas Sumatera Utara

Dim Dts As String
Dim DataInt As Int
'==============================================================
S = BytesToString(Buffer, 0, Buffer.Length, "UTF8")
If s.Trim = "#" Then S_in = ""
S_in = S_in & S.trim
Log(s.Trim)
If S_in.Length > 2 Then
If S_in.SubString2(0,1) = "#" AND S_in.SubString(S_in.Length-1) = "*"
Then
Log( "Comand:" & S_in.trim)
If S_in.Length < 10 Then
DataIn = S_in.SubString2(1,S_in.Length - 1)
S_in = ""
If DataInOld DataIn Then
DataInOld = DataIn
'DataInt = DataIn
If DataIn = "AOK" Then
lblInfo.Text = "Update Schedule 1 : SUKSES"
Else If DataIn = "BOK" Then
lblInfo.Text = "Update Schedule 2 : SUKSES"
Else If DataIn = "P1" Then
lblInfo.Text = "Pompa aktif"
Else If DataIn = "P0" Then
lblInfo.Text = "Pompa padam"
Else
lblInfo.Text = DataIn
End If
End If
End If
DataIn = ""
Else If S_in.SubString2(0,1) = "#" AND S_in.SubString(S_in.Length-1)
= "!" Then
'S_in = #0:0:0-0:0:0!
' ex:Time Get:#9:0:0-15:30:0!
Log("Time Get:" & S_in.trim)
If S_in.Length < 25 Then
'DataIn = 0:0:0-0:0:0
DataIn = S_in.SubString2(1,S_in.Length - 1)
S_in = ""
idx = 0
DataIn = DataIn & "-"
For i = 0 To DataIn.Length - 1
'Log(DataIn.SubString2(i,i+1))
If DataIn.SubString2(i,i+1) = ":" OR
DataIn.SubString2(i,i+1) = "-" Then
dtSchedule(idx) = Dts
Log(idx & ":" & dtSchedule(idx))
idx = idx + 1
Dts = ""
Else
Dts = Dts & DataIn.SubString2(i,i+1)
End If
Next
SpnJamA.SelectedIndex =
SpnMenitA.SelectedIndex
SpnDetikA.SelectedIndex
SpnJamB.SelectedIndex =
SpnMenitB.SelectedIndex
SpnDetikB.SelectedIndex

dtSchedule(0)
= dtSchedule(1)
= dtSchedule(2)
dtSchedule(3)
= dtSchedule(4)
= dtSchedule(5)

End If
DataIn = ""
End If
End If
If S_in.Length >= 25 Then
S_in = ""
End If

24
Universitas Sumatera Utara

End Sub
'Jika terjadi error pada komunikasi
Sub AStreams_Error
ToastMessageShow(LastException.Message, True)
lblInfo.Text = "Disconnect"
btnConnect.Visible = True
btnDisconnect.Visible = False
End Sub
' tombol connect
Sub btnConnect_Click
mnuConnect_Click
End Sub
'tombol disconnect
Sub btnDisconnect_Click
mnuDisconnect_Click
btnConnect.Visible = True
btnDisconnect.Visible = False
End Sub
'tombol exit
Sub btnExit_Click
mnuDisconnect_Click
ExitApplication
End Sub
'tombol hidupkan pompa
Sub btnPumpOff_Click
SendData("P0")
End Sub
'tombol matikan pompa
Sub btnPumpOn_Click
SendData("P1")
End Sub
' tombol refresh data schedule dr arduino
Sub btnGetInfo_Click
SendData("GET")
End Sub
' tombol update data schedule 1 ke arduino
Sub btnUpdateA_Click
Dim dtSend As String
Dim dtS As String
dtS = "00" & SpnJamA.SelectedItem
dtSend = "A" & dtS.SubString(dtS.Length - 2)
dtS = "00" & SpnMenitA.SelectedItem
dtSend = dtSend & dtS.SubString(dtS.Length - 2)
dtS = "00" & SpnDetikA.SelectedItem
dtSend = dtSend & dtS.SubString(dtS.Length - 2)
Log("Update A:" & dtSend)
SendData(dtSend)
End Sub
' tombol update data schedule 2 ke arduino
Sub btnUpdateB_Click
Dim dtSend As String
Dim dtS As String
dtS = "00" & SpnJamB.SelectedItem
dtSend = "B" & dtS.SubString(dtS.Length - 2)
dtS = "00" & SpnMenitB.SelectedItem
dtSend = dtSend & dtS.SubString(dtS.Length - 2)
dtS = "00" & SpnDetikB.SelectedItem
dtSend = dtSend & dtS.SubString(dtS.Length - 2)
Log("Update B:" & dtSend)
SendData(dtSend)
End Sub

25
Universitas Sumatera Utara

Pengujian ini dilakukan dengan menghubungkan android melalui bloetooth dan mengirimkan
pesan waktu penyiramannya dan diperoleh data sebagai berikut:

Update

Waktu

Status Pompa

Schedule 1

08:15:00

Hidup

Schedule 2

09:15:00

Hidup

Schedule 1

10:15:00

Hidup

Schedule 2

11:15:00

Hidup

Tabel 4.4. Data Percobaan

26
Universitas Sumatera Utara

BAB V
KESIMPULAN DAN SARAN

1.1

Kesimpulan
Pengambilan data yang dilakukan dengan dua waktu yang berbeda pada percobaan

diatas adalah sebagai contoh bahwa penyiraman dibagi dalam dua schedule dan schedule
tersebut dapat diubah oleh pengguna dalam waktu singkat. Data-data tersebut adalah sebagai
berikut :
1.

Pada waktu Pengujian alat, kita harus menunggu alat menyiram pada saat waktu yang
sudah ditentukan.

2.

Kita dapat mengatur waktu penyiraman dua kali dalam sehari, kita dapat mengubah
waktu penyiraman, dan penyiraman akan terus berlangsung seperti waktu yang kita atur
sebelumnya.

3.

Alat ini masih kurang efektif karena jangkauan peyiraman masih rendah karena pompa
yang digunakan berdaya rendah.

1.2

Saran

Beberapa tambahan yang diperlukan dalam meningkatkan kemampuan alat ini adalah:

1. Supaya rangkaian yang digunakan tidak terganggu, sebaiknya alat ini dikemas dalam
bentuk yang lebih aman dan terlindungi, sehingga penggunaannya lebih efektif.

2. Dengan beberapa pengembangan dan penyempurnaan sistem dari alat ini akan dapat
lebih baik lagi hasilnya.

3. Diharapkan kedepannya alat ini dapat di kembangkan dengan tampilan LCD yang lebih
menarik dan dapat dibaca dari jarak yang cukup jauh.

4. Diharapkan kedepannya desain alat penyiram otomatis ini lebih praktis dalam packaging.
6. Diharapkan kedepannya perancangan alat ini dapat disesuaikan dengan yang dibutuhkan
masyarakat luas.

27
Universitas Sumatera Utara