Inkubator Dengan Fuzzy Logic
Inkubator dengan Fuzzy Logic, diharapkan dengan metode fuzzy dapat diperoleh kontrol lebih halus dari pada sistem kontrol ON/OFF. Inkubator ini memakai lampu sebagai pemanas dan sebuah kipas untuk menurunkan suhu ruangan di dalam inkubator.
Inkubator Dengan Fuzzy Logic
Inkubator adalah suatu alat yang digunakan sebagai pemanas suatu tempat agar dapat menghasilkan suhu yang stabil dan sesuai dengan kebutuhan. Misalnya inkubator yang dipergunakan untuk penetas telur membutuhkan suhu yang stabil antara 36°C sampai 37°C, lain lagi dengan inkubator bayi dibutuhkan suhu 40°C sampai 42°C, suhu ini disesuaikan dengan suhu dalam perut ibunya yang berkisar pada suhu tersebut.
Inkubator ini dikendalikan dengan MC68HC11 yang difungsikan sebagai fuzzy controller. Keuntungan dari penggunaan fuzzy logic dalam pembuatan inkubator adalah sistem akan menjadi lebih stabil, ini terlihat pada respon dari output yang dihasilkan dan juga ketahanan sisitem terhadap gangguan. Dengan fuzzy logic sistem lebih mudah untuk disesuaikan dengan berbagai kondisi agar menghasikan sistem yang stabil, seperti misal besar ruangan dalam inkubator, suhu sekitar dan juga bahan yang digunakan dalam pembuatan inkubator.
Blok diagram rangkaian inkubator yang dibuat terlihat pada Gambar 1. Sensor suhu berupa LM 35 dipakai untuk mengukur nilai suhu dalam inkubator Tombol push button yang berjumlah dua buah digunakan sebagai pengatur suhu atau suhu dalam inkubator yang dibutuhkan, untuk tampilannya digunakan LCD (Liquid Crystal Display) 2´16, yang berarti setiap line dapat berisi 16 karakter. LCD ini digunakan untuk menampilkan suhu sekarang dalam inkubator, suhu yang dibutuhkan, tingkat intensitas lampu yang digunakan sebagai pemanas dan juga tingkat kecepatan dari kipas.
Untuk mengatur intensitas dari lampu yang menggunakan tegangan AC digunakan sistem phase control dan untuk mengatur kecepatan kipas yang menggunakan motor DC digunakan sistem PWM (Pulse Width Modulation)
FUDGE(Fuzzy Development and Generation Environment)
Cara kerja dari inkubator ini berdasarkan suatu sistem yang berbasiskan fuzzy. Blok diagram sistem berbasis fuzzy tampak seperti gambar 2. Dalam membangun sistem berbasis fuzzy pada sebuah general purpose mikrokontroler, maka dibutuhkan data yang berisi fungsi keanggotaan input dan output, beserta rule fuzzy-nya. Untuk itu maka digunakan FUDGE (Fuzzy Development and Generation Environment) dan fuzzy kernel FUZZ11B3 dari Motorolla. Data-data fungsi keanggotaan input, output dan rule fuzzy-nya selanjutnya disimpan dalam suatu tabel memori. Tabel memori tersebut kemudian diproses dalam fuzzy kernel. Fuzzy kernel FUZZ11B3 pada penerapannya dibatasi fungsi keanggotaan input berbentuk trapesoid, fungsi keanggotaan output berbentuk singletone. Adapun jumlah input maksimal adalah delapan dan jumlah output maksimal adalah empat.
Pada fuzzy kernel terjadi tiga proses dasar pada sistem kontrol fuzzy yaitu: fuzzifikasi, evaluasi rule dan defuzzifikasi. Pada inkubator ini input crispnya berupa selisih suhu antara suhu dalam inkubator dengan suhu setting, input tersebut kemudian akan difuzzifikasikan bersama dengan fungsi keanggotaan input yang telah dihasilkan oleh FUDGE. Kemudian selanjutnya akan melewati proses evaluasi rule dan defuzzifikasi. Hasil defuzzifikasi tersebut akan menunjukkan tabel output kipas maupun lampu, dan kemudian dipakai sebagai output dari sistem fuzzy. Sementara itu program utama berfungsi untuk memanggil fuzzy kernel.
Potongan Program 1 – Program Utama Inkubator Dengan Fuzzy Logic
1: ULANG:
2: JSR Prn_suhu_setting ;tampilkan suhu setting
3: JSR Prn_suhu_sekarang ;tampilkan suhu dlm inkubator – read A/DC
4: JSR Prn_fan_light ;tampilkan keadaan kipas dan lampu
5: BSR set_suhu ;check ada perubahan suhu setting?
6: BSR fuzzy ;siapkan inputcrisp,eksekusi Fuzzy kernel
7: ;outputcrisp hasil defuzzifikasi,output bekerja
8: BRA ulang ;kembali ke ulang
Potongan Program 2 – Eksekusi Fuzzy Kernel
1: FUZZY:
2: LDAA SUHU_SETTING ;ambil nilai suhu_setting
3: LDAB SUHU_SEKARANG ;ambil nilai suhu_sekarang
4: SBA ;a=a-b
5: ADDA #20 ;a=a+20
6: CMPA #40
7: BGE SET_MAX ;jika sama atau lebih set $FF
8: CMPA #0 ;jika sama atau kurang set $00
9: BLE SET_MIN
10: LDAB #64
11: MUL ;a*64
12: LDX #10 ;/10
13: IDIV X ;X=D/X
14: XGDX ;D=X
15: BRA NEXT
16:
17: SET_MIN:
18: LDAB #$0
19: BRA NEXT
20: SET_MAX:
21: LDAB #$FF
22:
23: NEXT:
24: LDX #CURRENT_INS
25: STAB X ;crisp input disimpan dalam current_ins
26: JSR FUZZIFY ;eksekusi kernel fuzzy FUZZ11B3
27: LDY #COG_OUTS ;hasil proses defuzzifikasi
28: LDAB Y ;ambil nilai COG_out
29: BSR KONVERT ;konversi ke tingkat kecepatan kipas
30: STAB KIPAS_PTR ;pointer tabel kecepatan kipas
31: INY ;increment COG_out
32: LDAB Y ;ambil nilai COG_out berikutnya
33: BSR KONVERT ;konversi ke tingkat intensitas lampu
34: STAB LAMPU_PTR ;pointer tabel intensitas lampu
35: JSR CHANGE_KIPAS ;update kecepatan kipas
36: JSR CHANGE_LAMPU ;update intensitas kipas
37: RTS
Potongan program di atas dapat dijelaskan sebagai berikut: ambil nilai suhu dalam inkubator dengan membaca nilai A/D Converter kemudian tampilkan, ambil nilai suhu setting kemudian tampilkan, ambil nilai keadaan kipas kemudian tampilkan. Tiga instruksi diatas (baris 2,3,4) hanyalah berguna sebagi tampilan pada LCD sehingga dapat diketahui perkembangan atau perubahan suhu, lampu dan kipas. Baris 5 berguna untuk menunggu apakah ada penekanan tombol dari PA1 dan PA2, atau dengan kata lain diubahnya suhu setting. Proses fuzzy sebenarnya terjadi pada baris 6, pada sub-rutin ini akan diambil selisih suhu antara suhu setting dengan suhu dalam inkubator, kemudian hasilnya dijadikan input crisp. Input crisp yang telah tersimpan pada current_ins ini digunakan untuk proses fuzzifikasi bersama dengan fungsi keanggotaan input yang telah dihasilkan oleh FUDGE, dan selanjutnya akan melewati tahap evaluasi rule dan deffuzifikasi pada fuzzy kernel. Hasil defuzzifikasi kemudian diambil pada COG_Out dan dijadikan output bagi lampu dan kipas.
Pembuatan dan penentuan input dan output crisp, fungsi keanggotaan input dan output, beserta rule fuzzy-nya tergantung pada kebutuhan. Pada inkubator ini yang memiliki ukuran 40cm ´ 28cm ´ 25cm dan sisi-sisinya terbuat dari kayu kecuali sisi depan terbuat dari kaca, terutama digunakan untuk memanaskan suhu antara 40°C – 42°C, pembuatan input dan output crisp, fungsi keanggotaan input dan output, beserta rule fuzzy-nya dengan FUDGE adalah sebagai berikut:
Pada inkubator ini rule fuzzy-nya ada 7 yaitu:
If delta is neglarge then
Kipas is cepat sekali and Lampu is taknyala
If delta is negmed then
Kipas is cepat and Lampu is taknyala
If delta is negsmal then
Kipas is sedang and Lampu is redup
If delta is pas then
Kipas is mati and Lampu is redup
If delta is possmal then
Kipas is mati and Lampu is sedang
If delta is posmed then
Kipas is mati and Lampu is terang
If delta is poslarge then
Kipas is mati and Lampu is terangsekali
Setelah dilakukan generate code 68HC11 maka data-data tersebut disimpan dalam byte-byte memori seperti dibawah ini. Karena fungsi keanggotaan input trapesoid maka membutuhkan empat byte memori, fungsi keanggotaan output hanya membutuhkan satu byte memory karena fungsi singletone. Sedangkan rule fuzzy-nya yang memiliki MSB = 0 adalah antecendent atau bagian input sedangkan yang memiliki MSB = 1 adalah consequent atau bagian outputnya.
Tabel Data Memori hasil Ganerate Code 68HC11
1: INPUT_MFS EQU * ; Input Membership Functions
2: IN0MF EQU * ; delta
3: FCB $00,$00,$33,$08 ; neglarge
4: FCB $33,$08,$53,$0a ; negmed
5: FCB $60,$14,$6c,$0d ; negsmal
6: FCB $79,$28,$80,$28 ; pas
7: FCB $80,$0d,$93,$14 ; possmal
8: FCB $93,$0a,$ac,$0d ; posmed
9: FCB $ac,$08,$ff,$00 ; poslarge
10: FCB $00,$00,$00,$00 ; ~
11: SGLTN_POS EQU * ; Output Membership Functions
12: OUT0MF EQU * ; kipas
13: FCB $00 ; mati
14: FCB $40 ; pelan
15: FCB $80 ; sedang
16: FCB $bf ; cepat
17: FCB $ff ; cepatsekali
18: FCB $00 ; ~
19: FCB $00 ; ~
20: FCB $00 ; ~
21: OUT1MF EQU * ; lampu
22: FCB $00 ; taknyala
23: FCB $40 ; redup
24: FCB $80 ; sedang
25: FCB $bf ; terang
26: FCB $ff ; terangsekali
27: FCB $00 ; ~
28: FCB $00 ; ~
29: FCB $00 ; ~
30: RULE_START EQU * ; Rules follow:
31: FCB $00
32: FCB $84
33: FCB $88
34: FCB $03
35: FCB $80
36: FCB $89
37: FCB $04
38: FCB $80
39: FCB $8a
40: FCB $05
41: FCB $80
42: FCB $8b
43: FCB $06
44: FCB $80
45: FCB $8c
46: FCB $01
47: FCB $83
48: FCB $88
49: FCB $02
50: FCB $82
51: FCB $89
52: END_OF_RULE FCB $ff
Modul LCD 2´16
Untuk menampilkan suhu sekarang, suhu setting, tingkat kecepatan kipas, dan juga intensitas lampu maka digunakan M124A yang merupakan modul LCD 16´2. LCD ini memiliki built-in kontroler yang didalamnya sudah terdapat karakter generator ROM/RAM dan display data RAM. Semua fungsi display dikontrol lewat instruksi, dan modul ini sudah siap diinterfacekan dengan MPU.Tabel 1 menunjukkan fungsi pin modul LCD M124A. Interface modul dengan MCU MC68HC11 ditunjukkan pada gambar 3. Adapun pada interface tersebut, modul LCD diakses melalui address $0400-$0401.
Pada kontroler LCD terdapat dua buah 8-bit register, yaitu instruction register (IR) dan data register (DR). kedua register ini dipilih melalui sinyal pada pin RS (Register Select) seperti telah ditunjukkan pada tabel 1. Penulisan pada IR menyebabkan dilakukannya suatu instruksi tertentu. Tabel 2 menunjukkan instruksi-instruksi yang dapat dilakukan melalui penulisan pada IR.
Penulisan atau pembacaan pada data register menyebabkan tersimpannya atau terbacanya data pada DD RAM maupun CG RAM. DD RAM adalah memori yang digunakan untuk menyimpan data yang didisplaykan ke LCD, sedangkan CG RAM adalah memori yang dapat digunakan oleh software untuk membuat sebuah karakter
Berikut ini adalah software pengendali yang digunakan untuk menulis data maupun instruksi pada modul LCD. Untuk perintah LCD digunakan rutin Out_Ctrl. Untuk menulis pada LCD, digunakan rutin Out_char.
Potongan Program 3 – Out_Ctrl
1: LCD_CTRL EQU $0400
2: LCD_DATA EQU $0401
3: ————————-
4: OUT_CTRL:
5: STAB LCD_CTRL ;out B to IR
6: BRA WAIT_BIT7 ;wait busy
7: OUT_CHAR:
8: STAB LCD_DATA ;out B to DD RAM or CG RAM
9: WAIT_BIT7: LDAB LCD_CTRL ;wait busy flag
10: BMI WAIT_BIT7
11: RTS
Sebelum digunakan, LCD tersebut terlebih dahulu harus diinisialisasikan. Berikut ini adalah program inisialisai LCD.
Potongan Program 4 – Init LCD
1: INIT_LCD_SEQ
2: DB $38,$0C,$06,0 ;Function set,Display
3: ;On,Entry Mode Set
4: BSR L_DELAY ;15ms more delay after VDD=4.5V
5: LDAB #$38 ;FUNCTION SET
6: STAB LCD_CTRL
7: BSR DELAY ;4.1ms more
8: LDAB #$38 ;FUNCTION SET
9: STAB LCD_CTRL
10: BSR DELAY ;100us more
11: LDAB #$38 ;FUNCTION SET
12: STAB LCD_CTRL
13: LDY #INIT_LCD_SEQ ;diisi function set, display
14: LOOP_INIT_LCD:
15: LDAB Y ;on/off,entry mode
16: BEQ X_INIT_LCD
17: BSR OUT_CTRL
18: INY ;Increment alamat
19: BRA LOOP_INIT_LCD
20: X_INIT_LCD:
21: RTS
Sensor Suhu
Untuk mendeteksi suhu dalam inkubator digunakanlah sebuah sensor suhu LM 35 yang dapat dikalibrasikan langsung dalam °C, LM 35 ini difungsikan sebagai basic temperature sensor seperti pada gambar 4.
Vout dari LM 35 ini dihubungkan dengan Port E dari MC68HC11 untuk dijadikan input analog A/DC. Pada A/D Converter 8 bit yang dimiliki MC68HC11 memiliki tegangan referensi yang berguna sebagai referensi pada proses konversi. VRH = 2,56V dan VRL = 0 ini diberikan supaya setiap kenaikan satu bit maka terjadi kenaikan suhu sebesar 1°C. Untuk dapat memakai A/D Converter maka A/D Converter dari MC68HC11 harus diaktifkan dahulu ini hanya perlu dilakukan sekali pada inisialisasi awal, setelah itu dipilih mode-mode pengkonversiannya pada register ADCTL, pada inkubator ini register ADCTL diisi dengan $02 karena dipilih mode single channel, pengkonversian yang continue serta channel signal adalah PE2. Dan hasilnya dapat dibaca pada salah satu ADR1,2,3 atau 4 karena menggunakan single channel.
Potongan Program 5 – Read A/DC
1: ————————————-
2: ;Init ADC – Powered up
3: ————————————-
4: BSET OPTION,X,ADPU ;A/D System powered up
5: ————————————-
6: ;Read ADC
7: ————————————-
8: LDX #$1000 ;alamat base register
9: LDAB #%00000010 ;startconversion,modesingle channel,convert
10: STAB ADCTL ;continously,AD2 port E bit 2
11: BRCLR ADCTL,X,CCF,* ;wait conversion
12: LDAB ADR1 ;get result
Pengendalian Output
Setelah membentuk sub-rutin tampilan dan pembacaan suhu, sekarang masalahnya adalah bagaimana agar dapat mengendalikan tingkat intensitas lampu dan kecepatan kipas berdasarkan output hasil defuzzifikasi pada sistem software fuzzy.
Pengaturan Intensitas Lampu Pada Inkubator Dengan Fuzzy Logic
Phase control adalah suatu sistem yang digunakan untuk dapat menghasilkan fase tegangan bolak-balik yang berbeda-beda sehingga daya yang diterima oleh beban menjadi bervariasi. Rangkaian triac yang digunakan untuk memadamkan dan menyalakan lampu terlihat pada gambar 5.
Saat input high dari PA5/OC3 masuk maka akan mengaktifkan transistor 2N2222, kaki kolektor dan emiternya akan terhubung dengan ground, ini mengakibatkan adanya beda tegangan sehingga ada arus yang mengalir ke MOC2030, karena MOC2030 inputnya berkisar antara 10mA sampai 30mA maka digunakan resistor 220W untuk membatasi arus yang masuk ke MOC2030. Jika arus yang masuk kurang dari 10mA maka tidak akan dapat membias diac, tetapi jika arus yang masuk melebihi 30mA maka MOC2030 akan rusak. Dari pemasangan resistor sebesar 220W maka arus yang masuk sekitar 20mA. Kemudian kaki gate dari Triac mendapatkan supply arus yang kemudian mengakibatkan Triac on atau kaki MT2 dan MT1 terhubung sehingga ada tegangan yang masuk ke lampu. Jika pemberian pulsa high tersebut dapat diatur maka akan didapatkan fase tegangan yang berbeda dan daya yang diterima lampu akan bervariasi. Potongan program untuk menyalakan lampu terlihat seperti dibawah ini
Potongan Program 6 – Interrupt OC3
1: OC3:
2: BSET PORTA,X,PA5 ;nyalakan lampu
3: BCLR TFLG1,X,#OC3_Flg ;clear OC3F
4: RTI ;keluar dari interrupt
Setelah membentuk rutin OC3 untuk menyalakan lampu maka persoalan berikutnya adalah bagaimana dan kapan diberikan pulsa high ke PA5 supaya daya yang diterima lampu menjadi bervariasi. Rangkaian pendukung untuk itu adalah rangkaian zero crossing detector disebut demikian karena rangkaian ini dapat menghasilkan pulsa saat tegangan bolak-balik pada kondisi zero, dengan demikian diketahui saat dimana tegangan AC mencapai kondisi zero dan ini dapat digunakan sebagai awal pemberian delay
Rangkaian zero crossing detector tampak pada gambar 6.Input tegangan bolak-balik yang memiliki fase negatif setelah masuk dioda bridge akan memliki fase positif saja, dan arusnya dibatasi oleh R 39K/2W, kemudian arus akan masuk ke IC A4N25, ketika tidak ada arus yang masuk ke IC A4N25 tersebut atau dengan kata lain saat tegangan zero maka sesaat tegangan akan masuk ke PA0/IC3. Jika diketahui saat tegangan pada kondisi zero maka dapat diatur besarnya delay yang diberikan, lamanya delay tersebut dapat diproses secara software dengan berawal saat timbul transisi naik pada IC3. Setelah dilakukan delay maka input high diberikan ke PA5 sehingga akan didapatkan tingkat intensitas lampu yang bervariasi tergantung lamanya delay yang diberikan selama setengah periode tegangan bolak-balik jika delay semakin lama maka intensitasnya akan semakin berkurang.
Potongan Program 7 – Interrupt IC3
1: ———————————————-
2: ;Init interrupt IC3 – positif going edge
3: ———————————————-
4: BSET TCTL2,X,EDG3A ;setting IC3 for positive going edge
5: BSET TMSK1,X,IC3I ;un-masked IC3
6: ————————————–
7: ; IC3 interrupt routine
8: ———————————————-
9: IC3:
10: LDD REDUP ;delay tingkat keredupan
11: BCLR PORTA,X,LAMPU ;matikan lampu
12: ADDD TCNT ;tambahkan dgn nilai TCNT
13: STD TOC3 ;simpan pada TOC3
14: BCLR TFLG1,X,#$FE ;clear flag IC3
15: RTI ;kembali dari interrupt
Pada potongan program diatas terlihat bahwa interrupt IC3 dan OC3 saling berhubungan, pertama-tama ketika terjadi transisi naik pada PA0 maka interrupt IC3 akan bekerja, rutin interrupt IC3 mengambil besarnya nilai delay yang diberikan redup kemudian nilainya ditambahkan dengan TCNT dan disimpan pada TOC3, TCNT(The Free-Running Counter) sendiri adalah timer 16 bit yang dimiliki oleh MC68HC11, saat nilai TCNT=TOCx maka akan terjadi interrupt, dalam hal ini interrupt OC3 dan rutin interrupt OC3 akan menyalakan lampu.
PWM (Pulse Width Modulation)
PWM (Pulse Width Modulation) adalah suatu sistem pengaturan lebar pulsa high dan lownya pada gelombang kotak. Gelombang kotak tersebut sangat mudah dibangkitkan, hanya dengan menkonfigurasikan output compare untuk toggle setiap setengah periode. Sinyal PWM ini memiliki frekuensi yang sama, yang berubah hanyalah duty cycle nya, duty cycle adalah persentase antara sinyal high dengan sinyal satu periodanya. Gambar rangkaian driver motor tampak seperti gambar 7. Saat ada pulsa high masuk maka kedua transistor yang dirangkai secara Darlington akan aktif sehinggga timbul arus pada motor, dan motor berputar. Pengaturan lebar pulsa high dan low-nya akan dilakukan secara software, semakin besar lebar pulsa highnya maka semakin besar kecepatan motor tersebut dan semakin sempit lebar pulsanya maka kecepatan motor akan semakin menurun.
Potongan Program 8 – interrupt OC4 /PWM
1: ————————————-
2: ;init OC4 for PWM
3: ————————————-
4: LDD TCNT ;ambil nilai TCNT
5: STD TOC4 ;store ke TOC4
6: BSET TCTL1,X,OM4+OL4 ;setting OC4,OC4 set
7: BCLR TFLG1,#$EF ;clear OC4 flag
8: BSET TMSK1,X,OC4I ;un-masked OC4
9: ————————————-
10: ;OC4 interrupt routine
11: ;OC4HI+OC4LO = 10000
12: ;parameter untuk 1 periode
13: ————————————-
14: OC4:
15: BRCLR TCTL1,X,OL4,GETOC4LO ;apakah pulsa low
16: LDD OC4HI ;tidak, load OC4HI
17: BRA NEWTOC4
18: GETOC4LO:
19: LDD OC4LO ;ya, load OC4LO
20: NEWTOC4: ;update TOC4,perbarui nilai TOC4
21: ADDD TOC4
22: STD TOC4
23: LDAA TCTL1
24: EORA #OL4 ;invert OL4 to toggle
25: STAA TCTL1
26: BCLR TFLG1,X,#$EF ;clear flag OC4F
27: RTI ;return from service
Potongan program diatas dapat dijelaskan sebagai berikut: Pertama-tama mengambil nilai TCNT dan dimasukkan ke TOC4 (Timer Output Compare 4), ini berguna untuk membangkitkan interrupt karena jika nilai TCNT sama dengan nilai TOC4 maka Flag OC4F akan set dan bersama-sama dengan OC4I ( Output Compare 4 Interrupt enable) akan membangkitkan interrupt OC4. Kondisi awalnya pulsa dibuat high dengan set OC4 pada register TCTL1, kemudian dipastikan bahwa OC4F clear dan setelah itu interrupt enable dari OC4 di set pada TMSK1.
Saat masuk pada rutin interrupt OC4 inisialisasi awal dari keadaan sinyal adalah high, kemudian dilihat apakah pulsa low jika tidak maka ambil nilai OC4HI (lebar pulsa high menurut variasi kecepatan) jika low maka ambil nilai OC4LO (lebar pulsa low menuurut variasi kecepatan), kemudian selalu perbarui nilai TOC4 dengan menambahkan nilai dari OC4HI atau OC4LO dengan TOC4 dan kemudian hasilnya dianggap sebagai nilai TOC4 yang baru. Pulsa kemudian kita toggle agar berubah dari high ke low atau dari low ke high, dan terakhir flag OC4F harus di clear untuk menandai selesainya proses interrupt.
Selamat mencoba, semoga informasi tentang “Inkubator Dengan Fuzzy Logic” diatas mudah dipahami.