RYANZ SAN RAKAGI *~*|~ADMINISTATOR'~|*~*
Jumlah posting : 115 Point Forum : 58599 Join date : 28.06.11 Age : 29 Lokasi : CIREBON
Aktifitas WARNING LEVEL: (100/100) KEAHLIAN: (100/100) MEDAL: ™CEO™
| Subyek: Robot Walking Sat Aug 25, 2012 8:17 pm | |
| Nih hasta karya ku yang kedua .. hahahahaxxx..:smangat [Only admins are allowed to see this image]Walking Robot adalah sebuah robot yang dapat bergerak menyerupai prinsip gerakan manusia yang lebih sederhana. Robot ini dikendalikan oleh control berupa Mikrokontroller AT89C52. Pada robot memiliki lengan ayun dan telapak kaki yang menyerupai seperti paha dan telapak kaki manusia. Hal ini dalam proses pergerakkannya menggunakan dua buah actuator, yaitu menggunakan motor servo. Robot ini terdapat LCD sebagai penampil informasi – informasi saat sistem berjalan. Selain itu memiliki lima buah sensor yang digunakan dalam mempermudah pengoperasiannya. Sensor – sensor tersebut adalah : 1. Sensor Condesor Mic ( Sensor suara ) digunakan untuk mengaktifkan dan meng-nonaktifkan system dari robot. 2. Sensor Ultra Sonic digunakan untuk mendeteksi ketinggian dari robot ( asumsi robot berada di pinggir meja ) 3. Sensor phototransistor I digunakan mendeteksi penghalang yang berada di depan robot. 4. Sensor phototransistor II digunakan mendeteksi penghalang yang berada di kiri robot. 5. Sensor phototransistor III digunakan mendeteksi penghalang yang berada di kanan robot. Ane hanya buat yang simple dan bentuknya lucu.. [Only admins are allowed to see this image]CARA KERJAada 4 tipe cara kerja dari robot ini.. [Only admins are allowed to see this image]1. Robot jalan lurus 2. Robot belok kekiri 3. Robot belok ke kanan 4. Robot jalan kebelakang 5. Robot saat berada di Tepi Meja FLOWCHART [Only admins are allowed to see this image]
Program: Inisialisasi
- Code:
-
$MOD51 SERVO_ATAS EQU 3BH ;POSISI SERVO YANG DIINGINKAN SERVO_BAWAH EQU 3CH ;POSISI SERVO YANG DIINGINKAN SERVO_COUNTL EQU 3DH ;COUNTER 20MS LOW BYTE SERVO_COUNTH EQU 3EH ;COUNTER 20MS HIGH BYTE SERVO_REFRESH EQU 3FH ;KONSTANTA 20MS HIGH SERVO_TIMES EQU 40H ;KONSTANTA 20MS LOW ORG 0000H ;Simpan perinta mulai pada memory 0000H LJMP mulai ;Panggil subrutin mulai ORG 000BH ;Simpan perinta INT_T0 pada memory 000BH LJMP INT_T0 ;Panggil subrutin INT_T0 ORG 0100H ;Simpan perinta pada memory 0100H NOP ;-------------- INISIALISASI --------------------------- INIT: MOV SERVO_ATAS,#30 ;POSISI TENGAH 1500 US MOV SERVO_BAWAH,#30 ;POSISI TENGAH 1500 US MOV SERVO_COUNTL,#00H MOV SERVO_COUNTH,#00H MOV SERVO_TIMES,#4 MOV SERVO_REFRESH,#100 MOV IE,#82H MOV TMOD,#02H MOV TH0,#-100 MOV TL0,#-100 SETB TR0 RET ;-------------- INTERRUPT TIMER0 SERVICE ROUTINE -------- ;-------------- DIPAKAI UNTUK SCAN SERVO ---------------- INT_T0: PUSH ACC INC SERVO_COUNTL MOV A,SERVO_COUNTL CJNE A,SERVO_REFRESH,INT_T00 MOV SERVO_COUNTL,#00H INC SERVO_COUNTH MOV A,SERVO_COUNTH CJNE A,SERVO_TIMES,INT_T00 MOV SERVO_COUNTH,#00H MOV A,#00H ;Isi akumulator dengan 00H SETB P3.0 ;Aktifkan P3.0 SETB P3.2 ;Aktifkan P3.2 INT_T00: CJNE A,SERVO_ATAS,INT_T01 ;Bandingkan A jika = SERVO_ATAS,maka teruskan program dibawah CLR P3.0 ;Clear P3.0 INT_T01: CJNE A,SERVO_BAWAH,INT_T02; Bandingkan A jika = SERVO_BAWAH,maka teruskan program dibawah CLR P3.2 ;Clear P3.2 INT_T02: POP ACC RETI ;kembali ke INT_T0
;-------------- DELAY SUBROUTINE ----------------------- TUNDA: MOV R7,#0FFH ;Isi R7 dengan 255 TUNDA1: MOV R6,#0FFH ;Isi R6 dengan 255 TUNDA2: MOV R5,#10 ;Isi R5 dengan 10 DJNZ R5,$ ;R5=R5-1,jika R5 belum 0,maka ulangi lagi DJNZ R6,TUNDA2 ;R6=R6-1,jika R6 belum 0,ulangi TUNDA2 DJNZ R7,TUNDA1 ;R7=R7-1,jika R7 belum 0,ulangi TUNDA1 RET ;Kembali ke program awal Main Program: MAju dan Mundur - Code:
-
;-------------- MAIN PROGRAM ------------------------- START: CLR A ;Clear Akumulator MOV R1,A ;Isi R1 dengan A MOV R2,A ;Isi R2 dengan A MOV R3,A ;Isi R3 dengan A MOV R4,A ;Isi R4 dengan A MOV R5,A ;Isi R5 dengan A JNB P2.3,BABI ;Cek Sensor Suara LJMP STOP ;Lompat ke subrutin STOP
START1: CLR A ;Clear Akumulator MOV R5,A ;Isi R5 dengan A mov R1,#03Fh ;Isi R1 dengan decimal 18 acall write_inst ;Panggil subrutin write_inst acall write_inst ;Panggil subrutin write_inst mov R1,#0Dh ;Isi R1 dengan decimal 13 acall write_inst ;Panggil subrutin write_int mov R1,#06h ;Isi R1 dengan decimal 6 acall write_inst ;Panggil subrutin write_inst mov R1,#01h ;Isi R1 dengan decimal 1 acall write_inst ;Panggil subrutin write_int mov R1,#0Ch ;Isi R1 dengan decimal 12 acall write_inst ;Panggil subrutin write_inst acall tulisan1 ;Panggil subrutin tulisan1 BABI: LCALL TUNDA ;Panggil subrutin TUNDA LCALL INIT ;Panggil subrutin INIT LCALL TUNDA ;Panggil subrutin TUNDA MOV SERVO_ATAS,#30 ;UBAH KE POSISI 90 DERAJAT MOV SERVO_BAWAH,#30 ;UBAH KE POSISI 90 DERAJAT LCALL TUNDA ;Panggil subrutin TUNDA CLR A ;Clear Akumulator MOV R1,A ;Isi R1 dengan A MOV R2,A ;Isi R2 dengan A MOV R3,A ;Isi R3 dengan A MOV R4,A ;Isi R4 dengan A MOV R5,A ;Isi R5 dengan A
BABI2: JNB P2.3,BABI3 ;Cek Sensor Suara ( Condesor Mic ) LJMP STOP ;lompat ke subrutin STOP BABI3: JB P2.5,MUNDUR ;Cek Sensor Depan JNB P2.7,BABI4 ;Cek Sensor Kanan LJMP KANAN ;Lompat ke subrutin KANAN BABI4: JNB P2.6,BABI5 ;Cek Sensor Kiri LJMP KIRI ;Lompat ke subrutin KIRI BABI5: JB P2.2,BABI6 ;Cek Sensor Ultra Sonic ACALL BABI7 ;Panggil subrutin BABI7
BABI6: ACALL MUNDUR_LAGI ;Panggil subrutin MUNDUR_LAGI BABI7: MOV SERVO_ATAS,#36 ;UBAH KE POSISI 126 DERAJAT LCALL TUNDA ;Panggil subrutin TUNDA MOV SERVO_BAWAH,#25 ;UBAH KE POSISI 60 DERAJAT LCALL TUNDA ;Panggil subrutin TUNDA MOV SERVO_ATAS,#26 ;UBAH KE POSISI 66 DERAJAT LCALLTUNDA ;Panggil subrutin TUNDA MOV SERVO_BAWAH,#32 ;UBAH KE POSISI 102 DERAJAT LCALL TUNDA ;Panggil subrutin TUNDA LJMP BABI2 ;Lompat ke subrutin BABI2
MUNDUR: MOV P3,#10111100B ;Aktifkan LED 2 MOV SERVO_ATAS,#30 MOV SERVO_BAWAH,#30 LCALLTUNDA CLR A MOV R5,A mov R1,#03Fh acall write_inst acall write_inst mov R1,#0Dh acall write_inst mov R1,#06h acall write_inst mov R1,#01h acall write_inst mov R1,#0Ch acall write_inst acall tulisan3
MUNDUR1: JNB P2.3,MUNDUR11 LJMP STOP
MUNDUR11: JNB P2.5,TELOR ACALL SANA TELOR: ACALL MUNDUR2 SANA: MOV P3,#10111100B ;Aktifkan LED 2 CLR A MOV R1,A MOV R2,A MOV R3,A MOV R4,A MOV R5,A MOV SERVO_ATAS,#26 ;UBAH KE POSISI 66 DERAJAT LCALL TUNDA ;Panggil subrutin TUNDA MOV SERVO_BAWAH,#25 ;UBAH KE POSISI 60 DERAJAT LCALL TUNDA ;Panggil subrutin TUNDA MOV SERVO_ATAS,#36 ;UBAH KE POSISI 126 DERAJAT LCALLTUNDA ;Panggil subrutin TUNDA MOV SERVO_BAWAH,#32 ;UBAH KE POSISI 102 DERAJAT LCALLTUNDA ;Panggil subrutin TUNDA MOV SERVO_ATAS,#26 LCALL TUNDA MOV SERVO_BAWAH,#25 LCALL TUNDA MOV SERVO_ATAS,#36 LCALL TUNDA MOV SERVO_BAWAH,#32 LCALL TUNDA MOV SERVO_ATAS,#26 LCALLTUNDA MOV SERVO_BAWAH,#25 LCALLTUNDA MOV SERVO_ATAS,#36 LCALL TUNDA MOV SERVO_BAWAH,#32 LCALL TUNDA MOV SERVO_ATAS,#26 LCALLTUNDA MOV SERVO_BAWAH,#25 LCALLTUNDA MOV SERVO_ATAS,#36 LCALL TUNDA MOV SERVO_BAWAH,#32 LCALL TUNDA MOV SERVO_ATAS,#26 ;UBAH KE POSISI 66 DERAJAT MOV SERVO_BAWAH,#32 ;UBAH KE POSISI 114 DERAJAT LCALLTUNDA ;Panggil subrutin TUNDA MOV SERVO_ATAS,#36 ;UBAH KE POSISI 126 DERAJAT MOV SERVO_BAWAH,#34 ;UBAH KE POSISI 114 DERAJAT LCALLTUNDA ;Panggil subrutin TUNDA MOV SERVO_ATAS,#26 MOV SERVO_BAWAH,#32 LCALLTUNDA MOV SERVO_ATAS,#36 MOV SERVO_BAWAH,#34 LCALLTUNDA MOV SERVO_ATAS,#26 MOV SERVO_BAWAH,#32 LCALLTUNDA MOV SERVO_ATAS,#36 MOV SERVO_BAWAH,#34 LCALLTUNDA MOV SERVO_ATAS,#26 MOV SERVO_BAWAH,#32 LCALLTUNDA MOV SERVO_ATAS,#36 MOV SERVO_BAWAH,#34 LCALLTUNDA MOV SERVO_ATAS,#26 MOV SERVO_BAWAH,#32 LCALLTUNDA MOV SERVO_ATAS,#36 MOV SERVO_BAWAH,#34 LCALLTUNDA MOV SERVO_ATAS,#26 MOV SERVO_BAWAH,#32 LCALLTUNDA LJMP MUNDUR1
MUNDUR2: MOV P3,#11111100B ;Non-aktifkan LED 2 MOV SERVO_ATAS,#30 MOV SERVO_BAWAH,#30 LCALL TUNDA CLR A MOV R5,A mov R1,#03Fh acall write_inst acall write_inst mov R1,#0Dh acall write_inst mov R1,#06h acall write_inst mov R1,#01h acall write_inst mov R1,#0Ch acall write_inst acall tulisan1 LJMP BABI Program 2: Kiri dan Kanan - Code:
-
KIRI: MOV P3,#01111100B ;Aktifkan LED 1 MOV SERVO_ATAS,#30 MOV SERVO_BAWAH,#30 LCALLTUNDA CLR A MOV R5,A mov R1,#03Fh acall write_inst acall write_inst mov R1,#0Dh acall write_inst mov R1,#06h acall write_inst mov R1,#01h acall write_inst mov R1,#0Ch acall write_inst acall tulisan
KIRI1: JNB P2.3,KIRI11 LJMP STOP
KIRI11: JNB P2.6,KIRI2 MOV P3,#01111100B CLR A MOV R1,A MOV R2,A MOV R3,A MOV R4,A MOV R5,A MOV SERVO_ATAS,#36 ;UBAH KE POSISI 126 DERAJAT LCALLTUNDA ;Panggil subrutin TUNDA MOV SERVO_BAWAH,#25 ;UBAH KE POSISI 60 DERAJAT LCALL TUNDA ;Panggil subrutin TUNDA
KIRI3: JNB P2.3,KIRI4 LJMP STOP
KIRI4: JNB P2.6,KIRI2 MOV P3,#01111100B ;Aktifkan LED 1 MOV SERVO_ATAS,#26 ;UBAH KE POSISI 66 DERAJAT MOV SERVO_BAWAH,#25 ;UBAH KE POSISI 60 DERAJAT LCALLTUNDA ;Panggil subrutin TUNDA MOV SERVO_ATAS,#36 ;UBAH KE POSISI 126 DERAJAT MOV SERVO_BAWAH,#23 ;UBAH KE POSISI 48 DERAJAT LCALLTUNDA ;Panggil subrutin TUNDA SJMP KIRI3
KIRI2: MOV P3,#11111100B ;Non-aktifkan LED 1 MOV SERVO_ATAS,#30 MOV SERVO_BAWAH,#30 LCALL TUNDA CLR A MOV R5,A mov R1,#03Fh acall write_inst acall write_inst mov R1,#0Dh acall write_inst mov R1,#06h acall write_inst mov R1,#01h acall write_inst mov R1,#0Ch acall write_inst acall tulisan1 LJMP BABI
KANAN: MOV P3,#11101100B ;Aktifkan LED 3 MOV SERVO_ATAS,#30 MOV SERVO_BAWAH,#30 LCALL TUNDA CLR A MOV R5,A mov R1,#03Fh acall write_inst acall write_inst mov R1,#0Dh acall write_inst mov R1,#06h acall write_inst mov R1,#01h acall write_inst mov R1,#0Ch acall write_inst acall tulisan2 KANAN1: JNB P2.3,KANAN11 LJMP STOP
KANAN11: JNB P2.7,KANAN2 MOV P3,#11101100B ;Aktifkan LED 3 CLR A MOV R1,A MOV R2,A MOV R3,A MOV R4,A MOV R5,A MOV SERVO_ATAS,#26 ;UBAH KE POSISI 66 DERAJAT LCALL TUNDA ;Panggil subrutin TUNDA MOV SERVO_BAWAH,#32 ;UBAH KE POSISI 102 DERAJAT LCALL TUNDA ;Panggil subrutin TUNDA
KANAN3: JNB P2.3,KANAN4 LJMP STOP
KANAN4: JNB P2.7,KANAN2 MOV P3,#11101100B ;Aktifkan LED 3 MOV SERVO_ATAS,#36 ;UBAH KE POSISI 126 DERAJAT MOV SERVO_BAWAH,#32 ;UBAH KE POSISI 102 DERAJAT LCALL TUNDA ;Panggil subrutin TUNDA MOV SERVO_ATAS,#26 ;UBAH KE POSISI 66 DERAJAT MOV SERVO_BAWAH,#34 ;UBAH KE POSISI 114 DERAJAT LCALL TUNDA ;Panggil subrutin TUNDA SJMP KANAN3
KANAN2: MOV P3,#11111100B ;Non-aktifkan LED 3 MOV SERVO_ATAS,#30 MOV SERVO_BAWAH,#30 LCALL TUNDA CLR A MOV R5,A mov R1,#03Fh acall write_inst acall write_inst mov R1,#0Dh acall write_inst mov R1,#06h acall write_inst mov R1,#01h acall write_inst mov R1,#0Ch acall write_inst acall tulisan1 LJMP BABI Program 3: Mundur dan tampilan LCD - Code:
-
MUNDUR_LAGI: MOV SERVO_ATAS,#30 MOV SERVO_BAWAH,#30 LCALL TUNDA CLR A MOV R5,A mov R1,#03Fh acall write_inst acall write_inst mov R1,#0Dh acall write_inst mov R1,#06h acall write_inst mov R1,#01h acall write_inst mov R1,#0Ch acall write_inst acall tulisan5 MUNDUR_LAGI1: JNB P2.3,MUNDUR_LAGI11 LJMP STOP
MUNDUR_LAGI11: JNB P2.2,KINGKONG ACALL SINI
KINGKONG: ACALL MUNDUR_LAGI2 SINI: CLR A MOV R1,A MOV R2,A MOV R3,A MOV R4,A MOV R5,A MOV SERVO_ATAS,#26 LCALL TUNDA MOV SERVO_BAWAH,#25 LCALL TUNDA MOV SERVO_ATAS,#36 LCALL TUNDA MOV SERVO_BAWAH,#32 LCALL TUNDA MOV SERVO_ATAS,#26 LCALL TUNDA MOV SERVO_BAWAH,#25 LCALL TUNDA MOV SERVO_ATAS,#36 LCALL TUNDA MOV SERVO_BAWAH,#32 LCALL TUNDA MOV SERVO_ATAS,#26 LCALL TUNDA MOV SERVO_BAWAH,#25 LCALL TUNDA MOV SERVO_ATAS,#36 LCALL TUNDA MOV SERVO_BAWAH,#32 LCALL TUNDA MOV SERVO_ATAS,#26 MOV SERVO_BAWAH,#32 LCALL TUNDA MOV SERVO_ATAS,#36 MOV SERVO_BAWAH,#34 LCALL TUNDA MOV SERVO_ATAS,#26 MOV SERVO_BAWAH,#32 LCALL TUNDA MOV SERVO_ATAS,#36 MOV SERVO_BAWAH,#34 LCALL TUNDA MOV SERVO_ATAS,#26 MOV SERVO_BAWAH,#32 LCALL TUNDA MOV SERVO_ATAS,#36 MOV SERVO_BAWAH,#34 LCALL TUNDA MOV SERVO_ATAS,#26 MOV SERVO_BAWAH,#32 LCALL TUNDA MOV SERVO_ATAS,#36 MOV SERVO_BAWAH,#34 LCALL TUNDA MOV SERVO_ATAS,#26 MOV SERVO_BAWAH,#32 LCALL TUNDA MOV SERVO_ATAS,#36 MOV SERVO_BAWAH,#34 LCALL TUNDA MOV SERVO_ATAS,#26 MOV SERVO_BAWAH,#32 LCALL TUNDA LJMP MUNDUR_LAGI1
MUNDUR_LAGI2: MOV SERVO_ATAS,#30 MOV SERVO_BAWAH,#30 LCALL TUNDA CLR A MOV R5,A mov R1,#03Fh acall write_inst acall write_inst mov R1,#0Dh acall write_inst mov R1,#06h acall write_inst mov R1,#01h acall write_inst mov R1,#0Ch acall write_inst acall tulisan1 LJMP BABI
STOP: MOV P3,#11111100B ;Non-aktifkan semua LED MOV SERVO_ATAS,#30 MOV SERVO_BAWAH,#30 LCALL TUNDA CLR A MOV R5,A mov R1,#03Fh acall write_inst acall write_inst mov R1,#0Dh acall write_inst mov R1,#06h acall write_inst mov R1,#01h acall write_inst mov R1,#0Ch acall write_inst acall tulisan4 LJMP START1
write_inst: mov P1,#0h ;untuk memuliskan mov P0,R1 ;intruksi ke LCD setb P1.1 ;module clr P1.1 acall delay ret
write_data: mov P1,#01 ;untuk menuliskan mov P0,R1 ;data ke LCD setb P1.1 ;module clr P1.1 acall delay ret
delay: mov R0,#0 ;Isi R0 dengan 0 delay1: mov R5,#50h ;Isi R5 dengan 50 djnz R5,$ ;R5=R5-1,jika R5 belum 0,ulangi lagi djnz R0,delay1 ;R0=R0-1,jika R0 belum 0,ulangi delay1 ret ;Kembali ke alamat setelah perintah Ldelay: mov R2,#0f0h ;Isi R2 dengan 255 Ld1: acall delay ;Panggil subrutin delay djnz R2,Ld1 ;R2=R2-1,jika R2 belum 0,ulangi Ld1 ret ;Kembali ke alamat setelah perintah
tulis: mov R4,#4 ;Isi R4 dengan 4 ( menunjukkan banyak halaman ) mov DPTR,#Haline ;Isi data pointer dengan alamat Haline SJMP barisa ;Kembali ke subrutin baris a
tulisan: mov R4,#1 ;Isi R4 dengan 1 ( menunjukkan banyak halaman ) MOV DPTR,#MACAN ;Isi data pointer dengan alamat MACAN sjmp barisa ;Kembali ke subrutin baris a
tulisan1: mov R4,#1 MOV DPTR,#SINGA SJMP barisa
tulisan2: mov R4,#1 MOV DPTR,#MONYET SJMP barisa
tulisan3: mov R4,#1 MOV DPTR,#BUAYA SJMP barisa
tulisan4: mov R4,#1 MOV DPTR,#TIKUS SJMP barisa
tulisan5: mov R4,#1 MOV DPTR,#KUDA SJMP barisa
barisa: mov R3,#16 ;Isi R3 dengan 16 ( menunjukkan banyak karakter ) mov R1,#80h ;Isi R1 dengan P1 acall write_inst ;Panggil subrutin write_inst tulis1: clr A ;Clear Akumulator movc A,@A+DPTR ;Masukkan data ke n ke A mov R1,A ;Isi R1 dengan Akumulator Inc DPTR ;Naikkan data pointer acall write_data ;Panggil subrutin write_data djnz R3,tulis1 ;R3=R3-1,jika R3 belum 0,ulangi tulis1 barisb: mov R3,#16 ;Isi R3 dengan 16 ( menunjukkan banyak karakter ) mov R1,#0C0h ;Isi R1 dengan decimal 12 acall write_inst ;Panggil subrutin write_inst tulis2: clr A ;Clr Akumulator movc A,@A+DPTR ;Masukkan data ke n ke A mov R1,A ;Isi R1 dengan Akumulator Inc DPTR ;Naikkan data pointer acall write_data ;Panggil subrutin write_data djnz R3,tulis2 ;R3=R3-1,jika R3 belum 0,ulagi tulis2 acall Ldelay ;Panggil subrutin Ldelay djnz R4,barisa ;R4=R4-1,jika R4 belum 0,ulagi barisa ret ;Kembali ke alamat setelah perintah mulai: mov R1,#03Fh acall write_inst acall write_inst mov R1,#0Dh acall write_inst mov R1,#06h acall write_inst mov R1,#01h acall write_inst mov R1,#0Ch JB P2.3,mulai acall write_inst acall tulis ljmp START
Haline: DB ' ' DB ' Welcome ' DB ' List-OneZero ' DB ' LETS GO..GO... ' DB ' Jalan Coy.. ' SINGA: DB ' Jalan Lagi Yuks ' DB ' GO..GO..GO.. '
MACAN: DB ' Awas Penghalang ' DB ' TURN A LEFT ' MONYET: DB ' Awas Penghalang ' DB ' TURN A RIGHT '
BUAYA: DB ' Awas Penghalang ' DB ' GO BACK COY .. ' TIKUS: DB ' Do Not MOVE ' DB ' STOP Bro... ' KUDA: DB ' DANGER.... ' DB ' Be Carefull Dab ' END Untuk Lebih Simple baterai Setelah Penghitungan Adalah 12 Volt , Yg Gampang Untuk Dibawa Kemana-Mana #Pengalaman Dikutip Dari Diary , Yg Ribet Bawa Baterai >> Fytoko | |
|