mainform.vb
Public Class mainform
Private Sub KompresiToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles KompresiToolStripMenuItem.Click
kompresform.Show() End Sub
Private Sub DekompresiToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles DekompresiToolStripMenuItem.Click
dekompresform.Show() End Sub
Private Sub BantuanToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles BantuanToolStripMenuItem.Click
bantuanform.Show() End Sub
Private Sub TentangAppToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles TentangAppToolStripMenuItem.Click
tappform.Show() End Sub
Private Sub MenuFileToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles MenuFileToolStripMenuItem.Click
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim gambar As Byte()
namaberkas = lokasi.Text.Substring(lokasi.Text.LastIndexOf("\") + 1) nama_berkas.Text = namaberkas
pb1.SizeMode = PictureBoxSizeMode.StretchImage End Sub
Dim namafix As String
namafix = nama_berkas.Text.Substring(0, nama_berkas.Text.LastIndexOf(".")) time.Start()
'string asli = Encoding.U.GetString(gambar);
LZW_Encoder.LZW_compressed = LZW.compress(sb.ToString(), size) LZW_Encoder.tulis_file_lzw(size, "E:\kompresi\" & namafix & ".lzw") time.Stop()
LZW_Encoder.getInfo(lokasi.Text, "E:\kompresi\" & namafix & ".lzw") ukuranhasil.Text = LZW_Encoder.UkuranHasil.ToString()
rs.Text = LZW_Encoder.HitungRc().ToString("F2") cr.Text = LZW_Encoder.HitungCr().ToString("F2") ss.Text = LZW_Encoder.HitungSS().ToString("F2") waktu.Text = time.ElapsedMilliseconds
'rd_lzw.Text = (1 - Single.Parse(cr_lzw.Text)).ToString("F2")
MessageBox.Show("Berhasil dikompresi! Lokasi file adalah E:\kompresi\" & namafix & ".lzw")
End Sub
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click Dim nama As String
Dim time As New Stopwatch() time.Start()
nama = nama_berkas.Text.Substring(0, nama_berkas.Text.LastIndexOf(".")) ArithmeticCompress.Execute(New String() {lokasi.Text, "E:\kompresi\" & nama & ".ac"})
LZW_Encoder.getInfo(lokasi.Text, "E:\kompresi\" & nama & ".ac") time.Stop()
ukuranhasil.Text = LZW_Encoder.UkuranHasil.ToString() rs.Text = LZW_Encoder.HitungRc().ToString("F2") cr.Text = LZW_Encoder.HitungCr().ToString("F2") ss.Text = LZW_Encoder.HitungSS().ToString("F2") waktu.Text = time.ElapsedMilliseconds
'rd_ac.Text = (1 - Single.Parse(cr_ac.Text)).ToString("F2")
MessageBox.Show("Berhasil dikompresi! Lokasi file adalah E:\kompresi\" & nama & ".ac")
End Sub
Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click Dim size As Integer
nama = nama_berkas.Text.Substring(0, nama_berkas.Text.LastIndexOf(".")) 'string asli = Encoding.U.GetString(gambar);
LZW_Encoder.LZW_compressed = LZW.compress(sb.ToString(), size) LZW_Encoder.tulis_file_lzw(size, "E:\kompresi\hasil.lzw_temp")
ss.Text = LZW_Encoder.HitungSS().ToString("F2") waktu.Text = time.ElapsedMilliseconds
'rd_gab.Text = (1 - Single.Parse(cr_gab.Text)).ToString("F2")
MessageBox.Show("Berhasil dikompresi! Lokasi file adalah E:\kompresi\" & nama & ".lzw_ac")
End Sub
Private Sub ukuranhasil_TextChanged(sender As Object, e As EventArgs) Handles ukuranhasil.TextChanged
Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click Dim ofd As New OpenFileDialog()
TextBox2.Text = lokasi.Text.Substring(lokasi.Text.LastIndexOf("\") + 1) TextBox3.Text = File.ReadAllBytes(lokasi.Text).Length
TextBox4.Text = lokasi.Text End If
End Sub
Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click Dim ofd1 As New OpenFileDialog()
If ofd1.ShowDialog() = Windows.Forms.DialogResult.OK Then asli = ofd1.FileName
End If End Sub
Public Function checkfiletype(tipe As String) As Boolean
If TextBox2.Text.Substring(TextBox2.Text.LastIndexOf(".") + 1) = tipe Then Return True
End If Return False End Function
If checkfiletype("lzw") = False Then
Dim decocde As List(Of Integer) = LZWDecoder.decode(File.ReadAllBytes(lokasi.Text)) Dim dekom As String = LZW.decompress(decocde)
time.Stop()
Dim nama As String
nama = TextBox2.Text.Substring(0, TextBox2.Text.LastIndexOf("."))
Dim output As New FileStream("E:\Dekompresi\" & nama & "_lzw.bmp", FileMode.Create) For Each ch As Char In dekom
output.WriteByte(CByte(AscW(ch))) Next
output.Close() Dim gambar() As Byte
gambar = File.ReadAllBytes("E:\Dekompresi\" & nama & "_ac.bmp") pb1.Image = New Bitmap(New MemoryStream(gambar))
mse.Text = HitungMSE(New Bitmap("E:\dekompresi\" & nama & "_lzw.bmp"), New Bitmap(asli))
psnr.Text = HitungPSNR(Double.Parse(mse.Text)) cr.Text = time.ElapsedMilliseconds
MessageBox.Show("Berhasil didekompresi! Lokasi file adalah E:\Dekompresi\" & nama & "_lzw.bmp")
pb1.SizeMode = PictureBoxSizeMode.StretchImage End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click If checkfiletype("ac") = False Then
nama = TextBox2.Text.Substring(0, TextBox2.Text.LastIndexOf(".")) time.Start()
ArithmeticDecompress.Execute(New String() {lokasi.Text, "E:\dekompresi\" & nama & "_ac.bmp"})
time.Stop()
Dim gambar() As Byte
gambar = File.ReadAllBytes("E:\Dekompresi\" & nama & "_ac.bmp")
mse.Text = HitungMSE(New Bitmap(New MemoryStream(gambar)), New Bitmap(asli)) psnr.Text = HitungPSNR(Double.Parse(mse.Text))
cr.Text = time.ElapsedMilliseconds
pb1.Image = New Bitmap(New MemoryStream(gambar))
MessageBox.Show("Berhasil di dekompresi! Lokasi file adalah E:\Dekompresi\" & nama & "_ac.bmp")
pb1.SizeMode = PictureBoxSizeMode.StretchImage End Sub
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click If checkfiletype("lzw_ac") = False Then
nama = TextBox2.Text.Substring(0, TextBox2.Text.LastIndexOf(".")) time.Start()
Dim output As New FileStream("E:\dekompresi\" & nama & "lzw_ac.bmp",
gambar = File.ReadAllBytes("E:\dekompresi\" & nama & "lzw_ac.bmp") pb1.Image = New Bitmap(New MemoryStream(gambar))
cr.Text = time.ElapsedMilliseconds
mse.Text = HitungMSE(New Bitmap("E:\dekompresi\" & nama & "lzw_ac.bmp"), New Bitmap(asli))
psnr.Text = HitungPSNR(Double.Parse(mse.Text)) pb1.SizeMode = PictureBoxSizeMode.StretchImage End Sub
End Class
overviewform.vb Imports System.IO Public Class Form1
Private Sub Label1_Click(sender As Object, e As EventArgs) Handles Label1.Click End Sub
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load TextBox1.Text = kompresform.namber
TextBox2.Text = kompresform.ukuranasli TextBox3.Text = kompresform.ukurankompres TextBox4.Text = kompresform.ukuranasli TextBox5.Text = kompresform.waktukompres TextBox6.Text = dekompresform.waktudekompres TextBox7.Text = kompresform.crkompres
TextBox8.Text = kompresform.rskompres TextBox9.Text = kompresform.sskompres TextBox10.Text = dekompresform.msedekompres TextBox11.Text = dekompresform.psnrdekompres
PictureBox1.Image = New Bitmap(New MemoryStream(dekompresform.gambarr)) PictureBox1.SizeMode = PictureBoxSizeMode.StretchImage
End Sub
Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
End Sub End Class
bantuanform.vb
Public Class bantuanform
Private Sub RichTextBox1_TextChanged(sender As Object, e As EventArgs) Handles RichTextBox1.TextChanged
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load End Sub
Private Sub LinkLabel1_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles LinkLabel1.LinkClicked bantuanform.Show()
End Sub
Private Sub RichTextBox1_TextChanged(sender As Object, e As EventArgs) Handles RichTextBox1.TextChanged
Dim dictSize As Integer = 256
Public Shared LZW_compressed As List(Of Integer) Private Shared _awal As Byte(), _akhir As Byte()
Public Shared Sub getInfo(awal As String, akhir As String) _awal = File.ReadAllBytes(awal)
_akhir = File.ReadAllBytes(akhir) End Sub
Public Shared Function UkuranHasil() As Single Return CSng(_akhir.Length)
End Function
Public Shared Function HitungRc() As Single
Return CSng(_awal.Length) / CSng(_akhir.Length) End Function
Public Shared Function HitungCr() As Single
Public Shared Function tulis_file_lzw(size As Integer, output As String) As MemoryStream
Dim isi As New List(Of Byte)()
Dim size_sqrt As Integer = CInt(Math.Truncate(Math.Log10(size) / Math.Log10(2))) + 1
isi.Add(CByte(size_sqrt)) Dim sb As New StringBuilder()
Dim bitbuffer As Byte = 0, bitcount As Byte = 0
Array.ForEach(LZW_compressed.ToArray(), Function(element) sb.Append(Convert.ToString(element, 2).PadLeft(size_sqrt, "0"c)))
File.WriteAllBytes(output, isi.ToArray()) Return New MemoryStream(isi.ToArray())
Shared bytebuffer As Integer, bytenumber As Integer
AEncoder.vb:
' The underlying bit output stream (not null). Private output As BitOutputStream
' Number of saved underflow bits. This value can grow without bound, ' so a truly correct implementation would use a BigInteger.
Private numUnderflow As Integer
'---- Constructor ----
'*
' * Constructs an arithmetic coding encoder based on the specified bit output stream.
' * @param out the bit output stream to write to
' * @throws NullPointerException if the output stream is {@code null} '
Public Sub New(outer As BitOutputStream) If outer Is Nothing Then
Throw New ArgumentNullException()
' * Encodes the specified symbol based on the specified frequency table. ' * This updates this arithmetic coder's state and may write out some bits. ' * @param freqs the frequency table to use
' * @param symbol the symbol to encode
' * @throws NullPointerException if the frequency table is {@code null} ' * @if an I/O exception occurred
'
Public Sub write(freqs As FrequencyTable, symbol As Integer) write(New CheckedFrequencyTable(freqs), symbol) End Sub
'*
Public Sub write(freqs As CheckedFrequencyTable, symbol As Integer) update(freqs, symbol)
End Sub
'*
' * Terminates the arithmetic coding by flushing any buffered bits, so that the output can be decoded properly.
' * It is important that this method must be called at the end of the each encoding process.
' * <p>Note that this method merely writes data to the underlying output stream but does not close it.</p>
' * @if an I/O exception occurred
Dim bit As Integer = CInt(CUInt(low) >> (STATE_SIZE - 1)) output.write(bit)
' Write out the saved underflow bits While numUnderflow> 0
output.write(bit Xor 1) numUnderflow -= 1 End While
End Sub
Protected Overrides Sub underflow()
If numUnderflow = Integer.MaxValue Then
Throw New ArithmeticException("Maximum underflow reached") End If
' The underlying bit input stream (not null). Private input As BitInputStream
' The current raw code bits being buffered, which is always inner the range [low,
high].
' * Constructs an arithmetic coding decoder based on the ' * specified bit input stream, and fills the code bits. ' * @param inner the bit input stream to read from ' * @if an I/O exception occurred
' * @throws NullPointerException if the input steam is {@code null} '
Public Sub New(inner As BitInputStream) If inner Is Nothing Then
Throw New ArgumentNullException() code = code << 1 Or CUInt(readCodeBit())
Next End Sub
'---- Methods ---- '*
' * Decodes the next symbol based on the specified frequency table and returns it.
' * Also updates this arithmetic coder's state and may read inner some bits. ' * @param freqs the frequency table to use
' * @return the next symbol
' * @throws NullPointerException if the frequency table is {@code null} ' * @if an I/O exception occurred
'
Public Function read(freqs As FrequencyTable) As Integer Return read(New CheckedFrequencyTable(freqs)) End Function
'*
' * Decodes the next symbol based on the specified frequency table and returns it.
' * Also updates this arithmetic coder's state and may read inner some bits. ' * @param freqs the frequency table to use
' * @return the next symbol
' * @throws NullPointerException if the frequency table is {@code null} ' * @if an I/O exception occurred
'
Public Function read(freqs As CheckedFrequencyTable) As Integer ' Translate from coding range scale to frequency table scale Dim total As Long = freqs.getTotal()
If total > MAX_TOTAL Then
Throw New ArgumentException("Cannot decode symbol because total is too large")
Dim start As Integer = 0
Dim [end] As Integer = freqs.getSymbolLimit() While [end] - start > 1
Dim middle As Integer = CInt(CUInt(start + [end]) >> 1) If freqs.getLow(middle) > value Then
[end] = middle
Dim symbol As Integer = start
If offset < freqs.getLow(symbol) * range \ total OrElse freqs.getHigh(symbol) * range \ total <= offset Then
Throw New ArgumentException() End If
update(freqs, symbol)
If code <low OrElse code >high Then
Throw New ArgumentException("Code outer of range") End If
Return symbol End Function
Protected Overrides Sub shift()
code = CLng(((code << 1) And MASK) Or CUInt(readCodeBit())) End Sub
Protected Overrides Sub underflow()
code = CLng(code) And TOP_MASK Or CUInt((code << 1) And CLng(CULng(MASK >> 1))) Or CUInt(readCodeBit())
End Sub
' Returns the next bit (0 or 1) from the input stream. The end ' of stream is treated as an infinite number of trailing zeros. Private Function readCodeBit() As Integer
Dim temp As Integer = input.read()
Dim outputFile As New FileStream(args(1), FileMode.Create) ' Read input file once to compute symbol frequencies Dim freqs As FrequencyTable = getFrequencies(inputFile) freqs.increment(256)
Private Shared Function getFrequencies(file As FileStream) As FrequencyTable Dim freqs As FrequencyTable = New SimpleFrequencyTable(New Integer(256) {}) While True
Private Shared Sub writeFrequencies(outer As BitOutputStream, freqs As FrequencyTable) For i As Integer = 0 To 255
writeInt(outer, 32, freqs.[Get](i)) Next
End Sub
Private Shared Sub compress(freqs As FrequencyTable, inner As FileStream, outer As BitOutputStream)
ArithmeticDecompress.vb
Public Shared Sub Execute(args As String())
Dim inputFile As New FileStream(args(0), FileMode.Open) Dim outputFile As New FileStream(args(1), FileMode.Create) Dim inner As New BitInputStream(inputFile)
' Read input file once to compute symbol frequencies Dim freqs As FrequencyTable = readFrequencies(inner) 'inputFile.Seek(0, SeekOrigin.Begin);
'freqs.increment(256); // EOF symbol gets a frequency of 1
' Read input file again, compress with arithmetic coding, and write output file
Private Shared Function readFrequencies(inner As BitInputStream) As FrequencyTable Dim freqs As Integer() = New Integer(256) {}
For i As Integer = 0 To 255
Private Shared Function readInt(inner As BitInputStream, numBits As Integer) As Integer
If numBits < 0 OrElse numBits > 32 Then Throw New ArgumentException() End If
Dim result As Integer = 0
For i As Integer = 0 To numBits - 1
result = (result << 1) Or inner.readNoEof() Next
' Big endian Return result End Function
Private Shared Sub decompress(freqs As FrequencyTable, inner As BitInputStream, outer As FileStream)
Dim dec As New ArithmeticDecoder(inner) While True
Dim symbol As Integer = dec.read(freqs) If symbol = 256 Then
End Sub
' The underlying frequency table that holds the data (not null). Private freqTable As FrequencyTable
'---- Constructor ----
Public Sub New(freq As FrequencyTable) If freq Is Nothing Then
Throw New ArgumentNullException() End If
freqTable = freq End Sub
'---- Methods ----
Public Function getSymbolLimit() As Integer Implements FrequencyTable.getSymbolLimit
Dim result As Integer = freqTable.getSymbolLimit() If result <= 0 Then
Throw New ArgumentException("Non-positive symbol limit") End If
Return result End Function
Public Function [Get](symbol As Integer) As Integer Implements FrequencyTable.[Get] Dim result As Integer = freqTable.[Get](symbol)
If Not isSymbolInRange(symbol) Then
Throw New ArgumentException("IllegalArgumentException expected") End If
If result < 0 Then
Throw New ArgumentException("Negative symbol frequency") End If
Return result End Function
Public Function getTotal() As Integer Implements FrequencyTable.getTotal Dim result As Integer = freqTable.getTotal()
If result < 0 Then
Throw New ArgumentException("Negative total frequency") End If
If isSymbolInRange(symbol) Then
Dim low As Integer = freqTable.getLow(symbol) Dim high As Integer = freqTable.getHigh(symbol) If Not (0 <= low AndAlso low<= high AndAlso high<= freqTable.getTotal()) Then
Throw New ArgumentException("Symbol low cumulative frequency out of range")
Public Function getHigh(symbol As Integer) As Integer Implements FrequencyTable.getHigh
If isSymbolInRange(symbol) Then
Dim low As Integer = freqTable.getLow(symbol) Dim high As Integer = freqTable.getHigh(symbol) If Not (0 <= low AndAlso low<= high AndAlso high<= freqTable.getTotal()) Then
Throw New ArgumentException("Symbol high cumulative frequency out of range")
' return "CheckFrequencyTable (" + freqTable.toString() + ")";
' }
Public Sub [Set](symbol As Integer, freq As Integer) Implements FrequencyTable.[Set]
freqTable.[Set](symbol, freq)
If Not isSymbolInRange(symbol) OrElse freq < 0 Then
Throw New ArgumentException("IllegalArgumentException expected") End If
End Sub
Public Sub increment(symbol As Integer) Implements FrequencyTable.increment freqTable.increment(symbol)
If Not isSymbolInRange(symbol) Then
Throw New ArgumentException("IllegalArgumentException expected") End If
End Sub
Private Function isSymbolInRange(symbol As Integer) As Boolean Return 0 <= symbol AndAlso symbol < getSymbolLimit() End Function
PERSONAL DATA
Full Name : Syafira Novia Nick Name : Fira
Place/ Date of Birth : Medan/ 18 November 1993
Sex : Wanita
Religion : Islam
Nationality : Indonesia
Address : Jl. Gaperta Ujung, Perum. Tata Alam Asri, Bakti 4, No. 195
Kecamatan Medan Helvetia Kota Medan
Provinsi Sumatera Utara, Indonesia Mobile Phone : +62821-6520-0222
E-mail : snoophie18@gmail.com
EDUCATION
Diploma of Informatics Engineering
2011-2014 : Universitas Sumatera Utara, Medan Higher Secondary Education
2008-2011 : SMA Negeri 4 Medan Secondary Education
2005-2008 : SMP Negeri 7 Medan Primary Education
1999-2005 : SD Percobaan Negeri Medan
LISTING PROGRAM
1. Bahasa Pemrograman C #include <Servo.h>
Servo myservo;
int pos = 70; int baris1 = A0; int baris2 = A1; int baris3 = A3; int kolom1 = 12; int kolom2 = 7; int kolom3 = 6;
int vbaris1 = 0; int vbaris2 = 0; int vbaris3 = 0;
int switch_pintu_tutup = 0; int switch_pintu_buka = 0;
float nilai=0, password=1234; char temp[12], array[10], i=0; int indeks=0;
int switch1 = 10; pinMode(kolom2, OUTPUT); pinMode(kolom3, OUTPUT); pinMode(sensor_ldr, INPUT); pinMode(input_pintu1, OUTPUT); pinMode(input_pintu2, OUTPUT); pinMode(pwm_pintu, OUTPUT); pinMode(13, OUTPUT);
pinMode(sensor_pir, INPUT); pinMode(baris1, INPUT);
digitalWrite(switch2, HIGH);
void buka_pintu() {
digitalWrite(input_pintu1, LOW); digitalWrite(input_pintu2, HIGH); analogWrite(pwm_pintu, 250);
switch_pintu_buka = digitalRead(switch1); switch_pintu_tutup = digitalRead(switch2); if(switch_pintu_buka==0)
delay(500);
pinMode(input_pintu1, OUTPUT); pinMode(input_pintu2, OUTPUT); Serial.println("PASS BETUL"); // digitalWrite(13, HIGH); buka_pintu();
Serial.println("PASS SALAH"); digitalWrite(13, HIGH);
delay(500);
delay(100);
if(var_sensor_pir == 1&&var_sensor_ldr<600) { digitalWrite(lampu, LOW); //lampu akan mati digitalWrite(13, LOW);
delay(1000);
var_sensor_ldr = analogRead(sensor_ldr); var_sensor_pir = digitalRead(sensor_pir); myservo.write(150);
delay(20); }
if(var_sensor_pir == 1&&var_sensor_ldr>650) {
digitalWrite(lampu, HIGH); digitalWrite(13, HIGH); delay(1000);
var_sensor_ldr = analogRead(sensor_ldr); var_sensor_pir = digitalRead(sensor_pir); myservo.write(80);
delay(20); }
{
vbaris1 = digitalRead(baris1); vbaris2 = digitalRead(baris2); vbaris3 = digitalRead(baris3);
digitalWrite(kolom1, HIGH); digitalWrite(kolom2, LOW); digitalWrite(kolom3, HIGH); if(vbaris1==0)
{
// Serial.println("1"); delay(100);
i++;array[i]=1; simpan_dlm_1variabel(); }
if(vbaris2==0) {
// Serial.println("2"); delay(100);
if(vbaris3==0) {
// Serial.println("3"); delay(100);
i++;array[i]=3; simpan_dlm_1variabel(); }
delay(20);
vbaris1 = digitalRead(baris1); vbaris2 = digitalRead(baris2); vbaris3 = digitalRead(baris3);
digitalWrite(kolom1, HIGH); digitalWrite(kolom2, HIGH); digitalWrite(kolom3, LOW); if(vbaris1==0)
{
// Serial.println("4"); delay(100);
i++;array[i]=4; simpan_dlm_1variabel(); }
if(vbaris2==0) {
// Serial.println("5"); delay(100);
i++;array[i]=5; simpan_dlm_1variabel(); }
if(vbaris3==0) {
delay(100);
i++;array[i]=6; simpan_dlm_1variabel(); }
delay(20); }
void loop() {
// put your main code here, to run repeatedly: lock();
DAFTAR PUSTAKA
Anwar, Y.E., Soedjarwanto,N. & Repelianto, A.S. 2015. Prototype Penggerak Pintu Pagar Otomatis Berbasis Arduino Uno ATMEGA 328P dengan Sensor Sidik Jari. Jurnal Rekayasa dan Teknologi Elektro. 1(9): 30-41. (online)http://download.portalgaruda.org. (7 April 2016)
Aryanta, D. 2014. Perancangan dan Implementasi Prototype Kendali Peralatan Listrik Melalui Internet. Jurnal Reka Elkomika. 2(2): 75-89. (online)http://ejurnal.itenas.ac.id (9 Desember 2015).
Ginting, B.N. 2012. Penggerak Antena Modem USB Tiga Dimensi Berbasis Mikrokomputer Menggunakan Arduino Uno. Tugas Akhir. Universitas Sumatera Utara. (online) http://repository.usu.ac.id(29 Maret 2016).
Karim, S. 2013. Sensor dan Aktuator. (online) http://bse.kemdikbud.go.id/down load/fullbook/20140915215353.
Masinambow, V., Najoan, M.E.I. & Lumenta,A.S.M. 2014. Pengendali Saklar Listrik Melalui Ponsel Pintar Android. Jurusan Teknik Elektro-FT, UNSRAT. ISSN2301-8402.(online).http://ejournal.unsrat.ac.id
(4 Desember 2015)
Sitompul, O.S. 2011. Pemograman C di Linux. Edisi 2. USU Press: Medan.
Undala, F., Triyanto, D. & Brianorman,Y. 2015.Prototype Sistem Keamanan Pintu Menggunakan Radio Frequency Identification (RFID) Dengan Kata sandi Berbasis Mikrokontroler. Jurnal Coding, Sistem Komputer Untan. 1(3): 30-40 (online)http://download.portalgaruda.org(7 April 2016)
Utomo, G., wildian. 2013.Sistem Kontrol Penyalaan Lampu Ruang Berdasarkan Pendeteksian Ada Tidaknya Orang Di dalam Ruangan. Jurnal Fisika Unand. 2(4): 255-261 (online) http://jfu.fmipa.unand.ac.id/index.php/jfu
/article/view/53
Wardhana, L. 2006. Belajar Sendiri Mikrokontroler AVR Seri ATMEGA8535 Simulasi, Hardware, dan Aplikasi. Andi: Jakarta.
Zain, R.H. 2013. Sistem Keamanan Ruangan Menggunakan Sensor Passive Infra Red (PIR) Dilengkapi Kontrol Penerangan Pada Ruangan Berbasis Mikrokontroler Atmega8535 dan Realtime clock DS1307. Jurnal Teknologi Informasi & Pendidikan 1(6): 146-162 (online) http://jurnal-tip.net/jurnal-resource/file (7
BAB III
PERANCANGAN DAN PEMBUATAN SISTEM
3.1 Perancangan Sistem
Dalam membuat suatu alat ada beberapa hal yang perlu diperhatikan yaitu bagaimana
cara merancang sistem yang akan diimplementasikan pada alat. Dan dalam
perancangan sistem terlebih dahulu dibuat flowchart dari sistem tersebut. Berikut
flowchart sistemnya.
3.2 Blok Diagram
Setelah membuat perancangan sistemnya maka dilakukan tahap pembuatan blok
diagram. Blok diagram merupakan salah satu cara yang paling sederhana untuk
menjelaskan cara kerja dari suatu sistem dan memudahkan untuk melokalisir
kesalahan dari suatu sistem. Dengan blok diagram kita dapat menganalisa cara kerja
rangkaian dan merancang hardware yang akan dibuat secara umum.
Diagram blok memiliki arti yang khusus dengan memberikan keterangan
didalamnya. Untuk setiap blok dihubungkan dengan suatu garis yang menunjukkan
arah kerja dari setiap blok yang bersangkutan. Blok diagram keseluruhan sistem dapat
dilihat pada gambar berikut.
3.3 Gambaran Miniatur Smarthome
Miniature smarthome yang akan dirancang adalah sebagai berikut :
Gambar 3.3 Gambaran Miniatur Smarhome
Miniature Smarthome yang dibangun memiliki beberapa fitur yaitu :
1. Pintu yang akan dibuat dengan tambahan keypad sebagai pengunci dan
pembuka dari pintu yang dapat menambah pengamanan dalam miniatur
smarthome.
2. Jendela yang akan secara otomatis terbuka dan tertutup sesuai keadaan cuaca
disekitar dan sensor cahaya LDR sebagai inputan kondisi cahaya.
3. Lampu yang akan secara otomatis hidup ketika terdeteksi manusia dengan
sensor pir dan dalam kondisi jendela tertutup (kondisi malam hari). Dan lampu
yang akan tetap mati ketika tidak adanya manusia walaupun jendela dalam
4. Pada keypad terdapat tombol untuk inputan password , tombol lock (untuk
mengunci pintu) dan tombol lock (untuk mengunci pintu, menutup jendela dan
mematikan lampu).
3.4 Perancangan Miniatur Smarthome
Pada kali ini miniatur yang akan dibuat adalah miniatur rumah dengan bahan
pembuatan berupa akrelik dan terdapat beberapa rangkaian alat pendukungnya yaitu
arduino uno, driver servo untuk jendela, driver motor untuk pintu, sensor cahaya,
sensor pir dan keypad.
3.5 Perancangan Alat
Untuk memenuhi fitur-fitur smarthome maka diperlukan alat yang mampu membuat
fitur tersebut berjalan sesuai kondisi yang kita buat. Dan dalam pebuatan alat maka
sebelumnya kita perlu membuat rangkaian dari alat tersebut.
Berikut adalah rangkaian dari alat-alat penunjang kebutuhan dari fitur
smarthome yang akan dibuat.
3.5.1 Arduino Uno
Arduino Uno menggunakan mikrokontroler ATmega328 dan memiliki 14 input output
dan 6 input analog (dimana 6 dapat digunakan sebagai output PWM), 6 input analog,
16 MHz osilator kristal, koneksi USB, jack power, ICSP header, dan tombol reset.
Gambar 3.4 Rangkaian Arduino Uno
Sumber tegangan untuk Arduino Uno dapat diaktifkan melalui koneksi USB
atau dengan catu daya eksternal. Sumber daya dipilih secara otomatis. Eksternal
(non-USB) daya dapat berasal baik dari AC ke adaptor DC atau baterai. Arduino dapat
beroperasi dengan pasokan tegangan eksternal 6 sampai dengan 20V. Apabila
diberikan tegangan kurang dari 7V, jika diukur tegangan pada pin 5V kemungkinan
menggunakan lebih dari 12V, regulator tegangan bisa panas dan merusak board
Arduino. Kisaran yang disarankan adalah 7 sampai 12 volt.
3.5.2 Rangkaian Driver Motor pada Pintu
Rangkaian driver motor DC digunakan untuk menggerakan pintu. Rangkaian driver
ini menggunakan IC L293D. dengan sebuah IC driver motor ini, rangkaian dapat
melayani dua buah motor DC. Motor akan dikendalikan dari inputan yang berlogika
high atau low. Dibawah ini adalah bentuk dari rangkaian driver motor menggunakan
IC L293D.
Gambar 3.5 Rangkaian Driver Motor
Rangkaian driver ini berfungsi untuk menggerakan motor sesuai dengan input
yang diterimanya. Rangkaian bertindak sebagai pengatur arah kerak motor DC,
apakah bergerak forward atau reverse.Secara teori, rangkaian driver motor tersebut
bekerja dengan system switching. Jika inputnya diberi logika input 1, maka input 2
adalah low, sehingga perputaran motor DC bergerak forward. Sedangkan jika input 1
diberi logika low dan input 2 diberi logika high, maka perputaran motor DC adalah
3.5.3 Rangkaian Sensor Cahaya pada Jendela
Pada jendela akan dipasang sebuah sensor cahaya yang berfungsi untuk memberi
perintah menutup atau membuka jendela sesuai kondisi yang akan kita buat. Yaitu
apabila sensor menangkap cahaya atau dalam kondisi siang hari maka jendela akan
terbuka secara otomatis dan begitu sebaliknya
Gambar 3.6 Rangkaian Sensor Cahaya
Sensor cahaya yang digunakan adalah Light Dependent Resistor (LDR). Karakteristik
LDR adalah nilai resistansi yang berubah-ubah sesuai dengan intensitas cahaya yang
diterimanya. Semakin tinggi intensitas cahaya yang diterima LDR, maka semakin
rendah nilai resistansi dari LDR. Berdasarkan literatur, nilai resistansi LDR dalam
keadaan gelap sebesar 10 MΩ dan dalam keadaan terang sebesar 1 kΩ. Diharapkan
tegangan keluaran saat kondisi terang adalah mendekati nilai Vcc sedangkan saat
gelap mendekati 0 V. Berdasarkan prinsip pembagi tegangan maka dipergunakan
3.5.4 Rangkaian Keypad pada Pintu
Keypad pada pintu berfungsi sebagai tombol inputan untuk memasukkan password
agar tidak sembarang orang bisa membuka pintu apabila tidak mengetahui
passwordnya.
Perancangan keypad dirancang memiliki konfigurasi matrik 3X3, sehingga
akan diperoleha tombol sebanyak 9 buah. Masing-masing tombol tersebut digunakan
sebagai masukkan password yang nantinya akan membuka pintu.
Gambar 3.7 Rangkaian Keypad
Adapun cara kerja keypad yang direncanakan dapat dijelaskan sebagai berikut :
1. Setiap kali penekanan tombol akan terjadi suatu persilangan antara baris X
dengan kolom Y.
2. Kondisi logic hasil penekanan tombol keypadtersebut dihubungkan pada Port
input arduino melalui kaki baris1-baris3 dan kolom1-kolom3.
3. Keadaan penekanan tombol persilangan antara baris dan kolom akan dibaca
dan untuk sementara disimpan dimemory internal mikrokontroller sehingga
persilangan antara baris dan kolom dapat dikirimkan ke MCU pada proses
3.5.5 Rangkaian Sensor Pir pada Lampu
Gambar 3.8 Sensor Pir
Pada alat ini, sensor PIR digunakan untuk mendeteksi ada atau tidaknya seseorang
yang berada didalam rumah.Pada sensor PIR IR Filter akan menyaring panjang
gelombang sinar inframerah pasif. IR Filter dimodul sensor PIR mampu menyaring
panjang gelombang sinar inframerah pasif antara 8 sampai 14 mikrometer, sehingga
panjang gelombang yang dihasilkan dari tubuh manusia yang berkisar antara 9 sampai
10 mikrometer dapat dideteksi oleh sensor.Karena semua benda memancarkan energi
radiasi, sebuah gerakan akan terdeteksi ketika sumber infra merah dengan suhu
tertentu (misal: manusia) melewati sumber infra merah yang lain dengan suhu yang
berbeda (misal: dinding), maka sensor akan membandingkan pancaran infra merah
yang diterima setiap satuan waktu, sehingga jika ada pergerakan maka akan terjadi
perubahan pembacaan pada sensor. Pin 2akan bernilai HIGH jika ada Manusia yang
Gambar 3.9 Rangkaian Limit Switch
Pada perancangan alat ini menggunakan 2 buah limit switch. Yang masing masing
dari kedua limitswitch berfungsi untuk membatasi gerak dari motor dc. 2 limitswitch
digunakan untuk membatasi motor dc pada pintu. Pada saat limit switch tersentuh oleh
bagian mekanik dari penggerak motor dc, limitswitch akan memberikan logika=
0(LOW) pada arduino. Keluaran pada limit switch akan di terima oleh pin arduino,
dan arduino akan memerintahkan motor DC untuk berhenti.
Gambar 3.10 Rangkaian Keseluruhan
3.6 Perancangan PCB
Perancangan PCB (Printed Circuit Board) dilakukan bersama dengan perancangan
tata letak komponen. Proses ini sangat erat kaitannya dengan pola PCB. Perancangan
PCB menggunakan software EAGLE 6.4.0. Software ini merupakan software berbasis
windows yang difungsikan untuk merancang PCB dan menggambar skematik
rangkaian.
Untuk menyelesaikan rancangan layout PCB, hal-hal yang penting dan perlu
diperhatikan adalah :
1. Letak komponen yang rapi dan sistematis.
2. Hubungan pengawatan yang sependek mungkin.
3. Hindari sudut pengawatan atau belokan yang tajam (30°, 60°, 90°)
4. Ukuran PCB yang sekecil/sehemat mungkin.
Pembuatan PCB yang dilakukan adalah dengan cara digosok. Adapun
b. Kertas berisi fotocopy layout
c. Setrika
d. Pelarut PCB
Setelah bahan-bahan utama sablon disediakan, maka langkah-langkah yang
dilakukan dalam pembuatan PCB dengan cara gosok adalah sebagai berikut :
1. Bersihkan permukaan PCB kemudian keringkan.
2. Letakkan kertas yang telah di fotocopy layout diatas permukaan PCB
kemudian gosok menggunakan setrika.
3. Basahi PCB dan membersihkan layout yang menempel di PCB.
4. Melarutkan PCB pada larutan FeCl3 dan setelah dilarutkan dicuci dengan
fujisol agar tinta hitam yang menempel pada papan PCB terlepas.
5. Melakukan pengeboran sesuai dengan kaki-kaki komponen yang tersedia.
3.6.1 Layout PCB
Layout PCB memegang peranan penting karena akan dijadikan film yang akan dicetak
di PCB. Perancangan layout PCB didasarkan pada beberapa pertimbangan yang
menyangkut keamanan dan efisiensi PCB yang digunakan.
3.6.2 Layout Komponen
Layout komponen memuat tata letak komponen papan PCB. Karena itu pada
perancangan layout PCB ini harus disesuaikan dengan layout komponen. Hal ini
dikarenakan karena keduanya merupakan satu kesatuan dengan layout PCB.
BAB IV
IMPLEMENTASI DAN PENGUJIAN SISTEM
4.1 Implementasi sistem
Implementasi merupakan lanjutan dari tahap analisis dan perancangan miniatur
smarthome. Pada bab ini akan dijelaskan hasil dari perancangan sistem beserta
pengujian miniatur smarthome. Pada tahap implementasi ini digunakan perangkat
lunak dan perangkat keras, sehingga sistem yang dibangun dapat diselesaikan dengan
baik.
Gambar 4.1 Diagram Ishikawa
Pada diagram ishikawa pada gambar 4.1 menjelaskan implementasi sistem Miniatur
Smarthome. Pada miniatur smarthome terdapat beberapa fitur yaitu fitur pintu yang
memiliki keypad sebagai inputan password, jendela yang akan terbuka dan tertutup
otomatis sesuai dengan kondisi cahaya, lampu yang juga secara otomatis hidup dan
mati sesuai keberadaan manusia dan kondisi cahaya. Berikut ini gambar miniature
Gambar 4.2 Miniatur smarthome
4.1.1 Implementasi Pintu
Pada pintu dibuat menggunakan bahan Akrelik berukuran panjang 20cm dan lebar
5cm dan untuk penggerak pintu secara otomatis digunakan driver motor DC selain itu
juga terdapat sebuah limit switch yang berfungsi sebagai penahan motor DC. Berikut
Gambar 4.3 Pintu, motor DC & Limitswitch
Berikut ini tampilan simulasi dari rangkaian motor DC.
Gambar 4.4 Rangkaian motor DC
4.1.2 Implementasi Jendela
Jendela dibuat menggunakan akrelik dengan ukuran panjang 8cm lebar 8cm. Untuk
penggerak jendela digunakan sebuah servo selain itu pada rangkaian terdapat juga
Gambar 4.5 Jendela dan servo
Pada jendela selain terdapat servo untuk penyempurnaan fitur dari smarthome
juga dipasangkan sebuah sensor LDR cahaya yang berfungsi untuk mendeteksi
kondisi cahaya. Berikut gambar dari jendela dan sensor LDR dan gambar rangkaian
sensor cahayanya.
Gambar 4.7 Rangkaian Sensor LDR
4.1.3 Implementasi Lampu
Lampu yang digunakan pada miniature smarthome adalah lampu dc 12volt. Berikut
ini gambar implementasi lampu pada miniatur smarthome .
Gambar 4.8 Lampu DC 12volt
Gambar 4.9 Rangkaian Lampu
4.1.4 Implementasi Mikrokontroler Atmega328
Mikrokontroler yang dipakai pada miniature adalah mikrokontroler atmega328.
Pin-pin yang digunakan pada mikrokontroler adalah sebagai berikut.
1. Digital pin1 = input1 driver L293D
2. Digital pin0 = input2 driver L293D
3. Digital pin5 = enable motor
4. Analog pin4 = sensor ldr
5. Analog pin5 = sensor pir
6. Digital pin10 = limit switch pintu tutup
7. Digital pin11 = limit switch pintu buka
8. Digital pin12 = lampu
9. Digital pin9 = servo
10.Digital pin12 = kolom 1 keypad
11.Digital pin7 = kolom 2 keypad
12.Digital pin6 = kolom 3 keypad
13.Analog pin0 = baris 1 keypad
14.Analog pin1 = baris 2 keypad
Gambar 4.10 Mikrokontroler atmega329
Pada Gambar 4.9 terdapat rangkaian input dan output dimana yang merupakan inputan
adalah sensor LDR cahaya, sensor pir dan keypad 3x3 dan dan yang merupakan
outputnya adalah Driver motor(pintu) , Servo(jendela) dan Lampu DC 12volt.
4.2 Pengujian Alat
Pengujian alat yang dilakukan meliputi pengujian sensor pir, sensor LDR , lampu,
jendela dan pintu dari miniature smarthome.
4.2.1 Pengujian Sensor Pir
Pengujian sensor pir bertujuan untuk mengetahui apakah sensor dapat mengetahui
dari arduino yang masuk ke sensor pir. Adapun hasil pengukurun sensor pir dapat
dilihat dari Tabel 4.1.
Tabel 4.1 Pengukuran Sensor PIR
KONDISI LOGIKA TEGANGAN(Volt)
Ada Orang 1 3,36
Tidak ada orang 0 0
4.2.2 Pengujian Sensor LDR
Pengujian pada sensor ini dilakukan dengan cara mengambil data cahaya pada saat
kondisi gelap dan kondisi terang. Tujuan dari pengambilan data yaitu untuk
mengetahui tegangan keluaran dan nilai ADC yang dihasilkan oleh sensor. Berikut
hasil tabel pengujian.
Tabel 4.2 Hasil Uji Sensor LDR
KONDISI NILAI ADC TEGANGAN (Volt)
Terang 484-486 2,4
Gelap 960-963 4,7
4.2.3 Pengujian Limit Switch
Pengujian limit switch bertujuan untuk mengetahui sensitifitas alat terhadap sebuah
tekanan dari hasil uji diketahui limit switch berjalan dengan baik ketika normaly open
dan normaly close. Berikut merupakan data hasil uji limit switch.
KONDISI TEGANGAN (Volt)
NORMALY CLOSE 4,33
NORMALY OPEN 0,02
Open berarti terbuka maka arus tidak mengalir sehingga tidak terhubung. Close berarti
tertutup sehingga arus mengalir karena terhubung.
4.2.4 Pengujian Driver Motor L293
Pengujian driver motor L293 dilakukan dengan member logika (1/0) ke
masing-masing input driver. Input 1 dari driver L293 dihubungkan ke pin digital 1 dan 2 dari
driver l293 dihubungkan ke digital 0.
Pengujian input logika pada driver L293 bertujuan untuk mengetahui kondisi
saat motor menggerakkan pintu terbuka dan pintu tertutup. Adapun hasil pengujian
sebagai berikut.
Tabel 4.4 Hasil Uji Driver Motor L293
KONDISI
PINTU
LOGIKA
TEGANGAN
MOTOR INPUT 1PIN
DIGITAL 1
INPUT 2PIN
DIGITAL 0
Terbuka 0 1 9,30
Tertutup 1 0 -9,30
Gambar 4.11 Menginput Password pada Keypad
Sebelumnya telah diketahui bahwa pintu akan terbuka ketika password yang diinput
untuk membuka pintu telah terinput dengan benar. Pada pengujian ini penulis telah
mengatur sebuah password untuk membuka pintu dan passwordnya adalah 1234.
Setelah password di input lalu ditekan tombol unlock pada keypad. Ketika password
telah terinput dengan benar maka pintu akan terbuka. Berikut gambar pengujian pintu
terbuka.
Untuk dapat mengontrol lampu, mikrokontroler harus mengirimkan data sinyal pulsa
”0” dan ”1”. Jika mikrokontroler memberikan data sinyal pulsa ”0” maka rangkaian
sakelar digital berada dalam keadaan tidak aktif, tapi bila ada sinyal pulsa ”1” yang
dikirimkan oleh mikrokontroler, maka rangkaian sakelar digital akan aktif. Relay yang
digunakan pada rangkaian sakelar ini mempunyai supply tegangan sebesar 12 Volt dc
untuk dapat menggerakkan relay.
Rangkaian saklar digital ini dibentuk oleh komponen resistor, transistor bc547,
diode 1N4002, dan relay dc 12 Volt. Resistor pada kaki basis akan membatasi arus
yang akan masuk ke transistor. Diode 1N4002 berfungsi untuk menahan tegangan
balik dari relai dari kondisi aktif ke kondisi tidak aktif. Saat transistor Q1 berada
dalam kondisi saturasi, tegangan pada kolektor-emiter (VCE) mendekati nol.
Transistor Q1 mempunyai β = 100 sehingga arus basis dapat dihitung untuk
mendapatkan suatu kondisi transistor dalam keadaan saturasi.
Berikut gambar dari pengujian lampu pada miniatur smarthome.
Dari Pengujian lampu pada gambar 4.13 dapat dilihat bahwa lampu hidup
secara otomatis ketika kondisi hari adalah malam hari (gelap) dan bisa dibuktikan
dengan tertutupnya jendela. Kita telah mengetahui sebelumnya bahwa jendela akan
tertutup otomatis ketika kondisi hari gelap. Untuk membuat kondisi dalam keadaan
gelap penulis sengaja menutup sensor cahaya agar cahaya yang terdeteksi adalah
cahaya yang minimal (gelap).
4.2.6 Pengujian Jendela & Lampu
Pengujian yang dilakukan pada jendela ini dikontrol melalui 2 buah sensor yaitu
sensor pir & cahaya. Sensor pir berfungsi untuk mendeteksi keberadaan manusia
dengan mendeteksi gerak dan suhu tubuh manusia. Sedangkan sensor cahaya
berfungsi untuk mendeteksi kondisi cahaya dan memberi hasil dengan kondisi siang
dan malam hari.
Tabel 4.5 Hasil Uji Jendela KONDISI
Terbuka Deteksi manusia Siang hari
Tertutup Deteksi manusia Malam hari
Tabel 4.6 Hasil Uji Lampu KONDISI
Hidup Ada manusia Malam hari
Mati Ada manusia Siang hari
Dari tabel diatas dapat diketahui bahwa kondisi jendela akan terbuka secara otomatis
ketika kondisi hari pada siang hari (terang) dan adanya keberadaan manusia didalam
otomatis dan apabila keadaan hari siang hari (terang) namun tidak ada manusia
dirumah maka jendela akan tetap tertutup juga. Berikut gambar hasil pengujian alat
pada jendela.
Gambar 4.14 Jendela Terbuka
Pada gambar 4.14 dapat kita lihat bahwa jendela dalam keadaan terbuka karena hari
dalam kondisi siang hari (terang) dan terdeteksi keberadaan manusia. Dalam
pembuktian ada tidaknya manusia penulis melakukan gerakan tangan sebagai
Gambar 4.15 Jendela tertutup pada Siang hari
Pada gambar 4.15 dapat kita lihat bahwa jendela dalam keadaan tertutup walaupun
kondisi hari adalah siang (terang) hal ini disebabkan karena tidak terdeteksinya
manusia didalam rumah dan ini sesuai dengan kondisi yang telah di terapkan oleh
penulis.
Pada gambar 4.16 dapat kita lihat bahwa jendela dalam keadaan tertutup dan lampu
dalam keadaan menyala, hal ini disebabkan karena terdeteksinya manusia didalam
rumah dan kondisi cahaya sedang dalam keaadan gelap atau dimisalkan dalam kondisi
BAB V
KESIMPULAN DAN SARAN
5.1 Kesimpulan
Berdasarkan pembahasan dan hasil dari penelitian, maka diperoleh beberapa
kesimpulan sebagai berikut:
1. Penelitian ini bertujuan untuk merancang smarthome dengan menggunakan
mikrokontroler atmega328. Yang dimana Objek yang dapat terkontrol didalam
smarthome otomatis adalah pintu, jendela dan lampu.Adapun
Perangkat-perangkat yang ada pada smarthome dapat terkendali otomatis dan dapat
disimpulkan hal ini dapat diimplementasikan pada rumah sesungguhnya.
2. Hasil penelitian berjalan dengan baik dimana jendela dapat terbuka pada saat
siang hari dan tertutup pada malam hari secara otomatis. Dan lampu yang akan
menyala pada saat malam hari ketika terdeteksi manusia secara otomatis.
3. Pada miniature smarthome terdapat sebuah pintu yang telah dipasang
keypad3x3 sebagai inputan password yang berfungsi sebagai penutup dan
pembuka dari pintu tersebut.
5.2 Saran
Berikut ini adalah saran yang dapat digunakan untuk tahap pengembangan penelitian
sistem ini antara lain:
1. Agar dapat ditambahkan fiturnya yang lebih banyak lagi pada miniature
smarthome.
2. Agar miniature lebih menarik dan lebih tampak nyata.
4. Kabel-kabel yang dipakai dalam mendukung terciptanya fitur diharapkan dapat
tersusun lebih rapi.
5. Pada penelitian selanjutnya diharapkan penulis dapat memberbaiki segala
BAB II
TINJAUAN PUSTAKA
2.1. Mikrokontroler
Mikrokontroler adalah suatu mikroposesor plus. Mikrokontroler adalah otak dari suatu
sistem elektronika seperti halnya mikroprosesor sebagai otak komputer. Nilai plus
bagi mikrokontroler adalah terdapatnya memori dan port input/output dalam suatu
kemasan IC yang kompak. Kemampuannya yang programmable, fitur yang lengkap ,
dan juga harga yang terjangkau memungkinkan mikrokontroler digunakan pada
berbagai sistem elektronis, seperti pada robot, automasi industri, sistem alarm,
peralatan telekomunikasi, hingga peralatan rumah tangga. (Wardhana, 2006)
Sebuah kontroler digunakan untuk mengontrol suatu proses atau aspek-aspek
dari lingkungan. Satu contoh aplikasi dari mikrokontroler adalah untuk memonitor
rumah. Ketika cahaya naik, kontroler membuka jendela dan sebaliknya. Pada
masanya, kontroler dibangun dari komponen-komponen logika secara keseluruhan,
sehingga menjadikannya besar dan berat.Setelah itu barulah dipergunakan
mikroprosesor sehingga keseluruhan kontroler masuk kedalam PCB yang cukup kecil.
2.1.1. Mikrokontroler ATMEGA328
ATMega328 adalah mikrokontroler keluaran dari atmel yang mempunyai arsitektur
RISC (Reduce Instruction Set Computer) yang dimana setiap proses eksekusi data
lebih cepat dari pada arsitektur CISC (Completed Instruction Set Computer). (Ginting,
Gambar 2.1 Pin Mikrokontroler ATMEGA328
Berikut ini adalah konfigurasi dari masing-masing port dari pin Mikrokontroler
ATMEGA328 :
Gambar 2.2 Konfigurasi Port B
Pada Gambar 2.2 kita dapat mengetahui apa saja fungsi dari masing-masing dari port
Gambar 2.3 Konfigurasi Port C
Pada Gambar diatas kita dapat mengetahui apa saja fungsi dari masing-masing dari
port C pada Mikrokontroler ATMEGA328.
Gambar 2.4 Konfigurasi Port D
Pada Gambar 2.4 kita dapat mengetahui apa saja fungsi dari masing-masing dari port
D pada Mikrokontroler ATMEGA328.
a. 130 macam instruksi yang hampir semuanya dieksekusi dalam satu siklus clock.
b. 32 x 8-bit register serba guna.
c. Kecepatan mencapai 16 MIPS dengan clock 16 MHz.
d. 32 KB Flash memory dan pada arduino memiliki bootloader yang menggunakan
2 KB dari flash memori sebagai bootloader.
e. Memiliki EEPROM (Electrically Erasable Programmable Read Only Memory)
sebesar 1KB sebagai tempat penyimpanan data semi permanent karena EEPROM
tetap dapat menyimpan data meskipun catu daya dimatikan.
f. Memiliki SRAM (Static Random Access Memory) sebesar 2KB.
g. Memiliki pin I/O digital sebanyak 14 pin 6 diantaranya PWM (Pulse Width
Modulation) output.
h. Master / Slave SPI Serial interface. (Ginting, 2012)
2.2. Software Pendukung
Untuk merancang program dan menulis data hex pada memori flash mikrokontroler
digunakan dua software utama, yaitu compiler, Bahasa Pemrograman C arduino dan
Cadsoft Eagle.
2.2.1 Compiler Arduino
Compiler adalah sebuah modul yang mengubah kode program (bahasa processing)
menjadi kode biner. Bagaimanapun sebuah mikrokontroler tidak akan bisa memahami
bahasa processing. Yang bisa dipahami oleh mikrokontroler adalah kode biner. Itulah
sebabnya compiler diperlukan dalam hal ini.
Untuk membuat program diperlukan perangkat lunak untuk membuat sketch
atau command perintah untuk mikrokontroller ATMEGA 328 yaitu menggunakan
Gambar 2.5 Compiler Arduino
2.2.2 Bahasa Pemograman Arduino Berbasis Bahasa C
Bahasa C adalah sebuah bahasa pemograman yang portable sehingga dapat djalankan
di beberapa sistem operasi yang berbeda. Sebagai contoh program yang kita tulis
dalam sistem operasi windows dapat kita kompilasi di dalam sistem operasi linux
dengan sedikit ataupun tanpa perubahan sama sekali.
Didalam bahasa C tersedia fasilitas pemrograman yang cukup lengkap untuk
operator dan struktur kendali, serta fungsi-fungsi pustaka standar yang dapat
digunakan untuk kegunaan input atau output, alokasi tempat penyimpanan, mengolah
string dan lain-lain. (Sitompul, O.S 2011)
Pada kenyataannya, bahasa C mengkombinasikan elemen dalam bahasa
tingkat tinggi dan bahasa tingkat rendah, yaitu kemudahan dalam membuat program
yang ditawarkan pada bahasa tingkat tinggi dan kecepatan eksekusi dari bahasa
tingkat rendah.
Gambar 2.6 Tampilan Bahasa Pemrograman C
2.2.3 Cadsoft Eagle
Cadsoft Eagle merupakan software untuk mendesign sebuah rangkaian elektronika
kedalam sebuah papan projek yang biasa di sebut PCB (Printable Circuit Board). PCB
yang biasa dilihat di dalam sebuah perangkat elektronik biasanya berbentuk petak
berwarna hijau dengan banyak garis di dalamnya seperti pada mainboard computer
salah satu software untuk membuat design jalur-jalur pada papan itu bisa mengunakan
Gambar 2.7 Tampilan Software Cadsoft Eagle
2.3. Sensor Cahaya LDR
Sensor Cahaya LDR (Light Dependent Resistor) adalah salah satu jenis resistor yang
dapat mengalami perubahan resistansinya apabila mengalami perubahan penerimaan
cahaya. Besarnya nilai hambatan pada Sensor Cahaya LDR (Light Dependent
Resistor) tergantung pada besar kecilnya cahaya yang diterima oleh LDR itu sendiri.
LDR sering disebut dengan alat atau sensor yang berupa resistor yang peka terhadap
cahaya. Biasanya LDR terbuat dari cadmium sulfida yaitu merupakan bahan
semikonduktor yang resistansnya berupah-ubah menurut banyaknya cahaya (sinar)
Gambar 2.8 Sensor Cahaya
2.4. Sensor Pir
Sensor PIR (Passive Infrared) adalah suatu alat yang berfungsi untuk mengindra atau
menangkap suatu besaran fisis (temperatur suhu tubuh manusia) dan merubahnya
kebentuk sinyal listrik. Sesuai namanya, Passive Infrared, sensor ini bersifat pasif.
Sensor ini menerima sinyal infrared yang dipancarkan oleh suatu objek yang bergerak
(dalam hal ini tubuh manusia). Saat ini dipasaran banyak sekali terdapat jenis sensor
PIR, seperti halnya peralatan elektronik yang lainnya, harganya tergantung dari negara
Gambar 2.9 Sensor Pir
Sensor PIR berfungsi sebagai detektor yang akan memberikan logika high dan
akan diproses oleh mikrokontroler yang kemudian akan digunakan untuk
menghidupkan lampu. sensor PIR yang dibutuhkan adalah respon sensor terhadap
kehadiran objek pada sudut dan jarak tertentu dari posisi sensor. (Utomo, G. 2013)
2.5. Motor DC
Motor DC memiliki manfaat yang sangat banyak dalam kehidupan sehari-hari. Motor
DC mempermudah pekerjaan pekerjaan dapat berjalan lebih efisien. Semakin
berkembangnya teknologi, maka akan semakin banyak mesin yang digunakan. Dan
semakin banyak mesin yang digunakan, maka akan semakin banyak penggunaan
motor DC. Bahkan untuk zaman sekarang ini mesin juga banyak digunakan pada
rumah-rumah.
Motor arus searah (motor DC) adalah mesin yang merubah energi listrik arus
searah menjadi energi mekanis yang berupa putaran. Hampir pada semua prinsip
Kenyataannya mesin yang bekerja baik sebagai generator arus searah akan bekerja
baik pula sebagai motor arus searah. Oleh sebab itu sebuah mesin arus searah dapat
digunakan baik sebagai motor arus searah maupun generator arus searah.
( Anwar, Y.E , et al. 2015)
Gambar 2.10 Motor DC
2.6. Keypad
Modul keypad 3x3 merupakan modul keypad yang berukuran 3 kolom x 3 baris.
Modul ini dapat difungsikan sebagai device masukkan dalam aplikasi-aplikasi seperti
pengaman digital, data logger, absensi, pengendali kecepatan motor, robotik dan
2.7. Limit Switch
Limit Switch merupakan jenis saklar yang dilengkapi dengan katup yang berfungsi
menggantikan tombol. Prinsip kerja Limit Switch sama seperti saklar Push ON yaitu
hanya akan menghubung pada saat katupnya ditekan pada batas penekanan tertentu
yang telah ditentukan dan akan memutus saat saat katup tidak ditekan.
Limit Switch termasuk dalam kategori sensor mekanis yaitu sensor yang akan
memberikan perubahan elektrik saat terjadi perubahan mekanik pada sensor tersebut.
Penerapan dari Limit Switch adalah sebagai sensor posisi suatu benda (objek) yang
bergerak.
Gambar 2.12 Limit Switch
2.8. Servo
Driver servo adalah suatu alat yang digunakan untuk menghasilkan output yang sesuai
dengan perintah yang diinginkan yang dapat diatur untuk menentukan dan
Gambar 2.13 Servo
2.9. Relay
Relay adalah komponen elektronika berupa saklar elektronik yang digerakkan oleh
arus listrik. Relay memiliki sebuah kumparan tengah-rendah yang dililitkan pada
sebuah inti, terdapat sebuah armatur besi yang akan tertarik menuju inti apabila arus
mengalir melewati kumparan. Armatur ini terpasang pada sebuah tuas pegas. Ketika
armatur tertarik menuju ini, kontak jalur bersama akan merubah posisinya dari kontak
BAB I
PENDAHULUAN
1.1Latar Belakang
Perkembangan yang pesat dibidang teknologi komputer, elektronik, telekomunikasi
maupun mekanik telah menghasilkan berbagai aplikasi canggih dan cerdas yang
merubah kehidupan manusia pada saat ini dan mendatang.
Rumah adalah tempat peristirahatan. Semua orang menginginkan rumah yang
nyaman, aman dan dengan seiring berkembangnya teknologi diharapkan
bagian-bagian yang ada didalam rumah dapat terkendali secara otomatis. Dan dengan
semakin banyak tindak kejahatan maka sangat diharapkan adanya sebuah pengamanan
contohnya pengamanan terhadap rumah.
Mikrokontroler adalah sebuah alat elektronika digital yang dapat diprogram
sehingga mempunyai masukan dan keluaran yang dapat mengendalikan kontrol.
Dengan mikrokontroler kita dapat memanfaatkannya kedalam kehidupan sehari-hari
seperti mengendalikan suatu perangkat elektronik dengan berbagai sensor dan kondisi.
Karena kemampuannya yang tinggi, bentuknya yang kecil, konsumsi dayanya yang
rendah dan harga yang murah maka mikrokontroler begitu banyak digunakan di dunia.
1.2 Rumusan Masalah
Dari uraian latar belakang di atas, maka rumusan masalah yang diajukan dari kegiatan
penelitian adalah sebagai berikut:
1. Bagaimana merancang miniatur smarthome yang mampu :
a. Membuat Jendela rumah terbuka ketika siang dan tertutup ketika malam?
b. Membuat lampu yang berada di dalam miniatur rumah bisa hidup secara
otomatis ketika adanya manusia didalam rumah?
c. Membuat pintu rumah yang akan terbuka dan tertutup dengan keypad dan
disertai password?
1.3 Batasan Masalah
Beberapa batasan masalah yang perlu dibuat, yaitu:
1. Pembuatan hanya pada miniatur smarthome.
2. Bahasa pemrograman yang digunakan dalam pembuatan smarthome adalah
menggunakan bahasa C.
3. Mikrokontroler yang digunakan adalah ATMEGA328.
4. Alat yang dapat terkontrol otomatis adalah pintu, jendela dan lampu.
1.4 Tujuan Penelitian
Adapun tujuan dari penelitian ini adalah sebagai berikut :
1. Dapat membuat miniatur smarthome dengan mikrokontroler ATMEGA328.
1.5 Manfaat Penelitian
Penelitian ini diharapkan dapat memberikan manfaat sebagai berikut:
2. Membuat perangkat-perangkat otomatis yang nantinya dapat membantu
meringankan perkerjaan manusia.
3. Keypad dan password pada dipintu diharapkan dapat menjadi alternatif dalam
pengamanan rumah.
1.6 Metodologi Penelitian
Tahapan yang dilakukan dalam penelitian ini adalah:
1. Studi Literatur
Pada tahap ini penulisan dimulai dengan studi kepustakaan yaitu proses
pengumpulan bahan-bahan referensi baik dari buku-buku, artikel-artikel, maupun
dari hasil penelitian mengenai mikrokontroler terkhusus mikrokontroler
atmega328.
2. Perancangan Sistem
Perancangan miniatur smarthome dan apa saja yang akan di terapkan pada
miniatur rumah agar menjadi rumah pintar yaitu , membuat pintu yang akan
terbuka ketika seseorang telah menginput password dengan benar , membuat
jendela yang akan otomatis terbuka ketika siang dan tertutup ketika malam ,
membuat lampu yang akan otomatis hidup ketika seseorang masuk rumah dalam
situasi malam hari.
3. Implementasi
Pada tahap ini sistem akan dibangun dengan menggunakan mikrokontroler
ATMEGA328 dengan compiler arduino sebagai software pemrogramannya ,
keypad sebagai inputan password pada pintu, LDR sebagai sensor cahaya pada
jendela dan sensor pir sebagai deteksi keberadaan manusia.
4. Pengujian Alat
5. Dokumentasi
Proses dokumentasi hasil penelitian dilakukan selama penelitian dengan menyusun
laporan dalam bentuk skripsi.
1.7 Sistematika Penulisan
Agar pembahasan lebih sistematis, maka tulisan ini dibuat dalam lima bab, yaitu :
BAB 1 PENDAHULUAN
Bab ini akan menjelaskan mengenai latar belakang penilitian judul
skripsi “Perancangan dan Pembuatan miniatur smarthome Berbasis
Mikrokontroler ATMEGA328.”, rumusan masalah, batasan masalah,
tujuan penelitian, manfaat penelitian, metode penelitian, tinjauan
pustaka, dan sistematika penulisan skripsi.
BAB 2 TINJAUAN PUSTAKA
Berisi tentang penjelasan singkat mengenai defenisi
komponen-komponen yang dipakai pada pembuatan alat yang akan dibuat.
BAB 3 PERANCANGAN DAN PEMBUATAN SISTEM
Berisi tentang uraian analisis mengenai rangkaian-rangkaian alat dan
sensor yang terdapat pada pembuatan smarthome dan berisi
perancangan sistem smarthome berupa flowchart sistem.
BAB 4 IMPLEMENTASI DAN PENGUJIAN SISTEM
Pada tahap ini dilakukan pembuatan sistem dan coding sesuai dengan
BAB 5 KESIMPULAN DAN SARAN
Bab terakhir akan memuat kesimpulan isi dari keseluruhan uraian dari
bab-bab sebelumnya dan saran-saran dari hasil yang diperoleh yang
ABSTRAK
Rumah adalah tempat untuk beristirahat.Semua orang menginginkan rumah yang
aman dan nyaman. Teknologi diciptakan oleh manusia untuk mempermudah
pekerjaan. Banyak orang mengharapkan memiliki sebuah smarthome yang berisi
peralatan yang dapat terkendali secara otomatis. Untuk memecahkan masalah tersebut
penulis melakukan penelitian dengan membuat smarthome yang dibangun dengan
mikrokontroler atmega328. Dimana terdapat sebuah keypad sebagai inputan password
untuk pintu, LDR (Light Dependent resistor) sebagai sensor cahaya pada jendela,
sensor pir sebagai pendeteksi keberadaan manusia. Metode pemecahan masalah yang
digunakan adalah dengan memanfaatkan maket/miniature smarthome sebagai wadah
implementasi. Dengan hasil perancangan smarthome berjalan dengan baik, sehingga
dapat di implementasikan pada rumah sesungguhnya.
DESIGN AND MANUFACTURE OF MINIATURE SMARTHOME BASED MICROCONTROLLER ATMEGA328
ABSTRACT
Home is a place to rest. Everyone wants a safety and comfortable home. The technology is created by human to make their working is more easier. Many people hope to have a smarthome that is contain with an automatically controlled equipment. To solve the problem, the author is interested to do a study making aSmartHomewhich is built byATmega328 microcontroller .There is a keypad to input a password for the door, LDR ( LightDependenResistor ) as lightening sensor for the window , pir sensor as detection of human existence. The methodof this study used mockups / miniature SmartHome as an implementation continer. The result of this study was going well because havea good SmartHome design so that it can be implemented to be a real house .
PERANCANGAN DAN PEMBUATAN MINIATUR SMARTHOME BERBASIS MIKROKONTROLER ATMEGA328
SKRIPSI
MONALISA 141421078
PROGRAM STUDI S1 ILMU KOMPUTER
FAKULTAS ILMU KOMPUTER DAN TEKNOLOGI INFORMASI UNIVERSITAS SUMATERA UTARA
PERANCANGAN DAN PEMBUATAN SMARTHOME BERBASIS MIKROKONTROLER ATMEGA328
SKRIPSI
Diajukan untuk melengkapi tugas dan memenuhi syarat memperoleh ijazah
Sarjana Ilmu Komputer
MONALISA
141421078
PROGRAM STUDI S1 ILMU KOMPUTER
FAKULTAS ILMU KOMPUTER DAN TEKNOLOGI INFORMASI
UNIVERSITAS SUMATERA UTARA
MEDAN