lampiran -...
TRANSCRIPT
40
Lampiran
Lampiran 1. Cara Penggunaan Alat
1. Kontrol utama terdiri dari penampil, saklar, dan komponen elektronika lain yang
mengolah data dari sensor maupun mengirimkan data ke aktuator.
2. Bahan-bahan yang digunakan untuk membuat makaroni dimasukkan ke ruang
mesin mikser sesuai kapasitas mesin. Terdiri dari 6 karung terigu (@25kg), 1
karung tapioka (@10kg), dan bumbu yang sudah dilarutkan dalam 2 ember air.
(Gambar 1.7)
3. Saklar utama diposisikan pada keadaan on. Tombol emergency pada posisi bebas
atau non-aktif. Posisi ini akan membuat setiap komponen pada kontrol utama
terdayai dan siap melakukan fungsinya. Saklar motor pengaduk diposisikan on
untuk mengaduk semua bahan sebagai permulaan selama kurang lebih 30 detik.
4. Nilai referensi default sudah terprogram pada kendali utama. Apabila ada
perubahan nilai yang dipakai sebagai batas kerja mesin, maka nilai tersebut
dimasukkan pada tahapan awal menggunakan keypad pada kontrol utama.
Keypad berfungsi sebagai pemilih nilai yang akan diubah dan sebagai pengatur
besaran nilai batas yang akan dimasukkan. Kelompok nilai yang dimasukkan
terakhir kali akan tersimpan dalam pengendali mikro. Ketika mesin dinyalakan
kembali setelah dimatikan, tidak diperlukan untuk memasukkan parameter yang
sama bila tidak ada perubahan dari kondisi terakhir sebelum mesin dimatikan.
Gambar 1. Kendali Otomatis pada Kondisi Standby
41
5. Tombol mulai ditekan setelah pengaturan nilai-nilai yang diperlukan telah
dipenuhi. Tombol mulai akan membuat motor listrik yang terhubung ke
pengaduk aktif, katup solenoid terbuka, dan pewaktu akan mulai menghitung
naik.
6. Selama mesin bekerja, pengendali mikro akan melakukan pembacaan dari setiap
sensor dan menjalankan pewaktu sampai dengan batas yang sudah dimasukkan
saat pemasukan parameter. Keypad 4x4 pada bagian numerik tidak dapat
berfungsi selama mesin bekerja, namun tombol A, B, C, dan D dapat digunakan
untuk melihat nilai aktual suhu, arus, dan waktu.
Gambar 2. Kendali Otomatis pada Kondisi Mesin Beroperasi
7. Faktor penentu sebagai tanda proses pencampuran bahan telah selesai adalah
besar arus yang mengalir ke motor listrik sudah mencapai batas yang terekam
pada sistem. Selama arus pada motor listrik belum terpenuhi, suhu ruangan
mikser akan terjaga di antara batas bawah dan batas atas suhu yang diatur saat
parameterisasi. Ketika arus listrik yang mengalir ke motor listrik mencapai nilai
80% dari batas arus, maka alarm akan aktif sebagai tanda bagi operator untuk
berada di dekat mesin dan mengecek mesin. Alarm juga akan aktif ketika nilai
pewaktu sudah tercapai walau nilai arus listrik belum mencapai 80% dari batas
arus.
8. Setelah arus listrik tercapai, proses selesai, mesin berhenti bekerja, ditandai
dengan motor listrik berhenti, katup solenoid tertutup, dan alarm aktif. Sistem
akan tetap mengaktifkan alarm walaupun pewaktu belum mencapai batas yang
42
diatur pada saat parameterisasi. Pada tahap ini, alarm sebagai tanda untuk
operator mesin untuk memindahkan hasil olahan mesin mikser ke tahap proses
produksi selanjutnya.
Gambar 3. Kendali Otomatis pada Kondisi Mesin Selesai Beroperasi
Gambar 4. Hasil Pemrosesan Mesin Mikser
43
Lampiran 2. Program pada Arduino Mega 2560
#include <Keypad.h> #include <EEPROM.h> #include <EmonLib.h> #include "EEPROMAnything.h" EnergyMonitor emon1; byte decto7seg[10] = { 0b01000000, 0b01111001, 0b00100100, 0b00110000, 0b00011001, 0b00010010, 0b00000010, 0b01111000, 0b00000000, 0b00010000 }; int startBut = 50; int stopBut = 51; int setPin = 44; int motorPin = 45; int solPin = 46; int alarmPin = 48; int finishPin = 49; int emergBut = 2; byte state = LOW; byte mati = HIGH; byte nyala = LOW; int value, ratusan, puluhan, satuan, change = 0; int ratusan1,puluhan1,satuan1, tunda = 0; int spSB, spSA, spA = 0; float valSuhu = 0.0; float standbyVal, alarmA = 0.0; const int numReadings = 10; int readings[numReadings]; // the readings from the analog input int readIndex = 0; // the index of the current reading int total = 0; // the running total int average = 0; // the average
44
int inputPin = A0; double bacaArus = 0; long spP, beat, nextTimer = 0; int jeda = 10; int setup1, setup2 = 0; int addr_spSB = 14; int addr_spSA = 16; int addr_spA = 18; int addr_spP = 20; bool suhuBawah, suhuAtas, arus, pewaktu, on, atP, atS, atA = false; const byte ROWS = 4; //four rows const byte COLS = 4; //three columns char keys[ROWS][COLS] = { {'1','2','3','A'}, {'4','5','6','B'}, {'7','8','9','C'}, {'*','0','#','D'}}; byte rowPins[ROWS] = {14, 15, 16, 17}; //connect to the row pinouts of the keypad byte colPins[COLS] = {18, 19, 20, 21}; //connect to the column pinouts of the keypad Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); void setup(){ Serial.begin(9600); //Setting Output pinMode(startBut, INPUT); pinMode(stopBut, INPUT); pinMode(emergBut, INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(emergBut), emerCon, LOW); for(int a=14; a<22; a++) { pinMode(a, INPUT); } for(int a=22; a<50; a++) { pinMode(a, OUTPUT); } for(int a=22; a<50; a++) { digitalWrite(a, LOW); } EEPROM_readAnything(addr_spSB, spSB); EEPROM_readAnything(addr_spSA, spSA); EEPROM_readAnything(addr_spA, spA);
45
EEPROM_readAnything(addr_spP, spP); digitalWrite(alarmPin, mati); digitalWrite(finishPin, mati); digitalWrite(motorPin, mati); digitalWrite(solPin, mati); for (int thisReading = 0; thisReading < numReadings; thisReading++) { readings[thisReading] = 0; } standbyVal = 0.8; emon1.current(1,60); } void emerCon(){ digitalWrite(motorPin, mati); digitalWrite(solPin, mati); digitalWrite(alarmPin, mati); digitalWrite(finishPin, mati); digitalWrite(41, LOW); digitalWrite(42, LOW); digitalWrite(43, LOW); PORTC = 255; digitalWrite(41, HIGH); digitalWrite(42, HIGH); digitalWrite(43, HIGH); delay(100); digitalWrite(41, LOW); digitalWrite(42, LOW); digitalWrite(43, LOW); digitalWrite(38, LOW); digitalWrite(39, LOW); digitalWrite(40, LOW); PORTA = 255; digitalWrite(38, HIGH); digitalWrite(39, HIGH); digitalWrite(40, HIGH); delay(100); digitalWrite(38, LOW); digitalWrite(39, LOW); digitalWrite(40, LOW); blinkDisp(); //Serial.println("Emerg");
46
on = false; setup1 = 0; } void blinkDisp(){ state = !state; for(int i = 0; i<10000; i++) { digitalWrite(setPin, state); } } void loop(){ while(!on && (digitalRead(alarmPin) == nyala||digitalRead(finishPin) == nyala)) { if(digitalRead(stopBut) == HIGH && (digitalRead(alarmPin) == nyala||digitalRead(finishPin) == nyala)) { digitalWrite(alarmPin, mati); digitalWrite(finishPin, mati); } } while(!on && (digitalRead(alarmPin == mati||digitalRead(finishPin)== mati))) //parameterisasi { char key = keypad.getKey(); if(setup1++ == 0) { PORTC = 255; digitalWrite(41, LOW); digitalWrite(42, LOW); digitalWrite(43, LOW); digitalWrite(41, HIGH); digitalWrite(42, HIGH); digitalWrite(43, HIGH); digitalWrite(41, LOW); digitalWrite(42, LOW); digitalWrite(43, LOW); digitalWrite(setPin, HIGH); digitalWrite(motorPin, mati); digitalWrite(solPin, mati); ratusan = spSB/100; puluhan = (spSB-(ratusan*100))/10; satuan = spSB-(ratusan*100)-(puluhan*10); show1(); } setup1 = 2;
47
if(digitalRead(startBut) == HIGH && digitalRead(stopBut) == LOW) { on = true; setup2 = 0; alarmA = spA/1.0; //Serial.println(on); } if(key == 'A') { suhuBawah = true; change = 0; ratusan = spSB/100; puluhan = (spSB-(ratusan*100))/10; satuan = spSB-(ratusan*100)-(puluhan*10); show1(); while(suhuBawah) { inputTombol(); show1(); } } if(key == 'B') { suhuAtas = true; change = 0; ratusan = spSA/100; puluhan = (spSA-(ratusan*100))/10; satuan = spSA-(ratusan*100)-(puluhan*10); show1(); while(suhuAtas) { inputTombol(); show1(); } } if(key == 'C') { arus = true; change = 0; ratusan = spA/100; puluhan = (spA-(ratusan*100))/10; satuan = spA-(ratusan*100)-(puluhan*10); show1(); while(arus) { inputTombol(); show1(); } }
48
if(key == 'D') { pewaktu = true; change = 0; ratusan = spP/100; puluhan = (spP-(ratusan*100))/10; satuan = spP-(ratusan*100)-(puluhan*10); show1(); while(pewaktu) { inputTombol(); show1(); } } show1(); } while(on) //sistem aktif { char key = keypad.getKey(); if(setup2++ == 0) { beat = spP; digitalWrite(setPin, LOW); atS = true; ratusan = spSB/100; puluhan = (spSB-(ratusan*100))/10; satuan = spSB-(ratusan*100)-(puluhan*10); ratusan1 = valSuhu/100; puluhan1 = (valSuhu-(ratusan1*100))/10; satuan1 = valSuhu-(ratusan1*100)-(puluhan1*10); digitalWrite(motorPin, nyala); digitalWrite(solPin, nyala); nextTimer = millis() + 60000; show2(); show1(); } setup2 = 2; //show2(); if(digitalRead(stopBut) == HIGH && digitalRead(startBut) == LOW) { PORTC = 255; digitalWrite(41, LOW); digitalWrite(42, LOW);
49
digitalWrite(43, LOW); digitalWrite(41, HIGH); digitalWrite(42, HIGH); digitalWrite(43, HIGH); digitalWrite(41, LOW); digitalWrite(42, LOW); digitalWrite(43, LOW); digitalWrite(motorPin, mati); digitalWrite(solPin, mati); digitalWrite(alarmPin, mati); digitalWrite(finishPin, mati); on = false; setup1 = 0; //Serial.println(on); } if(key == 'A') { atP = atA = false; atS = true; ratusan = spSB/100; puluhan = (spSB-(ratusan*100))/10; satuan = spSB-(ratusan*100)-(puluhan*10); show1(); ratusan1 = valSuhu/100; puluhan1 = (valSuhu-(ratusan1*100))/10; satuan1 = valSuhu-(ratusan1*100)-(puluhan1*10); show2(); } if(key == 'B') { atP = atA = false; atS = true; ratusan = spSA/100; puluhan = (spSA-(ratusan*100))/10; satuan = spSA-(ratusan*100)-(puluhan*10); show1(); ratusan1 = valSuhu/100; puluhan1 = (valSuhu-(ratusan1*100))/10; satuan1 = valSuhu-(ratusan1*100)-(puluhan1*10); show2(); } if(key == 'C') { atP = atS = false; atA = true; ratusan = spA/100; puluhan = (spA-(ratusan*100))/10;
50
satuan = spA-(ratusan*100)-(puluhan*10); show1(); ratusan1 = bacaArus/100; puluhan1 = (bacaArus-(ratusan1*100))/10; satuan1 = bacaArus-(ratusan1*100)-(puluhan1*10); show2(); } if(key == 'D') { atS = atA = false; atP = true; ratusan = spP/100; puluhan = (spP-(ratusan*100))/10; satuan = spP-(ratusan*100)-(puluhan*10); show1(); ratusan1 = beat/100; puluhan1 = (beat-(ratusan1*100))/10; satuan1 = beat-(ratusan1*100)-(puluhan1*10); show2(); } if(millis() >= nextTimer) { nextTimer = nextTimer + 60000; if(beat > 0) { beat--; } if(beat == 0) { digitalWrite(alarmPin, nyala); } if(atP) { ratusan1 = beat/100; puluhan1 = (beat-(ratusan1*100))/10; satuan1 = beat-(ratusan1*100)-(puluhan1*10); show2(); } } //show1(); //show2(); //Delay Pembacaan Sensor if(tunda == 50) { // subtract the last reading: total = total - readings[readIndex]; // read from the sensor: readings[readIndex] = analogRead(inputPin); // add the reading to the total:
51
total = total + readings[readIndex]; // advance to the next position in the array: readIndex = readIndex + 1; // if we're at the end of the array... if (readIndex >= numReadings) { // ...wrap around to the beginning: readIndex = 0; } // calculate the average: average = total / numReadings; //Pembacaan sensor valSuhu = average; //valArus = analogRead(1); bacaArus = emon1.calcIrms(1480); bacaArus = bacaArus + 3.4; Serial.println(bacaArus); valSuhu = map(valSuhu, 0, 717, 0, 150); //valArus = map(valArus, 15, 1012, 0, 200); Serial.println(valSuhu); //Konversi Pembacaan sensor untuk output 7Segment if(atS) { ratusan1 = valSuhu/100; puluhan1 = (valSuhu-(ratusan1*100))/10; satuan1 = valSuhu-(ratusan1*100)-(puluhan1*10); } if(atA) { ratusan1 = bacaArus/100; puluhan1 = (bacaArus-(ratusan1*100))/10; satuan1 = bacaArus-(ratusan1*100)-(puluhan1*10); } show2(); if(bacaArus < spA) { digitalWrite(motorPin, nyala); if(valSuhu <= spSB) { digitalWrite(solPin, nyala); } if(valSuhu >= spSA) { digitalWrite(solPin, mati); } if(bacaArus >= (alarmA * standbyVal)) { digitalWrite(alarmPin, nyala);
52
} } if(bacaArus >= spA) { digitalWrite(motorPin, mati); digitalWrite(solPin, mati); digitalWrite(alarmPin, mati); digitalWrite(finishPin, nyala); digitalWrite(41, LOW); digitalWrite(42, LOW); digitalWrite(43, LOW); PORTC = 255; digitalWrite(41, HIGH); digitalWrite(42, HIGH); digitalWrite(43, HIGH); delay(100); on = false; setup1 = 0; } tunda = 0; } tunda++; show1(); show2(); } } void inputTombol() { char key = keypad.getKey(); if (key != NO_KEY) { if(key == 'A' || key == 'B' || key == 'C' || key == 'D') { change--; } if(key == '*') { satuan = 0; puluhan = 0; ratusan = 0; change = -1; } show1(); //Konversi Char from keypad to Int Value if(key == '0'){value=0;} if(key == '1'){value=1;} if(key == '2'){value=2;}
53
if(key == '3'){value=3;} if(key == '4'){value=4;} if(key == '5'){value=5;} if(key == '6'){value=6;} if(key == '7'){value=7;} if(key == '8'){value=8;} if(key == '9'){value=9;} if(change == 0 && key != '#'){ satuan=value; puluhan = 0; ratusan = 0; show1(); } if(change == 1 && key != '#'){ puluhan=satuan; satuan=value; } if(change == 2 && key != '#'){ ratusan=puluhan; puluhan=satuan; satuan=value; } if(key == '#') { digitalWrite(38, LOW); digitalWrite(39, LOW); digitalWrite(40, LOW); PORTA = 255; digitalWrite(38, HIGH); digitalWrite(39, HIGH); digitalWrite(40, HIGH); delay(100); show1(); if(suhuBawah) { if(change == 0) //tidak diubah dari nilai awal { satuan = (spSB%100)%10; suhuBawah = false; } else //kurang dari sama dengan 3 digit { spSB = (ratusan*100) + (puluhan*10) + satuan; EEPROM_writeAnything(addr_spSB, spSB); suhuBawah = false; } } if(suhuAtas)
54
{ if(change == 0) //tidak diubah dari bilai awal { satuan = (spSA%100)%10; suhuAtas = false; } else //kurang dari sama dengan 3 digit { spSA = (ratusan*100) + (puluhan*10) + satuan; EEPROM_writeAnything(addr_spSA, spSA); suhuAtas = false; } }if(arus) { if(change == 0) //tidak diubah dari nilai awal { satuan = (spA%100)%10; arus = false; } else //kurang dari sama dengan 3 digit { spA = (ratusan*100) + (puluhan*10) + satuan; EEPROM_writeAnything(addr_spA, spA); arus = false; } } if(pewaktu) { if(change == 0) //tidak diubah dari bilai awal { satuan = (spP%100)%10; pewaktu = false; } else //kurang dari sama dengan 3 digit { spP = (ratusan*100) + (puluhan*10) + satuan; EEPROM_writeAnything(addr_spP, spP); pewaktu = false; } } } change++; } } void show1() { //Program Penampil ke 7Segment 3 Digit: //Selector ratusan
55
digitalWrite(38, LOW); digitalWrite(39, LOW); digitalWrite(40, LOW); PORTA = decto7seg[ratusan]; digitalWrite(38, LOW); digitalWrite(39, LOW); digitalWrite(40, HIGH); delay(jeda); //Selector puluhan digitalWrite(38, LOW); digitalWrite(39, LOW); digitalWrite(40, LOW); PORTA = decto7seg[puluhan]; digitalWrite(38, LOW); digitalWrite(39, HIGH); digitalWrite(40, LOW); delay(jeda); //Selector satuan digitalWrite(38, LOW); digitalWrite(39, LOW); digitalWrite(40, LOW); PORTA = decto7seg[satuan]; digitalWrite(38, HIGH); digitalWrite(39, LOW); digitalWrite(40, LOW); delay(jeda); digitalWrite(38, LOW); digitalWrite(39, LOW); digitalWrite(40, LOW); } void show2() { //Program Penampil ke 7Segment 3 Digit: //Selector ratusan digitalWrite(41, LOW); digitalWrite(42, LOW); digitalWrite(43, LOW); PORTC = decto7seg[ratusan1]; digitalWrite(41, LOW); digitalWrite(42, LOW); digitalWrite(43, HIGH); delay(jeda); //Selector puluhan digitalWrite(41, LOW); digitalWrite(42, LOW); digitalWrite(43, LOW); PORTC = decto7seg[puluhan1]; digitalWrite(41, LOW);
56
digitalWrite(42, HIGH); digitalWrite(43, LOW); delay(jeda); //Selector satuan digitalWrite(41, LOW); digitalWrite(42, LOW); digitalWrite(43, LOW); PORTC = decto7seg[satuan1]; digitalWrite(41, HIGH); digitalWrite(42, LOW); digitalWrite(43, LOW); delay(jeda); digitalWrite(41, LOW); digitalWrite(42, LOW); digitalWrite(43, LOW); }