72
LAMPIRAN
1.
Wiring
Datalogger
ke Mesin
Berikut ini adalah gambar
wiring
diagram pemasangan
datalogger
ke mesin
forming
PT Kepuh Kencana Arum.
Gambar 1.
Wiring
datalogger ke mesin
Gambar 1 diatas merupakan
wiring
atau pengkabelan dari datalogger ke mesin
produksi sehingga arduino dapat membaca mesin secara keseluruhan, mulai dari
pembacaan
rotary encoder
, mode manual otomatis, dan juga dapat mengetahui mesin
forming
tersebut dalam keadaan hidup atau mati.
2.
Langkah Instalasi Alat
Langkah-langkah yang harus diperhatikan saat memasang datalogger ke mesin
forming
adalah sebagai berikut:
1.
Testing
mesin untuk mengetahui pin pada
wiring
PLC yang digunakan untuk
tombol FOR pada mesin dan sensor potong mesin.
2.
Matikan mesin, pastikan mesin dalam keadaan mati.
3.
Upload code arduino, pastikan waktu sudah tepat dan code berjalan sesuai
dengan proses mesin.
73
4.
Upload code nodemcu dan pastikan wi-fi dapat terhubung dengan nodemcu.
5.
Sambungkan kabel dari datalogger ke mesin sesuai dengan gambar 1 diatas.
6.
Hidupkan datalogger, kemudian jangan lupa colokkan adaptor.
3.
Koding Arduino
#include <SPI.h> #include <SD.h>#include <SoftwareSerial.h> #include "Wire.h"
char MESIN_NO[10] = "UNGCNK02"; //nama mesin dan lokasi
untuk sd card // Variable SDCard
const int chipSelect = 8; File filePotongan;
// Variable Encoder
volatile int encoderValue = 0; volatile int potongan = 0; #define pinEncoder1 3 #define pinEncoder2 4
74
byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
byte pinSwitchPemotong = 6; int SensorVal = 7; int Tbl_FOR = 5; int bacaflag; byte kondisi; int keterangan; int Hit_TmblFor=0; long prevTime; int Bhn=0; // Variabel Serial SoftwareSerial mySerial(9, 10); // RX, TX byte dataNodeMCU[20]; void setup() {
// put your setup code here, to run once: Serial.begin(115200);
mySerial.begin(115200); Wire.begin();
75 // Inisialisasi Encoder pinMode(pinEncoder1, INPUT_PULLUP); pinMode(pinEncoder2, INPUT_PULLUP); pinMode(pinSwitchPemotong, INPUT); pinMode(SensorVal, INPUT); pinMode(Tbl_FOR, INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(pinEncoder1), encoder, FALLING);
if (!SD.begin(chipSelect)) // Inisialisasi SDCard { Serial.print("gagal"); } else { Serial.print("sukses"); } // SD.remove("24-8-18.TXT"); // Untuk set waktu RTC
76
bacaJumlahPotongan(); // memanggil
bacajumlahpotongan untuk mengetahui jumlah potongan terakhir }
void loop() {
readDS3231time(&second, &minute, &hour, &dayOfWeek,
&dayOfMonth, &month, &year); //baca waktu rtc
//membaca mesin hidup/mati
if(digitalRead(SensorVal)==HIGH) { kondisi = 0; keterangan = 5; Serial.print("mesin mati"); encoderValue = 0; Hit_TmblFor = 0; potongan = 0; komunikasi(); while(digitalRead(SensorVal)==HIGH) { delayMicroseconds(1); }
77 } else { kondisi = 1; keterangan = 1; Serial.print("mesin hidup"); }
//membaca mesin aktif dan trialcutting if(Bhn==HIGH && kondisi==1){
keterangan=1; //Active }
else if(Bhn==LOW && kondisi==1){ keterangan=3; //Trial Cut } //pembacaan potong if(digitalRead(pinSwitchPemotong)== LOW) { potong(); while(digitalRead(pinSwitchPemotong) == LOW) { delayMicroseconds(1); }
78 }
//memanggil void ottoman untuk mengetahui mode otomatis dan manual
otoman();
//mengatur delay waktu
if((millis()-prevTime)>300000) { Serial.print(bacaflag);
Serial.println("Otomatis kirim karena mesin IDLE"); if(Bhn==HIGH){ keterangan=2; //idle bhn ON } else { keterangan=4; } if(bacaflag==0){ komunikasi(); bacaflag = 1; } } } void otoman() {
79 if(digitalRead(Tbl_FOR)==LOW) { while(digitalRead(Tbl_FOR)==LOW) { delayMicroseconds(1); } Hit_TmblFor = Hit_TmblFor+1; } if(Hit_TmblFor>1) { //Manual Bhn=LOW; // Serial.println("FOR LOW"); } else { //Otomatis Bhn=HIGH; // Serial.println("FOR HIGH"); } } //pembacaan rotary void encoder() { int BufX1=digitalRead(pinEncoder1); int BufX2=digitalRead(pinEncoder2);
80 if(BufX1==LOW&&BufX2==LOW) { encoderValue++; } else if(BufX1==LOW&&BufX2==HIGH) { encoderValue--; } } void potong() { potongan++; simpanJumlahPotongan(potongan); simpanDataPotongan(); komunikasi(); encoderValue = 0; Hit_TmblFor = 0; prevTime = millis(); bacaflag = 0; Serial.println("SUdah potong"); }
81 void simpanDataPotongan()
{
String sekarang = String(dayOfMonth, DEC); sekarang += "-";
sekarang += String(month, DEC); sekarang += "-";
sekarang += String(year, DEC); sekarang += ".txt";
filePotongan = SD.open(sekarang, FILE_WRITE); if(filePotongan) { filePotongan.print(MESIN_NO); filePotongan.print(" "); filePotongan.print(potongan); filePotongan.print(" "); filePotongan.print(dayOfMonth); filePotongan.print("-"); filePotongan.print(month); filePotongan.print("-"); filePotongan.print(year); filePotongan.print(" ");
82 filePotongan.print(hour); filePotongan.print(":"); filePotongan.print(minute); filePotongan.print(":"); filePotongan.print(second); filePotongan.print(" "); filePotongan.print(encoderValue); filePotongan.print(" "); filePotongan.print(kondisi); filePotongan.print(" "); filePotongan.println(keterangan); filePotongan.close(); } } void bacaJumlahPotongan() { filePotongan = SD.open("index.txt"); if(filePotongan) { Serial.print("baca potongan: "); potongan = filePotongan.parseInt(); Serial.println(potongan);
83 filePotongan.close(); } } void simpanJumlahPotongan(int jml) { if(SD.exists("index.txt")) { SD.remove("index.txt"); }
filePotongan = SD.open("index.txt", FILE_WRITE); if(filePotongan) { filePotongan.println(jml); filePotongan.close(); } }
//komunikasi serial ke nodemcu void komunikasi()
{
byte potongan_a = (potongan&0xff00)>>8; byte potongan_b = (potongan&0x00ff);
84 long putaran_temp = encoderValue; boolean putaran_min = false; if(putaran_temp<0) { putaran_min = true; putaran_temp = putaran_temp*-1; } else { putaran_min = false; }
byte putaran_a = (putaran_temp&0xff0000)>>16; byte putaran_b = (putaran_temp&0x00ff00)>>8; byte putaran_c = (putaran_temp&0x0000ff);
if(putaran_min) {
putaran_a = putaran_a | 0x80; }
85 dataNodeMCU[1] = potongan_a; dataNodeMCU[2] = potongan_b; dataNodeMCU[3] = putaran_a; dataNodeMCU[4] = putaran_b; dataNodeMCU[5] = putaran_c; dataNodeMCU[6] = dayOfMonth; dataNodeMCU[7] = month; dataNodeMCU[8] = year; dataNodeMCU[9] = hour; dataNodeMCU[10] = minute; dataNodeMCU[11] = second; dataNodeMCU[12] = kondisi; dataNodeMCU[13] = keterangan; byte total = 0; for(int i=1;i<14;i++) { total+=dataNodeMCU[i]; }
byte checksum = ~total;
86 mySerial.write(dataNodeMCU, 15); }
#define DS3231_I2C_ADDRESS 0x68 byte decToBcd(byte val)
{
return( (val/10*16) + (val%10) ); }
// Convert binary coded decimal to normal decimal numbers byte bcdToDec(byte val)
{
return( (val/16*10) + (val%16) ); }
void setDS3231time(byte second, byte minute, byte hour, byte dayOfWeek, byte
dayOfMonth, byte month, byte year) {
// sets time and date data to DS3231
Wire.beginTransmission(DS3231_I2C_ADDRESS);
Wire.write(0); // set next input to start at the seconds register
87
Wire.write(decToBcd(second)); // set seconds Wire.write(decToBcd(minute)); // set minutes Wire.write(decToBcd(hour)); // set hours
Wire.write(decToBcd(dayOfWeek)); // set day of week (1=Sunday, 7=Saturday)
Wire.write(decToBcd(dayOfMonth)); // set date (1 to 31) Wire.write(decToBcd(month)); // set month
Wire.write(decToBcd(year)); // set year (0 to 99) Wire.endTransmission();
}
void readDS3231time(byte *second, byte *minute, byte *hour, byte *dayOfWeek, byte *dayOfMonth, byte *month, byte *year) {
Wire.beginTransmission(DS3231_I2C_ADDRESS);
Wire.write(0); // set DS3231 register pointer to 00h Wire.endTransmission();
Wire.requestFrom(DS3231_I2C_ADDRESS, 7);
// request seven bytes of data from DS3231 starting from register 00h
*second = bcdToDec(Wire.read() & 0x7f); *minute = bcdToDec(Wire.read());
*hour = bcdToDec(Wire.read() & 0x3f); *dayOfWeek = bcdToDec(Wire.read());
88 *dayOfMonth = bcdToDec(Wire.read()); *month = bcdToDec(Wire.read()); *year = bcdToDec(Wire.read()); }
4.
Koding Nodemcu
#include <SoftwareSerial.h> #include <ESP8266WiFi.h> #include<ESP8266HTTPClient.h> #define BAUD_RATE 115200 // Variabel Komunikasi SerialSoftwareSerial swSer(14, 12, false, 256); //RX, TX byte dataArduino[20]; // Data Arduino int potongan = 0; long putaran = 0; int tanggal = 0; int bulan = 0; int tahun = 0; int jam = 0; int menit = 0; int detik = 0; int kondisi = 0; int keterangan = 0; long tahun_skrg; String time_ready;
89 // Variable WIFI
const char* ssid = "kka-scanner"; const char* password = "kepuh12345"; void setup() { Serial.begin(BAUD_RATE); swSer.begin(BAUD_RATE); pinMode(D2, OUTPUT); pinMode(D7, OUTPUT); pinMode(D8, OUTPUT); digitalWrite(D2, HIGH); WiFi.mode(WIFI_STA); WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); digitalWrite(D7, HIGH); delay(100); digitalWrite(D7, LOW); delay(100); } Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); Serial.print("Netmask: "); Serial.println(WiFi.subnetMask());
90 Serial.print("Gateway: "); Serial.println(WiFi.gatewayIP()); } void loop() { komunikasi(); delay(1); if(WiFi.status() != WL_CONNECTED){ WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); digitalWrite(D7, HIGH); delay(100); digitalWrite(D7, LOW); delay(100); } Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); Serial.print("Netmask: "); Serial.println(WiFi.subnetMask()); Serial.print("Gateway: "); Serial.println(WiFi.gatewayIP()); }
91 }
void kirim_data() {
Serial.println("Kirim data diproses..."); if(WiFi.status()==WL_CONNECTED)
{
time_ready = String(tahun_skrg);
time_ready = time_ready + String('-');
if(bulan < 10) {
time_ready = time_ready + String('0'); }
time_ready = time_ready + String(bulan); time_ready = time_ready + String('-'); if(tanggal < 10)
{
time_ready = time_ready + String('0'); }
time_ready = time_ready + String(tanggal); time_ready = time_ready + String('T');
if(jam < 10) {
time_ready = time_ready + String('0'); }
time_ready = time_ready + String(jam); time_ready = time_ready + String(':'); if(menit < 10)
92 {
time_ready = time_ready + String('0'); }
time_ready = time_ready + String(menit); time_ready = time_ready + String(':'); if(detik < 10)
{
time_ready = time_ready + String('0'); }
time_ready = time_ready + String(detik); String ID_mesin="ungcnk02";
String KirimDataURL = "timestamp=" + time_ready + "&length=" + String(putaran) + "&kondisi_mesin=" + String(kondisi) + "&proses=" + String(keterangan) + "&id_mesin=" + ID_mesin ;
//kirim ke web pusat // String url =
"http://kepuhweb.web.id/api/transaksi/insert?" + KirimDataURL;
//kirim ke host local String url = "http://192.168.6.87/api/transaksi/insert?" + KirimDataURL; Serial.println(url); digitalWrite(D8,HIGH); delay(500); HTTPClient http; http.begin(url); http.addHeader("Content-Type", "application/x-www-form-urlencoded");
93 if(httpResponseCode>0){
String response = http.getString(); //Get the response to the request
digitalWrite(D8,LOW);
Serial.println(httpResponseCode); //Print return code Serial.println(response); //Print request answer }else{
Serial.print("Error on sending POST: "); Serial.println(httpResponseCode);
String response = http.getString(); //Get the response to the request
Serial.println(response); } Serial.println(" "); } } void komunikasi() { if(swSer.available()>0) { Serial.println(swSer.available()); dataArduino[0] = swSer.read(); if(dataArduino[0] == 254) { while(swSer.available()<14); byte total = 0; for(int i=1;i<14;i++) { dataArduino[i] = swSer.read();
94 total += dataArduino[i]; }
byte checksum = ~total;
dataArduino[14] = swSer.read(); if(checksum == dataArduino[14]) {
potongan = (dataArduino[1]<<8)+dataArduino[2]; byte tanda = (dataArduino[3]>>7);
dataArduino[3] = dataArduino[3] & 0x7F; putaran = (dataArduino[3]<<16)+(dataArduino[4]<<8)+dataArduino[5]; if(tanda==1) { putaran=putaran*-1; } tanggal = dataArduino[6]; bulan = dataArduino[7]; tahun = dataArduino[8]; tahun_skrg = tahun + 2000; jam = dataArduino[9]; menit = dataArduino[10]; detik = dataArduino[11]; kondisi = dataArduino[12]; keterangan = dataArduino[13]; kirim_data(); } } } }