BEL PINTU TANPA SENTUHAN DENGAN SENSOR INFRAMERAH DAN MIKROKONTROLER AT89S52

 

BEL PINTU TANPA SENTUHAN DENGAN SENSOR INFRAMERAH DAN MIKROKONTROLER AT89S52




KELOMPOK C3 EK 2C

1. Arlisa Wulandari                    (3.32.20.2.03)
2. Khaerul Umam                       ( 3.32.20.2.12)
3. Muhammad Chevyzidanezra  ( 3.32.20.2.16) 
4. Nafisa                                      (3.32.20.2.17)

Latar Belakang
Proyek ini dilatarbelakangi karena adanya pandemi yang sedang berlangsung saat ini. Untuk meminimalisir penularan dengan membatasi kontak fisik, Maka dibuatlah bel pintu tanpa sentuhan serta menginovasi bel pada umumnya.

Komponen Masukan dan Luaran
1 Sensor Inframerah
2. Bel
3. Penampil Kristal Cair 16 x 2

PRESENTASI (LINK PRESENTASI)

























PROGRAM ASSEMBLY  BEL PINTU TANPA SENTUHAN (LINK PROGRAM)

Nama : 
1. Arlisa Wulandari 
2. Khaerul Umam
3. Muhammad Chevyzidanezra
4. Nafisa

Tanggal membuat : 2 Januari 2022

SENSOR BIT p1.0 ;deklarasian pin
BUZZER BIT p3.0
RS BIT P2.5
RW BIT    P2.6
EN BIT P2.7

LCD_DATA_PORT EQU P0 ; pengalamatan variabel pada port 0

;=====================================================

ORG 0H ; alamat memori awal 0h

;-----------------------------------------------------------------------------------------------
; SENSOR INFRAMERAH + BUZZER
   ;Program bel ini berjalan menggunakan program Sensor+Buzzer. Program ini berjalan
   ;ketika objek dibaca sensor. Sensor ini akan menginable buzzer untuk menggerakan bel tersabut  
;-----------------------------------------------------------------------------------------------

restart:
  ; akan menginisiasi pin yang telah disediakan yaitu pin sensor dan buzzer
setb SENSOR ; set pin sensor sebagai input
clr BUZZER ; matikan buzzer terlebih dahulu
 
idle: jnb SENSOR, idle ;Idle ketika program dijalankan maka kondisi buzzer dan sensor dalam keadaan idle sensor dan buzzer belum membaca.  
  ;Untuk menyalakan buzzer maka pin buzzer yaitu pin P3.0 akan teriset 1 jika sensor sudah membaca gerakan objek 
object: setb BUZZER;mengeset pin buzzer sebagai input
jb SENSOR, ;selama masih detect objek menyalakan buzzer
object;Ketika sensor infrared mendeteksi objek dengan cara memantulkan sinyal maka sensor akan menerima sinyal tersebut.
;Lalu sensor akan membaca pantulan dan akan menginable pin pada buzzer

cpl BUZZER ;mengkomplemen isi akumulator 

;-------------------------------------------------------------------------------
; PORT INTERFACING LCD DALAM MODE 8 BIT
;-------------------------------------------------------------------------------
LCD_INITIAL:
 ; Untuk mendikler komponen yang ada di ROM dan akan dipindahkan ke variable double r. 
 ;Komponen ini ada dibagian paling bawah

MOV DPTR, #CMD   ;untuk menampilkan tulisan yang kita simpan di ROM dengan file CMD

LOOP_INIT: ;untuk membaca komponen yang kita punya di "CMD"dari mulai inisiasi sampai mendisplay tampilan
MOVC A,@A+DPTR ; Pembacaan Karakter keluaran LCD
JZ NEXT ; jika sudah selesai semua tulisan pindah ke next
ACALL LCD_WRITE_CMD ;untuk membaca LCD di komponen CMD tadi 
ACALL DELAY_LCD ;untuk memberi waktu delay pada LCD
CLR A ;clear akumulator agar variable A dapat digunakan Kembali
INC DPTR ;Untuk membaca komponen step by step yang akan diinisiasi
SJMP LOOP_INIT ; untuk memulai perulangan kabel loop

;-------------------------------------------------------------------------------
; MENGATUR KURSOR DAN MENULIS DATA KE LCD
;-------------------------------------------------------------------------------

; TEKS PERTAMA
NEXT:

CLR A ;melakukan clear dari akumulator agar tidak ada sisa nilai dari sebelumnya
MOV A,#80H   ; untuk memindahkan cursor pada LCD
ACALL LCD_WRITE_CMD ;untuk membaca LCD di komponen CMD tadi
ACALL DELAY_LCD ;untuk memberi waktu delay LCD
CLR A ; untuk menampilkan jumlah detik pada LCD
MOV DPTR, #KEEP ;untuk menampilkan tulisan yang kita simpan di ROM dengan file keep

LOOP_NEXT:
MOVC A,@A+DPTR ; untuk meletakan data ROM ke akumulator
JZ NEXT2 ;kalau sudah selesai semua tulisan pindah ke next 2
ACALL LCD_WRITE_DATA ;membaca LCD di komponen write data
ACALL DELAY_LCD ;memberi waktu delay pada LCD
CLR A ;clear akumulator untuk karakter berikutnya
INC DPTR ;memasukan karakter selanjutnya
SJMP LOOP_NEXT ;loop sampai karakter selesai

; NOMOR
NEXT2:

CLR A ;clear akumulator untuk karakter berikutnya
MOV A,#0C2H   ;instruksi comen pengaturan LCD untuk memindahkan kursor kepada baris ke 2
ACALL LCD_WRITE_CMD; membaca LCD di komponen CMD tadi
ACALL DELAY_LCD; memberi waktu delay LCD
CLR A ;menampilkan jumlah detik pada LCD
MOV DPTR, #NUM ; untuk menampilkan tulisan yang kita simpan di ROM dengan file NUM

 
MOV R1, #1 ;angka yang ingin ditampilkan 30,pertama tama disimpan di 2 register, yaitu R1 dan R0
MOV R0, #0 ;angka yang ingin ditampilkan 30,pertama tama disimpan di 2 register, yaitu R1 dan R0

PULUHAN:
MOV A, 1 ;mengecek R1 apakah memory R1 bernilai 0
JZ NEXT3 ;kalau sudah selesai,semua tulisan pindah ke next 3
MOV R0, #9 ;akan dilakukan pengurangan R0 mejadi 9 dan akan decrement pada R1
DEC R1 ;menunjukan pengurangan angka dari 30 menjadi 29 dan untuk puluhan - puluhan lainnya

SATUAN:
MOV A, R1 ;mengecek R1 apakah memori R1 bernilai 0
MOVC A, @A+DPTR ;meletakan data ROM ke akumulator
ACALL LCD_WRITE_DATA ; membaca LCD di komponen write data
ACALL DELAY_LCD ;memberi waktu delay pada LCD

MOV A, R0 ;mengecek R0 apakah memori R1 bernilai 0
MOVC A, @A+DPTR ;meletakan data ROM ke akumulator
ACALL LCD_WRITE_DATA ;membaca LCD di komponen write data
ACALL DELAY_LCD ;memberi waktu delay pada LCD

ACALL DELAY ;memberi delay

MOV A,#0C2H   ; balikin ke tengah
ACALL LCD_WRITE_CMD;membaca LCD di komponen CMD tadi
ACALL DELAY_LCD;memberi waktu delay  pada LCD

MOV A, 0 ; setiap R0 udah 0, puluhannya diganti
JZ PULUHAN;kalau sudah selesai,semua vtulisan pindah ke puluhan

DEC R0 ; akan ngecek R0 nya dulu sebelUm di decrement lagi
SJMP SATUAN ;kembali ke program awal satuan 

; TEKS SELESAI
NEXT3:
MOV A,#01H   ; akan menyelesaikan  LCD dengan cara MOV A,#01H
ACALL LCD_WRITE_CMD ;membaca LCD di komponen CMD tadi
ACALL DELAY ;memberi waktu delay

MOV A,#80H   ;SET TO TEXT TO MID
ACALL LCD_WRITE_CMD ;membaca LCD di komponen CMD tadi
ACALL DELAY_LCD; memberi waktu delay pada LCD
CLR A ;menampilkan jumlah detik pada LCD 
MOV DPTR, #CAUTION ;menampilkan tulisan yang kita simpan di ROM dengan file caution

LOOP_NEXT3:
MOVC A,@A+DPTR ;meletakan data ROM ke akumulator
JZ NEXT4 ;jika sudah selesai,tulisan pindah ke next 4
ACALL LCD_WRITE_DATA ;membaca LCD di komponen CMD tadi
ACALL DELAY_LCD ;memberi waktu delay pada LCD
CLR A ;clear akumulator untuk karakter berikutnya
INC DPTR ; memasukan karakter berikutnya
SJMP LOOP_NEXT3 ; loop sampai karakter selesai

NEXT4:
acall DELAY ;memberi waktu delay LCD
acall DELAY ;memberi waktu delay LCD
mov A,#01H   ;akan mengclearkan LCD dengan cara mov A,#01H
acall LCD_WRITE_CMD ;membaca LCD di komponen CMD tadi
acall DELAY ;memberi waktu delay 
mov A,#08H   ; turn off lcd; akan mengclearkan LCD dengan cara MOV A,#08H
acall LCD_WRITE_CMD ;membaca LCD di komponen CMD tadi
acall DELAY_LCD ;memberi waktu delay 
ljmp restart ;secara tidak langsung kembali ke restart

;--------------------------------------------------------------------------------
; PERINTAH UNTUK MENGINISIALISASI LCD
;--------------------------------------------------------------------------------
LCD_WRITE_CMD:

MOV LCD_DATA_PORT,A; memindahkan data dari data port ke A
CLR RS;mereset RS
CLR RW;mereset RW
SETB EN; mengeset EN
ACALL DELAY_LCD;memberi delay pada LCD
CLR EN; mereset EN
RET;mengakhiri sub program

;--------------------------------------------------------------------------------
; PERINTAH UNTUK MENULIS DATA KE LCD
;--------------------------------------------------------------------------------
LCD_WRITE_DATA:

MOV LCD_DATA_PORT,A;memindahkan data dari data port ke A
SETB RS; mereset RS
CLR RW; ,mereset EN
SETB EN ;mengeset EN
ACALL DELAY_LCD; memberi delay pada LCD
CLR EN; mereset EN
RET; mengakhiri sub program

;-------------------------------------------------------------------------------
; PROGRAM TUNDA
;-------------------------------------------------------------------------------
DELAY:
MOV  R5, #20H;memindahkan dengan segera 20H ke R5
MOV TMOD, #01h;memindahkan dengan segera 01h ke TMOD
LOOP: MOV TH0, #3CH ; 50000 counts on timer; memindahkan dengan segera 3CH ke THO
MOV TL0, #0B1H; memindahkan dengan segera 0B1H ke TLO
SETB TR0; mengeset TRO
HERE: JNB TF0, HERE ; mengeset TFO ketika data 0
CLR TR0;mereset TRO
CLR TF0; mereset TFO
DJNZ R5, LOOP ; mengurangi register sampai 0
RET ; mengakhiri sub program


;------------------------------------------------------------------------------
; TUNDA LCD
;------------------------------------------------------------------------------
DELAY_LCD:

MOV R7,#20 ;memindahkan dengan segera 20 ke R7
DJNZ R7, $ 
;mengurangi register sampai 0
RET;mengakhiri sub program

;=====================================================

ORG 300H ; melanjutkan alamat memori  300H
;DB adalah Directive yang dipakai untuk membentuk teks maupun tabel
CMD:     DB 38H,0EH,06H,81H,0H ; 
KEEP: DB 'SELAMAT DATANG!', 0h
NUM: DB '0123456789' 
CAUTION: DB 'SILAHKAN TUNGGU',0H
END


VIDEO PROYEK (LINK VIDEO)

 


PENUTUP

 

Kesimpulan :  

Untuk membuat bel pintu tanpa sentuhan menggunakan output berupa LCD dan BEL dibutuhkan komponen utama  yaitu sensor inframerah sebagai masukan dan mikrokontroler.

Sensor inframerah terbukti sebagai sensor tangkapan berupa bayangan sebagai pendeteksi kedatangan tamu, Ketika sensor menangkap bayangan maka bel dan LCD akan aktif.

 


 





 












Komentar