BAB IV ANALISA DATA 4.1
Tampilan Awal Aktifasi Prototype
2
Aktif Aktif
Aktif
1
Aktif Aktif
Gambar 4.1 Simulasi tampilan awal aktifasi prototype Aktif
1
Aktif
Aktif
2 Aktif
Aktif Switch Aktifasi
Gambar 4.2 Hardware tampilan awal aktifasi prototype
66
Disaat pertama kali prototype ini diaktifkan yaitu dengan memindahkan selector lock switch dari “off” menjadi “on” maka akan tampil seven segment monitoring produksi, rotary lamp running, dan seven segment timer menjadi aktif, seperti yang dijelaskan pada gambar 4.1 dan 4.2 diatas. Berikut akan dijelaskan satu persatu proses aktifasi awal prototype ini. 4.1.1 Tampilan Awal Monitoring Produksi
Nol (0)
Aktif
Gambar 4.3 Simulasi tampilan awal monitoring produksi Aktif
Tampilan Nol (0)
Gambar 4.4 Hardware tampilan awal monitoring produksi
67
Tampilan awal untuk monitoring produksi ini adalah semua seven segment di-set pada angka nol (0) dan rotary lamp running aktif. Ilustrasi untuk menampilkan angka pada seven segment dapat kita lihat pada gambar dibawah ini.
Mikrokontroler Arduino
Program
Driver Seven Segment
Seven Segment
Gambar 4.5 Ilustrasi menampilkan angka seven segment Program yang dibuat pada mikrokontroler akan memberikan instruksi pada driver. Sesuai dengan instruksi tersebut driver akan mengaktifkan LED-LED pada seven segment hingga membentuk sebuah angka. Program untuk tampilan seven segment (misal angka 0) adalah int PLAN=0; long COUNTER=0;
//angka plannig diset 0 //angka counter (actual) diset 0
void digit0 ()
//program fungsi untuk menampilkan angka 0 pada seven segment
{ digitalWrite(A, digitalWrite(B, digitalWrite(C, digitalWrite(D, digitalWrite(E, digitalWrite(H, digitalWrite(G, };
LOW); LOW); LOW); LOW); LOW); LOW); HIGH);
void showdigit (int digit) { switch (digit) { case 0: digit0 (); break;
//aktifkan //aktifkan //aktifkan //aktifkan //aktifkan //aktifkan //off-kan
LED LED LED LED LED LED LED
a b c d e f g
seven seven seven seven seven seven seven
segment segment segment segment segment segment segment
//program fungsi pemilihan angka //pilih digit //angka 0 //pilih digit 0 //keluar dari fungsi
default: break; }; };
68
void showdigits (int number, char digit_on)
//program fungsi untuk menampilkan angka berapa dan digit keberapa pada seven segment
{ showdigit(number); if (digit_on&1) {digitalWrite(ANODE4, HIGH);} delay (1); digitalWrite(ANODE4, LOW); }; void loop () { Achiev = (COUNTER*1000)/PLAN; if (set_digit==0) { showdigits (PLAN,0x0F); showdigits2 (COUNTER,0x0F); showdigits3 (Achiev,0x0F); }; };
//menampilkan angka sesuai request //jika mengaktifkan seven segment digit pertama //aktifkan seven segment digit pertama //selama 1ms //off-kan seven segment digit pertama
//angka persentase 0 karena planning dan angka counter 0
angka
//tampilkan seven segment planning //tampilkan seven segment counter //tampilkan seven segment persentase
Program untuk menampilkan angka 1 ~ 9 hampir sama dengan program diatas, hanya merubah settingan angka dan set nama fungsi pada program. Berdasarkan program diatas mikrokontroler memberikan instruksi ke driver untuk mengaktifkan seven segment. Cara kerja driver dapat kita simulasikan dalam sebuah aplikasi simulator komputer yang bernama Crocodile. Simulator ini dapat menghitung secara otomatis tegangan dan arus yang digunakan dalam suatu rangkaian, sehingga mempermudah dalam proses analisa maupun menetapkan suatu nilai tegangan, arus, maupun beban. Gambar 4.6 dibawah ini akan menjelaskan tentang cara kerja driver mengaktifkan angka nol (0) pada seven segment.
69
LED 7Seg
Pin com anoda-1
Pin a
Pin b
Pin c
Pin d
Pin e
Pin f
Pin g
Gambar 4.6 Simulasi driver menampilkan angka nol (0) seven segment
Gambar 4.7 Seven segment tampil angka nol (0) Switch pada simulator Crocodile merupakan inputan dari mikrokontroler. Untuk menampilkan angka nol (0) mikrokontroler memberi instruksi pin a ~ f dan pin common anoda aktif kecuali pin g, maka LED a ~ f aktif kecuali g. Pada gambar 4.7 dapat dilihat jika semua LED aktif kecuali LED g, maka akan terbentuk sebuah angka nol (0). Untuk menampilkan angka 1 ~ 9 prosesnya hampir sama, hanya merekayasa LED-LED yang aktif.
70
Contoh diatas merupakan proses aktifasi seven segment untuk menampilkan angka-angka pada satu segment. Dalam monitoring produksi ini terdapat 12 segment yaitu dengan 84 LED seven segment. Tentunya perlu diperhatikan supply daya untuk setiap LED tersebut sehingga tampilan angka pada seven segment tidak redup atau LED pada seven segment tidak rusak. Seperti yang diketahui bahwa LED pada prinsipnya sama dengan diode yang merupakan sebuah semikonduktor. Tegangan forward untuk LED adalah bernilai 1,7 hingga 2,2 Volt, seperti yang terlihat pada gambar 4.8 dibawah ini. Nilai absolute maximum arus LED yaitu pada nilai 25 mA. Jika arus lebih besar dari nilai absolut maksimum maka LED tersebut akan rusak. Untuk itu diperlukan sebuah resistor sebagai pembatas arus.
Gambar 4.8 Grafik karakteristik LED Untuk amannya LED disupply dengan arus 20 mA berarti tegangan adalah 2 Volt, sedangkan supply tegangan seven segment adalah 12 Volt, maka nilai resistor yang digunakan adalah R = V/I = (12 Volt – 2Volt)/20mA = 5000 Ohm
71
Berdasarkan hasil perhitungan diatas dapat dipilih resistor dengan resistansi 4.7 KΩ atau arus maksimum menjadi 21.28 mA. Dengan memberikan arus proportional dengan pemilihan komponen yang tepat pada suatu rangkaian tentunya dapat mengefesiensi pemakaian daya dan membuat kerja unit atau komponen menjadi optimal. Selanjutnya ilustrasi untuk mengaktifkan rotary lamp running dapat kita lihat pada gambar dibawah ini.
Mikrokontroler Arduino
Program
Driver Rotary Lamp Running
Rotary Lamp
Gambar 4.9 Ilustrasi aktifasi rotary lamp running Program pada mikrokontroler memberikan instruksi pada driver untuk mengaktifkan rotary lamp running. Program tersebut adalah
ISR(TIMER1_OVF_vect) { if (set_digit==0) {digitalWrite(RUN, LOW);} };
//interrupt timer1 aktif //jika angka planning tidak kondisi setting //aktifkan rotary lamp running
dalam
Gambar simulasi crocodile dibawah ini akan menjelaskan tentang cara kerja driver rotary lamp running.
72
Driver
Aktif Pin run Rotary lamp running
Gambar 4.10 Simulasi driver aktifasi rotary lamp running Switch pada simulator Crocodile merupakan inputan dari mikrokontroler. Untuk mengaktifkan rotary lamp running mikrokontroler memberi instruksi pin run aktif, maka transistor driver mendapat trigger sebesar arus Ib, sehingga sebelumnya transistor pada kondisi cut-off menjadi saturasi (open to close). Untuk lebih jelasnya dapat kita lihat pada pemahasan berikut ini.
Ib = 0
Open
Ib
Close
Gambar 4.11 Kondisi transistor cut-off menjadi saturasi Prinsip kerja trasistor sebagai saklar adalah memanfaatkan kondisi cut-off dan saturasi, dimana kedua kondisi ini bisa diperoleh dengan pengaturan besarnya arus yang melalui basis transistor. Kondisi cut-off diperoleh jika arus basis dilalui oleh arus yang sangat kecil atau mendekati nol ampere, sehingga transistor bekerja seperti saklar yang terbuka. Sedangkan kondisi saturasi (jenuh) akan diperoleh jika basis transistor diberi arus cukup besar sehingga transistor mengalami saturasi dan berfungsi seperti saklar yang tertutup.
73
Pada saat transistor dalam kondisi saturasi (saklar tertutup) maka relay mendapat supply tegangan sehingga saklar NO (normaly open) relay berubah menjadi close (saklar tertutup). Untuk lebih jelasnya dapat kita lihat pada pembahasan berikut ini.
Open
Close
OFF
ON
Gambar 4.12 Kondisi saklar relay normaly open menjadi close Relay
adalah
suatu
komponen
elektronika
yang
bekerja
berdasarkan
elektromagnetik untuk menggerakan sejumlah kontaktor (saklar) yang tersusun. Kontaktor akan tertutup (On) atau terbuka (Off) karena efek induksi magnet yang dihasilkan kumparan (induktor) ketika dialiri arus listrik. Saklar (switch) relay normaly open (NO) dihubungkan ke rotary lamp running sehingga pada saat relay aktif rotary lamp running juga aktif karena mendapat tegangan 24 VDC. 4.1.2 Tampilan Awal Monitoring Loss Time
Tampilan Nol (0)
Aktif Aktif
Gambar 4.13 Hardware tampilan awal monitoring loss time 74
Tampilan Nol (0)
Gambar 4.14 Simulasi tampilan awal monitoring loss time Tampilan awal untuk monitoring loss time ini adalah timer (detik, menit, dan jam) pada kondisi nol (0), lampu indikator pemisah waktu aktif, rotary lamp dte dan buzzer non aktif. Program yang di-eksekusi adalah int detik=0; int menit=0; int jam=0;
//detik diset 0 //menit diset 0 //jam diset 0
else { digitalWrite(LAMP_ZONE1, HIGH); //rotary lamp DTE zone1 non aktif digitalWrite(BUZZER1, HIGH); //buzzer DTE zone1 non aktif }; else { digitalWrite(LAMP_ZONE2, HIGH); //rotary lamp DTE zone2 non aktif digitalWrite(BUZZER2, HIGH); //buzzer DTE zone2 non aktif }; else { digitalWrite(LAMP_ZONE3, HIGH); //rotary lamp DTE zone3 non aktif digitalWrite(BUZZER3, HIGH); //buzzer DTE zone3 non aktif }; void loop () { showdigits6 (detik,0x0F); showdigits5 (menit,0x0F); showdigits4 (jam,0x0F); };
//tampilkan seven segment detik //tampilkan seven segment menit //tampilkan seven segment jam
75
Untuk proses tampilan seven segment telah dibahas pada pembahasan sebelumnya. Dan untuk mengaktifkan lampu indikator pemisah waktu cukup dengan memberi 2 buah LED dengan tegangan 5 VDC, seperti yang terlihat pada gambar simulasi dibawah ini.
Gambar 4.15 Simulasi lampu indikator pemisah waktu 4.2
Monitoring Progres Pencapaian Produksi
1a
2a
3
1b
2b
Gambar 4.16 Hardware monitoring progres pencapaian produksi
76
1
2
3
Gambar 4.17 Simulasi monitoring progres pencapaian produksi Dalam pembahasan monitoring progres pencapaian produksi dibagi menjadi 3 bagian, yaitu setting angka planning, counter produk, dan Perhitungan (kalkulasi) pencapaian produksi. 4.2.1 Setting Angka Planning Indikator penunjuk digit Button-UP
Digit-4 Digit-3
Button Button- SET DIGIT Digit-2 Digit-1 DOWN
Gambar 4.18 Simulasi setting-an angka planning
77
Button-UP
Button SET DIGIT
ButtonDOWN
Gambar 4.19 Hardware setting-an angka planning Tersusun dari 4 digit seven segment berarti dapat menyimpan atau menampilkan angka dengan nilai terbesar adalah 9999. Deretan angka tersebut pada aplikasinya adalah untuk mencatat settingan jumlah produksi oleh tim PPC (Production Planning Control) dalam sebuah pabrik. Untuk proses atau cara kerja setting angka planning ini dibagi menjadi 3 pembahasan yaitu proses up angka planning, down angka planning, dan set digit angka planning. a. Up angka planning Up angka planning maksudnya adalah menambah nilai angka untuk deretan digit angka planning. Seperti yang di-ilustrasikan pada gambar dibawah ini.
Program 1
2 3
Button UP
Mikrokontroler Arduino
Gambar 4.20 Ilustrasi up angka planning Jika push button-UP planning ditekan berdasarkan program yang dibuat maka mikrokontroler menambah nilai angka untuk deretan seven segment planning.
78
Program untuk menambah nilai angka planning tersebut adalah int PLAN=0;
//setting awal angka planning 0000
ISR(TIMER1_OVF_vect) //interrupt timer1 aktif { if (digitalRead(UP_PLAN)== LOW) //Jika button-UP ditekan {PLAN++;} //Tambah 1 nilai angka planning if (PLAN>9999) {PLAN=0;} };
//jika angka planning besar dari 9999 //set angka menjadi 0000
void loop () { TCCR1B=0x00;
//non aktifkan timer1
if (!digitalRead(UP_PLAN)== LOW)//timer aktif apabila button-UP ditekan {TCCR1B=0x03;} {TCCR1B=0x03;} {TCCR1B=0x03;}; //delay satu cycle button-UP showdigits (PLAN,0x0F);
//tampilkan seven segment deretan angka planning
};
Fungsi timer pada program diatas adalah sebagai pengganti program delay. Keunggulan menggunakan timer dibanding delay yaitu meminimalisir kesibukan mikrokontroler pada bagian program fungsi loop, dengan demikian dapat meminimalisir terjadinya error pada mikrokontroler. b. Down angka planning Down angka planning maksudnya adalah mengurangi nilai angka untuk deretan digit angka planning. Seperti yang di-ilustrasikan pada gambar dibawah ini.
Program 1
2 3
Button DOWN
Mikrokontroler Arduino
Gambar 4.21 Ilustrasi down angka planning
79
Jika push button-DOWN planning ditekan berdasarkan program yang dibuat maka mikrokontroler mengurangi nilai angka untuk deretan seven segment planning. Program untuk mengurangi nilai angka planning tersebut adalah //setting awal angka planning 0000
int PLAN=0;
ISR(TIMER1_OVF_vect) //interrupt timer1 aktif { if (digitalRead(DOWN_PLAN)== LOW)//Jika button-DOWN ditekan {PLAN--;} //Kurangi 1 nilai angka planning if (PLAN<0) {PLAN=9999;} };
//jika nilai angka kurang dari 0000 //set angka menjadi 9999
void loop () { TCCR1B=0x00;
//non aktifkan timer1
if (!digitalRead(DOWN_PLAN)== LOW) {TCCR1B=0x03;} {TCCR1B=0x03;} {TCCR1B=0x03;};
//timer aktif apabila button-DOWN ditekan
//delay satu cycle button-DOWN
showdigits (PLAN,0x0F);
//tampilkan seven segment planning
};
c. Set digit angka planning Set digit angka planning adalah sebuah tombol yang berfungsi untuk memilih digit dari deretan angka planning antara digit 1 ~ 4. Indikator digit-2 Program 1 Button UP
Indikator digit-3 2
Mikrokontroler Arduino
Indikator digit-4 3
Button set digit
Gambar 4.22 Ilustrasi set digit angka planning
80
Tujuan dari tombol (button) set digit ini adalah mempermudah input (memasukkan) angka yang bernilai besar seperti 10, 200, atau 3000 ke dalam deretan angka planning. Cara kerja dari tombol ini adalah menggeser digit yang dapat di-setting (UP atau DOWN). Misalnya setting UP atau DOWN angka digit2 atau setting UP atau DOWN angka digit-3 dan seterusnya. Disamping itu, sistem ini juga dilengkapi dengan lampu indikator yang bertujuan untuk memberi tanda digit mana yang dapat di-set. Apabila digit angka planning dalam kondisi setting (digit 2, 3, atau 4) maka deretan angka counter, angka persentase, dan rotary lamp running akan non-aktif. Hal ini bertujuan untuk memberi tanda bahwa prorotype dalam kondisi setting bukan running. Program yang bertugas menjalankan sistem ini adalah sebagai berikut. char set_digit=0;
//setting awal pada digit-1
ISR(TIMER1_OVF_vect) { if (set_digit==0)
//interrupt timer1 aktif //jika angka planning kondisi setting
tidak
dalam
{ if (digitalRead(UP_PLAN)== LOW) {PLAN++;} if (digitalRead(DOWN_PLAN)== LOW {PLAN--;}
//jika button-UP ditekan //tambah 1 digit-1 //jika button-DOWN ditekan //kurangi 1 digit-1
digitalWrite(RUN, LOW); digitalWrite(SET_PULUH, HIGH); digitalWrite(SET_RATUS, HIGH); digitalWrite(SET_RIBU, HIGH);
//aktifkan rotary lamp running //indikator penunjuk digit-2 non aktif //indikator penunjuk digit-3 non aktif //indikator penunjuk digit-4 non aktif
} if (set_digit==1) //setting angka planning digit-2 { if (digitalRead(UP_PLAN)== LOW) //jika button-UP ditekan {PLAN+=10;} //tambah 1 digit-2 if (digitalRead(DOWN_PLAN)== LOW)//jika button-DOWN ditekan {PLAN-=10;} //kurangi 1 digit-2 digitalWrite(RUN, HIGH); digitalWrite(SET_PULUH, LOW); digitalWrite(SET_RATUS, HIGH); digitalWrite(SET_RIBU, HIGH);
//rotary lamp running non aktif //aktifkan indikator penunjuk digit-2 //indikator penunjuk digit-3 non aktif //indikator penunjuk digit-4 non aktif
}
81
if (set_digit==2) //setting angka planning digit-3 { if (digitalRead(UP_PLAN)== LOW) //jika button-UP ditekan {PLAN+=100;} //tambah 1 digit-3 if (digitalRead(DOWN_PLAN)== LOW)//jika button-DOWN ditekan {PLAN-=100;} //kurangi 1 digit-3 digitalWrite(RUN, HIGH); digitalWrite(SET_PULUH, HIGH); digitalWrite(SET_RATUS, LOW); digitalWrite(SET_RIBU, HIGH);
//rotary lamp running non aktif //indikator penunjuk digit-2 non aktif //aktifkan indikator penunjuk digit-3 //indikator penunjuk digit-4 non aktif
} if (set_digit==3) //setting angka planning digit-4 { if (digitalRead(UP_PLAN)== LOW) //jika button-UP ditekan {PLAN+=1000;} //tambah 1 digit-4 if (digitalRead(DOWN_PLAN)== LOW)//jika button-DOWN ditekan {PLAN-=1000;} //kurangi 1 digit-4 digitalWrite(RUN, HIGH); digitalWrite(SET_PULUH, HIGH); digitalWrite(SET_RATUS, HIGH); digitalWrite(SET_RIBU, LOW);
//rotary lamp running non aktif //indikator penunjuk digit-2 non aktif //indikator penunjuk digit-3 non aktif //aktifkan indikator penunjuk digit-4
} if (digitalRead(SET)== LOW) {set_digit++;}
//jika Button SET DIGIT ditekan //pilih digit 1-4
if (set_digit>=4) {set_digit=0;} };
//jika pilihan lebih besar dari digit4 //setting kembali ke digit-1
void loop () { if (set_digit==0)
//jika angka planning kondisi setting
tidak
dalam
{ showdigits (PLAN,0x0F); showdigits2 (COUNTER,0x0F); showdigits3 (Achiev,0x0F); }; if (set_digit==1) { showdigits (PLAN,0x0F); showdigits2 (COUNTER,0x00); showdigits3 (Achiev,0x00); }; if (set_digit==2) { showdigits (PLAN,0x0F); showdigits2 (COUNTER,0x00); showdigits3 (Achiev,0x00); }; if (set_digit==3) { showdigits (PLAN,0x0F); showdigits2 (COUNTER,0x00); showdigits3 (Achiev,0x00);
//tampilkan seven segment planning //tampilkan seven segment counter //tampilkan seven segment persentase //setting angka planning digit-2 //tampilkan seven segment planning //non aktifkan seven segment counter //non aktifkan seven segment persentase //setting angka planning digit-3 //tampilkan seven segment planning //non aktifkan seven segment counter //non aktifkan seven segment ersentase //setting angka planning digit-4 //tampilkan seven segment planning //non aktifkan seven segment counter //non aktifkan seven segment persentase
}; };
82
4.2.2 Counter Produk
Counter-UP
Counter-RESET Counter-DOWN Digit-4 Digit-3 Digit-2 Digit-1 Indikator running
Sensor Produk
Gambar 4.23 Simulasi counter produk
Indikator running
Sensor Produk
Counter-UP
Counter-RESET Counter-DOWN
Gambar 4.24 Hardware counter produk Sama halnya dengan angka planning yaitu tersusun dari 4 digit seven segment yang dapat menghitung (counter) dengan nilai 9999. Pada aplikasinya digunakan untuk menghitung jumlah produk yang dihasilkan di suatu line produksi. Cara kerja dari counter produk ini dibagi menjadi 2 bagian yaitu proses counter, dan up - down dan reset counter.
83
a. Proses counter Proses counter adalah proses penghitungan jumlah produk yang dihasilkan di suatu line produksi dengan menggunakan sebuah sensor.
1 Cycle
1
2 3
Sensor Counter Produk
1 Cycle 1 Cycle
Mikrokontroler Arduino
Gambar 4.25 Ilustrasi proses counter Sensor counter produk yang digunakan pada prototype ini adalah infrared sensor, seperti yang terlihat pada gambar dibawah ini.
Gambar 4.26 Cara kerja infrared sensor Pada sensor terdapat 2 komponen yaitu transmitter dan receiver dimana transmitter berfungsi untuk memancarkan cahaya dan receiver adalah sebuah komponen yang peka terhadap cahaya. Jika cahaya yang dipancarkan transmitter terhalang oleh suatu benda maka cahaya tersebut dipantulkan kembali dan diterima oleh receiver, yang menyebabkan sistem dalam sensor aktif.
84
Setiap kali sensor terhalang oleh suatu benda (sensor aktif), dalam hal prototype ini adalah produk yang dihasilkan oleh tim produksi, maka mikrokontroler memerintahkan angka counter (tampilan actual produksi) bertambah satu. Dan pada kondisi ini (counter beroperasi) rotary lamp running aktif. Program untuk sistem diatas adalah volatile int state = 0; long COUNTER=0;
//variable counter //angka counter (actual) diset 0
ISR(TIMER1_OVF_vect) { if (set_digit==0)
//interrupt timer1 aktif
{digitalWrite(RUN, LOW);}
//jika angka planning tidak dalam kondisi setting //lampu rotary lamp running aktif
if (set_digit==1) {digitalWrite(RUN, HIGH);}
//setting angka planning digit-2 //lampu rotary lamp running non-aktif
if (set_digit==2) {digitalWrite(RUN, HIGH);}
//setting angka planning digit-3 //lampu rotary lamp running non-aktif
if (set_digit==3) {digitalWrite(RUN, HIGH);}
//setting angka planning digit-4 //lampu rotary lamp running non-aktif
if (COUNTER>9999) {COUNTER=0;} if (COUNTER<0) {COUNTER=9999;} };
//jika angka counter besar dari 9999 //set angka menjadi 0000 //jika angka counter kecil dari 0000 //set angka menjadi 9999
ISR(INT0_vect) { state = !state; COUNTER++; }
//jika button Interrupt0 aktif
void loop () { if (set_digit==0)
//angka counter tambah 1
{showdigits2 (COUNTER,0x0F);};
//jika angka planning tidak dalam kondisi setting //tampilkan seven segment counter
if (set_digit==1) {showdigits2 (COUNTER,0x00);};
//setting angka planning digit-2 //seven segment counter non-aktif
if (set_digit==2) {showdigits2 (COUNTER,0x00);};
//setting angka planning digit-3 //seven segment counter non-aktif
if (set_digit==3) {showdigits2 (COUNTER,0x00);}; };
//setting angka planning digit-4 //seven segment counter non-aktif
85
Rotary lamp running aktif apabila angka planning tidak dalam kondisi setting. Pin untuk sensor produk terhubung ke interrupt0 mikrokontroler, yaitu bertujuan untuk selalu menambah angka counter bilangan 1, tidak bergantung seberapa lama sensor tersebut aktif atau terhalangi oleh satu produk. Berbeda jika tidak menggunakan interrupt yaitu counter terus mencacah selama sensor aktif. Misalnya sensor aktif (produk menghalangi sensor) dalam 1 menit, jika delay pada program disetting 1 detik maka counter akan menambah angka sebanyak 60 hitungan. Untuk ilustrasi dapat dilihat pada gambar dibawah ini. 1
1
1
1
1
= +1
Menggunakan Interrupt
= +5
Tanpa Interrupt
1
Gambar 4.27 Perbandingan siklus interrupt b. Up-Down dan reset counter Dalam pembahasan ini difokuskan pada reset counter karena proses atau cara kerja Up-Down counter sama dengan Up-Down planning yang telah dibahas pada pembahasan sebelumnya. Reset counter maksudnya mengembalikan settingan angka counter menjadi 0 (settingan awal). Program 1
2
Button RESET
Mikrokontroler Arduino
Gambar 4.28 Ilustrasi reset counter
86
Program yang dieksekusi adalah long COUNTER=0;
//angka counter (actual) diset 0
ISR(TIMER1_OVF_vect) { if (set_digit==0)
//interrupt timer1 aktif //jika angka planning kondisi setting
tidak
dalam
{ if (digitalRead(UP_COUNT)== LOW) //jika counter-UP ditekan {COUNTER++;} //angka counter tambah 1 if (digitalRead(DOWN_COUNT)== LOW)//jika counter-DOWN ditekan {COUNTER--;} //angka counter kurangi 1 } }; void loop () { if (digitalRead(RESET)== LOW) {COUNTER=0;}; showdigits2 (COUNTER,0x0F); };
//jika counter-RESET ditekan //set angka menjadi 0000 //tampilkan seven segment counter
4.2.3 Kalkulasi Pencapaian Produksi
Planning
Actual
Persentase
Gambar 4.29 Simulasi perhitungan (kalkulasi) pencapaian produksi
87
Gambar 4.30 Hardware perhitungan (kalkulasi) pencapaian produksi
Actual
Program
Hasil Bagi
Planning
Mikrokontroler Arduino
KOMA
Gambar 4.31 Ilustrasi up angka planning Perhitungan (kalkulasi) pencapaian produksi adalah perbandingan angka planning dengan actual (counter) untuk mendapatkan hasil persentase dari kedua angka tersebut, seperti yang terlihat pada gambar 4.31 diatas. Dalam aplikasinya sistem perhitungan diatas dimanfaatkan untuk mengukur progres pencapaian produksi, artinya jumlah produk yang dihasilkan oleh tim produksi dibagi dengan jumlah planning produksi yang disetting oleh tim PPC (Production Planning Control) sehingga didapatkan nilai persentase dari pencapaian tim produksi tersebut. Program yang digunakan dalam perhitungan ini adalah
88
void loop () { Achiev = (COUNTER*1000)/PLAN; if (set_digit==0)
//Perbandingan angka counter dengan angka planning //jika angka planning tidak dalam kondisi setting
{ showdigits (PLAN,0x0F); showdigits2 (COUNTER,0x0F); showdigits3 (Achiev,0x0F); }; };
//tampilkan seven segment planning //tampilkan seven segment counter //tampilkan seven segment persentase
Pada program diatas, angka counter dikali 1000 bertujuan untuk mendapatkan satu angka di belakang koma, karena type data yang digunakan untuk kalkulasi pada program ini menggunakan integer (bilangan genap). Angka 1000 sama artinya dengan 100 x 10, angka 10 penulis setting sebagai satu angka dibelakang koma pada display persentase, bertujuan agar perhitungan lebih presisi. Sebagai contoh, Angka planning = 70, Angka counter = 67, Perbandingan = (67*1000)/70 = 957. Satu angka terakhir di-setting menjadi angka di belakang koma, atau sama dengan 95,7. 4.3
Monitoring Loss Time Mesin 3
1
2 Gambar 4.32 Simulasi monitoring loss time mesin 89
2
1 3
Gambar 4.33 Hardware monitoring loss time mesin Dalam pembahasan monitoring loss time dibagi menjadi 3 bagian, yaitu aktifasi DTE zone, alarm DTE zone, dan timer loss time. 4.3.1
Aktifasi DTE zone
Switch DTE Zone-1
Switch Buzzer DTE Zone-1
Switch DTE Zone-2 Switch Buzzer DTE Zone-2
Switch DTE Zone-3 Switch Buzzer DTE Zone-3
Gambar 4.34 Simulasi aktifasi dte zone
90
Switch DTE Zone
Switch Buzzer DTE Zone-3
Gambar 4.35 Hardware aktifasi dte zone
Program Switch DTE & Buzzer
Mikrokontroler Arduino
Gambar 4.36 Ilustrasi aktifasi dte zone Aktifasi DTE (Down Time Equipment) adalah 2 buah selector switch yang berfungsi untuk mengaktifkan rotary lamp, timer loss time dan buzzer. Untuk aplikasinya telah dijelaskan pada pembahasan sebelumnya yaitu pada gambar 3.3 dimana switch diaktifkan secara manual oleh operator produksi, yaitu bertujuan memanggil tim maintenance untuk melakukan perbaikan terhadap mesin yang terjadi abnormal. DTE ini dibagi menjadi 3 area (3 DTE Zone) bertujuan agar inditifikasi area abnormal lebih spesifik. 91
4.3.2 Alarm DTE zone
Buzzer DTE Zone- 1, 2, 3
Rotary Lamp DTE Zone- 1, 2, 3
Gambar 4.37 Simulasi alarm dte zone Rotary Lamp DTE Zone- 1, 2, 3
Buzzer DTE Zone- 1, 2, 3
Gambar 4.38 Hardware alarm dte zone
Program Selector Switch DTE Zone
Mikrokontroler Arduino
Gambar 4.39 Ilustrasi aktifasi dte zone
92
Alarm DTE zone adalah sebuah pemberitahuan untuk tim maintenance bahwa adanya mesin yang abnormal dalam suatu area line produksi. Alarm DTE diaktifkan oleh aktifasi DTE seperti yang dijelaskan pada pembahasan diatas, juga terbagi menjadi 3 alarm untuk 3 area di line produksi. Program untuk mengaktifkan alarm tersebut adalah ISR(TIMER2_OVF_vect) //interrupt timer2 aktif { if (digitalRead(SWITCH_ZONE1)==LOW) //jika switch DTE { if (WAKTU<=245/2) //perioda 0 ~ 0.5 {digitalWrite(LAMP_ZONE1, LOW);} //rotary lamp DTE if (WAKTU>=245/2) //perioda 0 ~ 0.5 {digitalWrite(LAMP_ZONE1, HIGH);} //rotary lamp DTE
zone1 aktif detik zone1 detik zone1
pertama aktif kedua non aktif
if (digitalRead(RESET_ZONE1)==LOW) //jika Reset buzzer DTE zone1 aktif {digitalWrite(BUZZER1, HIGH);} //buzzer DTE zone1 non aktif Else //jika Reset buzzer DTE tidak aktif { if (DETAK<=245) //perioda 1 detik pertama {digitalWrite(BUZZER1, LOW);} //buzzer DTE zone1 aktif if (DETAK>=245) //perioda 1 detik kedua {digitalWrite(BUZZER1, HIGH);} //buzzer DTE zone1 non aktif }; } Else { digitalWrite(LAMP_ZONE1, HIGH); digitalWrite(BUZZER1, HIGH); }; if (digitalRead(SWITCH_ZONE2)==LOW) { if (WAKTU<=245/2) {digitalWrite(LAMP_ZONE2, LOW);} if (WAKTU>=245/2) {digitalWrite(LAMP_ZONE2, HIGH);}
//kondisi default //rotary lamp DTE zone1 non aktif //buzzer DTE zone1 non aktif //jika switch DTE zone2 aktif //perioda 0 ~ //rotary lamp //perioda 0 ~ //rotary lamp
0.5 DTE 0.5 DTE
detik zone2 detik zone2
pertama aktif kedua non aktif
if (digitalRead(RESET_ZONE2)==LOW) //jika Reset buzzer zone2 aktif {digitalWrite(BUZZER2, HIGH);} //buzzer DTE zone2 non aktif Else //jika Reset buzzer tidak aktif { if (DETAK<=245) //perioda 1 detik pertama {digitalWrite(BUZZER2, LOW);} //buzzer DTE zone2 aktif if (DETAK>=245) //perioda 1 detik kedua {digitalWrite(BUZZER2, HIGH);} //buzzer DTE zone2 non aktif }; } Else { digitalWrite(LAMP_ZONE2, HIGH); digitalWrite(BUZZER2, HIGH); }; if (digitalRead(SWITCH_ZONE3)==LOW) { if (WAKTU<=245/2) {digitalWrite(LAMP_ZONE3, LOW);}
//kondisi default //rotary lamp DTE zone2 non aktif //buzzer DTE zone2 non aktif //jika switch DTE zone3 aktif //perioda 0 ~ 0.5 detik pertama //rotary lamp DTE zone3 aktif
93
if (WAKTU>=245/2) //perioda 0 ~ 0.5 detik kedua {digitalWrite(LAMP_ZONE3, HIGH);} //rotary lamp DTE zone3 non aktif if (digitalRead(RESET_ZONE3)==LOW) //jika Reset buzzer zone3 aktif {digitalWrite(BUZZER3, HIGH);} //buzzer DTE zone3 non aktif Else //jika Reset buzzer tidak aktif { if (DETAK<=245) //perioda 1 detik pertama {digitalWrite(BUZZER3, LOW);} //buzzer DTE zone3 aktif if (DETAK>=245) //perioda 1 detik kedua {digitalWrite(BUZZER3, HIGH);} //buzzer DTE zone3 non aktif }; } Else { digitalWrite(LAMP_ZONE3, HIGH); digitalWrite(BUZZER3, HIGH); };
//kondisi default //rotary lamp DTE zone3 non aktif //buzzer DTE zone3 non aktif
if (++WAKTU==245) { WAKTU=0;};
//overflow 1 detik //reset waktu overflow menjadi 0
if (++DETAK==245*2) {DETAK=0;}; };
//overflow 2 detik //reset waktu overflow menjadi 0
Program diatas menjelaskan yaitu apabila kedua switch (DTE zone dan buzzer) tidak aktif maka rotary lamp dan buzzzer juga tidak aktif. Akan tetapi jika switch DTE zone diaktifkan maka rotary lamp akan berkedip dengan perioda 1 detik dan jika switch buzzer diaktifkan maka buzzer akan berbunyi dengan perioda 2 detik. 4.3.3
Timer Loss Time Indikator Pemisah Waktu Jam
Menit
Detik
Gambar 4.40 Simulasi timer loss time
94
Jam Menit Detik
Gambar 4.41 Hardware timer loss time
Program Selector Switch DTE Zone Aktif
Mikrokontroler Arduino
Gambar 4.42 Ilustrasi timer loss time Timer loss time ini sama halnya dengan jam digital yang difungsikan sebagai stopwatch. Pada prototype ini aplikasi timer digunakan untuk mencatat waktu loss time yang terjadi di suatu line produksi, seperti yang telah dibahas pada pembahasan perancangan software maupun hardware. Program untuk mengaktifkan timer ini adalah int int int int
WAKTU=0; detik=0; menit=0; jam=0;
ISR(TIMER2_OVF_vect)
//waktu overflow diset 0 //detik diset 0 //menit diset 0 //jam diset 0 //interrupt timer2 aktif
95
{ if (digitalRead(SWITCH_ZONE1)==LOW || digitalRead(SWITCH_ZONE2)==LOW || digitalRead(SWITCH_ZONE3)==LOW) { if (++WAKTU==245) { if (++detik==60) { detik=0; if(++menit==60) { menit=0; if(++jam==24) { jam=0; } } } WAKTU=0; }; }; }; void setup() { TIMSK2=0x01;
//jika switch DTE zone1 aktif atau //jika switch DTE zone2 aktif atau //jika switch DTE zone3 aktif atau //overflow 1 detik //counter detik hingga 60 //reset detik menjadi 0 //counter menit hingga 60 //reset menit menjadi 0 //counter jam hingga 24 //reset jam menjadi 0
//reset waktu overflow menjadi 0
//aktifkan interrupt timer2 overflow //prescaler dibagi 128 //TCNT2 dimulai dari 0
TCCR2B = 0x05; TCNT2 = 0; }; void loop () { showdigits6 (detik,0x0F); showdigits5 (menit,0x0F); showdigits4 (jam,0x0F); };
global
dan
//tampilkan seven segment detik //tampilkan seven segment menit //tampilkan seven segment jam
Timer loss time akan aktif apabila switch DTE zone-1 atau switch DTE zone-2 atau switch DTE zone-3 diaktifkan. Timer loss time ini dibuat menggunakan program interrupt timer2. Timer ini dapat direkayasa untuk mendapatkan nilai 1 detik, yaitu dengan perhitungan seperti dibawah ini:
fclk_I/O fOC2 = 2 x N x (1 + OCR2) 16 x 106 Hz fOC2 =
2 x 128 x (1 + 255) fOC2 = 244.141 Hz
96
1
TOC2 =
fOC2 TOC2 =
1
244.141 Hz TOC2 = 4.096 ms
Set Time = TOC2 x settingan program Set Time = 4.096 ms x 245 Set Time =
1.00352 sec
Keterangan : fOC2
= Frekuensi Overflow Compare_2
fclk_I/O
= Frekuensi clock chip
N
= Prescaler
OCR2
= Overflow Compare Register_2 ( =TCNT2)
TOC2
= Waktu Overflow Compare_2
Settingan program
= Pengali yang disetting pada program untuk memperoleh hitungan 1 detik
Berdasarkan hasil pengujian terhadap akurasi timer loss time atau jam digital ini yaitu untuk 1 jam timer (01:00:00’00) pembacaan pada jam kondisi real adalah 00:59:58’50, artinya timer lebih cepat 1.5 detik yaitu setara dengan 0.0417 %.
Waktu Timer
Waktu Real
Gambar 4.43 Pengujian waktu timer vs waktu real
97
Selisih waktu = Waktu timer – Waktu real Selisih waktu = 01:00:00’00 – 00:59:58’50 Selisih waktu = 1.50 detik Selisih waktu Persentase Error =
x 100 % Waktu 1 jam 1.50 detik x 100 %
Persentase Error = 3600 detik Persentase Error =
0.0417 %
Jika timer ini diaktifkan selama 1 hari (24 jam) dan dibandingkan dengan waktu real maka timer ini akan lebih cepat selama 36 detik ((24x3600) x 0.0417% = 36.03 detik). Hal ini tentunya timer tidak baik digunakan dalam waktu yang lama karena mempunyai perbedaan waktu yang signifikan terhadap waktu real. Akan tetapi pada aplikasi prototype ini DTE (Down Time Equipment) maksimal yang mungkin terjadi dalam 1 hari produksi dalam suatu line paling lama adalah 2 jam. Berarti error waktu yang terjadi adalah maksimal 3.0 detik, tentunya error waktu tersebut dapat diabaikan karena nilai yang kecil. Jadi timer loss time ini dapat digunakan sebagai penghitung waktu DTE dalam suatu line produksi, disamping pembuatan yang lebih mudah juga ditunjang oleh cost (biaya) yang lebih murah, karena tidak menggunakan komponen tambahan seperti RTC (Real Time Clock) dan sebagainya.
98