bab iii perancangan - uksw · 2021. 2. 9. · mencetak struk data menggunakan printer . thermal....
TRANSCRIPT
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.
Gambar 3.1. Blok Diagram Keseluruhan Alat
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
d) Keyboard penginput data
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 :
Gambar 3.7. Wiring Weighing Indicator XK3190-A12
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. Wiring RTC 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
Interface RS232C/TTL/parallel/USB
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
Gambar 3.10. Diagram Alir Perangkat Lunak
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)
{
enter = 9;
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())
{
char a = char(Serial1.read());
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: [email protected]"));
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.