PLAGIATMERUPAKAN
MERUPAKANTINDAKAN
TINDAKANTIDAK
TIDAKTERPUJI
TERPUJI
TUGAS AKHIR
Oleh:
i
PLAGIAT
PLAGIATMERUPAKAN
MERUPAKANTINDAKAN
TINDAKANTIDAK
TIDAKTERPUJI
TERPUJI
FINAL PROJECT
ii
PLAGIAT
PLAGIATMERUPAKAN
MERUPAKANTINDAKAN
TINDAKANTIDAK
TIDAKTERPUJI
TERPUJI
HALAMAN PERSETUJUAFI
TUGAS AKHIR
ffi6#ffi
ffifi;
ranggal : 24 ol2Ol4
1u
PLAGIAT
PLAGIATMERUPAKAN
MERUPAKANTINDAKAN
TINDAKANTIDAK
TIDAKTERPUJI
TERPUJI
HALAMAN PENGESAHAN
TUGAS AKHIR ,
,
Tanda Tangan
Ketua
Sekretaris
*Saya meirydakan dengan sesmgguhya hhwa tugas akhir yang siya tutis ini
v
PLAGIAT
PLAGIATMERUPAKAN
MERUPAKANTINDAKAN
TINDAKANTIDAK
TIDAKTERPUJI
TERPUJI
MOTTO
vi
PLAGIAT
PLAGIATMERUPAKAN
MERUPAKANTINDAKAN
TINDAKANTIDAK
TIDAKTERPUJI
TERPUJI
Yaag bertanda tangan di bawah ini, saya mahasiswa Universitas Sanata Dharma :
beserta peraagkat yang diperlukan (bila ada). Dengan demikian saya memberikan kepada
bentuk media lain, mengelolanya dalaur bentuk pangkalan data, mendistribusikan secara
terbatas, dan mempublikasikannya di intenret atau media lain untuk kepentingan akademis
tanpa perlu meminta ljin dari saya maupun memberikan royalti kepada saya selama tetap
v11
PLAGIAT
PLAGIATMERUPAKAN
MERUPAKANTINDAKAN
TINDAKANTIDAK
TIDAKTERPUJI
TERPUJI
INTISARI
Setiap orang menginginkan segala sesuatu dapat dilakukan secara otomatis dan
mudah. Salah satu contohnya adalah membuka dan menutup tirai. Banyak rumah berjendela
besar menyulitkan penghuni rumah jika harus membuka dan menutup tirai berulang kali.
Padahal banyak manfaat sinar matahari yang masuk ke dalam ruangan jika tirai dibuka.
Pengaturan tirai secara otomatis membantu penghuni rumah untuk membuka tirai diwaktu
tertentu.
Pengguna terlebih dahulu memasukkan data waktu menggunakan keypad. Ada dua
menu pada alat yang dibuat yaitu menu otomatis dan menu manual. Pada menu otomatis,
pengguna dapat memilih 1 dari 7 mode yang sudah disediakan, sedangkan pada menu manual
pengguna dapat memasukkan waktu secara bebas sampai 3 kali. Mikrokontroler ATmega32
mengendalikan sistem sehingga saat data waktu masukan sama dengan waktu yang berjalan,
motor akan berputar membuka atau menutup tirai sampai limit switch tertekan dan motor
akan berhenti.
Hasil tugas akhir yang dirancang menggunakan mikrokontroler ATmega32 ini berupa
prototipe pengaturan tirai berdasarkan waktu nyata berhasil dibuat dan bekerja dengan baik.
Waktu nyata dirancang menggunakan RTC DS1307 dengan kesalahan 0 % dan waktu
ditampilkan pada LCD.
viii
PLAGIAT
PLAGIATMERUPAKAN
MERUPAKANTINDAKAN
TINDAKANTIDAK
TIDAKTERPUJI
TERPUJI
ABSTRACT
Everyone wants everything done automatically and easily. One of the examples is to
open and close the curtains. A house with lots of large windows complicate occupants when
they have to open and close the curtains repeatedly. Whereas there are many benefits of
sunlight entering the room when the curtain opened. Setting curtain automatically will help
occupants to open the curtain in certain time.
First, the user need to insert time using keypad. There are two options in the
appliance; automatic menu and manual menu. In the automatic menu, the user just need to
select one of seven provided mode, while on the manual menu the user can manually enter a
time freely until 3 inputs. ATmega32 microcontroller controls the system, so when the input
data time equal to the running time, the motor will rotate to open or close the curtains until
limit switch is pressed and the motor will stop.
The results of the final project which is designed by using the ATmega32
microcontroller prototype curtain arrangement based on real time has successfully created
and worked well. Real time is designed using DS1307 RTC with an error 0 % and the time
displayed on the LCD.
ix
PLAGIAT
PLAGIATMERUPAKAN
MERUPAKANTINDAKAN
TINDAKANTIDAK
TIDAKTERPUJI
TERPUJI
KATAPENGANTAR
Puji dan syukur penulis panjatkan kepada Tuhan Yesus Kristus karena telah
memberikan berkat-Nya sehingga penulis dapat menyelesaikan laporan akhir ini dengan
baik. Laporan akhir ini disusun untuk memenuhi syarat memperoleh gelar sarjana.
Penulis mengucapkan terima kasih kepada :
Penulis
PLAGIAT
PLAGIATMERUPAKAN
MERUPAKANTINDAKAN
TINDAKANTIDAK
TIDAKTERPUJI
TERPUJI
DAFTAR ISI
HALAMAN JUDUL................................................................................................ i
HALAMAN PERSETUJUAN ............................................................................. iii
HALAMAN PENGESAHAN ............................................................................... iv
PERNYATAAN KEASLIAN KARYA ........................................................... v
HALAMAN PERSEMBAHAN DAN MOTTO HIDUP ........................... vi
LEMBAR PERNYATAAN PERSETUJUAN PUBLIKASI KARYA
ILMIAH UNTUK KEPENTINGAN AKADEMIS ..................................... vii
INTISARI ................................................................................................................... viii
ABSTRACT .............................................................................................................. ix
KATA PENGANTAR ............................................................................................ x
DAFTAR ISI ............................................................................................................. xi
DAFTAR GAMBAR .............................................................................................. xiv
DAFTAR TABEL .................................................................................................... xvii
DAFTAR LAMPIRAN.......................................................................................... xviii
BAB I PENDAHULUAN
1.1 Latar Belakang ................................................................................................. 1
1.2 Tujuan dan Manfaat.......................................................................................... 2
1.3 Batasan Masalah............................................................................................... 2
1.4 Metodologi Penelitian ...................................................................................... 2
xi
PLAGIAT
PLAGIATMERUPAKAN
MERUPAKANTINDAKAN
TINDAKANTIDAK
TIDAKTERPUJI
TERPUJI
xii
PLAGIAT
PLAGIATMERUPAKAN
MERUPAKANTINDAKAN
TINDAKANTIDAK
TIDAKTERPUJI
TERPUJI
xiii
PLAGIAT
PLAGIATMERUPAKAN
MERUPAKANTINDAKAN
TINDAKANTIDAK
TIDAKTERPUJI
TERPUJI
DAFTAR GAMBAR
Halaman
Gambar 1.1. Diagram blok perancangan...................................................................... 3
Gambar 2.1. Konfigurasi pin Atmega8535 .................................................................. 5
Gambar 2.2. Rangkaian reset ....................................................................................... 7
Gambar 2.3. Kristal (XTAL)........................................................................................ 8
Gambar 2.4. Pulsa Fast PWM...................................................................................... 15
Gambar 2.5. Pulsa Phase Correct PWM...................................................................... 16
Gambar 2.6. Diagram blok DS1307............................................................................. 17
Gambar 2.7. Konfigurasi pin RTC DS1307 ................................................................. 17
Gambar 2.8. Konfigurasi umum DS1307 dengan mikrokontroler ............................... 19
Gambar 2.9. Urutan-urutan Slave Receiver Mode (Write Mode) ....................................... 20
Gambar 2.10. Urutan-urutan Slave Transmitter Mode (Read Mode)............................ 20
Gambar 2.11. Baris dan Kolom Karakter pada LCD ..................................................... 22
Gambar 2.12. LCD 2x16 ................................................................................................ 22
Gambar 2.13. Konfigurasi LED ..................................................................................... 24
Gambar 2.14. Rangkaian indikator LED........................................................................ 25
Gambar 2.15. Rangkaian keypad.................................................................................... 25
Gambar 2.16. Konstruksi motor DC .............................................................................. 26
Gambar 2.17. Konstruksi limit switch ............................................................................ 26
Gambar 2.18. Limit Switch ............................................................................................. 27
Gambar 2.19. Diagram blok L298.................................................................................. 27
Gambar 2.20. Konfigurasi pin L298 .............................................................................. 28
Gambar 3.1. Diagram blok perancangan...................................................................... 29
Gambar 3.2. Desain tampak belakang.......................................................................... 30
Gambar 3.3. Desain tampak dari dalam ....................................................................... 30
Gambar 3.4. Sistem minimum ATmega8535............................................................... 31
Gambar 3.5. Rangkaian sistem minimum ATmega8535 ............................................. 32
Gambar 3.6. Rangkaian LCD ....................................................................................... 33
Gambar 3.7. Rangkaian RTC DS1307 ......................................................................... 34
Gambar 3.8. Rangkaian driver L298............................................................................ 35
xiv
PLAGIAT
PLAGIATMERUPAKAN
MERUPAKANTINDAKAN
TINDAKANTIDAK
TIDAKTERPUJI
TERPUJI
xv
PLAGIAT
PLAGIATMERUPAKAN
MERUPAKANTINDAKAN
TINDAKANTIDAK
TIDAKTERPUJI
TERPUJI
xvi
PLAGIAT
PLAGIATMERUPAKAN
MERUPAKANTINDAKAN
TINDAKANTIDAK
TIDAKTERPUJI
TERPUJI
DAFTAR TABEL
Halaman
Tabel 2.1. Fungsi khusus port B .................................................................................... 6
Tabel 2.2. Fungsi khusus port C .................................................................................... 6
Tabel 2.3. Fungsi khusus port D ................................................................................... 7
Tabel 2.4. Register TCCR1A ......................................................................................... 8
Tabel 2.5. Mode normal dan CTC ................................................................................. 9
Tabel 2.6. Mode Fast PWM .......................................................................................... 9
Tabel 2.7. Mode Phase Correct dan Phase & Frekuensi PWM.................................... 9
Tabel 2.8. Mode operasi ................................................................................................ 10
Tabel 2.9. Register TCCR1B ......................................................................................... 10
Tabel 2.10. Prescaler timer/counter1 .............................................................................. 11
Tabel 2.11. Register 1A .................................................................................................. 11
Tabel 2.12. Register 1B .................................................................................................. 12
Tabel 2.13. Register 1 ..................................................................................................... 12
Tabel 2.14. Register TIMSK .......................................................................................... 12
Tabel 2.15. Register TIFR .............................................................................................. 13
Tabel 2.16. Register-register pada DS1307 ................................................................... 21
Tabel 2.17. Fungsi Pin-pin LCD .................................................................................... 23
Tabel 3.1. Penggunaan port-port pada mikrokontroler ............................................... 32
Tabel 3.2. Penggunaan tombol pada keypad ................................................................ 34
Tabel 4.1. Hasil pengujian pergerakan motor pada menu otomatis ............................. 46
Tabel 4.2. Hasil pengujian limit switch pada menu otomatis ....................................... 46
Tabel 4.3. Hasil pengujian pergerakan motor pada menu manual ............................... 46
Tabel 4.4. Hasil pengujian limit switch pada menu manual ......................................... 47
Tabel 4.5. Hasil pengujian tegangan keluaran penyearah ............................................ 47
Tabel 4.6. Hasil pengujian rangkaian driver ................................................................ 48
xvii
PLAGIAT
PLAGIATMERUPAKAN
MERUPAKANTINDAKAN
TINDAKANTIDAK
TIDAKTERPUJI
TERPUJI
DAFTAR LAMPIRAN
xviii
PLAGIAT
PLAGIATMERUPAKAN
MERUPAKANTINDAKAN
TINDAKANTIDAK
TIDAKTERPUJI
TERPUJI
BAB I
PENDAHULUAN
1
PLAGIAT
PLAGIATMERUPAKAN
MERUPAKANTINDAKAN
TINDAKANTIDAK
TIDAKTERPUJI
TERPUJI
2
tugas akhir yang berjudul “Pengaturan Tirai Berdasarkan Waktu Nyata”. Sistem ini akan
membandingkan waktu nyata (berdasarkan pembagian waktu wilayah) dengan data yang
dipilih oleh pengguna. Jika waktu keduanya sama maka mikrokontroler sebagai pengendali
sistem akan menggerakkan motor secara otomatis untuk membuka atau menutup tirai.
Penulis melihat bahwa penggunaan tirai otomatis akan memeroleh tanggapan positif di
bidang arsitektur karena akan memiliki daya jual yang tinggi pada suatu proyek properti.
Penampil
Masukan Motor DC
BAB II
DASAR TEORI
4
PLAGIAT
PLAGIATMERUPAKAN
MERUPAKANTINDAKAN
TINDAKANTIDAK
TIDAKTERPUJI
TERPUJI
5
b. Memori data
Memori data pada ATmega8535 memiliki kapasitas sebesar 608 byte yang terbagi
menjadi 3 bagian yaitu register serbaguna, register I/O dan SRAM. ATmega8535
memiliki 32 byte register serbaguna, 64 byte register I/O yang dapat diakses sebagai
bagian dari memori RAM (menggunakan instruksi LD atau ST) atau dapat juga diakses
sebagai I/O (menggunakan instruksi IN atau OUT), dan 512 byte digunakan untuk
memori data SRAM.
c. Memori EEPROM
Memori EEPROM adalah memori yang dapat menyimpan data ketika chip running atau
mati (off) yang biasanya digunakan untuk keperluan penyimpanan data yang tahan
terhadap gangguan catu daya. Memori EEPROM ATmega8535 memiliki kapasitas
sebesar 512 byte. Memori EEPROM ini hanya dapat diakses dengan menggunakan
register-register I/O yaitu register EEPROM Address, register EEPROM Data, dan
register EEPROM Control. Untuk mengakses memori EEPROM ini diperlakukan
seperti mengakses data eksternal, sehingga waktu eksekusinya relatif lebih lama bila
dibandingkan dengan mengakses data dari SRAM.
Konfigurasi pin ATmega8535 dapat dilihat pada Gambar 2.1. dari gambar diatas
dapat dijelaskan fungsi dari masing-masing pin ATmega8535 sebagai berikut [2]:
1. VCC merupakan pin yang berfungsi sebagai input catu daya.
PLAGIAT
PLAGIATMERUPAKAN
MERUPAKANTINDAKAN
TINDAKANTIDAK
TIDAKTERPUJI
TERPUJI
6
5. Port C (portC0…portC7) merupakan pin input/output dua arah dan pin fungsi khusus,
seperti dapat dilihat pada Tabel 2.2.
6. Port D (portD0…portD7) merupakan pin input/output dua arah dan pin fungsi khusus,
seperti yang terlihat pada Tabel 2.3.
PLAGIAT
PLAGIATMERUPAKAN
MERUPAKANTINDAKAN
TINDAKANTIDAK
TIDAKTERPUJI
TERPUJI
7
2.1.3 Reset
Chip akan reset jika tegangan catu nol atau pin RST dipaksa 0 [2]. Jika
membutuhkan tombol reset, dapat ditambahkan dengan rangkaian reset seperti gambar 2.2.
Tcycle = (2.1)
PLAGIAT
PLAGIATMERUPAKAN
MERUPAKANTINDAKAN
TINDAKANTIDAK
TIDAKTERPUJI
TERPUJI
8
dengan:
fosc adalah frekuensi clock chip
Tcycle adalah waktu untuk tiap satu siklus mikrokontroler
2.1.5 Timer/Counter1
Timer/counter1 adalah sebuah timer/counter yang mempunyai kapasitas cacahan 16
bit baik pulsa/ clock internal maupun eksternal yang dilengkapi prescaler sumber pulsa/
clock hingga 10 bit [2]. Timer/counter1 dapat digunakan untuk :
a. Timer/counter biasa
b. Clear Timer on Compare Match (auto reload)
c. Counter pulsa eksternal.
d. Sebagai pembangkit frekuensi
e. Sebagai pembangkit gelombang PWM
Bit-bit ini bertugas mengendalikan sifat pin OC1A atau OC1B yang berhubungan
dengan mode operasi yang digunakan.
Tabel 2.7. Mode Phase Correct dan Phase & Frekuensi Correct PWM [2]
COM1A1/ COM1A0/
Keterangan
COM1B1 COM1B0
0 0 Tidak dihubungkan dengan pin OC1A/ OC1B
WGM13:0=9 atau 14; toggle pin OC1A pada saat
compare match, pin OC1B tidak dihubungkan, untuk
0 1
setting WGM13:0 yang lain pin OC1A/ OC1B tidak
dihubungkan
Clear OC1A/ OC1B saat compare match ketika
1 0 counting-up, set pin OC1A/ OC1B saat compare
match ketika counting-down (noninverting)
Set pin OC1A/ OC1B saat compare match ketika
1 1 counting-up, clear pin OC1A/ OC1B saat compare
match ketika counting-down (inverting)
Bit – FOC1A/FOC1B hanya dapat digunakan ketika menggunakan mode operasi non-
PWM. Jika bit-bit ini di-set, maka akan memaksa terjadinya compare match.
Bit 1:0 – WGM11:0: Waveform Generator Mode
Kedua bit ini bersamaan dengan bit WGM13:12 dalam register TCCR1B berguna
untuk memilih mode operasi yang akan kita gunakan [2].
Bit ini mendefinisikan triger yang masuk ke pin ICP1 (PB0) yang digunakan untuk
menangkap kejadian (capture event). Jika ICES1=0, maka falling edge (perpindahan
dari 1 ke 0) digunakan sebagai triger dan jika ICES1=1, maka rising edge
(perpindahan dari 0 ke 1) digunakan sebagai triger.
Ketika ada triger pada pin ICP1 (PB0), maka secara otomatis oleh CPU isi register
pencacah TCNT1 akan disalin ke register penangkap ICR1 dan juga berkebalikan pada
flag status ICF1 yang digunakan untuk interupsi capture event.
Bit 5 – Reserved Bit
Tidak digunakan
Bit 4:3 – WGM13:2: Waveform Generator Mode
Lihat tabel Mode Operasi.
Bit 2:0 – CS12:0: Clock Select
Bit-bit ini bertugas untuk memilih/mendefinisikan/prescaler pulsa/clock yang masuk
ke dalam register TCNT1.
Register ini bertugas sebagai register pembanding yang bisa kita tentukan besarnya
sesuai dengan kebutuhan [2]. Dalam praktiknya pada saat TCNT1 (TCNT1H:TCNT1L)
mencacah maka otomatis oleh CPU akan dibandingkan dengan isi OCR1
(OCR1H:OCR1L) secara kontinyu dan jika isi TCNT1 sama dengan isi OCR1 maka
akan terjadi compare match yang dapat dimanfaatkan untuk mode CTC dan PWM.
Register ICR1 (ICR1H:ICR1L) akan selau diperbarui dengan isi register pencacah
TCNT1 (pada saat tersebut) sewaktu terjadi triger (capture event) pada pin ICP1 [2].
Register ICR1 juga mempunyai fungsi lain untuk mendefinisikan TOP value pada
mode tertentu (lihat tabel mode operasi).
Bit ini berguna untuk meng-aktif-kan interupsi Output Compare B Match ketika bit ini
di-set.
Bit 2 – TOIE1: Timer/Counter1, Overflow Interrupt Enable
Bit ini berguna untuk meng-aktifkan interupsi overflow TCNT1 ketika bit ini di-set.
(2.2)
dengan:
adalah frekuensi clock chip
N adalah prescaler sumber clock yang digunakan (1, 8, 64, 256, 1024)
slope (satu arah cacahan). Resolusi fast PWM dapat ditentukan dengan resolusi yang
sudah tetap seperti 8, 9, 10 bit atau bisa ditentukan melalui register ICR1 atau OCR1A.
Resolusi minimal yang diizinkan adalah 2-bit (ICR1 atau OCR1A diisi 0x0003), dan
resolusi maksimal yang diizinkan adalah 16-bit (ICR1 atau OCR1A diisi 0xFFFF).
Resolusi dapat dihitung dengan menggunakan persamaan berikut:
(2.3)
Dalam mode non-inverting saluran keluaran PWM pin OC1x di-clear pada saat
compare match (TCNT1==OCRx) dan di-set ketika BOTTOM (TCNT1=0x0000).
Dalam mode inverting saluran keluaran PWM pin OC1x di-set pada saat compare
match (TCNT1==OCRx) dan di-clear ketika BOTTOM (TCNT1=0x0000).
Secara kasar memberdakan non-inverting dengan inverting dalam mode fast PWM
yaitu dilihat dari bentuk pulsanya. PWM non-inverting yang dikendalikan adalah lama
t on – nya melalui isi OCR1x, sedangkan PWM inverting yang dikendalikan adalah
lama t off – nya melalui isi OCR1x. Frekuensi fast PWM dihitung dengan
menggunakan persamaan berikut:
(2.4)
dengan:
adalah frekuensi clock chip
N adalah prescaler sumber clock yang digunakan (1, 8, 64, 256, 1024)
PLAGIAT
PLAGIATMERUPAKAN
MERUPAKANTINDAKAN
TINDAKANTIDAK
TIDAKTERPUJI
TERPUJI
16
(2.5)
Dalam mode non-inverting saluran keluaran PWM pin OC1x di-clear pada saat
compare match (TCNT1=OCRx) ketika counting-up dan di-set pada saat compare
match ketika counting down. Dalam mode inverting saluran keluaran PWM pin OC1x
di-set pada saat compare match (TCNT1=OCRx) ketika counting-up dan di-clear pada
saat compare match ketika counting-down.
(2.6)
dengan:
fclk_I/O adalah frekuensi clock chip
N adalah prescaler sumber clock yang digunakan (1, 8, 64, 256, 1024)
PLAGIAT
PLAGIATMERUPAKAN
MERUPAKANTINDAKAN
TINDAKANTIDAK
TIDAKTERPUJI
TERPUJI
17
DS1307 yang digunakan memiliki paket DIL8 (Dual In Line 8) seperti yang
ditunjukkan Gambar 2.7.
menyinkronisasi transfer data pada jalur I2C, sedangkan SDA merupakan jalur untuk data.
Beberapa perangkat dapat terhubung ke dalam jalur I2C yang sama dimana SCL dan SDA
terhubung ke semua perangkat tersebut, hanya ada satu perangkat yang mengontrol SCL
yaitu perangkat master. Jalur data I2C memiliki tipe open drain, artinya perangkat hanya
bisa menarik jalur data menjadi low. Oleh karena itu, diperlukan pull-up resistor pada SDA
dan SCL untuk menarik jalur data menjadi high ketika tidak ada perangkat yang
berkomunikasi. Pull-up resistor adalah resistor yang dihubungkan antara jalur data dan
VCC.
yang akan ditulis. Setiap byte yang diterima akan diakhiri dengan sinyal acknowledge.
Apabila mikrokontroler sudah selesai mengirim data, maka dikirim kondisi STOP. Gambar
2.9. merupakan urutan-urutan Slave Receiver Mode (Write Mode).
Read Mode merupakan cara agar data yang terdapat di DS1307 dibaca oleh
mikrokontroler, misal ingin membaca waktu dan tanggal. Caranya sama saja seperti pada
write mode, hanya saja diikuti direction bit 1. Apabila “11010000” dikirim, maka DS1307
masuk write mode. Apabila “11010001” dikirim, DS1307 akan masuk read mode.
Terdapat tambahan sinyal not acknowledge (NACK) yang dikirim oleh mikrokontroler
apabila telah menerima semua data dari DS1307 sebelum kondisi STOP.
Gambar 2.10. menunjukkan urutan-urutan Slave Transmiter Mode (Read Mode).
Informasi waktu dan tanggal bisa didapat dengan mengakses register yang tepat. Register-
register ini bisa dibaca atau ditulis menggunakan mikrokontroler.
Register DAY yang menunjukkan hari bertambah ketika tengah malam. Nilai yang
diperoleh berupa nilai 01-07 dan tidak mengikat kepada hari sebenarnya. Pengguna yang
harus menentukan nilai beserta definisinya, misal 1 adalah Minggu maka 2 adalah Senin
dan seterusnya. Bit 6 dari register HOUR menentukan jam dalam tipe 12 jam atau 24 jam.
Ketika bit 6 HIGH, maka akan masuk tipe 12 jam, sedang ketika LOW akan masuk tipe 24
jam. Waktu harus dimasukkan kembali ketika mengubah tipe jam yang digunakan.
PLAGIAT
PLAGIATMERUPAKAN
MERUPAKANTINDAKAN
TINDAKANTIDAK
TIDAKTERPUJI
TERPUJI
21
Register CH pada alamat 00H merupakan register enable oscillator yang akan menentukan
jalannya waktu pada DS1307, sehingga ketika inisialisasi perlu diperiksa nilai dari register
tersebut. Tabel 2.16. menunjukan register-register yang bisa diakses pada DS1307.
karakter dikali jumlah baris karakter. Sebagai contoh, LCD1952, artinya terdapat 16 kolom
dalam 2 baris ruang karakter seperti ditunjukan pada Gambar 2.11. yang berarti total
karakter yang dapat dituliskan adalah 32 karakter [8].
Gambar 2.11. Baris dan Kolom Karakter pada LCD 1952 [8]
LCD yang sering digunakan adalah jenis LCD M1632. M1632 merupakan modul
LCD dengan tampilan 2x16 (2 baris, 16 kolom) dengan konsumsi daya rendah. Modul
tersebut dilengkapi dengan mikrokontroler yang didesain khusus untuk mengendalikan
LCD. Mikrokontroler HD44780 buatan Hitachi yang berfungsi sebagai pengendali LCD
memiliki CGROM (Character General Read Only Memory), CGRAM (Character General
Random Access Memory), dan DDRAM (Display Data Random Access Memory). LCD
bertipe ini memungkinkan pemrogram untuk mengoperasikan komunikasi data 8 bit atau 4
bit. Jika menggunakan jalur data 4 bit, maka akan ada 7 jalur data (3 untuk jalur kontrol &
4 untuk jalur data). Jika menggunakan jalur data 8 bit, maka akan ada 11 jalur data (3
untuk jalur kontrol & 8 untuk jalur data). Tiga jalur kontrol ke LCD ini adalah EN
(Enable), RS (Register Select) dan R/W (Read/Write).
LCD jenis M1623 memiliki jumlah pin sebanyak 16 yang memiliki fungsi berbeda-
beda. Fungsi pin LCD pada Tabel 2.17. adalah :
1. VLCD merupakan pin yang digunakan untuk mengatur tebal tipisnya karakter yang
tertampil dengan cara mengatur tegangan masukan.
2. DB0 s/d DB7 merupakan jalur data yang dipakai untuk menyalurkan kode ASCII
maupun perintah pengatur LCD.
PLAGIAT
PLAGIATMERUPAKAN
MERUPAKANTINDAKAN
TINDAKANTIDAK
TIDAKTERPUJI
TERPUJI
23
3. Register Select (RS) merupakan pin yang dipakai untuk membedakan jenis data
yang dikirim ke LCD. Jika RS berlogika „0‟, maka data yang dikirim adalah
perintah untuk mengatur kerja LCD. Jika RS berlogika „1‟, maka data yang
dikirimkan adalah kode ASCII yang ditampilkan.
4. Read/Write (R/W) merupakan pin yang digunakan untuk mengaktifkan pengiriman
dan pengembalian data ke dan dari LCD. Jika R/W berlogika „1‟, maka akan
diadakan pengambilan data dari LCD. Jika R/W berlogika „0‟, maka akan diadakan
pengiriman data ke LCD.
5. Enable (E) merupakan sinyal sinkronisasi. Saat E berubah dari logika „1‟ ke „0‟,
data di DB0 s/d DB7 akan diterima atau diambil dari port mikrokontroler.
6. Anoda (A) dan Katoda (K) merupakan pin yang digunakan untuk menyalakan
backlight dari layar LCD.
Berdasarkan gambar 2.14. persamaan untuk mencari nilai tegangan menggunakan hukum
ohm adalah . Sehingga persamaan untuk mencari nilai resistor yang digunakan
sebagai indikator adalah :
R= (2.7)
dengan:
V = tegangan (Volt)
I = arus listrik (Ampere)
R = resistor (Ohm/Ω)
VS = tegangan sumber (Volt)
VD = tegangan LED (Volt)
PLAGIAT
PLAGIATMERUPAKAN
MERUPAKANTINDAKAN
TINDAKANTIDAK
TIDAKTERPUJI
TERPUJI
25
2.6 Keypad
Keypad matriks adalah tombol-tombol yang disusun secara matriks (baris x kolom)
sehingga dapat mengurangi penggunaan pin input. Sebagai contoh, keypad matriks 4×4
cukup menggunakan 8 pin untuk 16 tombol [10]. Hal tersebut dimungkinkan karena
rangkaian tombol disusun secara horizontal membentuk baris dan secara vertikal
membentuk kolom seperti pada gambar 2.15.
Proses pengecekkan dari tombol yang dirangkai secara matriks adalah dengan
teknik scanning. Metode scanning keypad adalah mendeteksi hubungan pin baris dan
kolom karena tombol ditekan, secara berurutan, bergantian dan satu per satu.
B1, B2, B3, dan B4 merupakan baris 1 sampai baris 4; sedangkan K1, K2, K3, dan
K4 merupakan kolom 1 sampai kolom 4 keypad. Pin-pin kolom menjadi output dan pin-pin
baris menjadi input. Contohnya ketika „*‟ ditekan maka arus mengalir dari kolom 1 ke
baris 4 dengan begitu mikrokontroler dapat mengetahui tombol tersebut aktif sedangkan
tombol lain mati.
PLAGIAT
PLAGIATMERUPAKAN
MERUPAKANTINDAKAN
TINDAKANTIDAK
TIDAKTERPUJI
TERPUJI
26
Bentuk fisik limit switch bermacam-macam. Salah satu bentuk dari limit switch
dapat dilihat pada gambar 2.18.
2.9 L298
L298 adalah komponen yang didalamnya terdiri dari dua rangkaian bridge yang
bisa dikontrol dari luar (Dual Full-Bridge Driver). Komponen ini biasa digunakan untuk
mengontrol komponen yang mengandung kumparan seperti motor DC, motor stepper,
relay dan solenoid. Enable A dan B digunakan untuk mengaktifkan atau menonaktifkan
perangkat secara bebas dari sinyal masukan. Tegangan masukan tambahan disediakan
sehingga dapat bekerja pada tegangan yang lebih rendah.
Gambar 2.19. menunjukan diagram blok L298. Dari IC ini terdapat 4 pin masukan
yang didesain untuk menerima masukan logika TTL. Masing-masing pin masukan
memiliki pin keluaran yang bersesuaian.
Pada pin enable dan pin 10 diberi logika 1 (high) dan pin 12 diberi logika 0 (low)
maka akan menggerakkan motor searah jarum jam. Jika logikanya dibalik maka motor
akan bergerak berlawanan dengan arah jarum jam. Pin enable yang diberi logika 0 (low)
maka motor akan berhenti berputar.
BAB III
PERANCANGAN
LCD
29
PLAGIAT
PLAGIATMERUPAKAN
MERUPAKANTINDAKAN
TINDAKANTIDAK
TIDAKTERPUJI
TERPUJI
30
Keterangan:
1. Keypad
2. LCD
3. Roller
4. Limit switch
5. Motor DC
2. TCCR1B = 0b00000001
Bit 4:3 dilakukan untuk menentukan mode operasi Timer/Counter1 yaitu phase correct
PWM.
Bit 2:0 merupakan bit pengatur prescaler clock yang masuk ke dalam register TCNT1.
Clock osilator yang digunakan sama dengan clock CPU yaitu 12Mhz.
Nilai frekuensi yang diperoleh adalah 23,529 KHz, nilai frekuensi selalu berbanding
terbalik dengan waktu, sehingga dapat diperoleh lebar pulsa untuk satu siklus dengan
perhitungan sebagai berikut :
(3.1)
PLAGIAT
PLAGIATMERUPAKAN
MERUPAKANTINDAKAN
TINDAKANTIDAK
TIDAKTERPUJI
TERPUJI
36
3.3.5 Keypad
Keypad yang digunakan dengan matriks 4x4. Keypad berfungsi sebagai masukan
pada mikrokontroler untuk mengatur pada jam-jam tertentu tirai akan dibuka dan ditutup.
Port yang digunakan pada mikrokontroler untuk keypad adalah portA.0 sampai portA.7.
PortA.0, portA.1, portA.2, dan portA.3 atau port baris digunakan sebagai input, sedangkan
portA.4, portA.5, portA.6, dan portA.7 atau port kolom digunakan sebagai output.
START
Pengaturan RTC
YA Ada data di
EEPROM
TIDAK
Pilih menu
TIDAK TIDAK
Menu = otomatis Menu = manual
YA YA
Otomatis Manual
Proses
YA
While (1)
TIDAK
STOP
Pengaturan RTC dilakukan untuk mengatur waktu yang sedang berjalan dan diatur
berdasarkan waktu setempat (GMT +7). Setelah mengatur RTC, kemudian memilih menu
yang akan digunakan yaitu menu otomatis atau menu manual. Mode yang telah dipilih
PLAGIAT
PLAGIATMERUPAKAN
MERUPAKANTINDAKAN
TINDAKANTIDAK
TIDAKTERPUJI
TERPUJI
38
akan tersimpan pada EEPROM sehingga pada saat catu daya utama mati maka mode yang
dipilih tetap tersimpan. Saat catu daya utama hidup lagi maka sistem akan melanjutkan ke
proses sehingga tirai dapat terbuka atau tertutup. Jika data bernilai benar maka program
akan terus melanjutkan eksekusi ke program pilih menu. Jika data bernilai salah maka
program tidak akan dilanjutkan/ stop.
MULAI
Atur
Tanggal - bulan - tahun
Atur
Jam : menit : detik
Tampilan
Tanggal - bulan - tahun
Tampilan
Jam : menit : detik
Tampilan
hari
Simpan data di RTC
BERHENTI
Gambar 3.12. menunjukkan proses menggunakan menu manual. Pada menu ini,
pengguna mengatur waktu buka dan tutup tirai. Waktu buka tirai harus lebih kecil daripada
waktu tutup tirai. Jika waktu tutup kurang dari waktu buka maka akan terjadi kesalahan/
error. Data yang dapat dimasukkan oleh pengguna dibatasi maksimal 3 pasang waktu buka
- tutup tirai. Data-data pengaturan buka-tutup tirai disimpan pada EEPROM.
MULAI
Inisialisasi
Data lama YA
dipakai ?
TIDAK
Masukkan waktu
BUKA
Masukkan waktu
TUTUP
TIDAK
Buka [i] < Tutup [i] ERROR
YA
TIDAK
Lagi ? Simpan DATA
YA
BERHENTI
i=i+1
YA TIDAK
i <= 3
Pengguna yang menggunakan menu otomatis memilih mode yang tersedia, dari
mode 1 sampai mode 7, dengan menekan tombol pada keypad. Mode yang telah dipilih
oleh pengguna akan tersimpan di EEPROM. Diagram alir menu otomatis dapat dilihat
pada gambar 3.13.
PLAGIAT
PLAGIATMERUPAKAN
MERUPAKANTINDAKAN
TINDAKANTIDAK
TIDAKTERPUJI
TERPUJI
40
MULAI
Pilih mode
TIDAK
Mode = 1
TIDAK
YA Mode = 2
BUKA [1] = 05:00
TUTUP [1] = 07:00
YA TIDAK
BUKA [2] = 16:00 Mode = 3
TUTUP [2] = 18:00 BUKA [1] = 05:00
TUTUP [1] = 08:00
YA TIDAK
BUKA [2] = 16:00 Mode = 4
TUTUP [2] = 18:00 BUKA [1] = 05:00
TUTUP [1] = 09:00
YA TIDAK
Mode = 5
BUKA [2] = 16:00
TUTUP [2] = 18:00 BUKA [1] = 05:00
TUTUP [1] = 10:00
YA TIDAK
BUKA [2] = 16:00 Mode = 6
TUTUP [2] = 18:00 BUKA [1] = 05:00
TUTUP [1] = 07:00
YA Mode = 7
BUKA [2] = 13:00
TUTUP [2] = 18:00 BUKA [1] = 05:00
TUTUP [1] = 08:00
BUKA [1] = 05:00
BUKA [2] = 14:00 TUTUP [1] = 10:00
TUTUP [2] = 18:00
BUKA [2] = 15:00
TUTUP [2] = 18:00
Mode disimpan
di EEPROM
BERHENTI
MULAI
Inisialisasi
YA
Motor ON CW
TIDAK
Limit 1 = ON
YA
Motor OFF
YA
Motor ON CCW
YA
TIDAK
Limit 2 = ON
YA
Motor OFF
j=j+1
j <= x
TIDAK
BERHENTI
BAB IV
HASIL PENGAMATAN DAN PEMBAHASAN
Bab ini berisi mengenai hasil pengamatan pengaturan tirai berdasarkan waktu nyata
dari prototipe ruangan. Hasil pengamatan berupa pengujian ketepatan waktu pada RTC,
pergerakan motor DC sebagai penggerak tirai dan tingkat keberhasilan prototipe secara
keseluruhan.
Pada perancangan tugas akhir ini, mikrokontroler yang akan digunakan adalah
ATmega8535 namun pada implementasi alat menggunakan mikrokontroler ATmega32.
Hal ini dikarenakan memori flash ATmega8535 hanya memiliki memori flash sebesar 8K
byte sehingga tidak cukup untuk menampung program yang digunakan yaitu sebesar 4296
kata (1 kata = 16 bit, maka 4296 kata = 68736 bit = 8592 byte) diganti dengan
mikrokontroler ATmega32 yang mempunyai memori lebih besar.
42
PLAGIAT
PLAGIATMERUPAKAN
MERUPAKANTINDAKAN
TINDAKANTIDAK
TIDAKTERPUJI
TERPUJI
43
4. Tirai 8. Pulley
Sistem dapat digunakan saat saklar dinyalakan. Pada LCD akan muncul perintah
‘Menu tekan B’. Jika menekan tombol B pada keypad maka terdapat 3 pilihan menu, yaitu
menu otomatis, menu manual, dan set waktu. Jika pengguna tidak menekan tombol B akan
muncul data waktu dan tanggal secara otomatis. Tombol A berfungsi untuk memilih menu
PLAGIAT
PLAGIATMERUPAKAN
MERUPAKANTINDAKAN
TINDAKANTIDAK
TIDAKTERPUJI
TERPUJI
44
yg diinginkan. Tombol ‘*’ dan ‘#’ berfungsi untuk menampilkan menu pada LCD dengan
menggeser ke kanan atau kiri. Tombol C berfungsi untuk membuka tirai dan tombol D
berfungsi untuk menutup tirai secara otomatis tanpa membandingkan waktu RTC dan data
masukan dari pengguna.
Rangkaian elektronika sebagai pendukung bekerjanya prototipe penelitian ini dapat
dilihat pada gambar di bawah ini:
Gambar 4.7. Rangkaian Penyearah 6 Volt Gambar 4.8. Rangkaian Penyearah 12 Volt
Rangkaian mikrokontroler pada gambar 4.3 berfungsi sebagai I/O untuk mengolah
data dari RTC DS1307 dan keypad.
Keterangan gambar pada rangkaian mikrokontroler:
1. Output +5 volt 5. Port untuk downloader
2. GND 6. Port A.0 – A.7
3. Port D.0 – D.7 7. Port C.0 – C.7
4. Port B.0 – B.7 8. Input +12 volt
Jika waktu pada RTC dan data pada mode 1 sama, contohnya pada pukul 05.00 motor akan
bergerak sesuai arah jarum jam (cw) maka tirai akan akan terbuka. Kondisi limit switch1
ON ketika tertekan gerakan motor DC yang searah jarum jam (cw) dan kondisi limit
switch2 OFF. Kondisi limit switch ON menyebabkan motor DC berhenti berputar. Pada
pukul 07.00 motor DC akan bergerak berlawanan arah jarum jam. Kondisi limit switch1
OFF dan limit switch2 ON setelah tertekan gerakan motor DC sehingga motor DC berhenti
berputar. Tabel 4.2. menunjukkan kondisi limit switch sesuai arah pergerakan motor DC.
Pengujian menu manual berbeda dengan pengujian menu otomatis. Pada menu
manual, pengguna dapat memasukkan waktu buka dan tutup tirai sesuai keinginan sesuai
syarat masukan waktu buka dan tutup. Jadi dalam 1 hari pengguna dapat memasukkan data
sampai 3 kali. Pada menu manual pengguna memasukkan waktu buka [1] dan waktu tutup
[1] nilainya harus lebih besar dari waktu buka [1]. Jika pengguna memasukkan waktu
sampai 3 kali maka nilai yang dimasukkan harus lebih besar dari nilai masukan
sebelumnya. Setelah pengguna memasukkan waktu buka dan tutup selesai, sistem akan
berjalan sesuai program yang telah dirancang.
3 09.00 09.30 12.00 12.30 17.00 17.30 on off off on on off off on on off off on
Prinsip kerja dari menu manual sama dengan menu otomatis, yaitu pada saat nilai
yang dimasukkan, data disimpan pada mikrokontroler. Saat data pada mikrokontroler dan
waktu RTC sama, maka motor DC akan bergerak searah jarum jam untuk membuka tirai
dan bergerak berlawanan dengan arah jarum jam untuk menutup tirai. Setelah tirai terbuka,
kondisi limit switch1 ON dan limit switch2 OFF. Kondisi ON pada limit switch
menyebabkan motor DC berhenti berputar.
Berdasarkan percobaan yang dilakukan, diperoleh waktu yang ditempuh untuk duty
cycle 80% adalah 3 detik dan duty cycle 100% adalah 2 detik.
Pengukuran nilai kristal pada RTC menggunakan frequency counter adalah 1 Hz.
Sehingga nilai error-nya:
Program sistem akan mengakses waktu dan tanggal dari RTC. Jika menekan tombol
B maka akan mengeksekusi fungsi Pilih_Menu. Tombol C difungsikan untuk membuka
tirai tanpa mengatur waktu buka dan tombol D untuk menutup tirai tanpa mengatur waktu
tutup tirai. Waktu dan tanggal secara otomatis dibaca oleh mikrokontroler dengan variabel
RTC.
PLAGIAT
PLAGIATMERUPAKAN
MERUPAKANTINDAKAN
TINDAKANTIDAK
TIDAKTERPUJI
TERPUJI
50
Program sistem mengeksekusi data waktu saat waktu buka sama dengan waktu
sebenarnya sehingga motor akan otomatis membuka tirai. Saat waktu tutup sama dengan
waktu yang sebenarnya maka motor akan kembali menutup tirai. Motor akan bergerak
sesuai jumlah masukan waktu buka-tutup tirai. Proses membuka dan menutup tirai
dilakukan sesuai masukan yang telah diatur sebelumnya.
Fungsi s!=sTemp adalah pada saat nilai s (detik) tidak sama dengan s sesudahnya
maka nilai s akan disamakan. Program ini dimaksudkan untuk menghindari pengiriman
data yang sama secara terus menerus pada LCD yang menimbulkan kedip dan tampilan
yang tidak jelas. Tampilan data di LCD hanya akan berubah ketika terjadi perubahan nilai
variabel s.
PLAGIAT
PLAGIATMERUPAKAN
MERUPAKANTINDAKAN
TINDAKANTIDAK
TIDAKTERPUJI
TERPUJI
51
Program mengatur tanggal dapat dilihat pada gambar di bawah ini. Pengguna
memasukkan terlebih dahulu masing-masing 2 digit untuk tanggal, bulan dan tahun. Pada
kolom 1 dan 2 berisi tanggal puluhan dan satuan, kolom 4 dan 5 berisi bulan puluhan dan
satuan, dan kolom 7 dan 8 berisi tahun puluhan dan satuan. Setelah semua data terisi maka
akan dibandingkan pada program cekTanggal untuk memberi batas masukan tanggal. Data
tanggal yang sudah terisi kemudian di-set pada RTC.
Program cekTanggal berfungsi sebagai batas masukan tanggal yang dapat dilihat
pada Gambar 4.17. Masukan tanggal tidak lebih dari 31 dan bulan tidak lebih dari 12. Jika
data yang dimasukkan salah maka akan mengulang sampai bernilai benar.
Pengaturan hari dilakukan setelah pengaturan tanggal selesai. Pada gambar dibawah
ini adalah sebagian listing program untuk mengatur hari. Pengaturan hari menggunakan
tombol bintang (*) untuk geser ke kiri dan tombol pagar (#) untuk geser ke kanan. Tombol
A untuk memilih hari yang ditentukan. RTC akan secara otomatis menyimpan data hari
sesuai alamat register hari yaitu 0x03.
Pada gambar 4.19, indexGeser digunakan untuk mengecek data yang akan dipilih.
Jika indexGeser=1 maka hari yang diatur adalah Sunday. Setelah fungsi getSettingHari
selesai dieksekusi maka secara otomatis data yang ditampilkan di LCD adalah 3 huruf
seperti sun, mon sampai sat. Listing program nama hari dapat dilihat pada Gambar 4.21.
Variabel hari diisi data dari register hari pada RTC.
Program mengatur waktu dapat dilihat pada gambar di bawah ini. Pengguna
memasukkan terlebih dahulu masing-masing 2 digit untuk jam, menit dan detik. Pada
kolom 1 dan 2 berisi jam puluhan dan satuan, kolom 4 dan 5 berisi menit puluhan dan
PLAGIAT
PLAGIATMERUPAKAN
MERUPAKANTINDAKAN
TINDAKANTIDAK
TIDAKTERPUJI
TERPUJI
54
satuan, dan kolom 7 dan 8 berisi detik puluhan dan satuan. Setelah semua data terisi maka
akan dibandingkan pada program cekWaktu untuk memberi batas masukan angka jam,
menit, dan detik. Data waktu yang sudah terisi kemudian di-set pada RTC.
...............................
Program batas masukan untuk mengatur waktu pada Gambar 4.24. Masukan untuk
jam tidak lebih dari 23, menit dan detik tidak lebih dari 59. Jika lebih dari angka tersebut
program akan mengulang masukan data waktu sampai angka yg dimasukkan sudah
memenuhi syarat.
Saat pengguna telah selesai memasukkan data tanggal, hari dan waktu maka
tampilan pada LCD seperti pada Gambar 4.25.
Listing program menu dapat dilihat pada gambar 4.27. Fungsi tombol bintang (*)
adalah untuk menggeser menu ke kiri dan tombol pagar (#) untuk menggeser menu ke
kanan. Tombol A berfungsi untuk mengeksekusi menu yang telah dipilih. Tombol C dan D
merupakan tombol untuk membuka dan menutup tirai langsung tanpa perlu mencocokan
dengan waktu masukan. Pada saat pengguna memilih menu yang akan digunakan,
EEPROM akan dihapus terlebih dahulu. Hal ini dilakukan agar tidak ada penumpukan data
di EEPROM sehingga sistem tidak mengalami error.
PLAGIAT
PLAGIATMERUPAKAN
MERUPAKANTINDAKAN
TINDAKANTIDAK
TIDAKTERPUJI
TERPUJI
56
Menu otomatis adalah menu yang pewaktuannya sudah tersedia dan pengguna
hanya tinggal memilih pada jam berapa tirai akan dibuka dan ditutup. Pada menu manual
pengguna dapat memasukkan waktu buka dan tutup tirai secara bebas. Sedangkan menu set
waktu merupakan menu yang digunakan untuk mengatur ulang waktu.
Gambar 4.29 merupakan listing program menu otomatis. Jika pengguna menekan
tombol 1, maka waktu buka tirai yang pertama adalah pukul 05.00 dan waktu tutup tirai
pukul 07.00, waktu buka tirai yang kedua pada pukul 16.00 dan waktu tutup tirai pada
pukul 18.00 seperti pada Gambar 4.31. Tombol A berfungsi untuk mengeksekusi mode
yang telah dipilih dan menyimpan data waktu di EEPROM. Tombol B berfungsi untuk
kembali ke menu utama dan membatalkan pilihan menu otomatis.
Pada menu manual, pengguna terlebih dahulu memasukkan data waktu buka dan
tutup. Listing program untuk mengolah data buka dan tutup dapat dilihat pada Gambar
4.32. Pengguna terlebih dahulu memasukkan waktu buka berurutan dari jam puluhan, jam
satuan, menit puluhan, menit satuan, detik puluhan dan detik satuan. Nilai jam puluhan dan
jam satuan buka dikonversikan menjadi data jam buka. Kemudian jam, menit dan detik
dikonversikan lagi menjadi waktu buka yang berfungsi untuk syarat pada menu manual.
...............................
Listing olah data tutup memiliki penjelasan yang sama dengan listing olah data buka.
...............................
Pada menu manual, pengguna akan memasukkan waktu buka terlebih dahulu,
kemudian memasukkan waktu tutup. Listing program menu manual dapat dilihat pada
Gambar 4.36. Menu manual memiliki syarat pertama yaitu waktu data tutup harus lebih
besar daripada waktu buka. Jika masukan tidak sesuai dengan syarat pertama maka pada
LCD akan tertampil ‘salah!buka>tutup’ seperti pada Gambar 4.37. Waktu buka tirai yang
kedua harus lebih besar dari waktu tutup tirai pertama, jika masukannya tidak sesuai maka
akan tertampil pada LCD ‘salah!’ seperti pada Gambar 4.28. Program akan terus
mengoreksi waktu yang tidak sesuai dan mengulang sampai syarat terpenuhi.
Data yang dimasukkan terpenuhi maka pengguna dapat memilih untuk menambah
data atau tidak. Pengguna dapat menambah data dengan menekan tombol A. Jika pengguna
tidak ingin menambah data pengguna dapat menekan tombol apa saja pada keypad kecuali
tombol C dan D. Saat pengguna selesai memasukkan data buka-tutup maka program akan
mengeksekusi dapat menambah waktu buka-tutup tirai dengan menekan tombol A. Waktu
buka-tutup yang dapat dimasukkan pengguna maksimal 3 pasang data. Data-data yang
sudah ditulis kemudian disimpan pada EEPROM.
Gambar 4.40. Tampilan data masukan menu manual setelah 3 pasang data
PLAGIAT
PLAGIATMERUPAKAN
MERUPAKANTINDAKAN
TINDAKANTIDAK
TIDAKTERPUJI
TERPUJI
61
Listing program proses dapat dilihat pada gambar 4.42. Subprogram ini berfungsi
untuk mengatur arah putar dan kecepatan motor DC. Limit switch1 bernilai high. Ketika
waktu buka sama dengan waktu yang sedang berjalan maka motor akan ON. Motor
bergerak berlawanan arah jarum jam sampai menyentuh limit switch1 maka secara
otomatis motor akan OFF dan limit switch1 bernilai low. Saat waktu tutup sudah sama
dengan waktu nyata maka motor akan kembali ON dan bergerak searah jarum jam. Limit
switch2 bernilai high. Jika sudah menyentuh limit switch2 maka motor akan OFF dan limit
switch2 bernilai low.
BAB V
KESIMPULAN DAN SARAN
5.1. Kesimpulan
Dari hasil percobaan dan pengujian pengaturan tirai berdasarkan waktu nyata
menggunakan prototipe ruangan dapat disimpulkan bahwa:
1. Berdasarkan pengujian yang telah dilakukan, sistem yang dirancang dapat bekerja
dengan baik sesuai mode yang dipilih.
2. Berdasarkan pengujian RTC, waktu yang ditampilkan tidak memiliki kesalahan (error
0%).
5.2. Saran
Saran untuk pengembangan pengaturan tirai berdasarkan waktu nyata menggunakan
prototipe ruangan adalah sebagai berikut:
1. Prototipe dikembangkan pada model sesungguhnya.
2. Mekanisme buka-tutup tirai ditambahkan dengan kondisi cuaca.
3. Dapat diprogram untuk jangka waktu yang lama.
62
PLAGIAT
PLAGIATMERUPAKAN
MERUPAKANTINDAKAN
TINDAKANTIDAK
TIDAKTERPUJI
TERPUJI
DAFTAR PUSTAKA
[1] http://architectaria.com/dekorasi-dan-desain-interior-untuk-menciptakan-ruang-
keluarga-yang-nyaman.html, diakses pada 20 September 2012
[2] Winoto, Ardi, 2008, Mikrokontroler AVR Atmega8/32/16/8535 dan pemrograman
dengan Bahasa C pada WinAVR, Bandung : Informatika.
[3] ----, 2011, Data Sheet Mikrokontroler Atmega8535, Atmel
[4] http://buayainstrumen.blogspot.com/2012/01/menggunakan-timer-0-overflow-
untuk.html, diakses 21 September 2012
[5] ----, Data Sheet DS1307, Dallas Semiconductor
[6] http://digilib.ittelkom.ac.id/index.php?option=com_content&view=article&id=772:rtc-
real-time-clock&catid=16:mikroprocessorkontroller&Itemid=14, diakses pada 2
November 2012
[7] Andrianto, Heri, 2008, Pemrograman Mikrokontroler AVR ATmega16 menggunakan
Bahasa C (CodeVision AVR), Bandung : Informatika.
[8] http://depokinstruments.com/2010/02/08/teknik-pengendalian-lcd-karakteri/#more-585,
diakses pada 2 November 2012
[9] Rahman, Fitri, 2010, Menghitung Nilai Resistor Pada Rangkaian LED,
http://elcottomotif.blogspot.com/2010/08/menghitung-nilai-resistor-pada.html, diakses
20 Agustus 2012.
[10] http://depokinstruments.com/2011/07/27/teori-keypad-matriks-4x4-dan-cara-
penggunaannya/, diakses tanggal 20 Agustus 2012.
[11] http://staff.ui.ac.id/internal/040603019/material/DCMotorPaperandQA.pdf diakses
pada 3 Januari 2013
[12] http://www.scribd.com/doc/54912333/15/A-4-3-Limit-Switch diakses pada 20 Agustus
2012
[13] http://dosen.narotama.ac.id/wp-content/uploads/2012/01/Sejarah-Robot.pdf diakses 17
Februari 2013
[14] ----, 2000, Data Sheet L298, STMikroelectronic
63
PLAGIAT
PLAGIATMERUPAKAN
MERUPAKANTINDAKAN
TINDAKANTIDAK
TIDAKTERPUJI
TERPUJI
L1
Keterangan:
cw = clockwise, berputar searah jarum jam
ccw = counter clockwise, berputar berlawanan arah jarum jam
PLAGIAT
PLAGIATMERUPAKAN
MERUPAKANTINDAKAN
TINDAKANTIDAK
TIDAKTERPUJI
TERPUJI
L2
Keterangan:
on = keadaan limit switch saat tertekan
off = keadaan limit switch saat tidak tertekan
PLAGIAT
PLAGIATMERUPAKAN
MERUPAKANTINDAKAN
TINDAKANTIDAK
TIDAKTERPUJI
TERPUJI
L3
Tabel L3. Hasil pengujian pergerakan motor pada menu manual dengan 1 pasang data masukan
Waktu Pergerakan Motor
Buka Tutup 1 2 3
[1] [1] Buka [1] Tutup [1] Buka [1] Tutup [1] Buka [1] Tutup [1]
07.00 07.30 cw ccw cw ccw cw ccw
Tabel L4. Hasil pengujian pergerakan motor pada menu manual dengan 2 pasang data masukan
Waktu Pergerakan Motor
Buka Tutup Buka Tutup 1 2 3
Buka Tutup Buka Tutup Buka Tutup Buka Tutup Buka Tutup Buka Tutup
[1] [1] [2] [2]
[1] [1] [2] [2] [1] [1] [2] [2] [1] [1] [2] [2]
08.00 08.30 16.00 16.30 cw ccw cw ccw cw ccw cw ccw cw ccw cw ccw
Tabel L5. Hasil pengujian pergerakan motor pada menu manual dengan 3 pasang data masukan
Waktu Pergerakan Motor
Buka Tutup Buka Tutup Buka Tutup 1 2
Buka Tutup Buka Tutup Buka Tutup Buka Tutup Buka Tutup Buka Tutup
[1] [1] [2] [2] [3] [3]
[1] [1] [2] [2] [3] [3] [1] [1] [2] [2] [3] [3]
09.00 09.30 12.00 12.30 17.00 17.30 cw ccw cw ccw cw ccw cw ccw cw ccw cw ccw
Keterangan:
ccw = counter clockwise, berputar berlawanan arah jarum jam
cw = clockwise, berputar searah jarum jam
PLAGIAT
PLAGIATMERUPAKAN
MERUPAKANTINDAKAN
TINDAKANTIDAK
TIDAKTERPUJI
TERPUJI
L4
Tabel L6. Hasil pengujian limit switch pada menu manual dengan 1 pasang data masukan
Waktu Kondisi Limit Switch
Buka Tutup 1 2 3
[1] [1] Buka [1] Tutup [1] Buka [1] Tutup [1] Buka [1] Tutup [1]
07.00 07.30 on off on off on off
Tabel L7. Hasil pengujian limit switch pada menu manual dengan 2 pasang data masukan
Waktu Kondisi Limit Switch
Buka Tutup Buka Tutup 1 2 3
Buka Tutup Buka Tutup Buka Tutup Buka Tutup Buka Tutup Buka Tutup
[1] [1] [2] [2]
[1] [1] [2] [2] [1] [1] [2] [2] [1] [1] [2] [2]
08.00 08.30 16.00 16.30 on off on off on off on off cw ccw cw ccw
Tabel L8. Hasil pengujian limit switch pada menu manual dengan 3 pasang data masukan
Pergerakan Motor
Waktu
1 2
Tutup Tutup Tutup Tutup Tutup Tutup
Buka Tutup Buka Tutup Buka Tutup Buka [1] Buka [2] Buka [3] Buka [1] Buka [2] Buka [3]
[1] [2] [3] [1] [2] [3]
[1] [1] [2] [2] [3] [3]
1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2
09.00 09.30 12.00 12.30 17.00 17.30 on off off on on off off on on off off on on off off on on off off on on off off on
Keterangan:
on = keadaan limit switch saat tertekan
off = keadaan limit switch saat tidak tertekan
PLAGIAT
PLAGIATMERUPAKAN
MERUPAKANTINDAKAN
TINDAKANTIDAK
TIDAKTERPUJI
TERPUJI
L5
Listing Program
L.9. Listing Program Keseluruhan
/*****************************************************
This program was produced by the
CodeWizardAVR V1.25.8 Professional
Automatic Program Generator
© Copyright 1998-2007 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
char buffer[7],dataPilih ;
int latch,i=0;int latch1=1;
char lagi,pilihan,kondisiMasukkan;
PLAGIAT
PLAGIATMERUPAKAN
MERUPAKANTINDAKAN
TINDAKANTIDAK
TIDAKTERPUJI
TERPUJI
L6
int a,indexMenu=0;
/*
h=hour, m=minute, s=second
d=day, mo=month, y=year
*/
#include <mega32.h>
#include <stdio.h>
#include <delay.h>
#include <stdlib.h>
#include <bcd.h>
char key;
const char KEYTABLE[4][4] = {{'1','2','3','A'},{'4','5','6','B'},{'7','8','9','C'},{'*','0','#','D'}};
char kbhit();
char getkeypad();
void initKeypad()
{
KEY_DIR=0x0F; //init keypad input output
KEY_OUT=0xF0; //mengaktifkan pull up pin pada output keypad
}
}
if(angka=='6')
{
lcd_gotoxy(baris,kolom);
lcd_putsf("6");
}
if(angka=='7')
{
lcd_gotoxy(baris,kolom);
lcd_putsf("7");
}
if(angka=='8')
{
lcd_gotoxy(baris,kolom);
lcd_putsf("8");
}
if(angka=='9')
{
lcd_gotoxy(baris,kolom);
lcd_putsf("9");
}
if(angka=='0')
{
lcd_gotoxy(baris,kolom);
lcd_putsf("0");
}
char getkeypad()
{
unsigned char debcount; //debounce counter
static unsigned char newkey=0;
static unsigned char oldkey=0;
do {
newkey = kbhit();
}
while(newkey == oldkey);
for(debcount=0; debcount < BOUNCING; debcount++)
{
newkey = kbhit();
if(newkey == 0 || newkey != oldkey)
{
debcount=0;
}
oldkey = newkey;
}
return(newkey);
}
char getDataKeypad()
{
int looper=1;
while(looper==1)
{
key=0;
key=getkeypad();
if(key!=0)
{
switch(key)
{
case '1': karakter=1;break;
case '2': karakter=2;break;
case '3': karakter=3;break;
case '4': karakter=4;break;
case '5': karakter=5;break;
case '6': karakter=6;break;
case '7': karakter=7;break;
case '8': karakter=8;break;
case '9': karakter=9;break;
case '0': karakter=0;break;
case '*': karakter='*';break; //geser kanan
case '#': karakter='#';break; //geser kiri, kembali
case 'A': karakter='A';break; //enter
case 'B': karakter='B';break; //pilih menu
case 'C': karakter='C';break; //motor buka otomatis
case 'D': karakter='D';break; //motor tutup otomatis
}
PLAGIAT
PLAGIATMERUPAKAN
MERUPAKANTINDAKAN
TINDAKANTIDAK
TIDAKTERPUJI
TERPUJI
L10
return key;
looper=0;
}
}
}
void tulis_data_ke_eeprom(int a)
{
int n;
for(n=0;n<=a;n++)
{
jamBukaE[n]=jamBuka[n];
menitBukaE[n]=menitBuka[n];
detikBukaE[n]=detikBuka[n];
jamTutupE[n]=jamTutup[n];
menitTutupE[n]=menitTutup[n];
detikTutupE[n]=detikTutup[n];
}
}
void hapus_eeprom()
{
int n;
for(n=0;n<=2;n++)
{
jamBukaE[n]=999; //nilai 999=data tidak tercapai
menitBukaE[n]=999;
detikBukaE[n]=999;
jamTutupE[n]=999;
menitTutupE[n]=999;
detikTutupE[n]=999;
}
}
void baca_data_ke_eeprom()
{
int n;
for(n=0;n<=2;n++)
{
jamBuka[n]=jamBukaE[n];
menitBuka[n]=menitBukaE[n];
detikBuka[n]=detikBukaE[n];
jamTutup[n]=jamTutupE[n];
menitTutup[n]=menitTutupE[n];
detikTutup[n]=detikTutupE[n];
}
}
void nama_hari()
{
PLAGIAT
PLAGIATMERUPAKAN
MERUPAKANTINDAKAN
TINDAKANTIDAK
TIDAKTERPUJI
TERPUJI
L11
void olahDataBuka()
{
lcd_clear();
lcd_gotoxy(0,0);lcd_putsf(" input waktuBuka");
lcd_gotoxy(2,1);lcd_putsf(":");
lcd_gotoxy(5,1);lcd_putsf(":");
delay_ms(100);
karakter=0;
jamPuluhanBuka = getDataKeypad();
nilaiJamPuluhanBuka=karakter;
konversiCharToLcd(jamPuluhanBuka,0,1);
jamSatuanBuka = getDataKeypad();
nilaiJamSatuanBuka=karakter;
konversiCharToLcd(jamSatuanBuka,1,1);
menitPuluhanBuka = getDataKeypad();
nilaiMenitPuluhanBuka=karakter;
konversiCharToLcd(menitPuluhanBuka,3,1);
menitSatuanBuka = getDataKeypad();
nilaiMenitSatuanBuka=karakter;
konversiCharToLcd( menitSatuanBuka,4,1);
detikPuluhanBuka = getDataKeypad();
nilaiDetikPuluhanBuka=karakter;
konversiCharToLcd(detikPuluhanBuka,6,1);
detikSatuanBuka = getDataKeypad();
nilaiDetikSatuanBuka=karakter;
konversiCharToLcd(detikSatuanBuka,7,1);
delay_ms(100);
lcd_clear();
jamBuka [i]=nilaiJamPuluhanBuka*10+nilaiJamSatuanBuka;
menitBuka[i]=nilaiMenitPuluhanBuka*10+nilaiMenitSatuanBuka;
detikBuka[i]=nilaiDetikPuluhanBuka*10+nilaiDetikSatuanBuka;
waktuBuka[i]=jamBuka[i]*3600+menitBuka[i]*60+detikBuka[i];
PLAGIAT
PLAGIATMERUPAKAN
MERUPAKANTINDAKAN
TINDAKANTIDAK
TIDAKTERPUJI
TERPUJI
L12
if(cekWaktu(jamBuka[i],menitBuka[i],detikBuka[i]))
{
olahDataBuka();
}
}
void olahDataTutup()
{
lcd_gotoxy(2,1);lcd_putsf(":");
lcd_gotoxy(5,1);lcd_putsf(":");
lcd_gotoxy(0,0);lcd_putsf("input waktuTutup");
jamPuluhanTutup = getDataKeypad();
nilaiJamPuluhanTutup=karakter;
konversiCharToLcd(jamPuluhanTutup,0,1);
jamSatuanTutup = getDataKeypad();
nilaiJamSatuanTutup=karakter;
konversiCharToLcd(jamSatuanTutup,1,1);
menitPuluhanTutup = getDataKeypad();
nilaiMenitPuluhanTutup=karakter;
konversiCharToLcd(menitPuluhanTutup,3,1);
menitSatuanTutup = getDataKeypad();
nilaiMenitSatuanTutup=karakter;
konversiCharToLcd(menitSatuanTutup,4,1);
detikPuluhanTutup = getDataKeypad();
nilaiDetikPuluhanTutup=karakter;
konversiCharToLcd(detikPuluhanTutup,6,1);
detikSatuanTutup = getDataKeypad();
nilaiDetikSatuanTutup=karakter;
konversiCharToLcd(detikSatuanTutup,7,1);
jamTutup [i]=nilaiJamPuluhanTutup*10+nilaiJamSatuanTutup;
menitTutup[i]=nilaiMenitPuluhanTutup*10+nilaiMenitSatuanTutup;
detikTutup[i]=nilaiDetikPuluhanTutup*10+nilaiDetikSatuanTutup;
waktuTutup[i]=jamTutup[i]*3600+menitTutup[i]*60+detikTutup[i];
if(cekWaktu(jamTutup[i],menitTutup[i],detikTutup[i]))
{
olahDataTutup();
}
}
void menuManual()
{
olahDataBuka();
olahDataTutup();
PLAGIAT
PLAGIATMERUPAKAN
MERUPAKANTINDAKAN
TINDAKANTIDAK
TIDAKTERPUJI
TERPUJI
L13
if(waktuBuka[i]>=waktuTutup[i])
{
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("salah!buka>tutup");
delay_ms(200);
menuManual();
}
if(i>0)
{
if(waktuBuka[i]<waktuTutup[i-1])
{
lcd_clear();
lcd_gotoxy(5,0);
lcd_putsf("salah!");
delay_ms(200);
menuManual();
}
}
delay_ms(100);
lcd_clear();
lcd_gotoxy(0,1);lcd_putsf("lagi?");
itoa(i,buffer); //char to int
lcd_puts(buffer);
if(i>=2)
{
lcd_clear();
lcd_gotoxy(1,1);
lcd_putsf("tekan sembarang");
}
lagi=getDataKeypad();
if(lagi=='A'&& i<2)
{
tulis_data_ke_eeprom(i);
i++;
menuManual();
}
}
void motorBuka()
PLAGIAT
PLAGIATMERUPAKAN
MERUPAKANTINDAKAN
TINDAKANTIDAK
TIDAKTERPUJI
TERPUJI
L14
{
int tempBuka=0;
lcd_clear();
lcd_gotoxy(0,0);lcd_putsf(" buka tirai");
while(latch==1)
{
if(PIND.0==1&&tempBuka!=1) //limit switch1 on
{
PORTD=0b01100000; //motor ccw
pwm_start(255); //kecepatan 100%
tempBuka=1;
}
if(PIND.0==0) //limit switch1 off
{
PORTD=0x00; //motor off
delay_ms(300);
latch=0;
OCR1A=0;
}
}
}
void motorTutup()
{
int tempTutup=0;
lcd_clear();
lcd_gotoxy(0,0);lcd_putsf(" tutup tirai");
while(latch==1)
{
if(PIND.1==1&&tempTutup!=1) //limit switch2 on
{
PORTD=0b00110000; //motor cw
pwm_start(180); //kecepatan 70%
tempTutup=1;
}
if(PIND.1==0) //limit switch2 off
{
PORTD=0x00; //motor off
delay_ms(300);
latch=0;
OCR1A=0;
}
}
}
void getSettingWaktu()
{
lcd_clear();
lcd_gotoxy(2,1);lcd_putsf(":");
PLAGIAT
PLAGIATMERUPAKAN
MERUPAKANTINDAKAN
TINDAKANTIDAK
TIDAKTERPUJI
TERPUJI
L15
lcd_gotoxy(5,1);lcd_putsf(":");
lcd_gotoxy(0,0);lcd_putsf("set Waktu");
karakter=0;
jamPuluhanSet=getDataKeypad();
nilaiJamPuluhanSet=karakter;
konversiCharToLcd(jamPuluhanSet,0,1);
jamSatuanSet=getDataKeypad();
nilaiJamSatuanSet=karakter;
konversiCharToLcd(jamSatuanSet,1,1);
menitPuluhanSet=getDataKeypad();
nilaiMenitPuluhanSet=karakter;
konversiCharToLcd(menitPuluhanSet,3,1);
menitSatuanSet=getDataKeypad();
nilaiMenitSatuanSet=karakter;
konversiCharToLcd(menitSatuanSet,4,1);
detikPuluhanSet=getDataKeypad();
nilaiDetikPuluhanSet=karakter;
konversiCharToLcd(detikPuluhanSet,6,1);
detikSatuanSet=getDataKeypad();
nilaiDetikSatuanSet=karakter;
konversiCharToLcd(detikSatuanSet,7,1);
delay_ms(30);
jamSet=nilaiJamPuluhanSet*10+nilaiJamSatuanSet;
menitSet=nilaiMenitPuluhanSet*10+nilaiMenitSatuanSet;
detikSet=nilaiDetikPuluhanSet*10+nilaiDetikSatuanSet;
if(cekWaktu(jamSet,menitSet,detikSet))
{
getSettingWaktu();
}
rtc_set_time(jamSet,menitSet,detikSet); //data waktu di-set di RTC
}
void getSettingHari()
{
unsigned char indexGeser=1,tempIndexGeser=0,latch=1;
char keypadButton;
lcd_gotoxy(0,0);
lcd_putsf("geser hari = */#");
lcd_gotoxy(0,1);
lcd_putsf("tekan A untuk ok");
while(latch==1)
{
keypadButton=getDataKeypad();
PLAGIAT
PLAGIATMERUPAKAN
MERUPAKANTINDAKAN
TINDAKANTIDAK
TIDAKTERPUJI
TERPUJI
L16
if(keypadButton=='*')
{
indexGeser++;
}
if(keypadButton=='#')
{
indexGeser--;
}
if(keypadButton=='A')
{
i2c_start(); //mulai komunikasi
i2c_write(0xd0); //alamat ds1307
i2c_write(3); //alamat register day
i2c_write(bin2bcd(indexGeser));
i2c_stop(); //berhenti
latch=0;
}
if(indexGeser<1)
{
indexGeser=7;
}
if(indexGeser>7)
{
indexGeser=1;
}
if(indexGeser==1&&tempIndexGeser!=indexGeser)
{
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf(" Sunday");
lcd_gotoxy(0,1);
lcd_putsf("tekan A untuk ok");
tempIndexGeser=1;
}
if(indexGeser==2&&tempIndexGeser!=indexGeser)
{
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf(" Monday");
lcd_gotoxy(0,1);
lcd_putsf("tekan A untuk ok");
tempIndexGeser=2;
}
if(indexGeser==3&&tempIndexGeser!=indexGeser)
{
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf(" Tuesday");
lcd_gotoxy(0,1);
lcd_putsf("tekan A untuk ok");
PLAGIAT
PLAGIATMERUPAKAN
MERUPAKANTINDAKAN
TINDAKANTIDAK
TIDAKTERPUJI
TERPUJI
L17
tempIndexGeser=3;
}
if(indexGeser==4&&tempIndexGeser!=indexGeser)
{
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf(" Wednesday");
lcd_gotoxy(0,1);
lcd_putsf("tekan A untuk ok");
tempIndexGeser=1;
}
if(indexGeser==5&&tempIndexGeser!=indexGeser)
{
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf(" Thursday");
lcd_gotoxy(0,1);
lcd_putsf("tekan A untuk ok");
tempIndexGeser=5;
}
if(indexGeser==6&&tempIndexGeser!=indexGeser)
{
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf(" Friday");
lcd_gotoxy(0,1);
lcd_putsf("tekan A untuk ok");
tempIndexGeser=6;
}
if(indexGeser==7&&tempIndexGeser!=indexGeser)
{
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf(" Saturday");
lcd_gotoxy(0,1);
lcd_putsf("tekan A untuk ok");
tempIndexGeser=7;
}
}
}
void getSettingTanggal()
{
lcd_clear();
lcd_gotoxy(2,1);lcd_putsf("-");
lcd_gotoxy(5,1);lcd_putsf("-");
lcd_gotoxy(0,0);lcd_putsf("Set Tanggal");
hariPuluhanSet=getDataKeypad();
nilaiHariPuluhanSet=karakter;
konversiCharToLcd(hariPuluhanSet,0,1);
PLAGIAT
PLAGIATMERUPAKAN
MERUPAKANTINDAKAN
TINDAKANTIDAK
TIDAKTERPUJI
TERPUJI
L18
hariSatuanSet=getDataKeypad();
nilaiHariSatuanSet=karakter;
konversiCharToLcd(hariSatuanSet,1,1);
bulanPuluhanSet=getDataKeypad();
nilaiBulanPuluhanSet=karakter;
konversiCharToLcd(bulanPuluhanSet,3,1);
bulanSatuanSet=getDataKeypad();
nilaiBulanSatuanSet=karakter;
konversiCharToLcd(bulanSatuanSet,4,1);
tahunPuluhanSet=getDataKeypad();
nilaiTahunPuluhanSet=karakter;
konversiCharToLcd(tahunPuluhanSet,6,1);
tahunSatuanSet=getDataKeypad();
nilaiTahunSatuanSet=karakter;
konversiCharToLcd(tahunSatuanSet,7,1);
tanggalSet=nilaiHariPuluhanSet*10+nilaiHariSatuanSet;
bulanSet=nilaiBulanPuluhanSet*10+nilaiBulanSatuanSet;
tahunSet=nilaiTahunPuluhanSet*10+nilaiTahunSatuanSet;
if(cekTanggal(tanggalSet,bulanSet))
{
getSettingTanggal();
}
delay_ms(100);
lcd_clear();
rtc_set_date(tanggalSet,bulanSet,tahunSet); //data tanggal di-set di RTC
getSettingHari(); //mengatur hari
}
void menuAuto()
{
lcd_clear();
i=2;
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf(" tekan 1-7 ");
lcd_gotoxy(0,0);
lcd_putsf("A=ok B=kembali");
while(latch1==1)
{
pilihan=getDataKeypad();
switch(pilihan)
PLAGIAT
PLAGIATMERUPAKAN
MERUPAKANTINDAKAN
TINDAKANTIDAK
TIDAKTERPUJI
TERPUJI
L19
{
case '1':
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("1");
jamBuka[0]=5;
menitBuka[0]=0;
detikBuka[0]=0;
jamTutup[0]=7;
menitTutup[0]=0;
detikTutup[0]=0;
jamBuka[1]=16;
menitBuka[1]=0;
detikBuka[1]=0;
jamTutup[1]=18;
menitTutup[1]=0;
detikTutup[1]=0;
lcd_clear();
delay_ms(25);
lcd_gotoxy(0,0);lcd_putsf(" 05:00-07:00");
lcd_gotoxy(0,1);lcd_putsf(" 16:00-18:00");
break;
case '2':
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("2");
jamBuka[0]=5;
menitBuka[0]=0;
detikBuka[0]=0;
jamTutup[0]=8;
menitTutup[0]=0;
detikTutup[0]=0;
jamBuka[1]=16;
menitBuka[1]=0;
detikBuka[1]=0;
jamTutup[1]=18;
menitTutup[1]=0;
detikTutup[1]=0;
lcd_clear();
delay_ms(25);
lcd_gotoxy(0,0);lcd_putsf(" 05:00-08:00");
lcd_gotoxy(0,1);lcd_putsf(" 16:00-18:00");
break;
PLAGIAT
PLAGIATMERUPAKAN
MERUPAKANTINDAKAN
TINDAKANTIDAK
TIDAKTERPUJI
TERPUJI
L20
case '3':
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("3");
jamBuka[0]=5;
menitBuka[0]=0;
detikBuka[0]=0;
jamTutup[0]=9;
menitTutup[0]=0;
detikTutup[0]=0;
jamBuka[1]=16;
menitBuka[1]=0;
detikBuka[1]=0;
jamTutup[1]=18;
menitTutup[1]=0;
detikTutup[1]=0;
lcd_clear();
delay_ms(25);
lcd_gotoxy(0,0);lcd_putsf(" 05:00-09:00");
lcd_gotoxy(0,1);lcd_putsf(" 16:00-18:00");
break;
case '4':
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("4");
jamBuka[0]=5;
menitBuka[0]=0;
detikBuka[0]=0;
jamTutup[0]=10;
menitTutup[0]=0;
detikTutup[0]=0;
jamBuka[1]=16;
menitBuka[1]=0;
detikBuka[1]=0;
jamTutup[1]=18;
menitTutup[1]=0;
detikTutup[1]=0;
lcd_clear();
delay_ms(25);
lcd_gotoxy(0,0);lcd_putsf(" 05:00-10:00");
lcd_gotoxy(0,1);lcd_putsf(" 16:00-18:00");
break;
PLAGIAT
PLAGIATMERUPAKAN
MERUPAKANTINDAKAN
TINDAKANTIDAK
TIDAKTERPUJI
TERPUJI
L21
case '5':
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("5");
jamBuka[0]=5;
menitBuka[0]=0;
detikBuka[0]=0;
jamTutup[0]=7;
menitTutup[0]=0;
detikTutup[0]=0;
jamBuka[1]=13;
menitBuka[1]=0;
detikBuka[1]=0;
jamTutup[1]=18;
menitTutup[1]=0;
detikTutup[1]=0;
lcd_clear();
delay_ms(25);
lcd_gotoxy(0,0);lcd_putsf(" 05:00-07:00");
lcd_gotoxy(0,1);lcd_putsf(" 13:00-18:00");
break;
case '6':
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("6");
jamBuka[0]=5;
menitBuka[0]=0;
detikBuka[0]=0;
jamTutup[0]=8;
menitTutup[0]=0;
detikTutup[0]=0;
jamBuka[1]=14;
menitBuka[1]=0;
detikBuka[1]=0;
jamTutup[1]=18;
menitTutup[1]=0;
detikTutup[1]=0;
lcd_clear();
delay_ms(25);
lcd_gotoxy(0,0);lcd_putsf(" 05:00-08:00");
lcd_gotoxy(0,1);lcd_putsf(" 14:00-18:00");
break;
PLAGIAT
PLAGIATMERUPAKAN
MERUPAKANTINDAKAN
TINDAKANTIDAK
TIDAKTERPUJI
TERPUJI
L22
case '7':
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("7");
jamBuka[0]=5;
menitBuka[0]=0;
detikBuka[0]=0;
jamTutup[0]=10;
menitTutup[0]=0;
detikTutup[0]=0;
jamBuka[1]=15;
menitBuka[1]=0;
detikBuka[1]=0;
jamTutup[1]=18;
menitTutup[1]=0;
detikTutup[1]=0;
lcd_clear();
delay_ms(25);
lcd_gotoxy(0,0);lcd_putsf(" 05:00-10:00");
lcd_gotoxy(0,1);lcd_putsf(" 15:00-18:00");
break;
break;
case 'B':
lcd_clear();
lcd_gotoxy(5,1);
lcd_putsf("kembali ke menu");
latch1=0;
break;
}
}
}
void Pilih_Menu(void)
{
if(indexMenu>3)
{
PLAGIAT
PLAGIATMERUPAKAN
MERUPAKANTINDAKAN
TINDAKANTIDAK
TIDAKTERPUJI
TERPUJI
L23
indexMenu=0;
}
if(indexMenu<0)
{
indexMenu=3;
}
if(indexMenu==0)
{
lcd_clear();
lcd_gotoxy(0,0);lcd_putsf("Menu Otomatis...");
lcd_gotoxy(0,1);lcd_putsf("ya=A *<<< #>>>");
}
if(indexMenu==1)
{
lcd_clear();
lcd_gotoxy(0,0);lcd_putsf("Menu Manual.....");
lcd_gotoxy(0,1);lcd_putsf("ya=A *<<< #>>>");
}
if(indexMenu==2)
{
lcd_clear();
lcd_gotoxy(0,0);lcd_putsf("Set waktu.......");
lcd_gotoxy(0,1);lcd_putsf("ya=A *<<< #>>>");
}
if(indexMenu==3)
{
lcd_clear();
lcd_gotoxy(0,0);lcd_putsf("kembali.........");
lcd_gotoxy(0,1);lcd_putsf("ya=A *<<< #>>>");
}
dataPilih=getDataKeypad();
if(dataPilih=='*')
{
dataPilih=0;
indexMenu++;
Pilih_Menu();
}
if(dataPilih=='#')
{
dataPilih=0;
indexMenu--;
Pilih_Menu();
}
if(dataPilih=='A')
{
dataPilih=0;
if(indexMenu==0)
PLAGIAT
PLAGIATMERUPAKAN
MERUPAKANTINDAKAN
TINDAKANTIDAK
TIDAKTERPUJI
TERPUJI
L24
{
hapus_eeprom();
menuAuto();
}
if(indexMenu==1)
{
hapus_eeprom();
menuManual();
}
if(indexMenu==2)
{
getSettingWaktu(); //mengatur waktu
getSettingTanggal(); //mengatur tanggal
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("berhasil");
delay_ms(2000);
}
if(indexMenu==3)
{
return;
}
}
}
void main(void)
{
// Declare your local variables here
// Port B initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTB=0x00;
DDRB=0x00;
// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;
// Port D initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
PLAGIAT
PLAGIATMERUPAKAN
MERUPAKANTINDAKAN
TINDAKANTIDAK
TIDAKTERPUJI
TERPUJI
L25
i2c_init();
rtc_init(0,0,0);
lcd_init(16);
lcd_gotoxy(0,0);
lcd_putsf("Menu tekan B"); //B untuk memilih menu
delay_ms(3000);
initKeypad(); //cek keypad
if(adakah=='0') //tidak ada data
{
getSettingWaktu(); //set waktu
getSettingTanggal(); //set tanggal
Pilih_Menu();
adakah='1'; //ada data
}
baca_data_ke_eeprom();
while (1)
{
kondisiMasukkan=kbhit();
switch(kondisiMasukkan)
{
case 'B': delay_ms(300);kondisiMasukkan=0;Pilih_Menu();break;
case 'C': delay_ms(300);latch=1;motorBuka();break; //buka otomatis
case 'D' :delay_ms(300);latch=1;motorTutup();break; //tutup otomatis
}
rtc_get_time(&h,&m,&s); //akses jam
rtc_get_date(&d,&mo,&y); //akses tanggal
PLAGIAT
PLAGIATMERUPAKAN
MERUPAKANTINDAKAN
TINDAKANTIDAK
TIDAKTERPUJI
TERPUJI
L26
for(a=0;a<=i;a++)
{
if(h==jamBuka[i]&&m==menitBuka[i]&&s==detikBuka[i])
{
latch=1;
motorBuka();
lcd_clear();
}
if(h==jamTutup[i]&&m==menitTutup[i]&& s==detikTutup[i])
{
latch=1;
motorTutup();
lcd_clear();
}
}
if(s!=sTemp)
{
sTemp=s;
lcd_clear();
lcd_gotoxy(0,0);
sprintf(temp,"Time %d:%d:%d",h,m,s);
lcd_puts(temp);
lcd_gotoxy(0,1);
sprintf(temp,"Date %d-%d-%d",d,mo,y);
lcd_puts(temp);
nama_hari();
}
delay_ms(10);
};
}
PLAGIAT
PLAGIATMERUPAKAN
MERUPAKANTINDAKAN
TINDAKANTIDAK
TIDAKTERPUJI
TERPUJI
L27