Top Banner
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
24

3. perancangan dan pembuatan alat

Feb 07, 2023

Download

Documents

Khang Minh
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 3. perancangan dan pembuatan alat

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: 3. perancangan dan pembuatan alat

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: 3. perancangan dan pembuatan alat

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: 3. perancangan dan pembuatan alat

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: 3. perancangan dan pembuatan alat

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: 3. perancangan dan pembuatan alat

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: 3. perancangan dan pembuatan alat

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: 3. perancangan dan pembuatan alat

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: 3. perancangan dan pembuatan alat

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: 3. perancangan dan pembuatan alat

36

Universitas Kristen Petra

Perhitungan Biaya Listrik Rumah Berbasis Arduino yang ditunjukkan oleh

gambar 3.16.

Gambar 3.16 Flowchart Algoritma Program

Page 11: 3. perancangan dan pembuatan alat

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: 3. perancangan dan pembuatan alat

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: 3. perancangan dan pembuatan alat

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: 3. perancangan dan pembuatan alat

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: 3. perancangan dan pembuatan alat

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: 3. perancangan dan pembuatan alat

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: 3. perancangan dan pembuatan alat

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: 3. perancangan dan pembuatan alat

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: 3. perancangan dan pembuatan alat

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: 3. perancangan dan pembuatan alat

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: 3. perancangan dan pembuatan alat

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: 3. perancangan dan pembuatan alat

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: 3. perancangan dan pembuatan alat

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: 3. perancangan dan pembuatan alat

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();