DAFTAR PUSTAKA Abdullah, K., Irwanto, A.K., Siregar, N., Agustina, E., Tambunan, A.H., Yamin, M., Hartulistiyoso, E., Purwanto, Y.A., Wulandani, D., Nelwan, L.O. 1998. Energi dan Listrik Pertanian, JICA-DGHE/IPB PROJECT/ADAET:JTA9a(132). Bala, B.K. 1997. Drying and Storage of Cereal Grains, Oxford & IBH Publishing Co. PVT. LTD, New Delhi Calcutta. Basak A., 1991. Analogue electronic circuits and systems. Cambridge University Press. Great Britain. Brooker, D.B., F.W.B. Arkema., and C.W. Hall. 1992. Drying and Storage of Grain and Oilseeds. The AVI Publishing Company, Inc. New York. Cakraverty A., & Singh R.P., 2001. Postharvest Technology; cereals, pulses, fruits and vegetables. Science Publishers, Inc. New Hampshire. Dailey D.J., 1989. Operational Amplifiers and Linier Integrated Circuits. McGraw-Hill, Inc. New York. Darjat, 2008. Sistem Pengendalian Suhu dan Kelembaban pada Mesin Pengering Kertas. Jurnal Teknik Elektro, Jilid 10, Nomor 2, Juni 2008, hlm 82-88 Estiningrum D., 2007. Penentuan Sudut Sirip Pengangkat Tipe-L Pada Pengering Rotari Untuk pengeringan Sawut Ubi Jalar (Ipomea batatas L). Skripsi. Fakultas Teknologi Pertanian. IPB. Bogor. Fairchild Semiconductor Corp. 2003. 6-Pin Dip Random-Phase Optoisolators Triac Driver Output (250/400 Volt Peak). http://pdf1.alldatasheet.com/ datasheet-df/view/53870/FAIRCHILD/MOC3021.html. Tanggal akses 25 Desember 2008. Harital, 1999. Kajian Pengembangan Sistem Pengontrolan Suhu secara Otomatik menggunakan Algoritma PID dalam Sistem Pemeraman Buatan (Artificial Ripening) Buah-buahan Tropika. Skripsi. Fakultas Teknologi Pertanian. IPB. Bogor. Hendarto D., 2008. Sistem Kendali Pada In Store Dryer (ISD) Untuk Komoditas Jagung. Thesis. Program PS. IPB Bogor. Kamaruddin A., 2007. Teknologi berbasis sumber energi terbarukan untuk pertanian. IPB Press. Bogor. Kusumadewi S., & Purnomo H., 2004. Aplikasi Logika Fuzzy untuk Pendukung Keputusan. Penerbit Graha Ilmu. Yogyakarta. Lu C., Liao Z., Jia H. And Chai G., 2006. Design of Fuzzy Control System of the Fast Drying Equipment for Chinese Herbs. International Journal of Information technology Vol. 12 No. 5 2006. http://www.icis.ntu.edu.sg/scsijit/1205/. Tanggal akses 15 Desember 2008.
61
Mansor H., et al., 2009. Fuzzy Control of Grain Drying Process. Proceedings of the UKSim 2009: 11th International Conference on Computer Modelling and Simulation - Volume 00. p.9 – 13. Martin G.H., 1985. Kinematika dan dinamika teknik. Penerjemah: Setyobakti. Penerbit Erlangga. Jakarta. Mujumdar, A.S. dan S. Devahastin. 2001. Pengeringan Industrial. Penerjemah: Armansyah H.T., Dyah W., Edy H., Leopold O.N., IPB Press. Bogor. Mulyantara, FX. T., 2008. Simulasi Proses Pengeringan Jagung Pipilan Dengan Mesin Pengering Surya Tipe Efek Rumah Kaca (Erk)-Hybrid Dengan Wadah Silinder. Thesis. Program PS. IPB Bogor. National Semiconductor. 2008. DAC0808 8-Bit D/A Converter. http://www. national.com/ds/DA/ DAC0808.pdf. Tanggal akses 25 Agustus 2008. National Semiconductor. 2009. LM339 Datasheet - Voltage Comparator Information And Circuits. http://home.cogeco.ca/~rpaisley4/Comparators. html. Tanggal akses 20 Februari 2009. Nizar J.E., 1997. Pengendalian Suhu pada Ruang Pengering Menggunakan PC LabCard 812-PG dengan Logika Fuzzy berbasis PC/AT. Skripsi. Fakultas Teknologi Pertanian. IPB. Bogor. Nugroho, S.A., 2007. Sistem Kontrol Lampu Lalu Lintas Menggunakan Inferensi Fuzzy. Skripsi. Fakultas Matematika dan IPA, IPB. Bogor Nelwan, L.O. 1997. Pengeringan Kakao dengan Energi Surya Menggunakan Rak Pengering dengan Kolektor Tipe Efek Rumah Kaca, Thesis, Program PS. IPB Bogor. Nelwan, L.O. 2005. Study On Solar-Assisted Dryer with Rotating Rack for Cocoa Beans, Dissertation, The Graduate School - Bogor Agricultural University Bogor. Omid M., Yadollahinia A.R. dan Rafiee S., 2006. A Thin-Layer Drying Model For Paddy Dryer. Proceedings of International Converence on Innovations in Food and Bioprocess Technologies, AIT Pathumthani. Thailand. Sensirion.Corp. 2008. Datasheet SHT7x (SHT71, SHT75) Humidity and Temperature Sensor Version 4.1. http://www.Sensirion. ch/en/pdf/ product_informa-tion/Datasheet-humidity-sensor-SHT7x.pdf. Tanggal akses 30 September 2008. Senjaya I., 1997. Pengontrolan Suhu dalam Ruang Pengering dengan Sistem Kontrol Fuzzy. Skripsi. Fakultas Teknologi Pertanian. IPB. Bogor. Single phase AC Motor speed controller. http://multyremotes.com/ac-motorspeed-control.htm. Tanggal akses 25 Agustus 2008. Stawczyk J. And Czapnik M., 2004. A Proposed Spray Drying Control System. Proceedings of the 14th International Drying Symposium (IDS 2004). Sao Paulo, Brazil. http://www.feq.unicamp.br/~ids2004/voIB/. Tanggal akses 15 Desember 2008.
62
Sulikah. 2007. Rancangan dan Uji Performansi Prototipe Mesin Pengering Tipe Silinder Berputar untuk Pengeringan Jagung (Zea Mays L). Skripsi. Fakultas Teknologi Pertanian. IPB. Bogor. Wallace, H.A dan E.N. Bressman. 1949. Corn and Corn Growing 5th Edition. John Willey & Sons, Inc. New York. Welty J.R., Wicks C.E., Wilson R.E,. Rorrer G., Dasar-dasar fenomena transport . Edisi keempat terjemahan. Penerbit Erlangga. Jakarta.
63
LAMPIRAN
64
Lampiran 1. Perhitungan performansi teknis Pengeringan berlangsung pada kondisi suhu udara lingkungan rata-rata 24,1 o
C, (1) dan sistem menaikkan suhu tersebut menjadi rata-rata 46,8 oC, (2) sebagai
udara pengering. Bahan berupa jagung pipilan dikeringkan pada suhu tersebut sehingga sejumlah massa air menguap ke udara dan menyebabkan pendinginan udara, (3). Dengan bantuan grafik psikrometrik dapat diilustrasikan sebagai berikut:
h2=h3=92,51 kJ/kg 3
H3 = 0,02371 kg/kg.uk
h1=68,98 kJ/kg 2
H1=H2 = 0,017585 kg/kg.uk v=0,93056 m3/kg.uk
1
92.8%
24.1oC
46.8oC
Massa jagung pipilan sebesar 1.526 kg dengan kadar air 25,7 %bb dikeringkan hingga kadar air akhir menjadi 15 %bb. Sejumlah massa air hilang (menguap), dapat diilustrasikan dalam kesetimbangan massa: C? c=100%
A 1.526 kg
B ? kg
Drying a : 25,7%
b : 15%
Eliminasi (1) dan (2): 1.526 = B + C ………..(1) 392,182 = 0.15B + C …….(2) 1.133,8 = 0,85B Î B = 1.333,9 kg
Massa total: A=B+C 1.526 = B + C ………..(1) Massa air: A(a) = B(b) + C(c) 392,182 = 0.15B + C …….(2)
Dari persamaan (1) diperoleh nilai C sebesar 192,1 kg Massa akhir jagung pipilan kering sebanyak 1.333,9 kg dan air yang menguap sebanyak 192,1 kg. Proses sortasi/pembersihan jagung dari kotoran seperti biji mati dan serpihan tongkol serta susut hilang menyisakan jagung pipilan kering jual sebanyak 1.187 kg, (massa biji mati, kotoran dan susut hilang sebanyak 146,9 kg). Jumlah energi yang digunakan pada proses pengeringan sebanyak 933.042 kJ yang dihitung dengan persamaan berikut ini:
65
QTP =
qu (h2 − h1 ) x3.600 xt v
Dimana: QTP qu v h2,3 h1 t
= energi total pengeringan (kJ) ... ( 933.042 kJ ) = debit udara (m3/det) ................. ( 0,79 m3/det ) = volume jenis udara (m3/kg) ......( 0,9306 m3/kg ) = entalpi akhir (kJ/kg) ................ ( 92,51 kJ/kg ) = entalpi awal (kJ/kg) ................ ( 68,98 kJ/kg ) = lama pengeringan (jam) ..........( 13 jam )
Panas yang diterima udara pengering sebagai energi berguna sebesar 906.995 kJ yang dihitung dari persamaan: QUd =
qu C pu (Tr − Tl ) x3.600 xt v
Dimana: Qud qu v Cpu Tr Tl t
= panas yang diterima udara pengering (kJ) ... ( 906.995 kJ ) = debit udara (m3/det) ................ .....................( 0,79 m3/det ) = volume jenis udara (m3/kg) ..........................( 0.9306 m3/kg ) = panas jenis udara (kJ/kgoC) .........................( 1,008 kJ/kgoC ) = suhu udara ruang pengering (oC) ................( 46,8 oC ) = suhu udara lingkungan (oC) ........................( 24,1 oC ) = lama pengeringan (jam) ..............................( 13 jam ) Panas untuk menaikkan suhu bahan sebagai energi berguna sebesar 11.748 kJ
yang dihitung dari persamaan:
QSB = mOj C pj (Tr − T j ) Dimana: QSB Moj Cpj Tr Tj
= Panas untuk menaikkan suhu bahan (kJ) ... ( 11.748 kJ ) = massa awal jagung (kg) ..............................( 1.526 kg ) = panas jenis jagung (kJ/kgoC) .....................( 1,7108 kJ/kgoC ) = suhu udara ruang pengering (oC) ...............( 46,8 oC ) = suhu bahan/jagung (oC) ..............................( 42,3 oC )
Panas untuk menguapkan air bahan sebagai energi berguna sebesar 14.298 kJ yang dihitung dari persamaan: QUap = QTP − (QSp + QUd ) Dimana: QUap QTP QSP Qud
= panas untuk menguapkan air bahan (kJ) ...... ( 14.298 kJ ) = energi total pengeringan (kJ) ....................... ( 933.042 kJ ) = Panas untuk menaikkan suhu bahan (kJ) ..... ( 11.748 kJ ) = panas yang diterima udara pengering (kJ) ... ( 906.995 kJ )
66
Efisiensi penggunaan energi berupa efisiensi termal bangunan sebesar 36,40 % yang dihitung dari persamaan:
ηT =
QUd x100% QS + QB
Dimana: ηT Qud QS QB
= efisiensi termal bangunan (%) ..................... ( 36,40 % ) = panas yang diterima udara pengering (kJ) ... ( 906.995 kJ ) = energi surya (kJ) .......................................... ( 251.787,2 kJ ) = energi biomassa (kJ) .................................... ( 2.240.000 kJ ) Efisiensi pengeringan sebesar 2,87 % yang dihitung dari persamaan berikut
ini:
ηP =
QSB + QUap Qud
x100%
Dimana: ηP QSB QUap Qud
= efisiensi pengeringan (%) ............................ ( 2,87 % ) = Panas untuk menaikkan suhu bahan (kJ) ..... ( 11.748 kJ ) = panas untuk menguapkan air bahan (kJ) ...... ( 14.298 kJ ) = panas yang diterima udara pengering (kJ) ... ( 906.995 kJ )
Konsumsi energi spesifik (KES) sebesar 13.681 kJ/kg yang dihitung dari persamaan: KES =
QL + QS + QB muap
Dimana: KES = konsumsi energi spesifik (kJ/kg) ............................... ( 13.681 kJ/kg ) QL = energi listrik (kJ) ....................................................... ( 136.659,8 kJ ) QS = energi surya (kJ) ........................................................ ( 251.787,2 kJ ) QB = energi biomassa (kJ) .................................................. ( 2.240.000 kJ ) muap = massa air yang diuapkan selama pengeringan (kg) ... ( 192,1 kg )
67
Lampiran 2. Perintah dalam bahasa Assembly $mod51 ;Procedure LCD Address Write InitLCD CommandLCD WriteLCD ReadLCD ReadAddrLCD SetDDRAM SetCGRAM ;LCD Command DisplayClear CursorHome DecCursor IncCursor CDDSR ICDSL CursorOff CursorOn DisplayOff CursorBlink ShiftCursorRight ShiftCursorLeft ShiftDisplayRight ShiftDisplayLeft DShiftCursorInc DShiftCursorDec ;ADDRESS PPI PPIA PPIB PPIC PPICW ORG LJMP ;interrupt EX0 ORG mov reti ORG mov reti ;interrupt penerimaan ORG CLR MOV CMMD: CJNE MOV MOV RETI DDTA: CJNE MOV MOV RETI KAWAL: CJNE MOV IXIT: RETI MTROUT: dc: MOV
EQU EQU EQU EQU EQU EQU EQU EQU
0700H 0740H 07B0H 07D0H 07F0H 0820H 0850H 0870H
EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU
01H 02H 04H 06H 05H 07H 0CH 0EH 08H 0FH 14H 10H 1CH 18H 07H 05H
EQU EQU EQU EQU 4000H START
2000H 2001H 2002H 2003H
4003H r6,#67 4013H r6,#67 4023H RI A, SBUF R3,#"K",DDTA R3,#"L" 31H,A
;bersihkan receive flag ;pindah data sbuf ke A
R3,#"L",KAWAL R3,#"Z" 32H,A A,#"M",IXIT R3,#"K" A,31H
68
MOV DPTR,#PPIA MOVX @DPTR,A kipas: MOV A,32H MOV DPTR,#PPIB MOVX @DPTR,A ENS: RET ORG 4100H DELAY: MOV R5,#80 DJNZ R5,$ RET DELST: MOV R5,#40 DJNZ R5,$ RET DELAYF: MOV R7, #2H LUP2: MOV R4, #0FFH LUP1: MOV R5, #0FFH DJNZ R5, $ DJNZ R4, LUP1 DJNZ R7, LUP2 RET ;PROCEDURE PENGAMBILAN DATA PERSATUAN AYO: MOVC A,@A+DPTR MOV R2,A RET ;PROCEDURE TAMPIL LCD1 PLCD: MOVX A,@DPTR CJNE A,#'$',GO2 JMP AD GO2: LCALL WriteLCD INC DPTR LCALL DELAY JMP PLCD AD: CALL DELAY RET ;-------Procedure Keypad KEY: R1: MOV A,#11101111b MOV DPTR,#PPIC MOVX @DPTR,A MOV DPTR,#PPIC movx A,@DPTR ANL A,#00001111B R1C1: CJNE A,#1110B,R1C2 MOV A,#1 JMP AKHIR R1C2: CJNE A,#1101B,R1C3 MOV A,#2 JMP AKHIR R1C3: CJNE A,#1011B,R1C4 MOV A,#3 JMP AKHIR R1C4: CJNE A,#0111B,R2 MOV A,#0 JMP AKHIR R2: MOV A,#11011111b MOV DPTR,#PPIC
69
R2C1: R2C2: R2C3: R2C4: R3:
R3C1: R3C2: R3C3: R3C4: R4:
R4C1: R4C2: R4C3: R4C4: ZERO: AKHIR: CMDB: WritB:
MOVX MOV movx ANL CJNE MOV JMP CJNE MOV JMP CJNE MOV JMP CJNE MOV JMP MOV MOV MOVX MOV movx ANL CJNE MOV JMP CJNE MOV JMP CJNE MOV JMP CJNE MOV JMP MOV MOV MOVX MOV movx ANL CJNE MOV JMP CJNE MOV JMP CJNE MOV JMP CJNE MOV JMP MOV RET
@DPTR,A DPTR,#PPIC A,@DPTR A,#00001111B A,#1110B,R2C2 A,#4 AKHIR A,#1101B,R2C3 A,#5 AKHIR A,#1011B,R2C4 A,#6 AKHIR A,#0111B,R3 A,#12H AKHIR A,#10111111b DPTR,#PPIC @DPTR,A DPTR,#PPIC A,@DPTR A,#00001111B A,#1110B,R3C2 A,#7 AKHIR A,#1101B,R3C3 A,#8 AKHIR A,#1011B,R3C4 A,#9 AKHIR A,#0111B,R4 A,#13H AKHIR A,#01111111b DPTR,#PPIC @DPTR,A DPTR,#PPIC A,@DPTR A,#00001111B A,#1110B,R4C2 A,#14H AKHIR A,#1101B,R4C3 A,#0 AKHIR A,#1011B,R4C4 A,#15H AKHIR A,#0111B,ZERO A,#16H AKHIR A,#30H
Mov RLC Mov Setb lcall
r3,#8 ; command valid saat sck High & keep until sck down, after down boleh ubah A ; c1 c2 c3 c4 c5 c6 c7 c8 p3.3,C ;sck ___---___---___---___---___---___---___---___---___ p3.5 ;Data ______________________________________-----------__ DELAY
70
nolB:
finB:
clr lcall djnz setb Setb lcall clr setb Mov cjne clr setb Mov cjne clr
p3.5 DELAY r3,WritB p3.3 p3.5 DELAY p3.5 ie.2 R6,#78 r6,#67,nolB ie.2 ie.2 R6,#78 r6,#67,finB ie.2
;
!
!
!
!
!
!
!
!
; ;
D7 D6 D5 D4 D3 D2 D1 D0 ready data pulldown by sensor
;CEK ACK
;CEK FINISH MEASUREMENT
;-------Read Data Sensor First Byte------------------ReadB: setb p3.3 ; Read/Data Valid saat sck down keep until sck high, dibaca saat sck down mov r3,#8 ; c15 c14 c13 c12 c11 c10 c9 c8 Read1B: ;sck ___---___---___---___---___---___---___---___---___ setb p3.5 ;data ______============================================ lcall DELST ; ! ! ! ! ! ! ! ! mov c,p3.3 ; D15 D14 D13 D12 D11 D10 D9 D8 lcall DELST clr p3.5 rlc a lcall DELAY djnz r3,Read1B mov r0,a ;------ACK First Byte--------------------------------clr p3.3 ;sck ___---___ setb p3.5 ;data _________ lcall DELST clr p3.5 ;-------Read Data Sensor second Byte------------------setb p3.3 ;Read/Data Valid saat sck down keep until sck high, dibaca saat sck down mov r3,#8 ; c7 c6 c5 c4 c3 c2 c1 c0 Read2B: ;sck ___---___---___---___---___---___---___---___---___ setb p3.5 ;data ______============================================ lcall DELST ; ! ! ! ! ! ! ! ! mov c,p3.3 ; D15 D14 D13 D12 D11 D10 D9 D8 lcall DELST clr p3.5 rlc a lcall DELAY djnz r3,Read2B mov r1,a ;------ACK second Byte--------------------------------setb p3.3 lcall DELST ;sck ___---___ setb p3.5 ;data _________ lcall DELST clr p3.5 lcall DELST ;konf jmp konv ;-------Transmisi Start----------------------------
71
TS:
Clr p3.4 ;sck __--__--__ Setb p3.2 ;Dta ---____--lcall DELAY setb p3.4 lcall DELAY clr p3.2 lcall DELAY clr p3.4 lcall DELAY setb p3.4 lcall DELAY setb p3.2 lcall DELAY clr p3.4 lcall DELAY ret TSB: Clr p3.5 ;sck __--__--__ Setb p3.3 ;Dta ---____--lcall DELAY setb p3.5 lcall DELAY clr p3.3 lcall DELAY clr p3.5 lcall DELAY setb p3.5 lcall DELAY setb p3.3 lcall DELAY clr p3.5 lcall DELAY ret ;-------Write Command---------------------------CMD: Mov r3,#8 ;write/command valid saat sck High & keep until sck down, after down boleh ubah Writ: RLC A ; c1 c2 c3 c4 c5 c6 c7 c8 Mov p3.2,C ;sck ___---___---___---___---___---___---___---___---___ Setb p3.4 ;Data ______________________________________-----------__ lcall DELAY clr p3.4 ; ! ! ! ! ! ! ! ! lcall DELAY djnz r3,Writ ; D7 D6 D5 D4 D3 D2 D1 D0 setb p3.2 ;ready data pulldown by sensor Setb p3.4 lcall DELAY clr p3.4 setb ie.0 Mov R6,#78 nol: cjne r6,#67,nol ;CEK ACK clr ie.0 setb ie.0 Mov R6,#78 fin: cjne r6,#67,fin ;CEK FINISH MEASUREMENT clr ie.0 ;-------Read Data Sensor First Byte------------------Read: setb p3.2 ;Read/Data Valid saat sck down keep until sck high, dibaca saat sck down mov r3,#8 ; c15 c14 c13 c12 c11 c10 c9 c8 Read1: ;sck ___---___---___---___---___---___---___---___---___ setb p3.4 ;data ______============================================ lcall DELST ; ! ! ! ! ! ! ! !
72
mov c,p3.2 ; D15 D14 D13 D12 D11 D10 D9 D8 lcall DELST clr p3.4 rlc a lcall DELAY djnz r3,Read1 mov r0,a ;------ACK First Byte--------------------------------clr p3.2 ;sck ___---___ setb p3.4 ;data _________ lcall DELST clr p3.4 ;-------Read Data Sensor second Byte------------------setb p3.2 ;Read/Data Valid saat sck down keep until sck high, dibaca saat sck down mov r3,#8 ; c7 c6 c5 c4 c3 c2 c1 c0 Read2: ;sck ___---___---___---___---___---___---___---___---___ setb p3.4 ;data ______============================================ lcall DELST ; ! ! ! ! ! ! ! ! mov c,p3.2 ; D15 D14 D13 D12 D11 D10 D9 D8 lcall DELST clr p3.4 rlc a lcall DELAY djnz r3,Read2 mov r1,a ;------ACK second Byte--------------------------------setb p3.2 lcall DELST ;sck ___---___ setb p3.4 ;data _________ lcall DELST clr p3.4 lcall DELST ;-------Konversi--------------------------------------konv: mov a,r0 mov b,#100 div ab mov 36h,a mov a,b mov b,#10 div ab mov 37h,a mov a,b mov 38h,a
ULL:
mov mov div mov mov mov div mov mov mov RET MOV MOV MOV MOV
a,r1 b,#100 ab 39h,a a,b b,#10 ab 3Ah,a a,b 3Bh,a A,R0 R2,A A,R2 B,#4
73
BB:
CC:
D1:
D2:
D3: DD:
DIV AB MOV R5,A MOV R0,B CLR C MOV A,R2 MOV B,#6 MUL AB MOV R3,A MOV A,B CJNE A,#1,CC INC R0 MOV A,R0 MOV B,#4 DIV AB ADD A,R5 MOV R5,A MOV R0,B CLR C MOV A,R3 SUBB A,#250 JC BB CLR C ADD A,#6 MOV R3,A INC R0 CJNE R0,#4,CC INC R5 MOV R0,#0 JMP CC CLR C MOV A,R3 ADD A,#6 MOV R3,A CJNE R0,#1,D1 MOV R4,#2 MOV R6,#5 MOV R7,#0 JMP DD CJNE R0,#2,D2 MOV R4,#5 MOV R6,#0 MOV R7,#0 JMP DD CJNE R0,#3,D3 MOV R4,#7 MOV R6,#5 MOV R7,#0 JMP DD MOV R4,#0 MOV R6,#0 MOV R7,#0 MOV A,R3 CALL URAI MOV A,R1 CALL URAI MOV A,R7 MOV B,#10 DIV AB MOV R7,B ADD A,R6
; R5 = nilai ribuan ; R0 = SISA PEMBAGIAN @ 250
; r5 = nilai ribuan ; r0 = sisa pembagian @ 250
; R4 = NILAI RATUSAN ; R6 = NILAI PULUHAN ; R7 = NILAI SATUAN
74
MOV B,#10 DIV AB MOV R6,B ADD A,R4 MOV B,#10 DIV AB MOV R4,B ADD A,R5 MOV B,#10 DIV AB MOV R5,B ; R5 = NILAI RIBUAN MOV R3,A ; R3 = NILAI PULUHAN RIBU RET URAI: MOV B,#100 DIV AB ADD A,R4 MOV R4,A MOV A,B MOV B,#10 DIV AB ADD A,R6 MOV R6,A MOV A,B ADD A,R7 MOV R7,A RET ;------------ sub-program menghitung nilai suhu -----------HITSUHU: CLR C MOV A,R5 SUBB A,#4 JC PINJAM MOV R5,A JMP PINJ1 PINJAM: CLR C MOV A,R3 CJNE A,#0,K1 MOV R5,#0 MOV R4,#0 MOV R6,#0 MOV R7,#0 JMP PINJ1 K1: DEC R3 ; R3 = Nilai puluhan ribu MOV A,#10 SUBB A,#4 ADD A,R5 MOV R5,A PINJ1: RET SAVSUHU1: IL1:
IL2:
MOV CJNE JMP MOV MOV LCALL MOV ADD LCALL MOV MOV MOV
A,R3 A,#0,IL2 IL2 38H,A A,#082H SetDDRAM A,38H A,#30H WriteLCD A,R5 39H,A A,#083H
75
SAVSUHU2: IL3:
IL4:
LCALL MOV ADD LCALL MOV MOV MOV LCALL MOV ADD LCALL MOV MOV MOV LCALL MOV ADD LCALL RET MOV CJNE JMP MOV MOV LCALL MOV ADD LCALL MOV MOV MOV LCALL MOV ADD LCALL MOV MOV MOV LCALL MOV ADD LCALL MOV MOV MOV LCALL MOV ADD LCALL RET
SetDDRAM A,39H A,#30H WriteLCD A,R4 3AH,A A,#084H SetDDRAM A,3AH A,#30H WriteLCD A,R6 3BH,A A,#086H SetDDRAM A,3BH A,#30H WriteLCD A,R3 A,#0,IL4 IL4 3CH,A A,#0C2H SetDDRAM A,3CH A,#30H WriteLCD A,R5 3DH,A A,#0C3H SetDDRAM A,3DH A,#30H WriteLCD A,R4 3EH,A A,#0C4H SetDDRAM A,3EH A,#30H WriteLCD A,R6 3FH,A A,#0C6H SetDDRAM A,3FH A,#30H WriteLCD
;--------------- sub-program menghitung nilai kelembaban (RH) --LEMBAB: MOV R0,#0 MOV R1,#0 MOV R2,#0 MOV R3,#0 MOV A,R5 CJNE A,#00,CEKL1 MOV R7,#36 CALL KECIL
76
PNJ1:
CEKL1:
CEKL2:
CEKL3:
CEKL4:
CEKL5:
CEKRET: KECIL:
MOV CLR SUBB JC MOV JMP CLR DEC MOV ADD MOV JMP CJNE MOV CALL MOV ADD MOV JMP CJNE MOV CALL MOV ADD MOV JMP CJNE MOV CLR SUBB JC MOV MOV MOV JMP CLR MOV CALL MOV ADD MOV CALL RET MOV MOV MUL MOV CALL MOV MOV MUL CALL MOV MOV MUL MOV CALL MOV MOV MUL
A,R3 C A,#03 PNJ1 R3,A CEKRET C R2 A,R3 A,#7 R3,A CEKRET A,#01,CEKL2 R7,#31 ; GRAFIK SEDANG (RH = 0.031 SO + 3) KECIL A,R3 A,#3 R3,A CEKRET A,#02,CEKL3 R7,#23 ; RH = 0.0233 SO + 18.34 KECIL A,R3 A,#18 R3,A CEKRET A,#03,CEKL4 A,R4 C A,#05 CEKL5 R1,#01 ; R1 = RATUSAN RH R2,#00 ; R2 = PULUHAN RH R3,#00 ; R3 = SATUAN RH CEKRET C R7,#23 ; RH = 0.0233 SO + 18.34 KECIL A,R3 A,#18 R3,A ATURL A,R6 B,R7 AB R0,B PECAH0 A,R0 B,#255 AB PECAH0 A,R4 B,R7 AB R0,B PECAH1 A,R0 B,#255 AB
77
SEDANG: BESAR: ATURL:
PECAH0:
PECAH1:
PECAH2:
SAVRH1:
CALL MOV MOV MUL MOV CALL MOV MOV MUL CALL RET CLR RET CLR RET MOV MOV DIV ADD MOV MOV DIV ADD MOV MOV DIV ADD MOV MOV RET MOV DIV ADD MOV RET MOV DIV ADD MOV MOV MOV DIV ADD MOV RET MOV DIV ADD MOV MOV MOV DIV ADD MOV MOV ADD MOV RET MOV CJNE
PECAH1 A,R5 B,R7 AB R0,B PECAH2 A,R0 B,#255 AB PECAH2 C C A,R3 B,#100 AB A,R1 A,B B,#10 AB A,R2 R3,B B,#10 AB A,R1 R1,A R2,B B,#100 AB A,R3 R3,A B,#100 AB A,R2 R2,A A,B B,#10 AB A,R3 R3,A B,#100 AB A,R1 R1,A A,B B,#10 AB A,R2 R2,A A,B A,R3 R3,A A,R1 A,#0,PE6
78
PE5:
PE6:
SAVRH2: PE7:
PE8:
JMP MOV MOV LCALL MOV ADD LCALL MOV MOV MOV LCALL MOV ADD LCALL MOV MOV MOV LCALL MOV ADD LCALL RET MOV CJNE JMP MOV MOV LCALL MOV ADD LCALL MOV MOV MOV LCALL MOV ADD LCALL MOV MOV MOV LCALL MOV ADD LCALL RET
PE6 40H,A A,#08CH SetDDRAM A,40H A,#30H WriteLCD A,R2 41H,A A,#08DH SetDDRAM A,41H A,#30H WriteLCD A,R3 42H,A A,#08EH SetDDRAM A,42H A,#30H WriteLCD A,R1 A,#0,PE8 PE8 43H,A A,#0CCH SetDDRAM A,43H A,#30H WriteLCD A,R2 44H,A A,#0CDH SetDDRAM A,44H A,#30H WriteLCD A,R3 45H,A A,#0CEH SetDDRAM A,45H A,#30H WriteLCD
KIRIN: add MOV JNB CLR Call RET
a,#30h SBUF, A TI, $ TI DELAY
;kirim A ke SBuf ;tunggu sampai TI habis ;Bersihkan flag trancieve serial ;tunggu
MOV MOV MOV MOV MOV SETB
SCON, #50H TMOD, #20H TL1, #0FDH TH1, #0FDH PCON, #00H TR1
;inisialisasi baud rate (9600 bps) ;Set Timer ; ; ; ;
initseri:
79
RET Reset: ;-------Reset Sensor------------------------------setb p3.2 setb p3.3 clr p3.4 clr p3.5 Mov r7,#9 ;write/command valid saat sck High & keep until sck down, after down boleh ubah rset: Setb p3.4 Setb p3.5 lcall DELAY clr p3.4 Setb p3.5 lcall DELAY djnz r7,rset call TS call TSB ret kdat: MOV A,#27h ;AWAL Data LCALL KIRIN MOV A,40h ;AWAL Data LCALL KIRIN MOV A,36h ;DATA RD MSB Bit 1 LCALL KIRIN MOV A,37H ;DATA RD MSB Bit 2 LCALL KIRIN MOV A,38H ;DATA RD MSB Bit 3 LCALL KIRIN MOV A,39H ;DATA RD LSB Bit 1 LCALL KIRIN MOV A,3AH ;DATA RD LSB Bit 2 LCALL KIRIN MOV A,3Bh ;DATA RD LSB Bit 3 LCALL KIRIN ret START: call initseri ;Panggil prosedur set serial setb ie.7 setb ie.4 Call Reset lcall DELAYF ;------INISIALISASI PPI-----------------------------------MOV A,#10000001b MOV DPTR,#PPICW MOVX @DPTR,A CALL InitLCD AWAL: MOV DPTR,#TXT1 MOV A,#080H LCALL SetDDRAM CALL PLCD MOV DPTR,#TXT2 MOV A,#0C0H LCALL SetDDRAM CALL PLCD IM1: MOV R7,#5 LCALL LUP2 call SAVSUHU1
80
call call call call MOV MOV MOVX mov MOV JNB CLR
SAVSUHU2 LEMBAB SAVRH1 SAVRH2 A,#128 DPTR,#PPIA @DPTR,A a,#"B" SBUF, A TI, $ TI
;kirim A ke SBuf ;tunggu sampai TI habis ;Bersihkan flag trancieve serial
LOOP1:
Lcall Lcall
call TS mov a,#00000101b Call CMD call ULL call LEMBAB call SAVRH1 MOV 40h,#18h LCALL kdat lcall DELAYF call TS mov a,#00000011b Call CMD call ULL call HITSUHU call SAVSUHU1 MOV 40h,#24h LCALL kdat lcall DELAYF call TSB mov a,#00000101b Call CMDB call ULL call LEMBAB call SAVRH2 MOV 40h,#19h LCALL kdat lcall DELAYF call TSB mov a,#00000011b Call CMDB call ULL call HITSUHU call SAVSUHU2 MOV 40H,#25h LCALL kdat lcall DELAYF Call Reset lcall DELAYF LCALL MTROUT call KEY CJNE A,#30H,PRESS Lcall DELAYF Lcall DELAYF Lcall DELAYF Lcall DELAYF DELAYF DELAYF
;AWAL Read
;AWAL Read
;AWAL Read
;AWAL Read
81
LCALL LCALL LCALL LCALL LOOP2: Ljmp LOOP3: CJNE MOV LCALL MOV LCALL MOV LCALL MOV LCALL MOV LCALL MOV LCALL MOV LCALL MOV LCALL MOV MOV LCALL CALL MOV MOV LCALL CALL
DELAYF DELAYF DELAYF DELAYF LOOP1 A,#13H,LOOP2 A,#27h KIRIN A,#23h KIRIN A,3Ch KIRIN A,3DH KIRIN A,3EH KIRIN A,3FH KIRIN A,40H KIRIN A,41H KIRIN DPTR,#TXT1 A,#080H SetDDRAM PLCD DPTR,#TXT2 A,#0C0H SetDDRAM PLCD
PRESS: CJNE MOV MOV LCALL CALL MOV MOV LCALL CALL LCALL Lcall Lcall Lcall Lcall Lcall Lcall LCALL LCALL LCALL IN1: MOV LCALL call CJNE Ljmp INP1: MOV MOV LCALL MOV ADD
A,#12H,LOOP3 DPTR,#TXT3 A,#080H SetDDRAM PLCD DPTR,#TXT4 A,#0C0H SetDDRAM PLCD DELAYF DELAYF DELAYF DELAYF DELAYF DELAYF DELAYF DELAYF DELAYF DELAYF R7,#3 LUP2 KEY A,#30H,INP1 IN1 3CH,A A,#089H SetDDRAM A,3CH A,#30H
;AWAL Read ;AWAL Read ;DATA RD MSB Bit 1 ;DATA RD MSB Bit 2 ;DATA RD MSB Bit 3 ;DATA RD LSB Bit 1 ;DATA RD LSB Bit 2 ;DATA RD LSB Bit 3
82
IN2:
INP2:
IN3:
INP3:
IN4:
INP4:
TUN:
LCALL MOV LCALL call CJNE Ljmp MOV MOV LCALL MOV ADD LCALL MOV LCALL call CJNE Ljmp MOV MOV LCALL MOV ADD LCALL MOV LCALL call CJNE Ljmp MOV MOV LCALL MOV ADD LCALL CJNE Ljmp LCALL Lcall Lcall Lcall Lcall RET
WriteLCD R7,#2 LUP2 KEY A,#30H,INP2 IN2 3DH,A A,#08AH SetDDRAM A,3DH A,#30H WriteLCD R7,#2 LUP2 KEY A,#30H,INP3 IN3 3EH,A A,#0C9H SetDDRAM A,3EH A,#30H WriteLCD R7,#2 LUP2 KEY A,#30H,INP4 IN4 3FH,A A,#0CAH SetDDRAM A,3FH A,#30H WriteLCD A,#13H,TUN LOOP2 DELAYF DELAYF DELAYF DELAYF DELAYF
;------DATA YANG AKAN DICETAK------------TXT1: DB 'T: . C RH: %$' TXT2: DB 't: . C rh: %$' TXT3: DB 'SP RH : %RH$' TXT4: DB 'SP T : C $' END ;Penggunaan Memory ;RO :DATA RD MSB ;R1 :DATA RD LSB ;R2 :PROCEDURE PENGAMBILAN DATA PERSATUAN ;R3 ..R7 : ;36h :DATA RD MSB Bit 1 HASIL KONVERSI BAGI ;37H ;DATA RD MSB Bit 2 ;38H ;39H ;3AH..3FH ;40H
83
Lampiran 3. Perintah dalam bahasa Delphi 7.0 private { Private declarations } public { Public declarations } mac, mdc, rrh, rrt: integer; i,jdah,jdat,vmoh,vmot,lama : integer; j,k,SP_T,SP_RH,dT,dH,RHtrue1,RHtrue2,Sutrue1,Sutrue2,Sutruerat,RHrat: real; Ctr,namafile : string; Temp1:array[1..8]of string; Temp2:array[1..8]of string; Temp3:array[1..8]of string; Temp4:array[1..8]of string; Temp5:array[1..8]of string; Humi1:array[1..8]of string; Humi2:array[1..8]of string; Humi3:array[1..8]of string; Humi4:array[1..8]of string; Humi5:array[1..8]of string; Spoin:array[1..8]of string; end; Const valout : array[1..7,1..7] of real = ((-1, -1, -1, -0.75, (-1, -1, -0.75, -0.5, (-1, -0.75, -0.5, -0.25, (-0.75, -0.5, -0.25, 0, (-0.5, -0.25, 0, 0.25, (-0.25, 0, 0.25, 0.5, (0, 0.25, 0.5, 0.75,
-0.5, -0.25, 0, 0.25, 0.5, 0.75, 1,
-0.25, 0, 0.25, 0.5, 0.75, 1, 1,
0), 0.25), 0.5), 0.75), 1), 1), 1));
Escale=80; //(T:20..100,SPT:30..90) dEscale=15; //(-80..80) Tscale=623; Fscale=90; //(RH:20..90,SPRH:40..60) dFscale=20; //(-70..70) Hscale=300; //Oscale=269;//(0..255) var Form1: TForm1; lama,sh1,penuh,kmode,delaya :integer; zoom, focus, iris, gamma : string; saat,tanggal: tdatetime; Nilai,RH1,RH2,Str,Suhulin1,Suhulin2,SPRH,SPT,NilH1,NilT1,NilH2,NilT2,NilHT: string; RHlin1,RHlin2,RHtr1,RHtr2 : real; Lemb1,Lemb2,Lemb3,Lemb4,Suhu1,Suhu2,Suhu3,Suhu4 : integer; Var//Fuzzy p,q,r,s:integer; E1,E2,Eo1,Eo2,dE,dE2,Et,Et2,dEt,dEt2 : real; F1,F2,dF,dF2,Ft,Ft2,dFt,dFt2 : real; PBE, PSE, PKE, PBdE, PSdE, PKdE,KE,BE,ZO : real; NBE, NSE, NKE, NBdE, NSdE, NKdE,Kde,Bde : real; MudE : array[1..10] of real; MuE : array[1..10] of real; MuOut : array[1..10,1..10] of real; MuCtr, Ctr1,Ctr2,Ctr3,Ctr6,Ctr7,Ctr8,Ctr10,Val1,Val2,val3,val4 : real; kontrol,acuan : longint;
84
implementation {$R *.DFM} Function fngrade(var x,x1,x2 :real) : real; Var Xt : real; begin Xt := (x-x1)/(x2-x1); fngrade := Xt; end; // End of Function fngrade Procedure MaxGrade; Var a,b,c,d,aa,bb,cc,dd : real; begin a:=Valout[p,r]; b:=Valout[p,s]; c:=Valout[q,r]; d:=Valout[q,s]; aa:=Muout[p,r]; bb:=Muout[p,s]; cc:=Muout[q,r]; dd:=Muout[q,s]; if(a=b) then begin if(aa>=bb) then bb:=0 else aa:=0; end; if(a=c) then begin if(aa>=cc) then cc:=0 else aa:=0; end; if(a=d) then begin if(aa>=dd) then dd:=0 else aa:=0; end; if(b=c) then begin if(bb>=cc) then cc:=0 else bb:=0; end; if(b=d) then begin if(bb>=dd) then dd:=0 else bb:=0; end; if(c=d) then begin if(cc>=dd) then dd:=0 else cc:=0; end; MuOut[p,r]:=aa; MuOut[p,s]:=bb; MuOut[q,r]:=cc; MuOut[q,s]:=dd; end; //End of Procedure MaxGrade Procedure Error_Fuzzy_H; Begin Zo:=0;
85
PKE:=0.25; PSE:=2*PKE; PBE:=3*PKE; NBE:=(-1)*PBE; NSE:=(-1)*PSE; NKE:=(-1)*PKE; if(Ft<=NBE) then begin p:= 1; q:= 2; MuE[p]:= 1; MuE[q]:= 0; end; if(Ft>NBE) and (Ft<=NSE) then begin p:= 1; q:= 2; MuE[p]:= fngrade(Ft,NSE,NBE); MuE[q]:= 1-MuE[p]; end; if(Ft>NKE) and (Ft<=Zo) then begin p:= 2; q:= 3; MuE[p]:= fngrade(Ft,Zo,NKE); MuE[q]:= 1-MuE[p]; end; if(Ft>NKE) and (Ft<=ZO) then begin p:= 3; q:= 4; MuE[p]:= fngrade(Ft,ZO,NKE); MuE[q]:= 1-MuE[p]; end; if(Ft>ZO) and (Ft<=PKE) then begin p:= 4; q:= 5; MuE[p]:= fngrade(Ft,PKE,ZO); MuE[q]:= 1-MuE[p]; end; if(Ft>PKE) and (Ft<=PSE) then begin p:= 5; q:= 6; MuE[p]:= fngrade(Ft,PSE,PKE); MuE[q]:= 1-MuE[p]; end; if(Ft>PSE) and (Ft<=PBE) then begin p:= 6; q:= 7; MuE[p]:= fngrade(Ft,PBE,PSE); MuE[q]:= 1-MuE[p]; end; if(Ft>PBE) then begin p:= 2; q:= 3; MuE[p]:= 0;
86
MuE[q]:= 1; end; end; //End of Error_Fuzzyfication Procedure dError_Fuzzy_H; begin Zo:=0; PKdE:=0.5; PSdE:=2*PKdE; PBdE:=3*PKdE; NBdE:=(-1)*PBdE; NSdE:=(-1)*PSdE; NKdE:=(-1)*PKdE; if(dFt<=NBdE) then begin r:= 1; s:= 2; MudE[r]:= 1; MudE[s]:= 0; end; if(dFt>NBdE) and (dFt<=NSdE) then begin r:= 1; s:= 2; MudE[r]:= fngrade(dFt,NKdE,NSdE); MudE[s]:= 1-MudE[r]; end; if(dFt>NSdE) and (dFt<=NKdE) then begin r:= 2; s:= 3; MudE[r]:= fngrade(dFt,NKdE,NSdE); MudE[s]:= 1-MudE[r]; end; if(dFt>NKdE) and (dFt<=ZO) then begin r:= 3; s:= 4; MudE[r]:= fngrade(dFt,ZO,NKdE); MudE[s]:= 1-MudE[r]; end; if(dFt>ZO) and (dFt<=PKdE) then begin r:= 4; s:= 5; MudE[r]:= fngrade(dFt,PKdE,ZO); MudE[s]:= 1-MudE[r]; end; if(dFt>PKdE) and (dFt<=PSdE) then begin r:= 5; s:= 6; MudE[r]:= fngrade(dFt,PSdE,PKdE); MudE[s]:= 1-MudE[r]; end; if(dFt>PSdE) and (dFt<=PBdE) then begin r:= 6; s:= 7;
87
MudE[r]:= fngrade(dFt,PBdE,PSdE); MudE[s]:= 1-MudE[r]; end; if(dFt>PBdE) then begin r:= 2; s:= 3; MudE[r]:= 0; MudE[s]:= 1; end; end; //End of dError_Fuzzyfication Procedure Defuzzy_H; begin MuOut[p,r]:=MuE[p]*MudE[r]; MuOut[p,s]:=MuE[p]*MudE[s]; MuOut[q,r]:=MuE[q]*MudE[r]; MuOut[q,s]:=MuE[q]*MudE[s]; MaxGrade; MuCtr:=MuOut[p,r]+MuOut[p,s]+MuOut[q,r]+MuOut[q,s]; val3:=MuOut[p,r]*Valout[p,r]+MuOut[p,s]*Valout[p,s]; val4:=MuOut[q,r]*Valout[q,r]+MuOut[q,s]*Valout[q,s]; Ctr10:=(val3+val4)/MuCtr; Ctr6:=int(Ctr10*Hscale); end; //End of Defuzzyfication Procedure Error_Fuzzy_T; Begin Zo:=0; PKE:=0.25; PSE:=2*PKE; PBE:=3*PKE; NBE:=(-1)*PBE; NSE:=(-1)*PSE; NKE:=(-1)*PKE; if(Et<=NBE) then begin p:= 1; q:= 2; MuE[p]:= 1; MuE[q]:= 0; end; if(Et>NBE) and (Et<=NSE) then begin p:= 1; q:= 2; MuE[p]:= fngrade(Et,NSE,NBE); MuE[q]:= 1-MuE[p]; end; if(Et>NSE) and (Et<=NKE) then begin p:= 2; q:= 3; MuE[p]:= fngrade(Et,NKE,NSE); MuE[q]:= 1-MuE[p]; end;
88
if(Et>NKE) and (Et<=ZO) then begin p:= 3; q:= 4; MuE[p]:= fngrade(Et,ZO,NKE); MuE[q]:= 1-MuE[p]; end; if(Et>ZO) and (Et<=PKE) then begin p:= 4; q:= 5; MuE[p]:= fngrade(Et,PKE,ZO); MuE[q]:= 1-MuE[p]; end; if(Et>PKE) and (Et<=PSE) then begin p:= 5; q:= 6; MuE[p]:= fngrade(Et,PSE,PKE); MuE[q]:= 1-MuE[p]; end; if(Et>PSE) and (Et<=PBE) then begin p:= 6; q:= 7; MuE[p]:= fngrade(Et,PBE,PSE); MuE[q]:= 1-MuE[p]; end; if(Et>PBE) then begin p:= 6; q:= 7; MuE[p]:= 0; MuE[q]:= 1; end; end; //End of Error_Fuzzyfication Procedure dError_Fuzzy_T; begin Zo:=0; PKdE:=0.25; PSdE:=2*PKdE; PBdE:=3*PKdE; NBdE:=(-1)*PBdE; NSdE:=(-1)*PSdE; NKdE:=(-1)*PKdE; if(dEt<=NBdE) then begin r:= 1; s:= 2; MudE[r]:= 1; MudE[s]:= 0; end; if(dEt>NBdE) and (dEt<=NSdE) then begin r:= 1; s:= 2; MudE[r]:= fngrade(dEt,NSdE,NBdE); MudE[s]:= 1-MudE[r];
89
end; if(dEt>NSdE) and (dEt<=NKdE) then begin r:= 2; s:= 3; MudE[r]:= fngrade(dEt,NKdE,NSdE); MudE[s]:= 1-MudE[r]; end; if(dEt>NKdE) and (dEt<=ZO) then begin r:= 3; s:= 4; MudE[r]:= fngrade(dEt,ZO,NKdE); MudE[s]:= 1-MudE[r]; end; if(dEt>ZO) and (dEt<=PKdE) then begin r:= 4; s:= 5; MudE[r]:= fngrade(dEt,PKdE,ZO); MudE[s]:= 1-MudE[r]; end; if(dEt>PKdE) and (dEt<=PSdE) then begin r:= 5; s:= 6; MudE[r]:= fngrade(dEt,PSdE,PKdE); MudE[s]:= 1-MudE[r]; end; if(dEt>PSdE) and (dEt<=PBdE) then begin r:= 6; s:= 7; MudE[r]:= fngrade(dEt,PBdE,PSdE); MudE[s]:= 1-MudE[r]; end; if(dEt>PBdE) then begin r:= 6; s:= 7; MudE[r]:= 0; MudE[s]:= 1; end; end; //End of dError_Fuzzyfication Procedure Defuzzy_T; begin MuOut[p,r]:=MuE[p]*MudE[r]; MuOut[p,s]:=MuE[p]*MudE[s]; MuOut[q,r]:=MuE[q]*MudE[r]; MuOut[q,s]:=MuE[q]*MudE[s]; MaxGrade; MuCtr:=MuOut[p,r]+MuOut[p,s]+MuOut[q,r]+MuOut[q,s]; val1:=MuOut[p,r]*Valout[p,r]+MuOut[p,s]*Valout[p,s]; val2:=MuOut[q,r]*Valout[q,r]+MuOut[q,s]*Valout[q,s]; Ctr1:=(val1+val2)/MuCtr; Ctr2:=int(Ctr1*Tscale);
90
end; //End of Defuzzyfication procedure TForm1.Button_OpenClick(Sender: TObject); ///////// begin If edit1.text = '' then edit1.Text := '60'; if edit2.Text = '' then edit2.Text := '45'; DateSeparator := '-'; ShortDateFormat := 'd/m/yyyy'; Label14.Caption := DateToStr(Date); if ComPort.Connected then ComPort.Close else ComPort.Open; if button_open.Enabled=true then begin timer1.Enabled:=true; timer1.Interval:=100; end else begin timer1.Enabled:=false; end end; procedure TForm1.Button_SettingsClick(Sender: TObject); begin ComPort.ShowSetupDialog; end; procedure TForm1.Button_SendClick(Sender: TObject); var Str: String; begin ComPort.WriteStr(Str); end;
/////////
procedure TForm1.ComPortOpen(Sender: TObject); begin Button_Open.Caption := '&Close'; end; procedure TForm1.ComPortClose(Sender: TObject); begin if Button_Open <> nil then Button_Open.Caption := '&Open'; end; procedure TForm1.ComPortRxChar(Sender: TObject; Count: Integer); begin ComPort.Readstr(Nilai, Count); //cek new set point if Nilai[1]+Nilai[2]='WS' then begin edit2.text:=Nilai[3]+Nilai[4]; edit1.text:=Nilai[5]+Nilai[6]; end;
91
//konversi nilai If Nilai[1]+Nilai[2] = 'WH' then begin Humi1[1]:= Nilai[4]+Nilai[5]; Humi2[1]:= Nilai[6]+Nilai[7]+Nilai[8]; Lemb1:=strtoint(Humi1[1]); Lemb2:=strtoint(Humi2[1]); RHlin1:=-4+(4.05*power(10.00,2)*((Lemb1*256)+Lemb2))+((((Lemb1*256)+Lemb2)*((Lemb1*256)+Lemb2))*(-0.0000028)); RHtrue1:=(int(Sutrue1)-25)*(0.01+int(80*power(10,-5))*((Lemb1*256)+Lemb2))+int(RHlin1); RH1:=floattostr(RHtrue1); SP_RH := strtofloat(Edit2.Text); SPRH := floattostr(SP_RH); NilH1 := Nilai; penuh:=penuh+1; end else If Nilai[1]+Nilai[2]='WI' then begin Humi3[1]:= Nilai[4]+Nilai[5]; Humi4[1]:= Nilai[6]+Nilai[7]+Nilai[8]; Lemb3:=strtoint(Humi3[1]); Lemb4:=strtoint(Humi4[1]); RHlin2:=-4+(4.05*power(10.00,2)*((Lemb3*256)+Lemb4))+((((Lemb3*256)+Lemb4)*((Lemb3*256)+Lemb4))*(-2.80*power(10,-6)));
RHtrue2:=(int(Sutrue2)-25)*(0.01+int(8*power(10,-5))*((Lemb3*256)+Lemb4))+int(RHlin2); RH2:=floattostr(RHtrue2); NilH2 :=Nilai; penuh:=penuh+1; end else If Nilai[1]+Nilai[2]='WT' then begin Temp1[2]:=Nilai[4]+Nilai[5]; Temp2[2]:=Nilai[6]+Nilai[7]+Nilai[8]; Suhu1:=strtoint(Temp1[2]); Suhu2:=strtoint(Temp2[2]); Sutrue1:=0.01*((Suhu1*256)+Suhu2)-40.1; Suhulin1:=floattostr(Sutrue1); SP_T := strtofloat(Edit1.Text); SPT := floattostr(SP_T); NilT1 := Nilai; penuh:=penuh+1; end else If Nilai[1]+Nilai[2]='WU' then Begin Temp3[2]:=Nilai[4]+Nilai[5]; Temp4[2]:=Nilai[6]+Nilai[7]+Nilai[8]; Suhu3:=strtoint(Temp3[2]); Suhu4:=strtoint(Temp4[2]); Sutrue2:=0.01*((Suhu3*256)+Suhu4)-40.1; Suhulin2:=floattostr(Sutrue2); NilT2 :=Nilai; penuh:=penuh+1; end; if penuh = 104 then begin penuh :=100; RHrat:=(RHtrue1+RHtrue2)/2;
92
Sutruerat:=(Sutrue1+Sutrue2)/2; //Fuzzy or manual if kmode=100 then begin vmot:=ScrollBar1.Position; vmoh:=ScrollBar6.Position; end //Fuzzy else if kmode=200 then begin //Hitung Error Suhu E1:=Sutruerat-SP_T; dE:=E1-E2; Et:=E1/Escale; dEt:=dE/dEscale; E2:=E1; //Hitung Error RH F1:=RHrat-SP_RH; dF:=F1-F2; Ft:=F1/Fscale; dFt:=dF/dFscale; F2:=F1; Error_Fuzzy_T; dError_Fuzzy_T; Defuzzy_T; Error_Fuzzy_H; dError_Fuzzy_H; Defuzzy_H; //vmoh if Ctr6>=80 then begin if dE<0 then jdah:=jdah-1; vmoh:=jdah+0; if (dE>=0) and (vmoh>0) then jdah:=jdah+1; vmoh:=jdah+38; if vmoh<=0 then vmoh:=0; end else if (ctr6<80) and (ctr6>=56) then begin if dE<0 then jdah:=jdah-1; vmoh:=jdah+39; if dE>=0 then jdah:=jdah+1; vmoh:=jdah+76; if vmoh<=39 then jdah:=0; if vmoh>=76 then jdah:=0; end else if (Ctr6<56) and (Ctr6>=0) then begin if dE<0 then jdah:=jdah-1;
93
vmoh:=jdah+77; if dE>0 then jdah:=jdah+1; vmoh:=jdah+114; if vmoh<=77 then jdah:=0; if vmoh>=114 then jdah:=0; end else if Ctr6<0 then begin if dE<0 then jdah:= jdah-1; vmoh:=jdah+114; if dE>0 then jdah:= jdah+1; vmoh:=jdah+152; if vmoh<=114 then jdah:=0; if vmoh>=152 then jdah:=0; end; //vmot if (Ctr2<=-150) then begin if dE<0 then jdat:=jdat+1; vmot:=jdat+90; if vmot>=100 then jdat:=0; if dE>=0 then jdat:=jdat-1; vmot:=jdat+90; if vmot<=85 then jdat:=0; end else if (Ctr2>-150) and (Ctr2<=-105) then begin if dE<0 then jdat:=jdat+1; vmot:=jdat+75; if vmot>=85then jdat:=0; if dE>=0 then jdat:=jdat-1; vmot:=jdat+85; if vmot<=75 then jdat:=0; end else if (Ctr2>-105) and (Ctr2<=10) then begin if dE<0 then jdat:=jdat+1; vmot:=jdat+65; if vmot>=75 then jdat:=0; if dE>=0 then jdat:=jdat-1; vmot:=jdat+75; if vmot<=65 then jdat:=0; end else if (Ctr2>10) then begin if dE<0 then jdat:=jdat+1; vmot:=jdat+40; if dE>=0 then jdat:=jdat-1;
94
vmot:=jdat+65; if vmot<40 then jdat:=0; if vmot<40 then vmot:=0; end; Str := 'M'; ComPort.Writestr(Str); ComPort.Write(vmot,1); ComPort.Write(vmoh,1); //--------end; //tampil ke memo Memo.Lines.Add(timetostr(time)+#9+SPT +#9+ Suhulin1+#9+ Suhulin2+#9+ SPRH +#9+ RH1+#9+RH2+#9+inttostr(vmot)+#9+inttostr(vmoh)); //only grafik series1.Add(SP_T,'',clteecolor); series2.Add(Sutruerat,'',clTeeColor); series3.Add(vmot,'',clTeeColor); with chart1.BottomAxis do begin automatic:=false; maximum:=series1.XValues.Last+50; minimum:=maximum-100; end; series4.Add(SP_RH,'',clteecolor); series5.Add(RHrat,'',clTeeColor); series6.Add(vmoh,'',clTeeColor); with chart2.BottomAxis do begin automatic:=false; maximum:=series1.XValues.Last+50; minimum:=maximum-100; end; //simpan otomatis lama:=lama+1; if (lama>=0) and (lama<150) then edit9.Text:=' 0:'; if lama = 150 then begin memo.Lines.SaveToFile('Fuzzy1.xls'); end; if (lama>=150) and (lama<300) then edit9.Text:=' 1:'; if lama = 300 then begin memo.lines.savetofile('Fuzzy2.xls'); memo.Clear; end; if (lama>=300) and (lama<450) then edit9.Text:=' 2:'; if lama = 450 then begin memo.lines.savetofile('Fuzzy3.xls'); end; if (lama>=450) and (lama<600) then edit9.Text:=' 3:'; if lama = 600 then begin memo.lines.savetofile('Fuzzy4.xls'); memo.clear; end;
95
if (lama>=600) and (lama<750) then edit9.Text:=' 4:'; if lama = 750 then begin memo.lines.savetofile('Fuzzy5.xls'); end; if (lama>=750) and (lama<900) then edit9.Text:=' 5:'; if lama = 900 then begin memo.lines.savetofile('Fuzzy6.xls'); memo.clear; edit9.Text:=' 6:'; end; if lama = 900 then lama:=0; edit4.Text:=floattostr(sutruerat); edit6.Text:=floattostr(RHrat); edit7.Text:=inttostr(lama); end; end; procedure TForm1.Bt_LoadClick(Sender: TObject); begin ComPort.LoadSettings(stRegistry, 'HKEY_LOCAL_MACHINE\Software\Dejan'); end; procedure TForm1.Bt_StoreClick(Sender: TObject); begin ComPort.StoreSettings(stRegistry, 'HKEY_LOCAL_MACHINE\Software\Dejan'); end; procedure TForm1.FormCreate(Sender: TObject); begin ComPort.close; kmode:=100; penuh:=100; Memo.Lines.add(DateToStr(Date)); Memo.Lines.Add('Waktu'+#9+'SP-T'+#9+'Tr_1(oC)'+#9+'Tr_2(oC)'+#9+'SPRH'+#9+'RH_1(%)'+#9+'RH_2(%)'+#9+'Vmotor'+#9+'Vblower'); end; procedure TForm1.Button3Click(Sender: TObject);/////// begin memo.Clear; end; procedure TForm1.Button30Click(Sender: TObject); //////// var Str: String; //str1,count : Integer; begin Str := 'M'; ComPort.Writestr(Str); ComPort.Write((ScrollBar1.Position),1); ComPort.Write((ScrollBar6.Position),1); end; procedure TForm1.Button19Click(Sender: TObject); /////// var Str: String;
96
begin Str := 'M'; ComPort.Writestr(Str); Str := 'J'; ComPort.Writestr(Str); ComPort.Write((ScrollBar1.Position),2); end; procedure TForm1.Button1Click(Sender: TObject); var Nama : string; begin if SaveDialog1.Execute then Nama:= SaveDialog1.Filename; Memo.Lines.SaveToFile(Nama+'.xls'); end; procedure TForm1.ScrollBar1Change(Sender: TObject); begin edit3.Text := inttostr(ScrollBar1.Position); end; procedure TForm1.ScrollBar6Change(Sender: TObject); begin edit8.Text := inttostr(ScrollBar6.Position); end; procedure TForm1.Button4Click(Sender: TObject); begin kmode:=200; button30.Enabled:=false; end; procedure TForm1.Button2Click(Sender: TObject); begin kmode:=100; button30.Enabled:=True; end; end.
97
Lampiran 4. Perintah Assembly Driver Motor AC
output_triac equ p3.6 input_zero_cross equ p1.5 equ p1.4 tombol_up status_transisi byk_step cacah_step
equ 40h equ 60h equ 61h
org 0h jmp init_awal org 1bh jmp Lay_int1 org 60h init_awal: mov tmod,#00010000 setb ea setb status_transisi setb et1 mov byk_step,#50 mov cacah_step,byk_step mov th1,#high(-30) mov tl1,#low(-30)
; vektor interupsi timer1 ; timer1 mode 16bit ; aktifkan interupsi global ; tandai status transisi awal ; aktifkan interupsi timer1 ; default setting step ; isi ulang timer
program_utama: mov byk_step,p2 ; baca masukan port mov a,byk_step ; cek step maksimal mov b,#200 clr c subb a,b jnc non_aktif mov a,byk_step cjne a,#0, status_0_1 ; cek step minimal aktif_full: clr output_triac clr tr1 jmp program_utama non_aktif: setb output_triac clr tr1 jmp program_utama status_0_1: jnb status_transisi, status_1_0 jnb input_zero_cross,status_0_1 setb output_triac clr status_transisi setb tr1 jmp program_utama
98
status_1_0: jb status_transisi, status_0_1 jb input_zero_cross,status_1_0 setb output_triac setb status_transisi setb tr1 jmp program_utama ;================== ; layanan interupsi timer1 ;-----------------------------Lay_int1: clr tr1 clr tf1 djnz cacah_step,ke_reti_end mov cacah_step,byk_step clr output_triac call tunda_50us mov th1,#high(-30) mov tl1,#low(-30) reti ke_reti_end: setb tr1 mov th1,#high(-30) mov tl1,#low(-30) reti
; apa waktu tunda telah terpenuhi ; perbaharuhi waktu tunda ; aktifkan triac ; isi ulang timer
; isi ulang timer
;======= ; subrutin ;-----------tunda_50us: loop2: mov r6,#50 loop1: djnz r6,$ ret
99
Lampiran 5. Skema titik pengukuran tampak samping
Irad
Blower udara keluar Vud2
Sensor SHT75 M1
T13, …14
M8, 9
T9, 10, 11, 12 M4, 5 , 6, 7
M2, 3
T7,8 RH3, 4 Vud1
T2,,3,4 RH1, 2 T5,6 T1
T15, 16 Sensor SHT11
Motor Pengumpan
Keterangan : T : Suhu / Temperature = Suhu tungku T1 = Suhu air masuk dan keluar penukar panas T2,3,4 = Suhu udara sebelum masuk penukar panas T5,6 = Suhu udara pengering pada kedua ruas T7,8 T9,10,11,12 = Suhu udara bahan (awal & akhir) pada kedua ruas = Suhu udara keluar bahan (bola basah dan bola kering) T13,14 = Suhu udara lingkungan (bola basah dan bola kering) T15,16 M : Massa dan Kadar air bahan = Massa dan kadar air tongkol jagung M1 = Massa dan kadar air jagung pada posisi udara masuk untuk kedua M2,3 ruas = Massa dan kadar air jagung pada posisi udara masuk dan keluar M4,5,6,7 bahan pada kedua ruas M8,9 = Massa dan kadar air jagung pada posisi udara keluar untuk kedua ruas Kecepatan udara, Kelembaban dan Radiasi surya = Kecepatan udara masuk bahan dan keluar bangunan Vud1,2 = Kelembaban relative udara masuk penukar panas pada kedua ruas RH1,2 = Kelembaban relative udara masuk bahan pada kedua ruas RH3,4 = Iradiasi surya sesaat Irad
100
Lampiran 6. Skema titik pengukuran tampak atas
T15, 16
Blower udara keluar
Vud2 T13, 14 M8
M9
Ruas 1
Ruas 2
T9, 10
T11, 12
M4,5
M6,7
M2
M3
Sensor SHT75 F L C
Sensor SHT11 T7,RH3 T5 RH1 HE1
T6 RH2
T8,RH4 Vud1
HE2
T2,3,4 T1
M1
Motor Pengumpan
Keterangan: FLC : Alat Kendali Logika Fuzzy HE : Penukar panas
101