66 BAB IV
ANALISA DATA
4.1 Tampilan Awal Aktifasi Prototype
Gambar 4.1 Simulasi tampilan awal aktifasi prototype
Gambar 4.2 Hardware tampilan awal aktifasi prototype
1 2 Switch Aktifasi Aktif Aktif Aktif Aktif Aktif 1 2 Aktif Aktif Aktif Aktif Aktif
67
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
Gambar 4.3 Simulasi tampilan awal monitoring produksi
Gambar 4.4 Hardware tampilan awal monitoring produksi
Aktif
Tampilan Nol (0)
Aktif Nol (0)
68
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.
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; //angka plannig diset 0
long COUNTER=0; //angka counter (actual) diset 0
void digit0 () //program fungsi untuk menampilkan angka
0 pada seven segment {
digitalWrite(A, LOW); //aktifkan LED a seven segment
digitalWrite(B, LOW); //aktifkan LED b seven segment
digitalWrite(C, LOW); //aktifkan LED c seven segment
digitalWrite(D, LOW); //aktifkan LED d seven segment
digitalWrite(E, LOW); //aktifkan LED e seven segment
digitalWrite(H, LOW); //aktifkan LED f seven segment
digitalWrite(G, HIGH); //off-kan LED g seven segment
};
void showdigit (int digit) //program fungsi pemilihan angka
{
switch (digit) //pilih digit
{
case 0: //angka 0
digit0 (); //pilih digit 0
break; //keluar dari fungsi
default: break; }; }; Program Mikrokontroler Arduino Driver Seven
69
void showdigits (int number, char digit_on) //program fungsi untuk
menampilkan angka berapa dan digit keberapa pada seven segment
{
showdigit(number); //menampilkan angka sesuai request
if (digit_on&1) //jika mengaktifkan seven segment digit
pertama
{digitalWrite(ANODE4, HIGH);} //aktifkan seven segment digit pertama
delay (1); //selama 1ms
digitalWrite(ANODE4, LOW); //off-kan seven segment digit pertama
};
void loop () {
Achiev = (COUNTER*1000)/PLAN; //angka persentase 0 karena angka
planning dan angka counter 0 if (set_digit==0)
{
showdigits (PLAN,0x0F); //tampilkan seven segment planning
showdigits2 (COUNTER,0x0F); //tampilkan seven segment counter
showdigits3 (Achiev,0x0F); //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.
70
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.
Pin a Pin b Pin c Pin d Pin e Pin f Pin g LED 7Seg
71
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
72
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.
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) //interrupt timer1 aktif
{
if (set_digit==0) //jika angka planning tidak dalam
kondisi setting
{digitalWrite(RUN, LOW);} //aktifkan rotary lamp running
};
Gambar simulasi crocodile dibawah ini akan menjelaskan tentang cara kerja driver rotary lamp running.
Program Mikrokontroler Arduino
Driver Rotary
73
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.
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.
Pin run Rotary lamp running Driver Aktif Ib = 0 Open Ib Close
74
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.
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
Gambar 4.13 Hardware tampilan awal monitoring loss time
Open Close OFF ON Aktif Aktif Tampilan Nol (0)
75
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; //detik diset 0
int menit=0; //menit diset 0
int jam=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); //tampilkan seven segment detik
showdigits5 (menit,0x0F); //tampilkan seven segment menit
showdigits4 (jam,0x0F); //tampilkan seven segment jam
};
Tampilan Nol (0)
76
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
Gambar 4.16 Hardware monitoring progres pencapaian produksi
1a
2a
3
1b
77
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
Gambar 4.18 Simulasi setting-an angka planning
1 2 3 Digit-1 Digit-3 Digit-4 Button-UP Button-DOWN Button SET DIGIT Indikator penunjuk digit
78
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.
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.
Mikrokontroler Arduino Program Button UP 1 2 3 Button-UP Button-DOWN Button SET DIGIT
79
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) //jika angka planning besar dari 9999
{PLAN=0;} //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.
Gambar 4.21 Ilustrasi down angka planning
Mikrokontroler Arduino Program Button DOWN 1 2 3
80
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
int PLAN=0; //setting awal angka planning 0000
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) //jika nilai angka kurang dari 0000
{PLAN=9999;} //set angka menjadi 9999
};
void loop () {
TCCR1B=0x00; //non aktifkan timer1
if (!digitalRead(DOWN_PLAN)== LOW) //timer aktif apabila button-DOWN
ditekan {TCCR1B=0x03;}
{TCCR1B=0x03;}
{TCCR1B=0x03;}; //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.
Gambar 4.22 Ilustrasi set digit angka planning
Mikrokontroler Arduino Program Button set digit 1 2 3 Button UP Indikator digit-2 Indikator digit-3 Indikator digit-4
81
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 digit-2 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) //interrupt timer1 aktif
{
if (set_digit==0) //jika angka planning tidak dalam
kondisi setting {
if (digitalRead(UP_PLAN)== LOW) //jika button-UP ditekan
{PLAN++;} //tambah 1 digit-1
if (digitalRead(DOWN_PLAN)== LOW //jika button-DOWN ditekan
{PLAN--;} //kurangi 1 digit-1
digitalWrite(RUN, LOW); //aktifkan rotary lamp running
digitalWrite(SET_PULUH, HIGH); //indikator penunjuk digit-2 non aktif
digitalWrite(SET_RATUS, HIGH); //indikator penunjuk digit-3 non aktif
digitalWrite(SET_RIBU, HIGH); //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); //rotary lamp running non aktif
digitalWrite(SET_PULUH, LOW); //aktifkan indikator penunjuk digit-2
digitalWrite(SET_RATUS, HIGH); //indikator penunjuk digit-3 non aktif
digitalWrite(SET_RIBU, HIGH); //indikator penunjuk digit-4 non aktif }
82
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); //rotary lamp running non aktif
digitalWrite(SET_PULUH, HIGH); //indikator penunjuk digit-2 non aktif
digitalWrite(SET_RATUS, LOW); //aktifkan indikator penunjuk digit-3
digitalWrite(SET_RIBU, HIGH); //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); //rotary lamp running non aktif
digitalWrite(SET_PULUH, HIGH); //indikator penunjuk digit-2 non aktif
digitalWrite(SET_RATUS, HIGH); //indikator penunjuk digit-3 non aktif
digitalWrite(SET_RIBU, LOW); //aktifkan indikator penunjuk digit-4
}
if (digitalRead(SET)== LOW) //jika Button SET DIGIT ditekan
{set_digit++;} //pilih digit 1-4
if (set_digit>=4) //jika pilihan lebih besar dari digit4
{set_digit=0;} //setting kembali ke digit-1
};
void loop () {
if (set_digit==0) //jika angka planning tidak dalam
kondisi setting {
showdigits (PLAN,0x0F); //tampilkan seven segment planning
showdigits2 (COUNTER,0x0F); //tampilkan seven segment counter
showdigits3 (Achiev,0x0F); //tampilkan seven segment persentase
};
if (set_digit==1) //setting angka planning digit-2
{
showdigits (PLAN,0x0F); //tampilkan seven segment planning
showdigits2 (COUNTER,0x00); //non aktifkan seven segment counter
showdigits3 (Achiev,0x00); //non aktifkan seven segment
persentase };
if (set_digit==2) //setting angka planning digit-3
{
showdigits (PLAN,0x0F); //tampilkan seven segment planning
showdigits2 (COUNTER,0x00); //non aktifkan seven segment counter
showdigits3 (Achiev,0x00); //non aktifkan seven segment ersentase
};
if (set_digit==3) //setting angka planning digit-4
{
showdigits (PLAN,0x0F); //tampilkan seven segment planning
showdigits2 (COUNTER,0x00); //non aktifkan seven segment counter
showdigits3 (Achiev,0x00); //non aktifkan seven segment
persentase };
83 4.2.2 Counter Produk
Gambar 4.23 Simulasi counter produk
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.
Counter-UP Counter-DOWN Counter-RESET Indikator running Sensor Produk Digit-1 Digit-3 Digit-4 Digit-2 Indikator running Sensor Produk Counter-UP Counter-DOWN Counter-RESET
84 a. Proses counter
Proses counter adalah proses penghitungan jumlah produk yang dihasilkan di suatu line produksi dengan menggunakan sebuah sensor.
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.
Mikrokontroler Arduino Sensor Counter Produk 1 2 3 1 Cycle 1 Cycle 1 Cycle
85
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; //variable counter
long COUNTER=0; //angka counter (actual) diset 0
ISR(TIMER1_OVF_vect) //interrupt timer1 aktif
{
if (set_digit==0) //jika angka planning tidak dalam kondisi
setting
{digitalWrite(RUN, LOW);} //lampu rotary lamp running aktif
if (set_digit==1) //setting angka planning digit-2
{digitalWrite(RUN, HIGH);} //lampu rotary lamp running non-aktif
if (set_digit==2) //setting angka planning digit-3
{digitalWrite(RUN, HIGH);} //lampu rotary lamp running non-aktif
if (set_digit==3) //setting angka planning digit-4
{digitalWrite(RUN, HIGH);} //lampu rotary lamp running non-aktif
if (COUNTER>9999) //jika angka counter besar dari 9999
{COUNTER=0;} //set angka menjadi 0000
if (COUNTER<0) //jika angka counter kecil dari 0000
{COUNTER=9999;} //set angka menjadi 9999
};
ISR(INT0_vect) //jika button Interrupt0 aktif
{
state = !state;
COUNTER++; //angka counter tambah 1
}
void loop () {
if (set_digit==0) //jika angka planning tidak dalam kondisi
setting
{showdigits2 (COUNTER,0x0F);}; //tampilkan seven segment counter
if (set_digit==1) //setting angka planning digit-2
{showdigits2 (COUNTER,0x00);}; //seven segment counter non-aktif
if (set_digit==2) //setting angka planning digit-3
{showdigits2 (COUNTER,0x00);}; //seven segment counter non-aktif
if (set_digit==3) //setting angka planning digit-4
{showdigits2 (COUNTER,0x00);}; //seven segment counter non-aktif };
86
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.
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).
Gambar 4.28 Ilustrasi reset counter 1 Menggunakan Interrupt = +1 1 1 1 1 1 Tanpa Interrupt = +5 Mikrokontroler Arduino Program Button RESET 1 2
87
Program yang dieksekusi adalah
long COUNTER=0; //angka counter (actual) diset 0
ISR(TIMER1_OVF_vect) //interrupt timer1 aktif
{
if (set_digit==0) //jika angka planning tidak dalam
kondisi setting {
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) //jika counter-RESET ditekan
{COUNTER=0;}; //set angka menjadi 0000
showdigits2 (COUNTER,0x0F); //tampilkan seven segment counter
};
4.2.3 Kalkulasi Pencapaian Produksi
Gambar 4.29 Simulasi perhitungan (kalkulasi) pencapaian produksi
Planning
Actual
88
Gambar 4.30 Hardware perhitungan (kalkulasi) pencapaian produksi
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
Mikrokontroler Arduino Program Planning Actual Hasil Bagi KOMA
89
void loop () {
Achiev = (COUNTER*1000)/PLAN; //Perbandingan angka counter dengan angka planning
if (set_digit==0) //jika angka planning tidak dalam kondisi
setting {
showdigits (PLAN,0x0F); //tampilkan seven segment planning
showdigits2 (COUNTER,0x0F); //tampilkan seven segment counter showdigits3 (Achiev,0x0F); //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
Gambar 4.32 Simulasi monitoring loss time mesin
1
3
90
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
Gambar 4.34 Simulasi aktifasi dte zone
3 1
2
Switch DTE Zone-1 Switch Buzzer DTE Zone-1
Switch DTE Zone-2
Switch DTE Zone-3 Switch Buzzer DTE Zone-2
Switch Buzzer DTE Zone-3
91
Gambar 4.35 Hardware aktifasi dte zone
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.
Switch DTE Zone
Switch Buzzer DTE Zone-3 Mikrokontroler Arduino Program Switch DTE & Buzzer
92 4.3.2 Alarm DTE zone
Gambar 4.37 Simulasi alarm dte zone
Gambar 4.38 Hardware alarm dte zone
Gambar 4.39 Ilustrasi aktifasi dte zone
Buzzer DTE Zone- 1, 2, 3
Rotary Lamp DTE Zone- 1, 2, 3 Rotary Lamp DTE Zone- 1, 2, 3 Buzzer DTE Zone- 1, 2, 3 Mikrokontroler Arduino Program Selector Switch DTE Zone
93
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 zone1 aktif
{
if (WAKTU<=245/2) //perioda 0 ~ 0.5 detik pertama
{digitalWrite(LAMP_ZONE1, LOW);} //rotary lamp DTE zone1 aktif
if (WAKTU>=245/2) //perioda 0 ~ 0.5 detik kedua
{digitalWrite(LAMP_ZONE1, HIGH);} //rotary lamp DTE zone1 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 //kondisi default
{
digitalWrite(LAMP_ZONE1, HIGH); //rotary lamp DTE zone1 non aktif
digitalWrite(BUZZER1, HIGH); //buzzer DTE zone1 non aktif
};
if (digitalRead(SWITCH_ZONE2)==LOW) //jika switch DTE zone2 aktif
{
if (WAKTU<=245/2) //perioda 0 ~ 0.5 detik pertama
{digitalWrite(LAMP_ZONE2, LOW);} //rotary lamp DTE zone2 aktif
if (WAKTU>=245/2) //perioda 0 ~ 0.5 detik kedua
{digitalWrite(LAMP_ZONE2, HIGH);} //rotary lamp DTE zone2 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 //kondisi default
{
digitalWrite(LAMP_ZONE2, HIGH); //rotary lamp DTE zone2 non aktif
digitalWrite(BUZZER2, HIGH); //buzzer DTE zone2 non aktif
};
if (digitalRead(SWITCH_ZONE3)==LOW) //jika switch DTE zone3 aktif
{
if (WAKTU<=245/2) //perioda 0 ~ 0.5 detik pertama
94
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 //kondisi default
{
digitalWrite(LAMP_ZONE3, HIGH); //rotary lamp DTE zone3 non aktif
digitalWrite(BUZZER3, HIGH); //buzzer DTE zone3 non aktif
};
if (++WAKTU==245) //overflow 1 detik
{ WAKTU=0;}; //reset waktu overflow menjadi 0
if (++DETAK==245*2) //overflow 2 detik
{DETAK=0;}; //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
Gambar 4.40 Simulasi timer loss time
Detik Menit
Jam
95
Gambar 4.41 Hardware timer loss time
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 WAKTU=0; //waktu overflow diset 0
int detik=0; //detik diset 0
int menit=0; //menit diset 0
int jam=0; //jam diset 0
ISR(TIMER2_OVF_vect) //interrupt timer2 aktif
Menit Jam Detik Mikrokontroler Arduino Program Selector Switch DTE Zone Aktif
96
{
if (digitalRead(SWITCH_ZONE1)==LOW || //jika switch DTE zone1 aktif atau digitalRead(SWITCH_ZONE2)==LOW || //jika switch DTE zone2 aktif atau digitalRead(SWITCH_ZONE3)==LOW) //jika switch DTE zone3 aktif atau {
if (++WAKTU==245) //overflow 1 detik
{
if (++detik==60) //counter detik hingga 60
{
detik=0; //reset detik menjadi 0
if(++menit==60) //counter menit hingga 60
{
menit=0; //reset menit menjadi 0
if(++jam==24) //counter jam hingga 24
{
jam=0; //reset jam menjadi 0
} } }
WAKTU=0; //reset waktu overflow menjadi 0
}; }; };
void setup() {
TIMSK2=0x01; //aktifkan interrupt global dan
timer2 overflow TCCR2B = 0x05; //prescaler dibagi 128 TCNT2 = 0; //TCNT2 dimulai dari 0 }; void loop () {
showdigits6 (detik,0x0F); //tampilkan seven segment detik
showdigits5 (menit,0x0F); //tampilkan seven segment menit
showdigits4 (jam,0x0F); //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:
fOC2 = fclk_I/O 2 x N x (1 + OCR2) fOC2 = 16 x 106 Hz 2 x 128 x (1 + 255) fOC2 = 244.141 Hz
97
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 %.
Gambar 4.43 Pengujian waktu timer vs waktu real TOC2 = 1 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
98
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.
Selisih waktu = Waktu timer – Waktu real Selisih waktu = 01:00:00’00 – 00:59:58’50 Selisih waktu = 1.50 detik
Persentase Error = Selisih waktu Waktu 1 jam x 100 % Persentase Error = 1.50 detik 3600 detik x 100 % Persentase Error = 0.0417 %