Sistem Kunci Kombinasi Motor Sederhana versi 1
Aku masih mau ngomongin rangkaian sederhana lagi. Alat yang aku buat masih seputaran motor baru yang kami punya. Ide ini muncul dari teman kerja, ceritanya begini:
Teman kerjaku juga beli sepeda motor baru tapi kekuatirannya beda dengan isteriku. Kalau dia mikir soal keamanan motor sewaktu parkir. Jadi dia minta saran dibuatin alat semacam kunci kambinasi motor yang sederhana. Maksudnya biar orang ga gampang ngidupin motor.
Pertama aku tanya, maunya seperti apa? Lalu dia mulai jelasin kemauannya. Dia mau masang alarm yang cara mengaktifkannya harus menggunakan beberapa instrumen yang ada di motor seperti sen, rem dan klakson. Cuma gimana kerjanya terserah aku. Lalu sesuai ekspektasinya, aku kasih gambaran begini sama dia:
Aku buatin sistem kunci kombunasi motor yang hanya bisa diaktifkan dengan menggunakan beberapa instrumen di motor dengan langkah secara berurutan. Contoh: (1) Masukan persneleng ke gigi/gear 1 (keluar dari posisi netral); (2) tekan rem; dan (3) tekan sen kanan. Urutannya harus seperti itu baru kunci kombinasi aktif. Dia setuju, terus ya udah aku minta kertas sama dia dan mulai corat-coret gambar rangkaian yang dimaksud. Hasilnya seperti gambar di bawah ini:
Rangkaiannya sederhana aja kan ? Aku cuma perlu 6 buah komponen antara lain: 2 buah relay dan 4 buah dioda saja.
Selanjutnya aku jelasin cara kerja ke temanku itu, seperti ini:
Sewaktu kontak motor dihidupkan atau di-ON-kan, biasanya posisi persneleng adalah NETRAL bukan masuk gigi berapa aja apalagi GEAR 1. Instrumen lainnya juga pada posisi OFF seperti REM, SEN baik KANAN atau KIRI juga KLAKSON atau HORN termasuk tombol START. Nah sebelum jelasin soal lebih lanjut kerja alat di atas, perlu tahu sedikit nih soal instrumen-instrumen motor.
Saklar IGNITION baru ON dan mengeluarkan tegangan 12 volt dari batere sewaktu posisi saklar di putar ke ON. Instrumen lain seperti REM, SEN KANAN, SEN KIRI, KLAKSON dan START akan menghasilkan tegangan 12 volt kalau dioperasikan. Sementara posisi NETRAL dan GEAR justru kebalikannya menghubungkan panel instrumen ke GROUND atau BODY.
Sekarang lanjut lagi....
Pada awal dihidupkan, sesuai gambar di atas maka baru IGNITION yang mengeluarkan tegangan 12 volt. Baik relay K1 atau K2 , keduanya belum didayai alias energized alias masih mati atau OFF. Kalau sobat coba hidupkan motor baik pakai starter atau engkol, sampai kelenger juga motor enggak bakal hidup.
Pindahkan dulu posisi persneleng ke GEAR 1, berarti sekarang kumparan relay K1 sudah terhubung ke GROUND. Tekan REM, terserah mau rem tangan atau kaki, tahan jangan dilepas. Saat itu relay K2 belum bereaksi karena posisi saklar K1E1 masih terbuka pada posisi NO (normally opened). Kemudian baru geser saklar sen ke posisi SEN KANAN. Sekarang relay K1 dapat tegangan dari SEN KANAN lewat D2. Posisi saklar relay K1E1 juga menghubungkan tegangan dari REM lewat D1 dan menyebabkan relay K2 sekarang juga hidup. Hidupnya relay K2 membuat posisi saklar-saklar K2E1 berubah, relay K2 sekarang mendapat panjaran tegangan dari IGNITION lewat K2E1. Meskipun selanjutnya REM dilepas, SEN dimatikan dan posisi persneleng ke NETRAL, relay K2 tetap hidup karena ditahan oleh saklar relay K2E1.
Sederhana kan .... siapa yang nyangka kalau mau hidupkan motor harus tekan masukin gigi 1, tekan rem dan sen kanan?
Terus apa fungsi K2E2 di samping gambar di atas?
Perlu tahu dulu nih. Motor sekarang semua sudah pakai CDI tapi antara merek motor yang satu dan lainnya enggak sama. Contoh, motor merek Yamaha dan Suzuki untuk menghidupkan motor, CDI-nya harus dihubungkan ke tegangan 12 volt. Sementara kalau merek Honda kebalikannya, CDI-nya harus dihubungkan ke ground baru bisa hidup. Nah, kalau alat ini dipasang kemotor Suzuki atau Yamaha maka posisi harus dihubingkan ke power 12 volt, sebaliknya kalau dipasang kemotor Honda maka harus dihubungkan ke ground atau body.
Catatan: untuk relay K2 disyaratkan menggunakan relay dengan kemampuan saklar paling tidak berkemampuan minimal 5 ampere karena harus diumpan ke CDI.
Untuk kombinasi lainnya, rangkaian di atas terutama masukan dari instrumen motor bisa ditukar atau diganti sesuai keinginan. Masukan untuk REM dan SEN KANAN bisa ditukar dengan instrumen lainnya seperti SEN KIRI, KLAKSON atau STARTER terserah gimana ngaturnya. Dan posisi GEAR 1 bisa ke persneleng mana aja atau NETRAL.
Tapi aku mau ngasih tahu nih, kunci kombinasi di atas bisa dipasang di motor dan berfungsi baik kalau kondisi aki masih atau lumayan bagus. Kalau kondisi aki soak maka bisa dibayangkan pasti alat tersebut kurang berfungsi dengan baik.
Mau cerita sedikit nih....
Ternyata di samping temanku naksir sama alat di atas, ternyata dia coba tawarin ke teman-temannya. Hasilnya, beberapa temannya juga minta dibuatin alat serupa di atas. Wah, lumayan juga ternyata bisa dikomersilkan. Seterusnya aku dan temanku membuat lagi alat yang sama.
Waktu itu aku masih kerja dan untuk memberikan servis kepada pelanggan yang notabene adalah teman-teman dari temanku itu maka aku minta pemasangan dilakukan pada hari minggu karena hari sabtunya aku baru sempat buat. Lumayan juga dalam sehari aku bisa masang sampai 2 kendaraan bersama temanku itu. Bahkan saking seringnya masang hampir setiap libur kerja di hari sabtu dan minggu sampai-sampai kami namai produk tersebut dengan SAMING alias kerjaan sabtu dan minggu, he....he.
Nah, ada info sedikit nih, penting....
Alat apapun kalau dipasang dimotor haruslah aman. Perangkat elektronik peka sekali dengan air. Jadi sewaktu motor sedang dicuci ada kemungkinan air akan merembes masuk ke alat, akibatnya alatpun jadi rusak. Aku punya solusi untuk itu, bersama temanku alat yang dibuat diamankan dengan resin seperti yang juga bisa dilihat pada CDI. Dengan menggunakan resin kita tidak kuatir lagi terkena air. Bahkan pernah suatu ketika, pelanggan penasaran dan minta aku membuktikan kalau alat itu anti air. Maka untuk meyakinkannya aku minta ember yang diisi air sampai penuh dan kemudian merendam alat sambil terus dioperasikan dan hasilnya oke, alat tetap kerja meski direndam dalam air.
Sayangnya bisnis kecil-kecilan itu tidak lama karena aku capek tiap sabtu buat dan minggu pasang. Enggak ada liburnya.
Tapi sekarang kalau masih ada yang mau pesan lagi, boleh aja. Ada kok temanku yang siap buatin dan pastinya pasang sendiri nanti aku bantu.
Udah ya, makasih udah baca postingan aku. Semoga bisa bermanfaat, sukur-sukur bisa diterapkan di motor sobat semua.
Salam....
Membuat Peraga Jam Dengan Led 7 Segmen Dilengkapi Dengan Alarm
Hai Sobat yang baik. Pada tulisanku sebelum ini, kita sudah melihat apa dan bagaimana mengoperasikan chip RTC-RAM baik dengan DS1302 maupun DS1307. Kita juga sudah membahas mengenai pengoperasian peraga dengan LED 7 segmen. Bagaimana kalau kali ini kita mencoba mengimplementasikan apa yang sudah pernah ditulis tersebut dalam sebuah rangkaian yang mungkin bermanfaat dan menyenangkan bagi para penghobi elektronik digital.
Tulisanku kali ini akan membahas mengenai pembuatan peraga jam menggunakan RTC-RAM DS1307 dengan penampil LED 7 segmen. Sebagai mikrokontroler akan digunakan AT89C51 dari keluarga MCS51 yang murah meriah. Sebelum merancang, ada baiknya kita memahami apa yang diinginkan pada rangkaian kita. Maka aku akan buatkan identifikasi spesifikasi rancangan tersebut, yaitu:
1. Rangkaian akan menampilkan peragaan waktu dalam format jam dan menit. Untuk itu setidaknya memerlukan 4 digit LED 7 segmen.
2. Rangkaian juga bisa menampilkan tanggal dan bulan jika perlu tahun dengan menekan tombol tertentu yang berkaitan dengan peragaan tanggal, bulan dan tahun. Nah, tombol-tombol ini juga akan digunakan juga untuk pengaturan waktu.
3. Rangkaian juga akan dilengkapi dengan sistem alarm untuk memberikan tambahan fasilitas yang menarik.
Wah banyak juga ya maunya. Tapi sebagai penghobi seharusnya semakin banyak semakin menarik. Sekarang kita mulai saja merancang rangkaian yang diinginkan.
Karena kita hanya akan menampilkan sebanyak 4 digit, maka aku menetapkan menggunakan teknik peragaan LED 7 segmen secara scanning untuk menghemat komponen. Agar terlihat atraktif akan ditambahkan 2 buah LED untuk flashing detik.
Untuk melakukan seting waktu dan alarm aku gunakan 2 tombol saja biar hemat, yaitu untuk tombol menu (SET) dan tombol untuk display (CEK). Tidak apa-apa kan?
Sebelum lupa, untuk alarm diperlukan 1 pin lagi.
Nah, kita langsung lihat rangkaiannya saja.
Untuk penampil waktu menggunakan sebanyak 12 saluran gerbang dengan rincian 7 bit gerbang P0 terdiri dari P00 – P06 untuk dekoder LED 7 segmen dan 4 bit gerbang P1 yaitu P10 – P13 untuk scanning digit (LED1 – LED4). Sementara indikator detik menggunakan P07.
Untuk informasi waktu kita menggunakan DS1307 yang memiliki antarmuka I2C sehingga hanya membutuhkan 2 saluran gerbang yaitu P26 untuk SCLK dan P27 untuk SDA. DS1307 memiliki fitur keluaran gelombang persegi atau SQW yang akan disetel pada perioda 1 detik dan dihubungan pada gerbang p25.
Peraga waktu kita dilengkapi dengan tombol untuk pengaturan yang terdiri dari SET dihubungkan pada gerbang P20 dan CEK pada gerbang P21.
Nah, sebagai pelengkap akan kita tambahkan keluaran untuk alarm yang akan dihubungkan pada buzer melalui gerbang P23.
Oke lah, kita langsung saja menuju barisan program yang harus diisikan pada mikrokontroler.
$mod51
BufferWaktu data 8h
BufferProg data 0bh
RegBendera data 2fh
FSRDY bit RegBendera.0
FACK bit RegBendera.1
FLB bit RegBendera.2
Menu bit RegBendera.3
Dsp bit RegBendera.4
Ubahan bit RegBendera.5
Pulsa bit RegBendera.6
Alarm bit RegBendera.7
Data7Seg data p0
LED_Detik bit p0.7
Digit7Seg data p1
Digit1 bit p1.0
Digit2 bit p1.1
Digit3 bit p1.2
Digit4 bit p1.3
T_Set bit p2.0
T_Cek bit p2.1
Buzzer bit p2.3
SDA bit p2.7
SCL bit p2.6
PulsaDetik bit p2.5
StackPointer data 30h
org 0h
Inisialisasi:
mov sp, #StackPointer-1
mov r0, #BufferWaktu
mov a, #8
mov b, #0
acall DS1307_Read
mov a, BufferWaktu
anl a, #01111111b
mov BufferWaktu, a
mov a, BufferWaktu+2
anl a, #00111111b
mov BufferWaktu+2, a
mov BufferWaktu+7, #10h
mov a, #8
mov b, #0
acall DS1307_Write
mov Data7Seg, #255
mov Digit7Seg, #11110111b
mov r2, #128
Setelah inisialisasi, program dimulai dengan melakukan beberapa pemeriksaan termasuk tombol dan status pulsa SQW dari DS1307.
Mulai:
jnb T_Set, TombolMenu
jnb T_Cek, TombolCek
jb PulsaDetik, PeragaDetik
jnb LED_Detik, Peraga
setb Pulsa
clr LED_Detik
jb Menu, Peraga
jb Dsp, Peraga
Penyegaran informasi waktu diambil pada pulsa rendah yang diindikasikan oleh SQW. Jumlah data yang diambil berjumlah 11 byte meskipun beberapa tak digunakan, dimulai dari alamat register 01H atau register menit. Data lainnya yang dibaca meliputi jam, hari (tidak digunakan) tanggal, bulan, tahun dan kontrol (tak dipakai) serta 4 byte isi data RAM yang berisi menit dan jam alarm, durasi alarm dan Bell Chime penunjuk pergantian jam.
Setelah penyegaran informasi waktu, jika seting Bell Chime bukan 0 maka setiap nilai menit menunjuk 00 berarti juga perubahan jam maka program akan mengaktifkan buzzer selama 5 detik sesuai isi register R4. Tetapi fasilitas Bell Chime tidak dijalankan jika status alarm sedang aktif.
AmbilWaktu:
mov r0, #BufferWaktu+1
mov a, #10
mov b, #01h
acall DS1307_Read
clr LED_Detik
jb Alarm, PeriksaSelesai
mov a, BufferWaktu+11
jz PeriksaAlarm
mov a, BufferWaktu+1
jnz BellChime
clr Buzzer
mov r4, #5
ajmp PeriksaAlarm
BellChime:
setb Buzzer
Berikut adalah program memeriksa waktu alarm. Data alarm yang ada pada RAM DS1307 dan disimpan pada BufferWaktu diperiksa. Jika sama maka bit Alarm dan buzzer akan diaktifkan. Lamanya durasi alarm juga dimasukkan pada register R4 untuk dicacah mundur, nanti.
PeriksaAlarm:
mov a, BufferWaktu+8
xrl a, BufferWaktu+1
jnz PeriksaSelesai
mov a, BufferWaktu+9
xrl a, BufferWaktu+2
jnz PeriksaSelesai
mov r4, BufferWaktu+10
setb Alarm
clr Buzzer
Usai pemeriksaan waktu alarm, program dilanjutkan dengan persiapan untuk memperagakan informasi yang diterima pada peraga LED 7 segmen.
PeriksaSelesai:
mov r0, #BufferWaktu+2
ajmp Peraga
Untuk mematikan alarm, Sobat cukup menekan sembarang tombol yang ada.
TombolMenu:
jb Alarm, ResetAlarm
ajmp MenuProg
TombolCek:
jb Alarm, ResetAlarm
ajmp MenuCek
ResetAlarm:
clr Alarm
setb Buzzer
jnb T_Set, $
jnb T_Cek, $
ajmp Mulai
PeragaDetik:
jnb LED_Detik, Peraga
setb LED_Detik
Peragaan tampilan LED dimulai di sini. Waktu aktif setiap LED 7 segmen berkisar antara 5 ms dengan nilai register R2 adalah 128. Dan pengulangan waktu aktif menjadi sekitar 20 ms atau kurang lebih 50 Hz.
Peraga:
djnz r2, Mulai
mov r2, #128
PeragaLED1:
mov a, @r0
dec r0
jb Digit4, PeragaLED2
swap a
acall DataLED
clr Digit1
ajmp AkhirPeraga
PeragaLED2:
jb Digit1, PeragaLED3
acall DataLED
clr Digit2
ajmp AkhirPeraga
PeragaLED3:
mov a, @r0
jb Digit2, PeragaLED4
swap a
acall DataLED
clr Digit3
ajmp AkhirPeraga
PeragaLED4:
setb Digit3
acall DataLED
clr Digit4
AkhirPeraga:
jb Menu, DelayPeraga
jb Dsp, DelayPeraga
jnb Buzzer, DelayPeraga
ajmp Mulai
DelayPeraga:
jnb Pulsa, KeluarPeraga
clr Pulsa
djnz r4, KeluarPeraga
mov RegBendera, #0
clr Buzzer
ajmp AmbilWaktu
KeluarPeraga:
ajmp Mulai
Tampilan LED 7 segmen adalah sesuai dengan data pada Kode7Segmen. Jika diterjemahkan maka akan menampilkan 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, t, A, d, C dan blank. Untuk mengambil kode tersebut mengunakan perintah MOVC
DataLED:
mov Digit7Seg, #255
mov Data7Seg, #255
anl a, #0fh
mov dptr, #Kode7Segmen
movc a, @a+dptr
mov Digit7Seg, a
ret
Kode7Segmen:
db 11000000b, 11111001b, 10100100b, 10110000b, 10011001b
db 10010010b, 10000010b, 11111000b, 10000000b, 10010000b
db 10000111b, 10001000b, 10100001b, 11000110b, 255
Berikut adalah program rutin MenuProg yang berkaitan dengan penekanan tombol SET. Untuk kebutuhan pemrograman maka digunakan BufferProg untuk menyimpan informasi yang akan dilakukan pengaturan ulang dimulai dari pengaturan menit sampai pengaturan Chime.
Setiap penekanan tombol SET maka menu akan berpindah dari menu pertama hingga akhir sebanyak total 9 menu kemudian kembali ke posisi normal yaitu menunjukkan waktu jam dan menit.
MenuProg:
clr LED_Detik
clr Buzzer
jnb Dsp, ProsesMenu
ajmp AmbilWaktu
ProsesMenu:
mov r0, #BufferProg
mov a, #10
mov b, #1
acall DS1307_Read
mov r4, #5
jb Menu, MenuBerikut
setb Menu
clr Ubahan
mov r1,#0
ajmp MenuMenit
Setiap penekanan tombol SET maka menu akan berpindah dari menu pertama hingga terakhir sebanyak 9 menu kemudian kembali ke posisi normal menunjukkan waktu jam dan menit. Tapi sebelum kembali ke posisi normal jika terdapat perubahan maka perubahan tersebut akan disimpan.
MenuBerikut:
inc r1
cjne r1, #9, MenuMenit
jnb T_Set, $
setb Buzzer
jb Ubahan, SimpanUbahan
ajmp AmbilWaktu
SimpanUbahan:
mov r0, #BufferProg
mov a, #10
mov b, #1
acall DS1307_Write
ajmp AmbilWaktu
Setiap menu akan mengubah tampilan di mana digit 1 dan 2 yang semula menunjukkan waktu jam menjadi penunjuk kode menu. Untuk menu pengaturan menit akan menampilkan “t1”, Menu Jam dengan “t2”, tanggal dengan “t3”, bulan dengan “t4”, tahun dengan “t5”, penunjuk menit alarm dengan “A1”, jam alarm dengan “A2”, durasi alarm dengan “A3” dan terakhir untuk Chime dengan “C1”.
Untuk digit 3 dan 4 adalah informasi sesuai dengan menu-menu di atas. Semua data dalam format BCD (binary code decimal). Penunjuk jam menggunakan format 24 jam. Tahun dibatasi hingga maksimal sampai dengan 2025, jika ingin lebih tinggi bisa mengubahnya tapi maksimal adalah 2099. Durasi alarm juga dibatasi hingga 10 menit yang juga bisa dirubah sampai dengan maksimal 99 menit.
MenuMenit:
cjne r1, #0, MenuJam
mov r0, #BufferProg
jnb T_Cek, SetMenit
mov BufferWaktu+2, #0a1h
mov BufferWaktu+1, BufferProg
ajmp AkhirMenu
SetMenit:
acall UbahWaktu
cjne a, #60h, X_Ubah
MenuJam:
cjne r1, #1, MenuTanggal
mov r0, #BufferProg+1
jnb T_Cek, SetJam
mov BufferWaktu+2, #0a2h
mov BufferWaktu+1, BufferProg+1
ajmp AkhirMenu
SetJam:
acall UbahWaktu
cjne a, #24h, X_Ubah
ajmp W_Reset
MenuTanggal:
cjne r1, #2, MenuBulan
mov r0, #BufferProg+3
jnb T_Cek, SetTanggal
mov BufferWaktu+2, #0a3h
mov BufferWaktu+1, BufferProg+3
ajmp AkhirMenu
SetTanggal:
acall UbahWaktu
cjne a, #24h, X_Ubah
ajmp W_Reset
MenuBulan:
cjne r1, #3, MenuTahun
mov r0, #BufferProg+4
jnb T_Cek, SetBulan
mov BufferWaktu+2, #0a4h
mov BufferWaktu+1, BufferProg+4
mov r0, #BufferProg+4
ajmp AkhirMenu
SetBulan:
acall UbahWaktu
cjne a, #13h, X_Ubah
ajmp T_Reset
W_Reset:
mov a, #0
ajmp X_Ubah
T_Reset:
mov a, #1
X_Ubah:
mov @r0, a
ajmp AkhirMenu
MenuTahun:
cjne r1, #4, MenuAlarmMenit
mov r0, #BufferProg+5
jnb T_Cek, SetTahun
mov BufferWaktu+2, #0a5h
mov BufferWaktu+1, BufferProg+5
ajmp AkhirMenu
SetTahun:
acall UbahWaktu
cjne a, #25h, X_Ubah
ajmp T_Reset
MenuAlarmMenit:
cjne r1, #5, MenuAlarmJam
mov r0, #BufferProg+6
jnb T_Cek, SetMenit
mov BufferWaktu+2, #0b1h
mov BufferWaktu+1, BufferProg+6
ajmp AkhirMenu
MenuAlarmJam:
cjne r1, #6, AlarmDurasi
mov r0, #BufferProg+7
jnb T_Cek, SetJam
mov BufferWaktu+2, #0b2h
mov BufferWaktu+1, BufferProg+7
ajmp AkhirMenu
AlarmDurasi:
cjne r1, #7, BellJam
jnb T_Cek, SetDurasi
mov BufferWaktu+2, #0b3h
mov BufferWaktu+1, BufferProg+8
mov r0, #BufferProg+8
ajmp AkhirMenu
SetDurasi:
acall UbahWaktu
cjne a, #11h, X_Ubah
ajmp T_Reset
BellJam:
mov r0, #BufferProg+9
jnb T_Cek, SetChime
mov BufferWaktu+2, #0c1h
mov BufferWaktu+1, BufferProg+9
ajmp AkhirMenu
SetChime:
mov a, @r0
inc a
cjne a, #2, X_Ubah
ajmp W_Reset
UbahWaktu:
clr ac
clr c
mov a, @r0
swap a
anl a, #0fh
xch a, b
mov a, @r0
anl a, #0fh
da a
swap a
orl a, b
swap a
ret
AkhirMenu:
jnb T_Set, $
jnb T_Cek, $
setb Buzzer
mov r0, #BufferWaktu+2
ajmp Peraga
Berikut adalah program yang berkaitan dengan penekan tombol CEK yang bisa digunakan untuk pengaturan tapi juga untuk peragaan lainnya selain jam dan menit yaitu tanggal/bulan, tahun dan waktu alarm.
MenuCek:
clr LED_Detik
clr Buzzer
jnb Menu, ProsesDsp
ajmp MenuMenit
ProsesDsp:
mov r4, #5
jb Dsp, DspBerikut
setb Dsp
mov r1,#0
ajmp DspTanggal
DspBerikut:
inc r1
cjne r1, #3, DspTanggal
jnb T_Cek, $
setb Buzzer
ajmp AmbilWaktu
DspTanggal:
cjne r1, #0, DspTahun
mov BufferWaktu+1, BufferWaktu+4
mov BufferWaktu+2, BufferWaktu+5
ajmp AkhirMenu
DspTahun:
cjne r1, #1, DspAlarm
mov BufferWaktu+1, BufferWaktu+6
mov BufferWaktu+2, #20h
ajmp AkhirMenu
DspAlarm:
mov BufferWaktu+1, BufferWaktu+8
mov BufferWaktu+2, BufferWaktu+9
ajmp AkhirMenu
Untuk melengkapi program seutuhnya, diperlukan 2 buah modul untuk antar muka yang ada pada I2C.TXT dan DS1307.TXT yang sudah pernah aku sampaikan pada tulisanku sebelum ini.
$include (C:\tesasm\I2C.txt)
$Include (C:\tesasm\DS1307.txt)
End
Nah seperti itulah Sobat semua rancangan kita mengenai Jam dengan LED 7 segmen yang dilengkapi dengan alarm yang dapat disetel waktunya dan setiap jam juga ada bell chime. Masih banyak fasilitas yang dapat dikembangkan dalam pengimplementasiannya. Jadi bukan sekedar penampil waktu biasa.
DS1307 memiliki kapasitas sebesar 56 byte yang jika diinginkan dapat diisi dengan setidaknya 27 waktu alarm. Tapi penulis tidak ingin membayangkan jika hampir setiap jam alat kita membunyikan alarm belum lagi ditambah dengan bell chime. Tapi bel chime bisa di non-aktifkan dan keluaran untuk buzzer bisa digunakan untuk apa saja.
AT89C51 memiliki 32 bit gerbang I/O. Untuk rangkaian di atas masih menyisakan bahkan 1 byte gerbang yang benar-benar belum digunakan yaitu P3 ditambah 6 bit gerbang lainnya. Fasilitas serial pada P30 dan P31 juga perlu diberdayagunakan, belum lagi gerbang interupsi P32 dan P33, selain itu gerbang pewaktu P34 dan P35.
Aku pernah mencoba melengkapinya dengan remot audio/video yang ada di rumah, atau terhubung dengan PC melalui RS-232 baik menggunakan kabel maupun IR. Atau mengganti tombol dengan keypad. Bahkan yang masih terpasang tapi akhirnya tampilan LEDnya dihilangkan adalah pewaktu nyala lampu terprogram untuk semua lampu rumah.
Pokoknya sebagai penghobi elektronika adalah suatu yang menyenangkan mengotak-atik perangkat elektronik khususnya buatan sendiri.
Sudah ya, terima kasih sudah membaca artikel aku. Semoga bermanfaat dan bisa diterapkan oleh sobat semua.
Mengendalikan Keluaran ON – OFF Dengan Remot
Rangkaian yang akan dibahas pada kesempatan ini masih sekedar permainan. Tapi bisa jadi bermanfaat untuk aplikasi di rumah atau di mana saja. Aku menggunakan rangkaian ini untuk di rumah sebagai pengatur lampu tetapi sudah dimodifikasi dengan menambahkan memori AT93C46 tentu saja. Bahkan sudah dikembangkan dengan penambahan RTC (real time clock) DS1302 sehingga hidup lebih praktis di rumah mungilku.
Ini hanya konsep dasar yang dapat dikembangkan lebih jauh. Sobat bisa mengaplikasikan dengan beragam fasilitas yang dapat dikombinasikan dengan berbagai perangkat yang dapat dicari dalam tulisan-tulisan terdahulu pada situsku.
Perangkat pemancar remot, biasanya sesuai pengalaman penulis menggunakan IR LED dengan frekuensi 36 kHz. Penulis juga sering menggunakan jenis TSAL6200 dan pada kondisi baik dapat menjangkau hampir 35 meter . Untuk bagian penerimanya menggunakan sebuah TSOP4836 di mana keluarannya sudah dapat langsung dihubungkan ke gerbang mikrokontroler. Mengenai penerima IR TSOP4836 dapat dilihat pada gambar berikut:
Kita perlu menambahkan sebuah resistor senilai 100 ohm dan kapasitor 4,7 uF pada rangkaian TSOP4836 untuk mereduksi riple tegangan dari catu daya.
Berikut aku tampilkan gambar rangkaian berbasis mikrokontroler AT89C2051 yang akan menerima sinyal IR di atas dan memprosesnya untuk mengendalikan ON dan OFF sebuah keluaran relay. Data akan disimpan pada memori AT93C46 yang diorganisasikan ke dalam 8 bit yang terhubung pada gerbang P1.2, P1.3 dan P1.4 untuk antarmukanya.
Saat pengujian perangkat penulis menggunakan modul Kit MCS51 20 Pin yang berbasis AT89S2051 yang menggunakan pemrograman secara ISP menggunakan gerbang P1.5, P1.6 dan P1.7 maka pada gambar berikut pena-pena tersebut tidak digunakan pada rangkaian karena penulis menghubungkannya ke modul programer yang sudah penulis modifikasi dengan indikator LED untuk memudahkan saja.
Rangkaian di atas juga dilengkapi dengan sebuah indikator LED yaitu LP1 yang terhubung pada penyemat gerbang P1.1 dan pada gerbang ini juga dihubungkan pada sebuah sakelar tekan S1 untuk tujuan programming. Keluaran penggerak relay dihubungkan pada gerbang P1.0. Penulis menggunakan jenis relay dengan tegangan kumparan 5 volt.
Sementara untuk masukan IR digunakan gerbang P3.7.
Untuk aplikasi yang harus dimasukkan pada mikrokontroler dapat dilihat berikut ini:
$mod51
PinRelay bit p1.0
PinProg bit p1.1
DIO bit p1.2
CLK bit p1.3
RST bit p1.4
IR_Sensor bit p3.7
BufferData data 08h
RegBit data 20h
Fail bit RegBit.0
RegStack data 30h
Seperti biasanya, pada penulisan di atas, diawali dengan menetapkan konfigurasi penyemat dan alokasi memori RAM yang akan digunakan. Setelah itu baru kita memulai penulisan perintah-perintah yang dimulai pada alamat 0000H. Aplikasi pertama kali akan memeriksa kondisi S1 untuk PROGRAM. Jika pada saat pertama dihidupkan atau setelah RESET S1 ditekan maka aplikasi akan menunggu sampai kurang lebih 5 detik untuk memasuki pemrograman data remot yang ditandai dengan aktifnya keluaran relay. Sobat bisa memasukan data remot dengan menekan salah satu tombol yang ada pada perangkat remot. Namun apabila S1 tidak ditekan atau ditekan kurang dari 5 detik maka aplikasi akan dilanjutkan ke rutin bernama Masukan.
org 0h
mov sp, RegStack-1
mov r5, #18
Ini1: mov r6, #255
Ini2: mov r7, #255
Inisialisasi:
jb PinProg, Masukan
djnz r7, Inisialisasi
djnz r6, Ini2
djnz r5, Ini1
clr PinRelay
jnb PinProg, $
mov r0, #BufferData
jb IR_Sensor, $
acall IR_READ
acall AT93C46_EWEN
mov dptr, #0
mov r0, #BufferData
mov r7, #8
Setelah data remot diterima maka selanjutnya aplikasi akan menyimpan data tersebut ke dalam memori AT93C46 pada alamat 00H.
SimpanRemot:
mov a, @r0
inc r0
acall AT93C46_WRITE
djnz r7, SimpanRemot
acall AT93C46_EWDS
setb PinRelay
Setelah data disimpan maka aplikasi kembali menon-aktifkan relay. Di sini Sobat bisa menambahkan perintah untuk verifikasi data jika mau yaitu memasukkan kembali data remot dan membandingkannya dengan data pada memori. Penulis tidak memasukkan rutin ini dan langsung menuju ke rutin Masukan seperti berikut ini:
Masukan:
mov r0, #BufferData
jb IR_Sensor, $
acall IR_READ
mov dptr, #0
mov r0, #BufferData
mov r7, #8
Pada rutin Masukan status masukan IR_Sensor diperiksa. Jika ada data yang masuk maka data akan disimpan sementara pada BufferData kemudian akan diperiksa dengan membandingkannya pada data dalam memori AT93C46. Jika data sama maka keluaran relay maupun indikator akan berubah kondisi dengan perintah CPL. Jika semula rendah akan menjadi tinggi atau sebaliknya.
PeriksaRemot:
mov b, @r0
inc r0
acall AT93C46_READ
inc dptr
xrl a, b
jnz Masukan
djnz r7, PeriksaRemot
cpl PinRelay
cpl PinProg
ajmp Masukan
Berikut adalah subrutin yang digunakan untuk mengambil data remot:
IR_READ:
jnb IR_Sensor, $
mov r5, #8
BacaByte_IR:
mov r6, #8
clr a
BacaSerial_IR:
jb IR_Sensor, BacaTinggi_IR
clr c
ajmp RotasiData_IR
BacaTinggi_IR:
setb c
RotasiData_IR:
rlc a
acall Pulsa
acall Pulsa
djnz r6, BacaSerial_IR
mov @r0, a
inc r0
djnz r5, BacaByte_IR
ret
Pulsa: mov r7, #255
djnz r7, $
ret
$include (c:\tesasm\93C46_8.txt)
end
Program aplikasi mikrokontroler di atas masih membutuhkan modul untuk antarmuka dengan AT93C46 yang bernama 93C46_8.TXT yang ada dan bisa Sobat lihat pada tulisanku sebelumnya.
Setelah file di atas dikompilasi dan diprogramkan ke mikrokontroler AT89C2051 maka perangkat sudah dapat melaksanakan fungsinya. Penulis sudah mengkompilasi dan hasilnya adalah 408 byte saja.
Desain rangkaian di atas memang sederhana begitu pun dengan aplikasi program yang dibuat. Namun meskipun sederhana yang penting hidup bisa lebih mudah, itu intinya. Bagaimanapun, sebuah desain harus memiliki kegunaan untuk dapat diimplementasikan pada kehidupan kita. Sesuai dengan tulisan pada paragraf awal, maka desain di atas sudah aku implementasikan kebeberapa fungsi perangkat, antara lain:
1. Remot lampu. Jika di antara sobat ada yang pernah bermain ke rumahku yang sederhana maka jangan pernah bertanya di mana letak sakelar lampu karena tidak ada. Bahkan sistem lampu di rumah menggunakan fasilitas pewaktu jadi urusan lampu hampir tidak pernah terpikirkan untuk menghidupkan atau mematikannya. Semua serba otomatis.
2. Sakelar remot. Sobat bisa memanfaatkan rangkaian di atas sebagai pengganti perangkat apap pun yang menggunakan sakelar bukan saja untuk perangkat listrik di rumah bahkan juga untuk kendaraan.
3. Implementasi lain silahkan Sobat cari. Pokoknya selama ada hal yang membutuhkan sakelar maka rangkaian kita bisa menggantikannya dan semua secara remot.