8
BAB III
PERANCANGAN
Pada bab ini akan dijelaskan perancangan dan realisasi dari perangkat keras dan perangkat lunak dari Penyimpanan Data dari Weighing Indikator XK3190-A12 atau Great Scale ke flashdisk.
3.1. Gambaran Alat
Alat yang dibuat berupa simulasi pembelian pasir oleh truk dari perusahaan tertentu. Terdapat load cell yang terhubung dengan Weighing indicator XK3190-A12, Terdapat LCD sebagai penampil inputan berupa nomer plat truk, nama perusahaan, berat awal truk, berat akhir truk, dan kode barang=berat akhir truck-berat awal truk, keyboard untuk penginputan datanya, printer thermal sebagai output keluaran untuk pembeli, flashdisk sebagai penyimpan data untuk pemilik perusahaan.
9 3.2. Perancangan Perangkat Keras
Perangkat keras yang dirancang adalah kotak penampil data untuk disimpan. Dengan dimensi panjang 30cm, lebar 15cm dan tinggi 15cm. Ada beberapa komponen elektronik yang digunakan yaitu :
Mikrokontroler jenis Arduino Mega 2560 USB Host Shield
Power Supply 12V 3A CH376s
Thermal printer for arduino Keyboard
Flashdisk
Gambar 3.2 Tampak Depan Alat
Keterangan dari gambar alat : a) Printer Thermal
b) LCD penampil input data c) Flashdisk
10
Di dalam kotak alat terdapat power suply, Arduino mega beserta usb host shield, Ch376s modul penyimpan data , dan RTC ds3231.
Gambar 3.3 Box Komponen Keterangan dari gambar dalam alat:
e) Data dari Great Scale f) Power supply
g) Arduino Mega beserta usb host shield h) Ch376s
i) RTC ds3231
3.3. Perancangan Elektronika
Pada bagian ini menjelaskan mengenai perancangan elektronika yang dipakai dalam sistem yang dibuat. Perancangan elektronika dalam pembuatan sistem ini terdiri dari :
1. Mikrokontroler jenis Arduino Mega 2560 sebagai pengendali utama 2. USBhost shield
3. Ch376s 4. RTC ds 3231
5. LCD 20X4 penampil inputan data 6. Printer thermal
11 3.3.1. Pengendali Utama
Pengendali utama ini menggunakan board Mikrokontroler Arduino Mega 2560 dengan menggunakan IC mikrokontroler Atmega 2560. Tugas utama dari Arduino Mega ini antara lain untuk :
1. Menginput data(nama perusahaan, plat nomor, jenis barang) menggunakan keyboard dengan USB Host Shield,rtc tersambung parallel dengan LCD 20X4.
2. Menginput data dari great scale berupa angka berat dari loadcell.
3. Menyimpan kedua data di atas ke dalam flashdisk. 4. Mencetak struk data menggunakan printer thermal.
Tabel 3.1. Konfigurasi Pin Mikrokontroler Arduino Mega 2560 Yang Digunakan
Nama Port Terhubung
PORT POWER 5V Pin VCC RTC Ds3231
PORT POWER 5V Pin VCC Ch376s
PORT POWER 5V Pin VCC USB Host Shield
PORT GND Pin GND RTC Ds3231
PORT GND Pin GND Ch376s
PORT GND Pin GND USB Host Shield
PORT 14 Rx Printer Thermal
PORT 15 Tx Printer Thermal
PORT 16 Rx Great Scale
PORT 17 Tx Great Scale
PORT 18 Rx Ch376s
PORT 19 Tx Ch376s
PORT 20 SDA Parallel Ds3231 dengan i2c lcd PORT 21 SCL Parallel Ds3231 dengan i2c lcd
12
Gambar 3.4. Wiring seluruh alat
3.3.2. USB Host Shield
Modul ini berfungsi untuk input data(nama perusahaan, plat nomor, jenis barang) yang terhubung dengan keyboard usb. Shield ini bisa digunakan pada jenis Arduino Uno, Mega dan Duemilanove yang tidak perlu penambahan kabel untuk menghubungkan ke SPI. USB Host Shield bekerja ketika huruf, angka, dan tombol fungsi ditekan maka akan memberikan inputan data yang akan ditampilkan di LCD 20X4. Berikut gambar rangkaian modul USB Host Shield ke arduino seperti yang ditunjukkan pada gambar dibawah ini :
13
Gambar 3.5. Wiring USB Host Shield
3.3.3. Ch376s
Pada alat ini menggunakan modul Ch376s yang berfungsi sebagai perantara penyimpanan seluruh data ke dalam flashdisk. Pin yang digunakan adalah pin serial. Agar dapat digunakan dengan baik flashdisk harus terformat FAT(File Allocation Table). Disini saya menggunakan FAT32 yang tersedia di format file system flashdisk saya. Ketika F3 di keyboard ditekan maka akan memberikan perintah untuk menyimpan ke dalam flashdisk. Berikut gambar rangkaian modul Ch376s ke arduino seperti yang ditunjukkan pada gambar dibawah ini :
14
Gambar 3.6. Wiring Ch376s
3.3.4. Weighing Indikator XK3190-A12
Dari loadcell dihubungkan ke indikator ini menggunakan rs232. Di dalam indicator terdapat komponen serupa hx711 yang berfungsi untuk mengubah sinyal analog loadcell menjadi sinyal digital. Data dari Weighing Indikator XK3190-A12 atau biasa disebut great scale ini nantinya akan disimpan ke flashdisk dan dicetak printer thermal.Berikut gambar rangkaian Weighing Indikator XK3190-A12 ke arduino seperti yang ditunjukkan pada gambar dibawah ini :
15 3.3.5. RTC Ds3231 dan LCD 20X4
Modul RTC sebagai penanda waktu agar mudah membaca data di dalam flashdisk. Modul ini tersambung parallel dengan LCD 20X4. Pewaktuan disini berguna untuk pembatas pada data file di dalam falshdisk dan pewaktu pada struk pembelian. Berikut gambar rangkaian parallel kedua modul:
Gambar 3.8. WiringRTC parallel dengan LCD 20X4
3.3.6. Printer Thermal
Printer thermal ini bekerja dengan cara memanaskan kertas thermal. Printer akan mencetak data data yang telah diinput. Printer menggunakan catu daya sebesar 8V 2A. Fungsi printer thermal ini untuk mencetak tanda bukti pembelian barang. Saat perintah F4(keyboard ditakan) diberikan maka printer mencetak data yang telah diinput. Berikut tabel dan gambar rangkainya:
Tabel 3.2. Spesifikasi printer thermal
Print method thermal direct line printing
Paper width 58mm
Print width 48mm
Printing speed 60mm/sec.;Max.:80MM/sec.(voltage 8.5V) Paper roll specification width:58mm,Max. diameter:39mm
16
Input power DC5-9V or 12V
Operating temperature 5°C~50°C
Gambar 3.9. Wiring Printer Thermal 3.4. Perancangan Perangkat Lunak
Pada bagian ini akan dijelaskan mengenai perangkat lunak dari alat penyimpanan data . Program atau perangkat lunak di sini berfungsi untuk menyimpan ke flashdisk.
Ada beberapa bagian dalam perangkat lunak atau program dalam skripsi ini. Yang pertama adalah arduino menerima inputan data dari keyboard dengan USB host Shield. Yang kedua Arduino menerima data dari great scale. Dan yang terakhir program dari arduino ini adalah mengontrol.
Berikut merupakan gambar dari diagram alir perangkat lunak pada skripsi yang dirancang oleh penulis ini :
17
18
Penjelasan dari diagram alir di atas adalah sebagai berikut :
1. Program akan mulai saat mikrokontroler mendapatkan masukan daya atau saat sklar utama dihidupkan.
2. Inisialisasi adalah untuk mensetting port yang digunakan yaitu serial1, serial2, dan serial 3.
3. Input data melalui keyboard usb(nama perusahaan, plat nomor, jenis barang). Nama perusahaan disimpan di array StringCompany, plat nomor di StringPlat, jenis barang di simpan di array StringJenis. 4. Truk ditimbang berat awal atau saat ditimbang truk mode zero. Data
disimpan ke float w1.
5. Truk ditimbang lagi beratnya dan data disimpan ke float w2.
6. Kedua data w2 dan w1 tadi diselisihkan menjadi hasil yang ditampilkan ke LCD dan disimpan ke double hasil.
7. Semua data yang tersimpan di print struk untuk tanda bukti pengambilan barang dengan menekan tombol F3.
8. Semua data dipanggil dan disimpan dengan menekan tombol F4.
3.4.1. Contoh program
Dari diagram alir diatas dapat dilihat cara kerja sistem dari alat. Berikut program yang digunakan :
if (enter == 1) { if (delayclrscr0 == 1) { clrscr0(); } lcd.setCursor(0, 0);
lcd.print(rtc.getDateStr())//prosedur pemanggilan tanggal lcd.setCursor(12, 0);
lcd.print(rtc.getTimeStr());//prosedur pemanggilan waktu lcd.setCursor(0, 1);
19 lcd.print("PERUSAHAAN:"); if (keluar == 1) { enter = 9; keluar = 0; } delayclrscr1 = 1; if(statusenter == 1) { enter++; statusenter = 0; } }
Subrutin program penampil nama perusahaan. Nama perusahaan diinput menggunakan keyboard. Tanggal ditempatkan di (0,0) dan waktu diletakan di (12,0). Setelah inputan nama perusahaan tekan enter dan masuk ke menu enter selanjutnya. Saat keluar= ESC pada keyboard ditekan maka akan kembali ke menu utama.
if (enter == 2) { if (delayclrscr1 == 1) { clrscr1(); } lcd.setCursor(0, 0);
lcd.print(rtc.getDateStr()); //prosedur pemanggilan tanggal lcd.setCursor(12, 0);
lcd.print(rtc.getTimeStr()); //prosedur pemanggilan waktu lcd.setCursor(0, 1);
lcd.print("PLAT NMR:"); if (keluar == 1)
20 { enter = 9; keluar = 0; } delayclrscr2 = 1; if(statusenter == 1) { enter++; statusenter = 0; } }
Subrutin program penampil plat nomor kendaraan. Tanggal ditempatkan di (0,0) dan waktu diletakan di (12,0). Setelah inputan plat nomor tekan enter dan masuk ke menu enter selanjutnya. Saat keluar= ESC pada keyboard ditekan maka akan kembali ke menu utama. if (enter == 3) { if (delayclrscr2 == 1) { clrscr2(); } lcd.setCursor(0, 0);
lcd.print(rtc.getDateStr()); //prosedur pemanggilan tanggal lcd.setCursor(12, 0);
lcd.print(rtc.getTimeStr()); //prosedur pemanggilan waktu lcd.setCursor(0, 1);
lcd.print("JENIS:"); if (keluar == 1) {
21 keluar = 0; } delayclrscr3 = 1; if(statusenter == 1) { enter++; statusenter = 0; } }
Subrutin program penampil jenis barang yang dibeli. Tanggal ditempatkan di (0,0) dan waktu diletakan di (12,0). Setelah inputan jenis barang dimasukan tekan enter dan masuk ke menu enter selanjutnya. Saat keluar= ESC pada keyboard ditekan maka akan kembali ke menu utama.
if (enter == 4) { if (delayclrscr3 == 1) { clrscr3(); } lcd.setCursor(0, 0);
lcd.print(rtc.getDateStr()); //prosedur pemanggilan tanggal lcd.setCursor(12, 0);
lcd.print(rtc.getTimeStr()); //prosedur pemanggilan waktu lcd.setCursor(0, 1);
lcd.print("Berat1: "); for (int i = 0; i < 10; i++) {
if (Serial1.available()) {
22 Serial.println(a); if (a == '=') {
while (Serial1.available() < 8); for (int i = 7; i >= 0; i--) { sevenSegment1[i] = char(Serial1.read()); } w1 = atof(sevenSegment1); } } delay(50); }
for (int i = 0; i < 8; i++) { lcd.print(sevenSegment1[i]); } lcd.print(" Kg"); if (keluar == 1) { enter = 9; keluar = 0; } delayclrscr4 = 1; if(statusenter == 1) { enter++; statusenter = 0; } }
23
Subrutin program penampil berat1 yang tertampil di great scale. Tanggal ditempatkan di (0,0) dan waktu diletakan di (12,0). Setelah inputan berat 1 dimasukan tekan enter maka akan tersimpan di float w1 dan masuk ke menu enter selanjutnya. Saat keluar= ESC pada keyboard ditekan maka akan kembali ke menu utama.
if (enter == 5) { if (delayclrscr4 == 1) { clrscr4(); } lcd.setCursor(0, 0);
lcd.print(rtc.getDateStr());//prosedur pemanggilan tanggal lcd.setCursor(12, 0);
lcd.print(rtc.getTimeStr());//prosedur pemanggilan waktu lcd.setCursor(0, 1);
lcd.print("Berat2: "); for (int i = 0; i < 10; i++) { if (Serial1.available()) { char a = char(Serial1.read()); Serial.println(a); if (a == '=') { while (Serial1.available() < 8); for (int i = 7; i >= 0; i--) {
sevenSegment1[i] = char(Serial1.read()); }
w2 = atof(sevenSegment1); }
24 }
delay(50); }
for (int i = 0; i < 8; i++) { lcd.print(sevenSegment1[i]); } lcd.print(" Kg"); if (keluar == 1) { enter = 9; keluar = 0; } delayclrscr5 = 1; if(statusenter == 1) { enter++; statusenter = 0; } }
Subrutin program penampil berat 2 yang tertampil di great scale. Tanggal ditempatkan di (0,0) dan waktu diletakan di (12,0). Setelah inputan berat 2 dimasukan tekan enter maka akan tersimpan di float w2 dan masuk ke menu enter selanjutnya. Saat keluar= ESC pada keyboard ditekan maka akan kembali ke menu utama.
if (enter == 6) { if (delayclrscr5 == 1) { clrscr5(); }
25 lcd.setCursor(0, 0);
lcd.print(rtc.getDateStr()) //prosedur pemanggilan tanggal lcd.setCursor(12, 0);
lcd.print(rtc.getTimeStr());//prosedur pemanggilan waktu
hasil = w2 - w1; shasil = hasil; lcd.setCursor(0, 1); lcd.print("Hasil :"); hasilakhir = String(hasil); hasilakhir.toCharArray(sevenHasil, 8); for (int i = 0; i < 8; i++)
{ if (sevenHasil[i] == NULL) { sevenHasil[i] = '0'; } lcd.print(sevenHasil[i]); } lcd.print(" Kg"); if (keluar == 1) { enter = 9; keluar = 0; } delayclrscr6 = 1; if(statusenter == 1) { enter++; statusenter = 0;
26 }
}
Subrutin program penampil hasil selisih dari berat 2 dan berat 1. Tanggal ditempatkan di (0,0) dan waktu diletakan di (12,0). Setelah inputan berat 2 dan 1 dimasukan maka keduanya diselisihkan da tertapil di lcd dan akan tersimpan di double hasil dan masuk ke menu enter selanjutnya.. Saat keluar= ESC pada keyboard ditekan maka akan kembali ke menu utama.
if (enter == 7) {
lcd.setCursor(0, 0);
lcd.print(rtc.getDateStr()); //prosedur pemanggilan tanggal lcd.setCursor(12, 0);
lcd.print(rtc.getTimeStr()); //prosedur pemanggilan waktu String tgl=rtc.getDateStr(); String jam=rtc.getTimeStr(); if (delayclrscr6 == 1) { clrscr6(); } lcd.setCursor(0, 1); lcd.print("print struk(F3)"); if (ya == 1) { printer.wake(); printer.setDefault(); printer.boldOn(); printer.justify('C'); printer.setSize('M'); printer.println(F("CV STANDARD"));
27 printer.justify('C'); printer.setSize('S');
printer.println(F("Jl. Kijang 2 / 18,Semarang 50161")); printer.justify('C'); printer.setSize('S'); printer.println(F("Jawa Tengah,Indonesia")); printer.justify('C'); printer.setSize('S'); printer.println(F("Telp. +62246716628")); printer.justify('C'); printer.setSize('S'); printer.println(F("E-mail: info@greatscale.co.id")); printer.justify('L'); printer.setSize('S'); printer.println(F("---")); printer.print(tgl); printer.print(" "); printer.println(jam); printer.justify('L'); printer.setSize('S'); printer.println(F("Perusahaan :")); printer.justify('L'); printer.setSize('S'); printer.println(StringCompany); printer.justify('L'); printer.setSize('S'); printer.print(F("Plat nomor :")); printer.print(" "); printer.println(StringPlat);
28 printer.justify('L'); printer.setSize('S'); printer.print(F("Jenis Barang :")); printer.print(" "); printer.println(StringJenis); printer.justify('L'); printer.setSize('S'); printer.print(F("Berat 1 :")); printer.print(" "); printer.print(w1*1000); printer.println(F(" Kg")); printer.justify('L'); printer.setSize('S'); printer.print(F("Berat 2 :")); printer.print(" "); printer.print(w2*1000); printer.println(F(" Kg")); printer.justify('L'); printer.setSize('S'); printer.print(F("Berat Akhir :")); printer.print(" "); printer.print(hasil*1000); printer.println(F(" Kg")); printer.justify('C'); printer.setSize('S'); printer.println(F("Terima Kasih")); printer.println(F("Datang Kembali")); printer.justify('L');
29 printer.setSize('S'); printer.println(F("---")); printer.feed(2); printer.sleep();
delay(3000L); // Sleep for 3 seconds printer.wake(); printer.setDefault(); ya = 0; enter++; statusenter=0; } if (keluar == 1) { enter = 9; keluar = 0; } delayclrscr7 = 1; if(statusenter == 1) { enter++; statusenter = 0; } }
Subrutin program pencetak struk printer thermal. Tanggal
ditempatkan di (0,0) dan waktu diletakan di (12,0). Semua data yang tersimpan di atas di cetak dengan printer thermal dengan menekan tombol F3. Setelah proses cetak selesai masuk ke menu enter selanjutnya. Saat keluar= ESC pada keyboard ditekan maka akan kembali ke menu utama.
30 if (enter == 8) {
lcd.setCursor(0, 0);
lcd.print(rtc.getDateStr()); //prosedur pemanggilan tanggal lcd.setCursor(12, 0);
lcd.print(rtc.getTimeStr()); //prosedur pemanggilan waktu if (delayclrscr7 == 1) { clrscr7(); } lcd.setCursor(0, 1); lcd.print("Simpan(F4)"); if (ya2 == 1) { Jenis, Hasil"; Tulis += "\n"; Tulis += rtc.getDateStr(); Tulis += "^"; Tulis += rtc.getTimeStr(); Tulis += "^"; Tulis += String(StringCompany); Tulis += "^"; Tulis += String(StringPlat); Tulis += "^"; Tulis += String(StringJenis); Tulis += "^"; Tulis += String(w1*1000); Tulis += "^"; Tulis += String(w2*1000); Tulis += "^"; Tulis += String(hasil*1000); enter++;
31 appendFile("TEST4.TXT", Tulis); } if (keluar == 1) { enter = 9; keluar = 0; } delayclrscr8 = 1; if(statusenter == 1) { enter++; statusenter = 0; } }
Subrutin program penyimpanan data. Tanggal ditempatkan di (0,0) dan waktu diletakan di (12,0). Semua data yang tersimpan di atas di tulis ke dalam flashdisk dengan menekan tombol F4. Setelah proses cetak selesai masuk ke menu selanjutnya yaitu menu utama. Saat keluar= ESC pada keyboard ditekan maka akan kembali ke menu utama.