Page 1
27
Universitas Kristen Petra
3. PERANCANGAN DAN PEMBUATAN ALAT
Dalam Perancangan Sistem Perhitungan Biaya Listrik Rumah Berbasis
Arduino terdiri dari beberapa perancangan, yang pertama adalah perancangan
perangkat keras atau hardware dan yang kedua adalah perancangan perangkat
lunak. Hal pertama yang akan dibahas adalah mengenai perancangan perangkat
keras yang meliputi: perancangan sistem secara kesuluruhan, perancangan sensor
arus, perancangan modul trafo step down, perancangan display LCD, perancangan
keypad membran, perancangan power supply, perancangan box tempat alat dan
perancangan program.
3.1 Perancangan Diagram Blok Sistem
Sebelum merancang sebuah sistem harus dibuat sebuah diagram blok
untuk menjelaskan alur dari sistem yang akan dibuat secara keseluruhan, berikut
adalah gambar diagram blok Sistem Perhitungan Biaya Listrik Rumah Berbasis
Arduino, yang ditujukkan oleh gambar 3.1.
Gambar 3.1 Diagram Blok Sistem Secara Keseluruhan
Page 2
28
Universitas Kristen Petra
Berikut adalah penjelasan dari diagram blok sistem keseluran Perhitungan
Biaya Listrik Rumah Berbasis Arduino. Pada dasarnya perhitungan biaya listrik
pada rumah adalah berdasarkan perkalian antara tegangan, arus ,dan faktor daya /
cos phi dibagi 1000 dikalikan dengan lama waktu penggunaan beban dengan
satuan jam. Untuk mendapatkan parameter arus listrik pada sistem ini
menggunakan sensor arus ACS 712, untuk mendapatkan parameter tegangan
menggunakan modul trafo step down, sedangkan untuk parameter faktor daya atau
cos phi dan juga biaya tarif listrik per-KWH dimasukan secara manual
menggunakan keypad. Nilai cos phi ini dimasukkan dan dapat diganti secara
manual ke dalam memori EEPROM arduino. Sedangkan untuk biaya listrik pada
alat yang dibuat dapat dirubah untuk mengantisipasi jika adanya perubahan tarif
dasar listrik. Lalu data perhitungan biaya listrik tersebut akan ditampilkan secara
realtime pada layar display LCD 20 x 4. Untuk sumber tegangan supply seluruh
komponen yang ada menggunakan switching power supply yang banyak dijual
dipasaran. Untuk melihat lebih jelas mengenai diagram blok diatas, berikut adalah
diagram blok beserta pengkabelannya.
Arduino
uno
D2
D3
D4
D5
D6
D7
D8
D9
A5
A4
A3
A2
A1
A0
Lcd i2c
sda
scl
in
in
gnd
out
vcc
gnd
PLN 220V
ACN
øSensor
Tegangan
out
gnd
vcc
Sensor
Arusin
in
Beban
N
ø
in
in
gnd
12vPower
Supply
Out +
Out -
In +
In -Dc-dc
converter
gnd
vcc
8
7
6
5
4
3
2
1
Ke
yp
ad
4 x
4
Gambar 3.2 Diagram Blok Beserta Pengkabelannya
Page 3
29
Universitas Kristen Petra
3.2 Perancangan Sensor Arus ACS 712
Perancangan modul sensor ACS 712 dirancang dengan menghubungkan
modul sensor arus dengan port yang dibutuhkan pada arduino. Berikut adalah
perancangan hubungan antara modul sensor arus dengan port pada arduino uno
yang ditunjukkan oleh gambar 3.3
Gambar 3.3 Diagram Hubungan Sensor Arus ACS 712 Dengan Arduino
Dari hasil perancangan hubungan sensor arus dengan arduino dapat dilihat
bahwa pin input dari sensor dihubungkan secara seri dengan phase pada listrik
220 V. Lalu pin output sensor dihubungkan dengan port analog 0 (A0) Arduino,
Vcc sensor dihubungkan denngan Vcc 5 Vdc dan Gnd pada sensor dihubungkan
dengan Gnd. Berikut adalah gambar schematic dari sensor arus ACS 712 yang
ditunjukkan oleh gambar 3.4.
Gambar 3.4 Schematic Sensor Arus ACS 712
Page 4
30
Universitas Kristen Petra
3.3 Perancangan Modul Trafo Step Down
Perancangan modul trafo step down ini dibuat sendiri dengan
menggunakan transformator. Dimana tegangan input yang berasal dari listrik 220
Vac diturunkan menjadi 4,5 Vac. Lalu dari tegangan AC tersebut disearahkan
dengan menggunakan dioda bridge hingga menjadi arus DC dengan gelombang
full wave. Lalu dari gelombang full wave tersebut distabilkan dengan
menggunakan kapasitor sehingga output yang dikeluarkan dapat terbaca oleh pin
ADC dari arduino. Berikut adalah gambar rangkaian dari modul trafo step down
yang ditunjukkan oleh gambar 3.5.
Gambar 3.5 Diagram Hubungan Modul Trafo Step Down Dengan Arduino
Dari gambar rancangan diatas dapat terlihat bahwa output dari modul trafo
step down tersebut langsung dihubungkan dengan pin analog dari arduino. Dan
berikut adalah gambar schematic dari modul trafo step down yang ditunjukkan
oleh gambar 3.6.
Gambar 3.6 Schematic Modul Trafo Step Down
3.4 Perancangan Display LCD 20 x 4
LCD yang digunakan untuk sistem ini adalah liquid LCD dengan ukuran
20 x 4 yang menggunakan jenis komunikasi i2c. Pada LCD ini terdapat dua output
Page 5
31
Universitas Kristen Petra
yaitu pin sda dan pin scl yang merupakan pin output dari jenis komunikasi i2c.
Pada sistem ini, LCD digunakan sebagai display dari biaya listrik, besar arus yang
sedang mengalir pada beban dan nilai binernya, tegangan pada sumber dan nilai
binernya, serta biaya tagihan listrik yang harus dibayar. Berikut adalah gambar
rancangan dari display LCD 20 x 4 dengan arduino yang ditunjukkan oleh gambar
3.7 dan juga penjelasan pin-pin dari display LCD yang ditunjukkan oleh gambar
3.8.
A4
Vcc
Gnd
Arduino Uno
12Vdc Gnd
A5
Sda
Scl
Vcc
Gnd
Gnd5Vdc
Lcd 20 x 4
Gambar 3.7 Diagram Hubungan Display Lcd Dengan Arduino
Gambar 3.8 Penjelasan Pin-Pin Lcd
Page 6
32
Universitas Kristen Petra
3.5 Perancangan Keypad 4 x 4
Pada sistem ini keypad digunakan untuk memasukkan atau menginputkan
data biaya listrik yang mungkin berubah dalam waktu tertentu, dan juga untuk
menginputkan data faktor daya atau cos phi. Pada keypad membaran 4 x 4
memiliki 8 output yang semuanya dimasukkan ke dalam pin digital arduino, ke
delapan pin output tersebut dihubungkan dengan pin D2, D3, D4, D5, D6, D7, D8,
D9 arduino. Berikut adalah gambar rancangan dari keypad yang ditunjukkan oleh
gambar 3.8 dan juga schematic dari keypad yang ditunjukkan oleh gambar 3.9
D6
Vcc
Gnd
Arduino Uno
12Vdc Gnd
D7
D5
D3
D4
D2
D8
D9
5
6
4
2
3
1
7
8
Keypad
4 x 4
Gambar 3.9 Diagram Hubungan Keypad 4x4 Dengan Arduino
Gambar 3.10 Schematic Keypad 4x4
3.6 Perancangan Power Supply
Dalam pembuatan alat ini, sumber tegangan atau power supply yang
digunakan adalah jenis switching power supply. Menggunakan switching power
Page 7
33
Universitas Kristen Petra
supply karena hasil output tidak memiliki frekuensi atau merupakan DC murni,
sehingga aman untuk supply tegangan pada Arduino, dan switching power supply
ini mudah didapatkan di pasaran dengan harga yang relatif murah. Berikut adalah
gambar rangkaian switching power supply 12 V, yaitu pada gambar 3.11.
Gambar 3.11 Schematic Switching Power Supply
Switching power supply diatas digunakan untuk mensuplai daya untuk
arduino, sedangkan untuk suplai daya LCD dan sensor arus menggunakan dc-to-
dc converter yang disetting pada output 5 volt dan memiliki output stabil jika
dibandingkan dengan rangkaian sederhana regulator 7805, dimana pada regulator
7805, output tegangan seringkali berubah akibat perubahan suhu yang meningkat.
Perubahan tegangan untuk sensor arus sangatlah berpengaruh, untuk itu
digunakanlah modul dc to dc converter. Berikut adalah gambar dari dc to dc
converter.
Gambar 3.12 Dc to Dc Converter
Page 8
34
Universitas Kristen Petra
3.7 Perancangan Arduino Uno
Modul mikrokontroler Arduino Uno R2 yang digunakan dirancang
menggunakan IC mikrokontroler ATmega328. Berikut adalah penggunaan port
I/O pada Sistem Perhitungan Biaya Listrik Rumah Berbasis Arduino :
a. Port A0 : Sensor Arus ACS 712
b. Port A1 : Modul Trafo Step Down
c. Port A4 dan A5 : Display LCD
d. Port D 2 sampai D9 : Keypad Membran 4 x 4
Adapun fitur utama dari mikrokontroler Arduino Uno R2 adalah sebagai berikut:
a. 6 Pin input Analog Digital Converter (ADC), berada pada port A0, A1, A2,
A3, A4 dan A5.
b. 6 channel Pulse Width Modulation (PWM), berada pada port 3, 5, 6, 9, 10
dan 11.
c. 14 channel I/O digital, berada pada port 1 sampai 13.
d. Menggunakan tegangan 5V untuk beroperasi.
e. Mempunyai 1 pin supply 5V dan 1 pin supply 3.2V.
Berikut adalah gambar schematic dari arduino uno yang ditunjukkan oleh gambar
3.13.
Gambar 3.13 Schematic Arduino Uno
Page 9
35
Universitas Kristen Petra
3.8 Perancangan Box Alat
Untuk tempat dari alat-alat atau komponen-komponen yang digunakan
pada Sistem Perhitungan Biaya Listrik Rumah Berbasis Arduino ini menggunakan
bahan dasar akrilik dengan ketebalan 3 mm. Dengan tinggi 11 cm, panjang 30 cm,
dan lebarnya 15 cm. Pada box ini memiliki 4 lubang berbentuk kotak yanng
nantinya akan digunakan untuk tempat stop kontak sebagai penghubung input dan
output dari alat ini. Berikut adalah gambar rancangan box tempat alat yang akan
digunakan yang ditunjukkan oleh gambar 3.14 dan gambar 3.15.
Gambar 3.14 Rancangan Box Tempat Alat Gambar 1
Gambar 3.15 Rancangan Box Tempat Alat Gambar 2
3.9 Perancangan Perangkat Lunak
Setelah merancang semua komponen hardware yang dibutuhkan,
selanjutnya adalah merancang flowchart atau algoritma dari program yang akan
dibuat untuk Sistem Perhitungan Biaya Listrik Rumah Berbasis Arduino agar
mudah dalam pembuatan program. Berikut adalah flowchart dari Sistem
Page 10
36
Universitas Kristen Petra
Perhitungan Biaya Listrik Rumah Berbasis Arduino yang ditunjukkan oleh
gambar 3.16.
Gambar 3.16 Flowchart Algoritma Program
Page 11
37
Universitas Kristen Petra
Dari flowchart di atas menunjukkan alur program akan dibuat. Pertama-
tama adalah membaca nilai ADC dari sensor arus lalu mengkonversinya menjadi
nilai ampere, kedua adalah membaca nilai ADC dari modul trafo step down lalu
mengkonversinya menjadi nilai tegangan. Ketiga adalah membaca input dari
keypad dimana input dari keypad digunakan untuk memasukkan data tarif dasar
listrik dan juga cos phi. Data yang diinputkan tersebut akan disimpan pada
EEPROM arduino yang nantinya akan diproses bersamaan dengan nilai tegangan
dan nilai arus yang didapat dari sensor arus dan modul trafo step down. Terakhir
adalah menampilkan hasil proses tersebut pada display LCD. Berikut adalah
program beserta penjelasannya:
3.9.1. Program Pengambilan Data Arus Dengan Rumus RMS
Untuk pengukuran arus bolak – balik yang berasal dari jala – jala
listrik pada rumah tangga, tidak bisa dilakukan langsung dikarenakan
memiliki magnitudo yang berubah rubah tiap waktu tergantung dari
frekuensi jala – jala listrik. Maka perlu diketahui besar voltage puncak dan
voltage root-mean-square.
Gambar 3.17 Voltage RMS
(Sumber: http//yc8ruc.juplo.com/wp-
content/uploads/2014/09/cercuit-dasar.pdf)
Di Indonesia, frekuensi yang biasa pada jala – jala listrik AC
berkisar antara 50 – 60 Hz. Perubahan arus listrik AC berubah positif dan
negatif dengan frekuensi 50 – 60 Hz. Sehingga untuk pengukuran,
digunakan rumus root mean square ( RMS ), di mana penghitungan root
mean square ini , di hitung melalui sekumpulan nilai diskrit. Root mean
square sendiri adalah rata – rata penjumlahan kuadrat.
Page 12
38
Universitas Kristen Petra
Perhitungan dimulai dengan mengambil beberapa data adc dalam rentang
waktu beberapa ratus mili second , dengan frekuensi pengambilan harus
lebih dari frekuensi jala – jala listrik dan tidak lebih cepat dari
kemampuan adc membaca tegangan dari sensor arus.
Gambar 3.18 Pengunaan rumus rms
Xi2
= data arus yang diambil
Xrms = adalah nilai rms
1/n = adalah pembagian rata arus
Sejumlah data arus yang telah diambil akan di lakukan rata – rata, dan
diakar untuk mendapatkan nilai rms nya .
Kode Untuk membaca arus listrik dengan mengunakan rms
float readCurrent(int PIN)
{
unsigned long currentAcc = 0;
unsigned int count = 0;
unsigned long prevMicros = micros()-sampleInterval ;
while (count < numSamples)
{
if (micros() - prevMicros >= sampleInterval)
{
long adc_raw = analogRead(currentPin) - adc_zero;
currentAcc += (unsigned long)(adc_raw * adc_raw);
++count;
prevMicros += sampleInterval;
}
}
'
float rms =
sqrt((float)currentAcc/(float)numSamples) * (50 /
1024.0);
return rms;
}
Kode di bawah untuk melakukan pengambilan data sampling selama
beberapa ratus mili second
Page 13
39
Universitas Kristen Petra
while (count < numSamples)
{
if (micros() - prevMicros >= sampleInterval)
{
long adc_raw = analogRead(currentPin) -
adc_zero;
currentAcc += (unsigned long)(adc_raw *
adc_raw);
++count;
prevMicros += sampleInterval;
}
}
Kode ini digunakan untuk membaca nilai adc arus listrik . dan melakukan
pangkat kuadrat .
long adc_raw = analogRead(currentPin) - adc_zero;
currentAcc += (unsigned long)(adc_raw * adc_raw);
jika pada kode berikut:
Kode adc_zero adalah kode biner saat sensor arus tidak di aliri arus listrik .
Untuk melakukan perhitungan rata – rata serta melakukan akar pada arus
listrik yang telah di rata – rata . mengunakan kode di bawah ini.
sqrt((float)currentAcc/(float)numSamples)
kode di bawah di gunakan untuk mengubah nilai biner ke dalam arus
listrik.
* (50 / 1024.0);
Catatan :
Nilai adc_zero di dapat dari pengukuran awal saat alat pertama
kali di nyalakan, kode program pada setup.
Page 14
40
Universitas Kristen Petra
adc_zero = determineVQ(currentPin);
int determineVQ(int PIN) {
long VQ = 0;
for (int i=0; i<5000; i++) {
VQ += analogRead(PIN);
delay(1);
}
VQ /= 5000;
return int(VQ);
}
Fungsi determineVQ akan melakukan pembacaan data adc sebanyak 5000
kali dan melakukan rata – rata . cara ini dilakukan untuk mendapatkan
nilai biner yang stabil.
3.9.2. Program Pembacaan Tegangan
Untuk membaca tegangan, tidak seperti pada pembacaan arus,
dikarenakan pada modul trafo step down memiliki rangkaian yang sudah
melakukan perataan terhadap tegangan AC, sehingga diperlukan
pembacaan berikut:
double v = (analogRead( 2 ) / 1024.0) * 5000 ;
volt = ( v * (220/4.15))/1000;
kode dibawah untuk mengkonversi dari nilai biner yang didapat
dari ADC menjadi nilai tegangan yang diproses oleh arduino. Karena saat
masuk ADC arduino, nilai tegangan tersebut akan dirubah secara otomatis
oleh arduino menjadi nilai biner 10 bit atau menjadi antara range 0 sampai
1024, setelah itu baru diubah menjadi nilai tegangan.
double v = (analogRead( 2 ) / 1024.0) * 5000 ;
dimana:
(analogRead(2) adalah pin adc 2 yang dihubungkan dengan
modul trafo step down. Pada variabel inilah nilainya akan berubah
tergantung perubahan output sensor.
/ 1024.0 adalah nilai maksimal dari biner 10 bit.
* 5000 adalah tegangan reverensi pada arduino atau semua
mikrokontroller.
Page 15
41
Universitas Kristen Petra
kode di bawah untuk melakukan konversi tegangan adc ke dalam tegangan
jala – jala listrik 220V untuk menampilkan nilai listrik AC 1 fasa.
volt = ( v * (220/4.15))/1000;
detail:
v adalah variable yang berisi nilai tegangan sensor (double v).
maksud dari kode(220/4.15) adalah output dari tegangan ADC
sebesar 4.15VDC ketika tegangan input-nya 220VAC, tegangan
jala – jala ac tiap 1 volt sensor adc adalah 53 Volt .
Hasil dari pembacaan sensor dapat dilihat pada tabel 3.1 :
Tabel 3.1. Pembacaan tegangan AC
Tegangan
ADC
Tegangan AC /
Volt ADC
Tegangan
AC
Keterangan
4.3 53 V 227 Kenaikan
4.15 53 V 219 Normal
4.0 53 V 212 Penurunan
3.9.3. Menyimpan Dan Membaca Data Cos Phi
Untuk nilai cos phi, program akan menyimpan data nilai cos phi
antara 0 sampai dengan 1 di dalam eeprom arduino .
Eeprom adalah memori arduino yang bisa di tulis dan di baca .
eeprom bisa dibaca dan ditulis dengan nilai integer antara 0 sampai 255 .
Untuk melakukan penyimpanan data cos phi yang nilainya berkisar
antara 0 sampai dengan 1 . yang artinya nilai cos phi bisa terdapat angka di
belakang koma:
Nilai cos phi : 0.4
Nilai cos phi: 0.2
Page 16
42
Universitas Kristen Petra
Nilai cos phi: 0.9
Untuk nilai yang seperti ini tidak bisa di simpan di dalam eeprom. jika kita
tetap memaksa menyimpan dalam eeprom maka program akan langsung
membulatkan nilai cos phi nya :
Nilai cos phi: 0.4 akan menjadi 0 di eeprom
Nilai cos phi: 0.2 akan menjadi 0 di eeprom
Nilai Cospi : 0.9 akan menjadi 1 di eeprom
Nilai yang kita simpan akan berubah dengan sendirinya dan akan
menyebabkan error .
Untuk menghilangkan error karena nilai di bawah 1. nilai cos phi di
kalikan dengan 10.
Nilai cos phi: 0.4 * 10 = 4
Nilai cos phi: 0.2 * 10 = 2
Nilai cos phi: 0.9 * 10 = 9
Sehingga nilai cos phi tidak mengalami perubahan.
void saveCosPi( double data ){
if( data <= 1 ){
int buff = ( data * 10 ) ;
EEPROM.write( alamatEepromCosPi , buff );
}else{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("error pada parameter ");
lcd.setCursor(0,1);
lcd.print(" Cospi 0 - 1 ");
delay(3000);
}
}
Kode int buff = ( data * 10 ) ; ini berfungsi untuk
mengalikan data yang di isi dengan nilai cospi dengan angka 10.
Page 17
43
Universitas Kristen Petra
Kode EEPROM.write( alamatEepromCosPi , buff ); ini
berfungsi untuk menyimpan nilai buff yang berasal dari perkalian
data / cos phi dengan nilai 10.
Karena nilai cos phi yang berada pada eeprom telah dikalikan oleh angka
10. maka saat membaca harus dibagi dengan 10.
Misalnya di eeprom ada angka 9 .maka nilai 9 tersebut di bagi dengan 10.
9 / 10 = 0.9
Program
void readCosPi(){
varCosPi = double(EEPROM.read( alamatEepromCosPi
)) / 10.00 ;
}
EEPROM.read( alamatEepromCosPi ) Kode ini untuk membaca
nilai eeprom
/ 10.00 ; kode ini di bagian belakang berguna untuk membagi nilai
yang telah di ambil didalam eeprom
3.9.4. Membaca Biaya Per KWH
Untuk melakukan pembacaan biaya, maka daya yang sudah ditotal
pada kwh dikalikan dengan biaya listrik yang sudah disetting. Misal daya 1
kilowath di kali dengan biaya 1350, maka biayanya adalah 1 kwh * 1350 =
1350 rupiah. Dengan catatan hitungan tersebut dalam hitungan 1 jam, jika
mengitung selama 1 detik. berarti harus dibagi dengan 3600.
Contoh :
I : 1 ampere
V : 220 V
Cos phi : 0.8
Total :
Page 18
44
Universitas Kristen Petra
Daya = I * V * Cos phi
= 1 * 220 * 0.8
= 176 Kwh
Untuk menghitung dalam jangka 1 detik . dibagi dengan 3600
Daya = 176 / 3600
= 0.048
Untuk biaya total adalah
Biaya Total = Daya * biaya
= 0.048 * 1350
= 64,8 rupiah
Kode Programnya:
unsigned long tmPengambilanBiaya = millis();
unsigned long maxTmPengambilanBiaya = 1000 ;
void PengambilanBiaya(){
if( (millis()-tmPengambilanBiaya) >
maxTmPengambilanBiaya ){
tmPengambilanBiaya = millis();
double kwh = ( arus * volt * varCosPi )/1000 ;
Totalbiaya = Totalbiaya + ( (kwh/3600.00) * biaya
);
}
}
Kode ini digunakan untuk memberikan penundaan waktu
pengambilan biaya total, sehinggga pengambilan daya dilakukan
setiap 1 detik sekali.
if( (millis()-tmPengambilanBiaya) >
maxTmPengambilanBiaya ){
tmPengambilanBiaya = millis();
kode dibawah ini dilakukan untuk mengambil daya selama 1 jam
double kwh = ( arus * volt * varCosPi )/1000 ;
Page 19
45
Universitas Kristen Petra
setelah perhitungan maka dilakukan perkalian daya dengan biaya
per Kwh .
Totalbiaya = Totalbiaya + ( (kwh/3600.00) * biaya );
3.9.5 Menyimpan dan Membaca Biaya ke Dalam Eeprom
Biaya pengunaan listrik tiap KWh ini bisa diubah oleh pengguna,
karena nilai yang bisa diubah oleh pengguna setiap saat sesuai kebutuhan,
nilai ini tidak bisa dimasukkan ke dalam memori program.
Karena itu penempatan nilai biaya di tempatkan pada memori
eeprom yang memiliki karakteristik :
1. Data tidak hilang walau arduino dimatikan.
2. Bisa di tulis ulang melalui program arduino itu sendiri.
3. Nilai yang bisa di simpan pada satu alamat antara 0 sampai
dengan 255.
Biaya yang bisa disimpan antara 0 sampai dengan 2000 rupiah yang
bisa dirubah-rubah sesuai keinginan dan data tersebut disimpan ke dalam
memori eeprom.
Alamat eeprom dimulai dari index atau nomor urut 5 karena alamat
eeprom 0 – 4 sudah di pakai cos phi.
Karena memori eeprom hanya bisa menampung nilai antara 0 sampai
255 , maka kita harus menggunakan sekitar 8 element memori eeprom atau
memecah nilai biaya yang disimpan mejadi beberapa bagian , setiap bagian
nilai maksimum-nya 255.
Tabel 3.2 Memori Eeprom
Memori Eeprom
Alamat 5 6 7 8 9 10 11 12
Nilai 255 255 255 255 255 255 255 255
Page 20
46
Universitas Kristen Petra
Jika semua memori eeprom ini digunakan maka jumlahnya akan
tepat 2000 rupiah.
Cara penyimpanan biaya untuk memori eeprom ini dengan cara
membagi dalam beberapa memori, yakni dengan mengurangi nilai
biaya tersebut dengan nilai antara 0 sampai 255.
Contoh :
Biaya yang akan di simpan adalah 1300
Pertama 1300 - 255 = 1045 memori 5 simpan dengan nilai 255
Ke-dua 1045 - 255 = 790 memori 6 simpan dengan nilai 255
Ke-tiga 790 - 255 = 535 memori 7 simpan dengan nilai 255
Ke-empat 535 - 255 = 280 memori 8 simpan dengan nilai 255
Ke-lima 280 - 255 = 30 memori 9 simpan dengan nilai 255
Ke-enam karena kurang dari 255 , nilai langsung disimpan dalam
memori selanjutnya. memori 10 simpan dengan nilai 30.
Tabel 3.3. Penyimpanan Ke Dalam Memori Eeprom
Memori Eeprom
Alamat 5 6 7 8 9 10 11 12
Nilai 255 255 255 255 255 25 0 0
Jika di total semua akan menjadi 1300. Berikut programnya:
void saveBiaya( double dataIn ){
int data[] = { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 };
if( dataIn <= 255 ){
data[7] = dataIn ;
}else if( dataIn <= 500 ){ //jika biaya yang
dimasukkan kurang dari 500
data[6] = dataIn - 255 ;
data[7] = 255 ;
}else if( dataIn <= 750 ){ //jika biaya yang
dimasukkan kurang dari 750
data[5] = dataIn - 500 ;
data[6] = 255 ;
data[7] = 255 ;
}else if( dataIn <= 1000 ){ //jika biaya yang
dimasukkan kurang dari 1000
data[4] = dataIn - 750 ;
data[5] = 250 ;
Page 21
47
Universitas Kristen Petra
data[6] = 250 ;
data[7] = 250 ;
}else if( dataIn <= 1250 ){ //jika biaya yang
dimasukkan kurang dari 1250
data[3] = dataIn - 1000 ;
data[4] = 250 ;
data[5] = 250 ;
data[6] = 250 ;
data[7] = 250 ;
}else if( dataIn <= 1500 ){ //jika biaya yang
dimasukkan kurang dari 1500
data[2] = dataIn - 1250 ;
data[3] = 250 ;
data[4] = 250 ;
data[5] = 250 ;
data[6] = 250 ;
data[7] = 250 ;
}else if( dataIn <= 1750 ){ //jika biaya yang
dimasukkan kurang dari 1750
data[1] = dataIn - 1500 ;
data[2] = 250 ;
data[3] = 250 ;
data[4] = 250 ;
data[5] = 250 ;
data[6] = 250 ;
data[7] = 250 ;
}else if( dataIn <= 2000 ){ //jika biaya yang
dimasukkan kurang dari 2000
data[0] = dataIn - 1750 ;
data[1] = 250 ;
data[2] = 250 ;
data[3] = 250 ;
data[4] = 250 ;
data[5] = 250 ;
data[6] = 250 ;
data[7] = 250 ;
}else{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("error pada parameter ");
lcd.setCursor(0,1);
lcd.print(" 0 - 2000 ");
delay(3000);
}
for( int i = 0 ; i < 8 ; i++ ){
EEPROM.write( i+5 , data[i] );
}
}
Program diatas akan melakukan pengurangan terlebih dahulu. data
nilai hasil pengurangan tidak langsung di simpan pada eeprom.
tetapi pada variabel array sementara.
int data[] = { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 };
Page 22
48
Universitas Kristen Petra
program selanjutnya untuk mengurangi nilai biaya yang akan di
masukkan dalam eeprom, program untuk memasukkan data ke
dalam eeprom di buat bertingkat, sesuai level uang yang
dimasukkan.
if( dataIn <= 255 ){
data[7] = dataIn ;
}else if( dataIn <= 500 ){ //jika biaya yang
dimasukkan kurang dari 500
data[6] = dataIn - 255 ;
data[7] = 255 ;
}else if( dataIn <= 750 ){ //jika biaya yang
dimasukkan kurang dari 750
data[5] = dataIn - 500 ;
data[6] = 255 ;
data[7] = 255 ;
}else if( dataIn <= 1000 ){ //jika biaya yang
dimasukkan kurang dari 1000
data[4] = dataIn - 750 ;
data[5] = 250 ;
data[6] = 250 ;
data[7] = 250 ;
}else if( dataIn <= 1250 ){ //jika biaya yang
dimasukkan kurang dari 1250
data[3] = dataIn - 1000 ;
data[4] = 250 ;
data[5] = 250 ;
data[6] = 250 ;
data[7] = 250 ;
}else if( dataIn <= 1500 ){ //jika biaya yang
dimasukkan kurang dari 1500
data[2] = dataIn - 1250 ;
data[3] = 250 ;
data[4] = 250 ;
data[5] = 250 ;
data[6] = 250 ;
data[7] = 250 ;
}else if( dataIn <= 1750 ){ //jika biaya yang
dimasukkan kurang dari 1750
data[1] = dataIn - 1500 ;
data[2] = 250 ;
data[3] = 250 ;
data[4] = 250 ;
data[5] = 250 ;
data[6] = 250 ;
data[7] = 250 ;
}else if( dataIn <= 2000 ){ //jika biaya yang
dimasukkan kurang dari 2000
data[0] = dataIn - 1750 ;
data[1] = 250 ;
data[2] = 250 ;
data[3] = 250 ;
data[4] = 250 ;
data[5] = 250 ;
Page 23
49
Universitas Kristen Petra
data[6] = 250 ;
data[7] = 250 ;
}
Jika biaya yang dimasukkan melebihi dari 2000 rupiah maka akan
tampil pesan error
lcd.clear();
lcd.setCursor(0,0);
lcd.print("error pada parameter ");
lcd.setCursor(0,1);
lcd.print(" 0 - 2000 ");
delay(3000);
Untuk membaca biaya pada eeprom:
Tabel 3.4. Pembacaan Memori Eeprom
Memori Eeprom
alamat 5 6 7 8 9 10 11 12
Nilai 255 255 255 255 255 25 0 0
Jika di total semua menjadi 1300
Baca memori eeprom dari alamat 5 sampai dengan 12 . lalu
dijumlah.
void readBiaya(){
biaya = 0 ;
for( int i = 5 ; i < 13 ; i++ ){
biaya = biaya + double(EEPROM.read( i )) ;
}
}
3.9.6. Program Untuk Tampilan di LCD
Program untuk menampilkan tulisan di lcd ini memiliki konfigurasi.
lcd akan diupdate dengan nilai yang baru, selang beberapa ratus mili detik .
void showLcd(){
if( (millis() - tm) > maxtm){
tm = millis();
lcd.clear();
if( isEventKeypadActive() ){
showEventLcd();
}else{
showFile();
resetStringKeypad();
}
}
}
Page 24
50
Universitas Kristen Petra
Kode untuk memberikan delay atau penundaan waktu update lcd adalah:
if( (millis() - tm) > maxtm){
tm = millis();
kode untuk menghapus karakter lama di lcd:
lcd.clear();
kode dibawah untuk melakukan cek apakah ada karakter dari keypad yang di
tekan. jika ya:
tampilkan karakter pdada lcd .
if( isEventKeypadActive() ){
jika tidak ada karakter keypad yang di tekan maka tampilkan arus dan tegangan
pada lcd:
showFile();
resetStringKeypad();