Perancangan Dan Pembuatan Miniatur Smarthome Berbasis Mikrokontroler Atmega328

(1)

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 End Sub End Class kompressform.vb Imports System.IO Imports System.Text Public Class kompresform

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim gambar As Byte()

Dim namaberkas As String

Dim ofd As New OpenFileDialog() ofd.Filter = "BMP File|*.bmp"

Dim dr As DialogResult = ofd.ShowDialog() If dr = DialogResult.OK Then

lokasi.Text = ofd.FileName

namaberkas = lokasi.Text.Substring(lokasi.Text.LastIndexOf("\") + 1) nama_berkas.Text = namaberkas

gambar = File.ReadAllBytes(lokasi.Text) ukuran_berkas.Text = gambar.Length

pb1.Image = New Bitmap(New MemoryStream(gambar))

resolusi_berkas.Text = pb1.Image.Width & "X" & pb1.Image.Height TextBox5.Text = lokasi.Text

End If

pb1.SizeMode = PictureBoxSizeMode.StretchImage End Sub

Private Sub TextBox3_TextChanged(sender As Object, e As EventArgs) Handles ukuran_berkas.TextChanged


(2)

Dim namafix As String Dim size As Integer

Dim time As New Stopwatch() Dim sb As New StringBuilder()

Dim gambar As Byte() = File.ReadAllBytes(lokasi.Text) For Each bit As Byte In gambar

sb.Append(ChrW(bit)) Next

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

Dim time As New Stopwatch() Dim sb As New StringBuilder()

Dim gambar As Byte() = File.ReadAllBytes(lokasi.Text) For Each bit As Byte In gambar

sb.Append(ChrW(bit)) Next

Dim nama As String time.Start()

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")

ArithmeticCompress.Execute(New String() {"E:\kompresi\hasil.lzw_temp", "E:\kompresi\" & nama & ".lzw_ac"})


(3)

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

End Sub End Class

dekompresform.vb

Imports System.IO

Public Class dekompresform Dim asli As String

Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click Dim ofd As New OpenFileDialog()

ofd.InitialDirectory = "E:\kompresi" Dim dr As DialogResult

dr = ofd.ShowDialog()

If (dr = DialogResult.OK) Then lokasi.Text = ofd.FileName

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

Public Function HitungMSE(gb1 As Bitmap, gb2 As Bitmap) As Double Dim sum As Double

sum = 0

For i As Integer = 0 To gb1.Height - 1 For j As Integer = 0 To gb1.Width - 1

sum += Math.Pow(gb1.GetPixel(j, i).R - gb2.GetPixel(j, i).R, 2) sum += Math.Pow(gb1.GetPixel(j, i).G - gb2.GetPixel(j, i).G, 2) sum += Math.Pow(gb1.GetPixel(j, i).B - gb2.GetPixel(j, i).B, 2) Next

Next

Return sum / (gb1.Height * gb2.Width) End Function


(4)

If checkfiletype("lzw") = False Then

MessageBox.Show("Maaf, Tipe File Tidak cocok atau File belum dipilih!") Return

End If

Dim time As New Stopwatch() time.Start()

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

MessageBox.Show("Maaf, Tipe File Tidak cocok atau File belum dipilih!") Return

End If

Dim time As New Stopwatch() Dim nama As String

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

MessageBox.Show("Maaf, Tipe File Tidak cocok atau File belum dipilih!") Return

End If

Dim time As New Stopwatch() Dim nama As String

nama = TextBox2.Text.Substring(0, TextBox2.Text.LastIndexOf(".")) time.Start()


(5)

Dim output As New FileStream("E:\dekompresi\" & nama & "lzw_ac.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 & "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

End Sub End Class


(6)

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 End Sub End Class LZW.vb Imports System.Collections.Generic Imports System.IO Imports System.Text ''' <summary>

''' Description of LZW. ''' </summary>

Public NotInheritable Class LZW Private Sub New()

End Sub

'* Compress a string to a list of output symbols.

Public Shared Function compress(uncompressed As [String], ByRef size As Integer) As List(Of Integer)

' Build the dictionary. Dim dictSize As Integer = 256

Dim dictionary As New Dictionary(Of String, Integer)() For i As Integer = 0 To 255

dictionary.Add("" & ChrW(i), i) Next

Dim w As [String] = ""

Dim result As New List(Of Integer)()

For Each c As Char In uncompressed.ToCharArray() Dim wc As [String] = w & c

If dictionary.ContainsKey(wc) Then w = wc

Else

result.Add(dictionary(w)) ' Add wc to the dictionary. dictionary.Add(wc, dictSize) dictSize += 1

w = "" & c End If

Next

' Output the code for w. If Not w.Equals("") Then result.Add(dictionary(w)) End If

size = dictionary.Count Return result


(7)

Dim dictSize As Integer = 256

Dim dictionary As New Dictionary(Of Integer, String)() For i As Integer = 0 To 255

dictionary.Add(i, "" & ChrW(i)) Next

Dim w As [String] = "" & ChrW(CInt(compressed(0))) compressed.RemoveAt(0)

Dim result As New StringBuilder(w) For Each k As Integer In compressed Dim entry As [String]

If dictionary.ContainsKey(k) Then entry = dictionary(k)

ElseIf k = dictSize Then entry = w & w(0) Else

Throw New ArgumentException("Bad compressed k: " & k) End If

result.Append(entry)

' Add w+entry[0] to the dictionary. dictionary.Add(dictSize, w & entry(0)) dictSize += 1

w = entry Next Return result.ToString() End Function End Class LZWEncoder.vb Imports System.IO Imports System.Collections.Generic Imports System.Text ''' <summary>

''' Description of Tambahan. ''' </summary>

Public NotInheritable Class LZW_Encoder Private Sub New()

End Sub

'public static int angka_LZW;

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

Return CSng(_akhir.Length) / CSng(_awal.Length) * 100 End Function


(8)

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))) For Each ch As Char In sb.ToString()

bitbuffer <<= 1

bitbuffer = bitbuffer Or If(ch = "1"c, CByte(1), CByte(0)) bitcount += 1

If bitcount = 8 Then isi.Add(bitbuffer) bitbuffer = 0 bitcount = 0 End If

Next

If bitcount > 0 Then isi.Add(bitbuffer) End If

File.WriteAllBytes(output, isi.ToArray()) Return New MemoryStream(isi.ToArray()) End Function

End Class

LZWDecoder.vb

Imports System.Collections.Generic ''' <summary>

''' Description of LZWDecoder. ''' </summary>

Public NotInheritable Class LZWDecoder Private Sub New()

End Sub

Shared bytebuffer As Integer, bytenumber As Integer

Public Shared Function decode(file As Byte()) As List(Of Integer) Dim size As Integer = file(0)

Dim i As Integer

Dim hasil As New List(Of Integer)() bytebuffer = 0

bytenumber = 0

For i = 1 To file.Length - 2 bytebuffer <<= 8

bytebuffer = bytebuffer Or file(i) bytenumber += 8

While bytenumber >= size

Dim hasil1 As Integer = bytebuffer >> (bytenumber - size) hasil.Add(hasil1)

Dim geser As Integer = (1 << (bytenumber - size)) - 1 bytebuffer = bytebuffer And geser

bytenumber -= size End While

Next

bytebuffer <<= (size - bytenumber) bytebuffer = bytebuffer Or file(i) hasil.Add(bytebuffer)


(9)

AEncoder.vb:

Imports System.IO ''' <summary>

''' Description of AEncoder. ''' </summary>

Public Class AEncoder Inherits ACoderBase '---- Fields ----

' 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() End If

output = outer numUnderflow = 0 End Sub

'---- Methods ---- '*

' * 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

'*

' * Encodes the specified symbol based on the specified frequency table. ' * Also updates this arithmetic coder's state and may write out some bits.


(10)

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 '

Public Sub finish() output.write(1) End Sub

Protected Overrides Sub shift()

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

numUnderflow += 1 End Sub

End Class

ArithmeticDecoder.vb

''' <summary>

''' Description of ArithmeticDecoder. ''' </summary>

Public Class ArithmeticDecoder Inherits ACoderBase '---- Fields ----

' 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].


(11)

' * 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() End If

input = inner code = 0

For i As Integer = 0 To STATE_SIZE - 1

'System.Diagnostics.Debug.WriteLine(code); 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")

End If

Dim range As Long = high - low + 1 Dim offset As Long = code - low

Dim value As Long = ((offset + 1) * total - 1) \ range If value * range \ total > offset Then

Throw New ArgumentException() End If


(12)

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 Else

start = middle End If

End While

If start + 1 <> [end] Then

Throw New ArgumentException() End If

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()

'System.Text.StringBuilder sb = new System.Text.StringBuilder(); 'sb.Append(temp);

'System.Diagnostics.Debug.Write(sb.ToString()); If temp = -1 Then

temp = 0 End If Return temp End Function End Class ArithmeticCompress.vb Imports System.IO ''' <summary>

''' Description of ArithmeticCompresscs. ''' </summary>

Public NotInheritable Class ArithmeticCompress Private Sub New()


(13)

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)

' EOF symbol gets a frequency of 1

' Read input file again, compress with arithmetic coding, and write output file Dim outer As New BitOutputStream(outputFile)

writeFrequencies(outer, freqs) compress(freqs, inputFile, outer) inputFile.Close()

End Sub

Private Shared Function getFrequencies(file As FileStream) As FrequencyTable Dim freqs As FrequencyTable = New SimpleFrequencyTable(New Integer(256) {}) While True

Dim b As Integer = file.ReadByte() If b = -1 Then

Exit While End If freqs.increment(b) End While Return freqs End Function

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)

Dim enc As New AEncoder(outer) inner.Seek(0, SeekOrigin.Begin) While True

Dim symbol As Integer = inner.ReadByte() 'System.Diagnostics.Debug.WriteLine(symbol); If symbol = -1 Then

Exit While End If enc.write(freqs, symbol) End While enc.write(freqs, 256) ' EOF enc.finish() outer.close()

' Flush remaining code bits End Sub

Private Shared Sub writeInt(outer As BitOutputStream, numBits As Integer, value As Integer)

If numBits < 0 OrElse numBits > 32 Then Throw New ArgumentException() End If

For i As Integer = numBits - 1 To 0 Step -1 outer.write(CInt(CUInt(value) >> i) And 1) Next


(14)

ArithmeticDecompress.vb

Imports System.IO ''' <summary>

''' Description of ArithmeticDecompress. ''' </summary>

Public NotInheritable Class ArithmeticDecompress Private Sub New()

End Sub

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

'writeFrequencies(outer, freqs); decompress(freqs, inner, outputFile) inputFile.Close()

'outputFile.Close() End Sub

Private Shared Function readFrequencies(inner As BitInputStream) As FrequencyTable Dim freqs As Integer() = New Integer(256) {}

For i As Integer = 0 To 255

'System.Diagnostics.Debug.WriteLine(freqs[i].ToString("X")); freqs(i) = readInt(inner, 32)

Next

freqs(256) = 1 ' EOF symbol

Return New SimpleFrequencyTable(freqs) End Function

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

' EOF symbol Exit While


(15)

End Sub

CheckFrequencyTable.vb

Imports System.IO

Imports System.Collections.Generic ''' <summary>

''' Description of CheckedFrequencyTable. ''' </summary>

Public Class CheckedFrequencyTable Implements FrequencyTable '---- Fields ----

' 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


(16)

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")

End If Return low

Else

freqTable.getLow(symbol)

Throw New ArgumentException("IllegalArgumentException expected") End If

End Function

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")

End If Return high

Else

freqTable.getHigh(symbol)

Throw New ArgumentException("IllegalArgumentException expected") End If

End Function

'public String toString() {

' 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


(17)

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

Programming PHP, VB.NET Database MySQL IDE Software

Adobe Dreamweaver,Microsoft Visual Studio COMPUTER SKILL


(18)

(19)

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 input_pintu1 = 1; int input_pintu2 = 0; int pwm_pintu = 5; int sensor_ldr = A4; int var_sensor_ldr = 0; int sensor_pir = A5; int var_sensor_pir = 0;


(20)

int switch1 = 10; int switch2 = 11; int lampu = A2;

void setup() {

myservo.attach(9);

pinMode(kolom1, OUTPUT); 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(baris1, HIGH); pinMode(baris2, INPUT); digitalWrite(baris2, HIGH); pinMode(baris3, INPUT); digitalWrite(baris3, HIGH); pinMode(lampu, OUTPUT); pinMode(switch1, INPUT); digitalWrite(switch1, HIGH); pinMode(switch2, INPUT);

digitalWrite(switch2, HIGH);

tutup_jendela1(); //Serial.begin(9600); }


(21)

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)

{

analogWrite(pwm_pintu, 0); }

// delay(1000); }

void tutup_pintu() {

digitalWrite(input_pintu1, HIGH); digitalWrite(input_pintu2, LOW); analogWrite(pwm_pintu, 250);

switch_pintu_buka = digitalRead(switch1); switch_pintu_tutup = digitalRead(switch2); if((switch_pintu_tutup==0))

{

analogWrite(pwm_pintu, 0); }

// delay(1000); }

void tutup_jendela1() {

myservo.write(80); delay(100);


(22)

}

void buka_jendela1() {

myservo.write(130); delay(4000); }

void lock() {

while (indeks==0) {

digitalWrite(kolom1, HIGH); digitalWrite(kolom2, HIGH); digitalWrite(kolom3, LOW); vbaris1 = digitalRead(baris1); vbaris2 = digitalRead(baris2); vbaris3 = digitalRead(baris3); delay(30);

if (vbaris1 == 0) {

digitalWrite(13, HIGH); delay(500);

digitalWrite(13, LOW); delay(100);

pinMode(input_pintu1, OUTPUT); pinMode(input_pintu2, OUTPUT); tutup_pintu();

indeks=1; delay(1000); }

if (vbaris3 == 0) {


(23)

delay(500);

digitalWrite(13, LOW); delay(100);

pinMode(input_pintu1, OUTPUT); pinMode(input_pintu2, OUTPUT); tutup_pintu();

tutup_jendela1();

digitalWrite(lampu, LOW); indeks=1;

delay(1000); }

} }

void enter() {

if (nilai==password {

i=0; nilai=0;

pinMode(input_pintu1, OUTPUT); pinMode(input_pintu2, OUTPUT); Serial.println("PASS BETUL"); // digitalWrite(13, HIGH); buka_pintu();

// deteksi(); indeks=0;

} else

{

Serial.println("PASS SALAH"); digitalWrite(13, HIGH);

delay(500);


(24)

delay(100);

digitalWrite(13, HIGH); delay(500);

digitalWrite(13, LOW); delay(100);

digitalWrite(13, HIGH); delay(500);

digitalWrite(13, LOW); delay(100);

digitalWrite(13, HIGH); delay(500);

digitalWrite(13, LOW); delay(100);

i=0; nilai=0; indeks=1; }

}

void simpan_dlm_1variabel() {

if (i==1){nilai=array[i];} if (i>=2 && i<=8)

{

nilai=(nilai*10)+array[i]; }

}

void scan() {

var_sensor_ldr = analogRead(sensor_ldr); var_sensor_pir = digitalRead(sensor_pir);


(25)

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, LOW); digitalWrite(kolom2, HIGH); digitalWrite(kolom3, HIGH); if(vbaris1==0)

{

// Serial.println("#"); delay(100);

}


(26)

{

enter();delay(100); }

if(vbaris3==0) {

delay(100); }

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);

i++;array[i]=2; simpan_dlm_1variabel(); }


(27)

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) {


(28)

delay(100);

i++;array[i]=6; simpan_dlm_1variabel(); }

delay(20); }

void loop() {

// put your main code here, to run repeatedly: lock();

scan(); }


(29)

(30)

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


(31)

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.


(32)

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.


(33)

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 kondisi tertutup.


(34)

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. Arduino


(35)

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 akan kurang dari 5V dan dapat menyebabkan board arduino tidak stabil. Jika


(36)

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 reverse.


(37)

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


(38)

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 penampilan dan pengolahan karakteristik data yang diminta.


(39)

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 terdeteksi didepan sensor PIR, dan bernialai LOW jika tidak ada yang terdeteksi.


(40)

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.


(41)

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 bahan-bahan utamanya yang dibutuhkan adalah :


(42)

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.


(43)

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.


(44)

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 smarthome nya.


(45)

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 tampilan dari pintu, limitswitch dan driver motor nya yang tampak dari dalam.


(46)

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 sebuah limitswitch yang berfungsi sebagai penahan motor servo. Berikut gambar


(47)

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.


(48)

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


(49)

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 15.Analog pin3 = baris 3 keypad


(50)

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 pergerakan manusia. Dalam pengujian ini sensor pir dihubungkan pada PIN A5


(51)

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.


(52)

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


(53)

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.

Gambar 4.12 Pintu terbuka 4.2.5 Pengujian Lampu


(54)

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.


(55)

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

JENDELA

DETEKSI PIR

DETEKSI CAHAYA

Terbuka Deteksi manusia Siang hari

Tertutup Deteksi manusia Malam hari

Tabel 4.6 Hasil Uji Lampu KONDISI

LAMPU

DETEKSI PIR

DETEKSI CAHAYA

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 rumah. Apabila keadaan hari malam (gelap) maka jendela akan tertutup secara


(56)

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 pengganti manusia.


(57)

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.


(58)

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 malam hari. Dan ini sesuai dengan kondisi yang telah di terapkan oleh penulis.


(59)

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. 3. Agar terdapat sebuah Alarm padaPintu.


(60)

4. Kabel-kabel yang dipakai dalam mendukung terciptanya fitur diharapkan dapat tersusun lebih rapi.

5. Pada penelitian selanjutnya diharapkan penulis dapat memberbaiki segala kekurangan dari penelitian ini.


(61)

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, 2012)


(62)

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 B pada Mikrokontroler ATMEGA328.


(63)

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.


(64)

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 IDE Arduino. (Aryanta, 2014)


(65)

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 membangun berbagai aplikasi, antara lain: jenis data (pointer, structure dan string),


(66)

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 software ini.


(67)

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) yang mengenainya. Resistansi LDR pada tempat yang gelap biasanya mencapai sekitar 10 MΩ, dan ditempat terang LDR mempunyai resistansi yang turun menjadi sekitar 150 Ω. (Karim, S. 2013)


(68)

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 pembuat, kwalitas dan juga Merk-nya. (Zain, R.H. 2013)


(69)

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 pengoperasiannya, motor arus searah sangat identik dengan generator arus searah.


(70)

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 sebagainya. (Undala, F, et al. 2015)


(71)

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 memastikan posisi sudut dari poros output motor.


(72)

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 normal tertutup ke kontak normal terbuka. (Masinambow, et al. 2014)


(73)

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.

Berdasarkan penjelasan diatas maka penulis membuat “Perancangan dan Pembuatan miniature smarthome Berbasis Mikrokontroler ATMEGA328”.


(74)

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: 1. Dapat menginspirasi masyarakat dalam pembuatan smarthome.


(75)

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


(76)

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 analisis dan perancangan. Kemudian melakukan pengujian sistem.


(77)

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 diharapkan dapat bermanfaat dalam pengembangan selanjutnya.


(1)

vii

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.


(2)

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 .


(3)

ix

DAFTAR ISI

PERSETUJUAN ii

PERNYATAAN iii

UCAPAN TERIMA KASIH iv

ABSTRAK vi

ABSTRACT vii

DAFTAR ISI viii

DAFTAR TABEL xi

DAFTAR GAMBAR xii

BAB 1 PENDAHULUAN

1.1 Latar Belakang 1

1.2 Rumusan Masalah 2

1.3 Batasan Masalah 2

1.4 Tujuan Penelitian 2

1.5 Manfaat Penelitian 2

1.6 Metodologi Penelitian 3

1.7 Sistematika Penulisan 4

BAB 2 TINJAUAN PUSTAKA

2.1 Mikrokontroler 6

2.1.1 Mikrokontroler ATMEGA328 6

2.2 Software Pendukung 9

2.2.1 Compiler Arduino 9

2.2.2 Bahasa Pemograman Arduino Berbasis Bahasa C 11

2.2.3 Cadsoft Eagle 12

2.3 Sensor Cahaya LDR 13

2.4 Sensor Pir 13

2.5 Motor DC 14

2.6 Keypad 15

2.7 Limit Switch 16

2.8 Servo 17


(4)

3.5.3 Rangkaian Sensor Cahaya pada Jendela 25 3.5.4 Rangkaian Keypad pada Pintu 26 3.5.5 Rangkaian Sensor pir pada Lampu 27

3.5.6 Rangkaian LimitSwitch 28

3.5.7 Rangkaian Alat Secara Keseluruhan 29

3.6 Perancangan PCB 29

3.6.1 Layot PCB 30

3.6.2 Layaout Komponen 31

BAB 4 IMPLEMENTASI DAN PENGUJIAN SISTEM

4.1 Implementasi Sistem 32

4.1.1 Implementasi Pintu 33

4.1.2 Implementasi Jendela 34

4.1.3 Implementasi Lampu 36

4.1.4 Implementasi Mikrokontroler Atmega328 37

4.2 Pengujian Alat 38

4.2.1 Pengujian Sensor Pir 38

4.2.2 Pengujian Sensor LDR 39

4.2.3 Pengujian LimitSwitch 39

4.2.4 Pengujian Driver Motor L293 40

4.2.5 Pengujian Lampu 42

4.2.6 Pengujian Jendela dan Lampu 43

BAB 5 KESIMPULAN DAN SARAN

5.1 Kesimpulan 47

5.2 Saran 47

DAFTAR PUSTAKA 49


(5)

xi

DAFTAR TABEL

Tabel 4.1 Pengukuran Sensor PIR 39

Tabel 4.2 Hasil

u

ji Sensor LDR 39

Tabel 4.3 Hasil

u

ji Limit Switch 40

Tabel 4.4 Hasil

u

ji Driver Motor L293 40

Tabel 4.5 Hasil

u

ji Jendela 43


(6)

DAFTAR GAMBAR

Gambar 2.1 Pin Mikrokontroler ATMEGA328 7

Gambar 2.2 Konfigurasi Port B 7

Gambar 2.3 Konfigurasi Port C 8

Gambar 2.4 Konfigurasi Port D 8

Gambar 2.5 Compiler Arduino 10

Gambar 2.6 Tampilan Bahasa Pemrograman C 11

Gambar 2.7 Tampilan Software Cadsoft Eagle 12

Gambar 2.8 Sensor Cahaya 13

Gambar 2.9 Sensor Pir 14

Gambar 2.10 Motor DC 15

Gambar 2.11 Keypad 3x3 16

Gambar 2.12 Limit Switch 17

Gambar 2.13 Servo 17

Gambar 3.1 Flowchart Miniatur Smarthome 19

Gambar 3.2 Block Diagram 20

Gambar 3.3 Gambar Miniatur Smarthome 21

Gambar 3.4 Rangkaian Arduino Uno 23

Gambar 3.5 Rangkaian Drive Motor 24

Gambar 3.6 Rangkaian Sensor Cahaya 25

Gambar 3.7 Rangkaian Keypad 26

Gambar 3.8 Sensor Pir 27

Gambar 3.9 Rangkaian Limit Switch 28

Gambar 3.10 Rangkaian Keseluruhan 29

Gambar 3.11 Layout PCB 31

Gambar 3.12 Layout Komponen 31

Gambar 4.1 Diagram Ishikawa 32

Gambar 4.2 Miniatur Smarthome 33

Gambar 4.3 Pintu, Jendela & Limit Switch 34

Gambar 4.4 Rangkaian Motor DC 34

Gambar 4.5 Jendela dan Servo 35

Gambar 4.6 Jendela dan Sensor LDR 35

Gambar 4.7 Rangkaian Sensor LDR 36

Gambar 4.8 Lampu DC 12volt 36

Gambar 4.9 Rangkaian Lampu 37

Gambar 4.10 Mikrokontroler atmega328 38

Gambar 4.11 Mengimput Password pada Keypad 41

Gambar 4.12 Pintu Terbuka 41

Gambar 4.13 Pengujian Lampu 42

Gambar 4.14 Jendela Terbuka 44

Gambar 4.15 Jendela Tertutup pada Siang Hari 45