BAB 3
Metodologi Percobaan
3.1.
Diagram Blok Sistem
Gambar 3.1 Diagram blok system
3.2.
Rangkaian Arduino uno
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 to-serial. Sebagai penggantinya penerapan
USB-to-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
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
Gambar 3.4. Flowchat Sistem
START
INIT
Baca waktu RTC
Waktu sama
?
Tdk
Ya
Bandingkan waktu RTC dgn
waktu Schedule
Aktifkan pompa air
Update data schedule
Ada data
serial ?
Ya
Tdk
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
.
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 <Wire.h> #include <TimeLib.h> #include <DS1307RTC.h> #include <SoftwareSerial.h> #include <AT24CX.h>
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 sDetik1; byte sJam2; byte sMenit2; byte sDetik2;
String tJam; String tDetik; String tMenit; 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();
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:");
}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"){
// 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("!"); }
// 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) {
void SplitTime(String dtTime){ tJam = dtTime.substring(1,3); Serial.print("Split:");
Serial.print(iJam); Serial.print(":");
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);
}
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; Serial.println(rDetik); }
}
// baca waktu RTC dengan interval boolean GetTime(int Interval){
if (millis() < timerGetTime + Interval) return false; timerGetTime = millis();
// 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;
} }
}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
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
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
For i = 0 To 59
' 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 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
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 btnConnect.Visible = True btnDisconnect.Visible = False 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)