You are on page 1of 36

IV.

HASIL DAN PEMBAHASAN

A. Perangkat Keras

Pengujian perangkat keras bertujuan untuk mengetahui apakah komponen

- komponen pada sistem yang telah dibuat dapat berfungsi dengan baik atau tidak.

Perangkat keras yang diuji di antaranya :

1. Rangkaian pengendali utama

2. Komunikasi serial RS232

3. Sensor Ultrasonik

4. Motor servo

5. Rangkaian relay

6. Power Supply

1. Pengujian Pengendali Utama

Pengujian terhadap pengendali utama bertujuan untuk mengetahui

apakah mikrokontroler ATMEGA 8535 bekerja dengan baik atau tidak.

Pengujian dilakukan dengan mengukur nilai tegangan pada kaki – kaki input

dan output pada mikrokontroller ATMEGA 8535. Berikut gambar rangkaian

pengendali utama yang berupa modul kit DT-AVR Low Cost Micro System.
57

Gambar 23. Rangkaian Pengendali Utama

Secara teori, apabila mikrokontroler diberikan logika high, maka akan didapat

nilai tegangan terukur 4,5 – 5,5 V pada kaki mikrokontroller. Dan apabila

diberikan logika low, maka akan didapat nilai tegangan terukur mendekati 0 V

pada kaki mikrokontroler. Pengujian dilakukan pada beberapa PORT

mikrokontroler untuk mengetahui besar nilai tegangan pada masing – masing

PORT pada logika high dan low.

Tabel 6. Hasil pengujian tegangan pada mikrokontroler ATMega8535

Nilai Tegangan (volt)


Port pada Mikrokontroler
Logika High Logika Low
PORT D.4 ( Motor Servo ) 5,0400 0,0013
PORT B.7 ( Sensor Ultrasonik ) 5,0500 0,0006
PORT C.4 ( Relay ) 5,0000 0,0015
PORT B.1 ( Indikator Lampu ) 4,6700 0,0012
PORT B.3 ( Indikator Lampu ) 4,6300 0,0012
PORT B.5 ( Indikator Lampu ) 2,3380 0,0013
58

Dari data hasil pengujian yang dilakukan, didapat nilai tegangan pada

masing – masing PORT mikrokontroler. Ternyata nilai tegangan yang didapat

tidak tepat sesuai dengan nilai tegangan pada datasheet mikrokontroler

Atmega8535. Nilai yang didapat mendekati nilai yang seharusnya pada

datasheet untuk masing – masing PORT pada kondisi high dan low. Namun

perbedaan ini masih dapat ditoleransi karena mikrokontroler masih dapat

melakukan fungsinya dengan baik.

2. Pengujian Rangkaian Komunikasi Serial

Pengujian rangkaian komunikasi serial dilakukan dengan mencoba

mengirimkan beberapa karakter dari komputer ke mikrokontroler melalui port

serial di mana setiap satu karakter mewakili satu nilai. Kemudian

mikrokontroler akan merespon hasil input dan mengirimkan konfirmasi ke

komputer melalui port serial. Data dikirim dengan menekan tombol huruf

pada keyboard.

Gambar 24. Komunikasi Serial antara Modul DT-AVR Low Cost


Micro dengan Komputer
59

Pada pengujian kali ini digunakan karakter huruf dari a sampai e di mana

setiap huruf tersebut mewakili nilai angka dari 0 sampai 4. Diberikan pula

delay sebesar 1000 ms sebelum data dari mikrokontroler ditampilkan di

hyperterminal agar ada jeda dari saat tombol keyboard ditekan hingga data

tampil. Sebelumnya mikrokontroler telah diprogram terlebih dahulu sesuai

pengujian yang akan dilakukan. Listing program pengujian komunikasi serial

dapat dilihat pada lampiran. Dari pengujian didapatkan data pada tabel

berikut.

Tabel 7. Hasil Pengujian Rangkaian Komunikasi Serial

Data dari mikrokontroler


Kirim ke mikrokontroler
yang terbaca di PC
a 0
b 1
c 2
d 3
e 4
Dapat dilihat bahwa data yang dikirim dari komputer sesuai dengan ketentuan

yang diharapkan di mana a = 0, b = 1, c = 2, d = 3, dan e = 4. Dengan

demikian, komunikasi serial antara mikrokontroler dengan komputer telah

berhasil dilakukan.
3. Pengujian Sensor Ultrasonik

Pada sensor ultrasonik, pin Vcc dihubungkan ke tegangan 5 Volt, pin

ground ke ground, dan pin SIG ke PORT B.7 pada mikrokontroler.

Mikrokontroler akan memberikan trigger berupa pulsa high selama 5us,

sehingga PORT B.7 bernilai high dan sensor memancarkan gelombang

ultrasonik sebesar 40 kHz selama 200 us. Setelah 5 us, maka PORT B.7 akan

bernilai low, dan sensor menunggu adanya gelombang pantul. Gelombang ini

akan merambat dan memantul jika mengenai objek pantul berupa air pada

tangki level. Selama menunggu pantulan, sensor akan menghasilkan sebuah

pulsa. Apabila gelombang pantul telah terdeteksi oleh sensor, maka pulsa ini

akan low dan counter akan mulai mencacah untuk mengukur lebar pulsa dari

awal pulsa dipancarkan (saat menunggu gelombang pantul) hingga gelombang

pantul diterima sensor. Lebar pulsa ini akan digunakan dalam perhitungan

jarak pada sensor.

Dari hasil pengambilan data level cairan dengan sensor ultrasonik,

maka diperoleh data sebagai berikut.

Tabel 8. Data Hasil Pengukuran Level Cairan dengan Sensor


Ultrasonik

Nilai Level Localhost (cm) LAN (cm)


No
(cm) Penggaris Sensor Penggaris Sensor
1 0 0,40 0 0,30 0
2 1 0,80 1 1,40 1
3 5 5,30 5 5,15 5
4 10 10,20 10 9,70 10
5 15 14,70 15 14,75 15
6 20 19,80 20 19,80 20
7 25 24,90 25 24,80 25
60

Terlihat bahwa terdapat sedikit perbedaan antara hasil pembacaan sensor

dengan hasil pengukuran menggunakan penggaris. Hal ini terjadi karena pada

program mikrokontroler untuk monitoring, nilai V yang merupakan nilai level

cairan dideklarasikan dengan tipe data integer. Hal ini dimaksudkan agar

didapatkan pembacaan sensor yang relatif stabil dengan range 1 cm,

mengingat permukan air pada tangki selalu bergoyang naik turun. Apabila

dibuat dengan tipe data float, maka nilainya akan berubah terus dan tidak

stabil.

4. Pengujian Rangkaian Motor Servo

Motor servo berfungsi membuka keran air sehingga air dapat keluar ke

penampungan. Agar dapat menggerakkan keran, motor servo harus berputar

ke kiri untuk membuka keran dan ke kanan untuk menutup keran. Dari hasil

pengujian didapat bahwa untuk berputar ke kanan sebesar 60 0, dibutuhkan

delay sebesar 0,72 ms untuk sinyal high pada PORT B.2. Dan untuk berputar

ke kiri sebesar 600, dibutuhkan delay sebesar 0,25 ms untuk sinyal high pada

PORT B.2.

Apabila kita lihat pada referensi yang seharusnya, ternyata terdapat

perbedaan untuk lamanya pemberian pulsa high pada PORT mikrokontroler.

Pada referensi, untuk berputar ke kanan 1800 dibutuhkan 1,3 ms lamanya

pemberian pulsa high. Jadi untuk 10 ke kanan dibutuhkan 0,0072 ms, maka

untuk 600 dibutuhkan ± 0,0072 x 60 = 0,432 ms. Hal ini bisa terjadi karena

tingkat akurasi motor servo yang sudah berkurang mengingat motor servo

yang digunakan ini sebelumnya telah dipergunakan untuk pengerjaan

penelitian yang lain. Namun pada penelitian ini, kinerja motor servo ini masih
61

bisa dipergunakan dengan baik karena sudut perputaran yang diperlukan

masih dapat terpenuhi oleh motor servo.

5. Pengujian Rangkaian Relay

Relay berfungsi sebagai switch tegangan 220 volt untuk menghidupkan

pompa air untuk mengisi tangki sehingga level cairan dapat tercapai. Relay

yang digunakan adalah relay 12 volt. Jadi pada saat PORT C.4 pada

mikrokontroler diberikan logika high, maka akan dihasilkan tegangan 5 volt

dan akan melewati resistor dan kemudian ke transistor. Pada saat basis

transistor diberikan tegangan maka input tegangan 12 volt pada relay akan

mengaktifkan koil sehingga timbul medan magnet sehingga relay yang tadinya

NO akan menjadi NC untuk tegangan 220 volt ke pompa. Keluaran dari koil

berupa arus akan mengalir terus ke transistor. Di transistor sendiri arus

mengalir dari kolektor ke emitor. Arus tersebut akan terus mengalir selama

basis transistor terus mendapat suplai tegangan dari PORT C.4 dari

mikrokontroler.

Apabila level cairan telah tercapai, maka PORT C.4 akan bernilai low

dan tidak ada tegangan yang keluar dari PORT C.4 sehingga tidak ada arus

yang mengalir pada transistor. Tidak adanya arus yang mengalir

mengakibatkan koil tidak tersuplai tegangan 12 volt sehingga tidak timbul

medan magnet dan posisi NC kembali ke NO. Dengan begitu tegangan 220

volt tidak akan mengalir ke pompa sehingga pompa akan mati.

6. Pengujian Rangkaian Power Supply


62

Pada rangkaian power supply terdapat 3 buah output tegangan DC

masing – masing 12 V, 9 V, 6 V, dan 5 V. Namun yang digunakan hanya

tegangan 12 V, dan 9 V. Setiap tegangan dihasilkan melalui IC regulator di

antaranya LM untuk 12 V, dan LM untuk 9 V. Masing – masing tegangan

digunakan untuk mensuplai daya bagi rangkaian pengendali dan relay. Berikut

gambar rangkaian power supply.

Gambar 25. Rangkaian Power Supply

Tegangan 12 V digunakan untuk mengaktifkan relay, sehingga koil pada relay

dapat bekerja dan switch pompa dapat bekerja. Modul DT-AVR Low Cost

Micro diaktifkan dengan menggunakan tegangan 9 V. Juga terdapat output

pada Modul DT-AVR Low Cost Micro terutama pada Vcc sebesar 5 V, karena

di dalamnya terdapat IC regulator LM7805 yang menghasilkan tegangan 5 V.

Tegangan 5 V ini berguna untuk mengaktifkan sensor, relay, dan lampu

indikator.
63

B. Perangkat Lunak

Sistem pengendalian ini dibuat berbasiskan web, sehingga untuk

pemrogramannya cukup dilakukan untuk komputer server saja. Sedangkan

pengguna (client) hanya mengakses data dari server saja.

1. Pemrograman Web

Di sisi server, ada beberapa pemrograman yang perlu dilakukan dalam

sistem pengendalian berbasis web, di antaranya komunikasi serial, membaca

data di port serial, mengirimkan data ke port serial, dan database.

a. Komunikasi Serial

Untuk dapat melakukan komunikasi serial dengan menggunakan php

diperlukan library php_ser.dll. Library ini bisa di-downlaod langsung di

internet. File hasil download berupa php_ser_5.2.0.zip dan harus diekstrak

dahulu sebelum menggunakannya. Di dalamnya terdapat 4 file di antaranya 1

file library php_ser.dll, 1 file referensi berupa html, dan 2 buah file php untuk

uji coba modul dari library php_ser.dll. Library ini harus diintegrasikan ke

dalam folder php tepatnya di dalam folder E:\AppServ\php5\ext.


64

Gambar 26. Instalasi library php_ser.dll ke folder E:\AppServ\php5\ext

Setelah proses penginstalasian, dilakukan pengeditan file php.ini yang

umumnya terdapat di direktori WINDOWS. Pada penelitian ini file tersebut

terletak di direktori E:\WINDOWS.

Gambar 27. Letak file php.ini

Kemudian kita tambahkan ekstensi berupa extension=php_ser.dll dan

pastikan bahwa direktori ekstensi berada pada alamat yang benar sesuai

direktori php yang terpasang.

Gambar 28. Penambahan extensi untuk library php_ser.dll ke dalam file


65

php.ini

Gambar 29. Penambahan extension_dir = "E:/AppServ\php5\ext" ke dalam


file php.ini

Setelah dilakukan pengeditan, harus dilakukan start ulang web server

apache agar perubahan yang telah dilakukan dapat berfungsi. Setelah

melakukan start ulang web server, kita perlu menguji apakah library

php_ser.dll sudah dapat berfungsi atau belum. Caranya dengan menyalin file

php yang ada dalam satu folder hasil download library php_ser.dll yaitu file

php_ser_test.php ke direktori di bawah direktori root pada web server. Pada

penelitian ini penulis mencoba membuat sebuah direktori

E:\AppServ\www\yomas dan meletakkannya di direktori yomas. Kemudian

web browser dibuka dan diketikkan alamat URL http://localhost/yomas/, akan


66

tampil sederet link dan cari link bertuliskan php_ser_test.php lalu klik, maka

akan tampil gambar seperti berikut:

Gambar 30. Modul – modul untuk mengakses port serial telah dimuat

Dengan tampilnya halaman tersebut berarti modul win_serial_port dalam

library php_ser.dll yang berkaitan dengan komunikasi serial akan dimuat dan

siap digunakan.

Untuk membuka komunikasi port serial kita menggunakan salah satu

fungsi dari modul win_serial_port yaitu ser_open. Berikut sebagian petikan

implementasinya pada file koneksi.php.

<?
ser_open("COM1", 9600, 8, "None", 1, "None");
$str = ser_isopen();
echo "<br>";
..............................
..............................
echo "Port yang digunakan = $str";
..............................
..............................
?>
67

Fungsi ser_open akan membuka port serial sehingga komunikasi port serial

dapat dilakukan dengan parameter port di COM1, baudrate sebesar 9600, bit

data sebesar 8 bit, parity kosong, stop bit bernilai 1, dan flow control kosong.

Penggunaan fungsi di atas perlu ditambahkan dengan fungsi lain untuk

menginformasikan ke pengguna bahwa port serial berhasil terhubung, yaitu

dengan fungsi ser_isopen(). Dalam penulisannya ser_isopen() akan

menyimpan nilai parameter yang ditentukan oleh fungsi ser_open.

Selanjutnya, agar dapat ditampilkan di halaman web, nilai dari fungsi

ser_isopen() dipindahkan ke variabel $str. Berikut hasil dari implementasi

fungsi tersebut:

Gambar 31. Membuka Komunikasi Serial COM 1

b. Membaca Data di Port Serial

Pembacaan data di port serial diperlukan agar data hasil pembacaan

sensor dapat ditampilkan di halaman web sebagai alat untuk me-monitoring

level cairan pada tangki. Fungsinya sama seperti hyperterminal di mana data

yang berhasil diterima dan dibaca pada port serial dapat ditampilkan, hanya

saja penelitian ini menggunakan php.

Library php_ser.dll telah menyediakan modul untuk dapat membaca

data di port serial. Salah satu fungsi yang terdapat dalam modul

win_serial_port adalah ser_read. Berikut implementasi fungsi ser_read:

<?
68

ser_open("COM1", 9600, 8, "None", 1, "None");


$str = ser_isopen();
echo "<br>";
$data = ser_read(2); // membaca data di port serial COM 1
echo "<br>";
............................
............................

Fungsi ser_read akan membaca data yang ada di port serial COM 1 dan akan

ditampilkan dalam dua karakter. Berikut hasil tampilannya pada halaman

web:

Gambar 32. Hasil Pembacaan Port serial COM 1 pada Halaman Web

Selain dalam bentuk tulisan, nilai level cairan juga dapat dilihat dalam bentuk

grafis berupa gambar tangki yang merepresentasikan nilai level cairan yang

terbaca. Parameter yang digunakan untuk menampilkan milai level cairan

dalam bentuk grafis di sini diambil dari variabel $data pada fungsi ser_read.
69

Gambar 33. Representasi nilai level cairan dalam bentuk grafis

Bentuk tampilan halaman monitoring level cairan pada komputer server dan

komputer pengguna / client adalah sebagai berikut.

Gambar 34. Tampilan halaman monitoring di komputer server

Gambar 35. Tampilan halaman monitoring di komputer pengguna / client


70

c. Mengirimkan Data ke Port Serial

Proses ini merupakan proses pengendalian di mana admin akan

memberikan input nilai level cairan yang diinginkan. Untuk itu digunakan

fungsi ser_write(string data). Fungsi ini akan mengirimkan nilai string ke

port serial dan diteruskan ke pin usart mikrokontroler. Berikut penulisannya

pada file php:

<?
$data = ser_read(2);
echo "<br>";
ser_write( "a" ); // mengirim karakter a ke port serial
echo "<IMG SRC=\"a.png\">";
?>

Dalam proses pengendalian ini, digunakan pengiriman data berupa

karakter alfabet dari a hingga z. untuk dijadikan variabel bagi program

mikrokontroler. Karena level cairan yang diinginkan mempunyai range

pengukuran dari 0 cm sampai 25 cm, maka penggunaan karakter alfabet

tersebut sudah memungkinkan untuk digunakan. Karakter a mewakili nilai

level 0 cm, b mewakili nilai level 1, dan seterusnya hingga z. Pada halaman

pengendalian, nilai tiap level cairan dibuat berupa push button yang berjumlah

26 buah dan masing – masing mewakili satu nilai level cairan. Berikut

tampilan halaman pengendalian level cairan. Di samping itu juga terdapat 3

tombol tambahan untuk isi, buang dan stop secara manual. Masing – masing

diwakili oleh karakter A untuk isi, B untuk buang, dan C untuk stop.
71

Gambar 36. Push Button untuk Menentukan Nilai Level Cairan

Proses pengendalian dilakukan dengan menekan salah satu push

button pada halaman pengendalian. Tiap push button akan menghubungkan ke

file php yang telah terintegrasi fungsi ser_write untuk mengirimkan karakter

yang dimaksud. Jadi terdapat 29 file php yang terintegrasi dengan fungsi

ser_write. Setelah proses pengiriman karakter ke port serial dilakukan, akan

tampil konfirmasi dari sistem tentang nilai level yang dimaksud. Dengan

tampilnya kofirmasi tersebut, berarti proses pengiriman telah berhasil

dilakukan.
72

Gambar 37. Tampilan konfirmasi tentang nilai level cairan yang diinginkan

d. Database

Database yang dibahas di sini adalah database hasil pengukuran level

cairan yang telah berhasil disimpan. Berikut komponen database untuk data

hasil pengukuran level cairan.

Gambar 38. Database hasil pengukuran level cairan

Hasil pengukuran level cairan akan diletakkan di database rekaman.

Tepatnya pada tabel rekam dengan field tanggal, jam, tinggi, dan volume.

Agar pengguna dapat mengakses database itu pada halaman web, database

harus ditampilkan dalam bentuk data array. Berikut tampilan halaman untuk

mengakses database bagi pengguna.


73

Gambar 39. Halaman untuk mengakses database hasil pengukuran level cairan

Bentuk tampilan halaman antara admin dengan client secara umum sama,

hanya saja admin memiliki otoritas untuk dapat menyimpan data hasil

pengukuran level cairan dan menghapusnya sedangkan untuk client tidak bisa.

Client hanya mampu untuk melihat data hasil pengukuran level cairan saja.

Di samping itu untuk tujuan dokumentasi, baik admin maupun client

dapat men-download data hasil pengukuran level cairan dalam format pdf

yaitu dengan menekan tombol bergambar printer pada bagian bawah halaman.

Gambar 40. Men-download data hasil pengukuran level cairan


74

Gambar 41. Data hasil pengukuran level cairan dalam format pdf

2. Pemrograman Mikrokontroler

Pemrograman mikrokontroler terdiri atas monitoring, kendali,

pemrograman motor servo, dan indikator lampu.

a. Monitoring

Program monitoring pada mikrokontroler berguna untuk mengambil

data pembacaan sensor ultrasonik pada PORT B.7 kemudian mengirimkannya

ke port serial melalui pin USART. Dalam bentuk diagram alir, alur program

monitoring dapat digambarkan sebagai berikut.


75

Gambar 42. Diagram alir program monitoring level cairan


pada mikrokontroler
( dibuat menggunakan Dia 0.97 )

Jadi proses pembacaan data dan pengiriman ke port serial dilakukan dengan

menggunakan interrupt timer overflow. Timer yang digunakan pada

mikrokontroler adalah timer 1 yang bernilai 8-bit di mana 8-bit bernilai 255.

Jadi proses interupt akan berjalan setiap TCNT1 bernilai 255. Apabila terjadi

interrupt, maka proses monitoring akan dilakukan.

Diawali dengan inisialisasi counter pada nilai 0. Kemudian mengatur

PORT B.7 sebagai output dan memberikan logika high pada PORT B.7 selama

5 us sehingga gelombang ultrasonik akan dipancarkan dengan frekuensi


76

40KHz selama 200 µs. Kemudian setelah 5 us PORT B.7 akan kembali

berlogika low. Agar gelombang pantul dapat terdeteksi oleh sensor ultrasonik,

kita atur PORT B.7 sebagai input dan membuatnya berlogika high sehingga

sensor mengeluarkan pulsa. Pulsa ini akan berhenti pada saat gelombang

pantul ultrasonik diterima. Selanjutnya mikrokontroler akan mengambil data

pada PORT B.7, apabila pada PORT B.7 telah menerima gelombang pantul

dari gelombang ultrasonik maka counter akan mulai mencacah lebar pulsa

yang dipancarkan dari saat gelombang ultrasonik dipancarkan sampai diterima

kembali. Hasil pencacahan counter ini akan digunakan oleh mikrokontroler

untuk perhitungan jarak permukaan cairan terhadap sensor ultrasonik. Nilai

jarak direpresentasikan dengan variabel V pada program dan hasilnya akan

dikirimkan ke port serial melalui pin USART.

Untuk menghitung jarak suatu benda kita dapat menggunakan rumus

dasar di mana :

Jarak = Cepat Rambat x Waktu Tempuh .........................................(1)

Karena jarak pada penelitian ini direpresentasikan oleh lebar pulsa gelombang

pantul, maka :

Jarak = ((Cepat Rambat x Waktu Tempuh) / 2) ................................(2)

Waktu tempuh merupakan hasil pencacahan counter dari saat gelombang

ultrasonik dipancarkan hingga gelombang pantulnya diterima kembali oleh

sensor ultrasonik. Cepat rambat gelombang ultrasonik di udara sebesar

344.424 m/s, apabila dikonversikan ke cm menjadi 34442,4 cm/s. Karena

lamanya gelombang ultrasonik yang dipancarkan berada dalam satuan µs,

maka cepat rambat gelombang ultrasonik juga harus kita konversikan ke


77

dalam satuan µs sehinga menjadi 0,0344424 cm/ µs. Sehingga apabila nilai

jarak yang terbaca oleh sensor kita misalkan n, maka :

n=((counter*0.034442)/2) .....................................................................(3)

Dengan rumusan di atas diperoleh nilai level cairan yang terbaca oleh sensor sebagai

berikut :

Tabel 9. Nilai level terbaca sensor sebelum kalibrasi

Nilai Level / V Nilai Terbaca oleh Sensor / n Persentase nilai terbaca


No
Penggaris (cm) (cm) terhadap nilai level (%)
1 5 2.0493 40.9800
2 10 4.1158 41.1582
3 15 6.1135 40.7563
4 20 8.0767 40.3833
5 25 9.9710 39.8838

Terlihat bahwa nilai yang terbaca oleh sensor berbeda dengan nilai seharusnya

pada plant (yang terbaca dengan penggaris). Persentase nilai yang terbaca oleh

sensor terhadap nilai yang terbaca oleh penggaris rata – rata sebesar :

(40,9800  41,1582  40,7563  40,3833  39,8838)


%  40,6323 ...(4)
5

Bila dibulatkan, maka persentase nilainya berada antara ± 40 % - 41 %.

Namun perubahan nilai yang terbaca oleh sensor sebanding dengan perubahan

nilai level yang diinginkan (hasil pengukuran dengan penggaris) dan

perubahannya linier. Jadi untuk nilai level V dapat kita cari dengan rumusan :

V= ((n*100)/40,6323) ...................................................................(5)

Rumusan perhitungan di atas menghasilkan nilai jarak sensor terhadap

permukaan cairan, dengan kata lain besar nilai yang terbaca akan semakin besar

seiring dengan pertambahan jarak antara sensor dengan permukaan cairan, sehingga

belum bisa menggambarkan hasil pembacaan level cairan sebenarnya. Diperlukan


78

satu nilai yang merupakan jarak antara sensor dengan titik 0 cm yang digunakan

dalam penelitian ini.

Tinggi tangki sebesar 40 cm, apabila dipasang sensor, maka jarak sensor

dengan dasar tangki terukur sebesar 37,7 cm. Titik 0 cm pada penelitian ini berada

pada 3 cm dari dasar tangki, sehingga jarak antara sensor dengan titik 0 cm sebesar

37,7 cm – 3 cm = 34,7 cm. Karena keterbatasan memory Atmega8535, apabila kita

gunakan tipe data float pada deklarasi variabel, maka program tidak akan bisa di-

compile karena ukuran program melebihi memory program dari Atmega8535.

Gambar 43. Error compiler CodevisioAVR untuk tipe data float

Untuk itu kita gunakan tipe data integer untuk deklarasi variabelnya. Dalam

perhitungan nilai V tetap bisa kita pergunakan data float (desimal) agar data lebih

akurat. Nilai ini tidak mutlak harus 34,7 cm, namun dapat berubah sesuai kebutuhan

kalibrasi pada plant. Bisa saja bertambah ataupun berkurang, maka dapat dikatakan

nilainya ±34,7 cm. Sehingga rumusan nilai V untuk menghitung nilai level cairan

menjadi :

V= ((34,7)-((n*100)/40)) ....................................................................(6)

Berikut listing sebagian program monitoring pada mikrokontroler.

interrupt [TIM1_OVF] void timer1_ovf_isr(void)


{
79

//====================MONITORING==================
TCNT1=255;

PORTC.0=PORTB.7;
counter=0; //inisialisasi nilai
setout=1; //Set as output
out=1;
delay_us(5);
out=0;
setout=0; //Set as input
out=1; //Pullup diaktifkan
while (in==0)
{
};
while (in==1)
{
counter++;
};
n= ((counter*0.034442)/2);
V= ((34,7)-((n*100)/40,6323)); //referansi tinggi tngk=40
if(V<10) //; sensor 37,7; dasar 3; ± 34,7
{
printf("0%d",V);
}
else if(V>=10)
{
printf("%d",V);
}
delay_ms(300);
}

b. Pengendalian

Pengendalian dilakukan dengan mengirimkan karakter alfabet ke

mikrokontroler melalui komunikasi serial. Untuk proses pengendalian, dibagi

menjadi dua yaitu otomatis dan manual.

1. Pengendalian Otomatis

Pada pengendalian otomatis, tiap karakter alfabet mewakili satu

nilai level cairan dari 0 sampai 25. Setelah menerima karakter yang

dikirim, maka mikrokontroler akan memastikan nilai level yang diminta

dan melakukan pengendalian. Tiap nilai level cairan mempunyai alur

logika program yang sama untuk proses pengendalian. Diagram alir dari
80

program pengendalian otomatis pada mikrokontroler adalah sebagai

berikut.

Gambar 44. Diagram alir program pengendalian


81

otomatis level cairan pada mikrokontroler


( dibuat menggunakan Dia 0.97 )
Berikut sebagian sampel program untuk pengendalian level di

mana level yang ditentukan adalah 10 cm.

if(rxtx=='k')
{
'k'==10;
if(V>10)
{
while (V>10)
{
for (i=1;i<50;i++)
{
buka ();

PORTC.4=0x00;
buang ();
}
}
while (V<=10)
{
for (i=1;i<50;i++ )
{
tutup ();
PORTC.4=0x00;
diam ();
}
break;
}
}

else if(V==10)
{
for (i=1;i<50;i++)
{
tutup ();
PORTC.4=0x00;
diam ();
}
}
else if(V<10)
{
while (V<10)
{
for (i=1;i<50;i++)
{
tutup ();
PORTC.4=0xFF;
isi ();
}
}
while (V>=10)
{
for (i=1;i<50;i++ )
82

{
tutup ();
PORTC.4=0x00;
diam ();
}
break;
}
}
};

Pada listing program di atas, karakter huruf k mewakili nilai level

10 cm. Jadi pada saat mikrokontroler menerima karakter tersebut maka

mikrokontroler akan memastikan bahwa nilai level yang diminta bernilai

10 cm. Selanjutnya mikrokontroler akan memeriksa apakah level cairan V

yang sedang terbaca oleh sensor sekarang lebih besar, sama dengan atau

lebih kecil dari 10 cm.

Apabila level yang terbaca lebih besar dari 10 cm, maka ketika V

lebih besar dari 10 cm mikrokontroler akan menjalankan fungsi buka()

servo untuk membuka kran air, PORTC.4 untuk relay pompa akan low dan

fungsi buang() sehingga lampu indikator hijau menyala. Ketika V lebih

kecil sama dengan 10 cm mikrokontroler akan menjalankan fungsi tutup()

servo untuk menutup kran air, PORTC.4 untuk relay pompa akan low dan

fungsi diam() sehingga lampu indikator kuning akan menyala. Apabila

level yang terbaca sama dengan 10 cm, maka mikrokontroler akan

menjalankan fungsi tutup() servo untuk menutup kran air, PORTC.4 untuk

relay pompa akan low dan fungsi diam() untuk lampu undikator kuning.

Apabila nilai V kurang dari 10 cm, maka ketika V kurang dari 10 cm

mikrokontroler akan menjalankan fungsi tutup() servo untuk menutup kran

air, PORTC.4 untuk relay pompa akan high untuk menghidupkan pompa
83

dan fungsi isi() sehingga lampu indikator merah akan menyala. Ketika V

lebih besar sama dengan 10 cm mikrokontroler akan menjalankan fungsi

tutup() servo untuk menutup kran air, PORTC.4 untuk relay pompa akan

low untuk menonaktifkan pompa dan fungsi diam() sehingga lampu

indikator kuning akan menyala.

2. Pengendalian Manual

Pada pengendalian manual terdapat tiga buah tombol yaitu Buang,

Isi dan Stop. Dengan tiga tombol ini, maka pengguna dapat menambah

atau mengurangi tinggi level cairan pada plant tanpa harus menentukan

besar nilai set point. Pengguna cukup memilih untuk mengisi atau

mengurangi dan apabila sewaktu – waktu ingin menghentikannya dapat

dilakukan dengan menekan tombol Stop. Berikut diagam alir program

pengendalian level cairan secara manual :


84

Gambar 45. Diagram alir program pengendalian


85

manual level cairan pada mikrokontroler


( dibuat menggunakan Dia 0.97 )

Berikut sebagian sampel program untuk pengendalian level cairan

secara manual :

if(rxtx=='A')
{
tutup ();
PORTC.4=0xFF;
isi ();
};
if(rxtx=='B')
{
buka ();
PORTC.4=0x00;
buang();
};
if(rxtx=='C')
{
tutup ();
PORTC.4=0x00;
diam ();
};

Pada program di atas, terdapat 3 huruf yang masing – masing

mewakili satu aksi. Huruf ‘A’ untuk Isi, huruf ‘B’ untuk Buang, dan huruf

‘C’ untuk Stop. Apabila pengguna menekan tombol Isi, maka akan

dikirimkan karakter huruf ‘A’ ke mikrokontroler melalui komunikasi

USART. Selanjutnya mikrokontroler akan menjalankan fungsi tutup()

servo untuk menutup keran air, PORTC.4 untuk relay bernilai high dan

fungsi isi() untuk lampu undikator merah. Kemudian apabila pengguna

menekan tombol Buang, maka akan dikirimkan karakter huruf ‘B’ ke

mikrokontroler melalui komunikasi USART. Mikrokontroler akan

menjalankan fungsi buka() servo untuk membuka keran air, PORTC.4

untuk relay bernilai low, dan fungsi buang() untuk lampu indikator hijau.

Dan apabila pengguna menghendaki untuk menghentikan proses pengisian


86

atau pengurangan level cairan, maka dengan menekan tombol Stop akan

dikirimkan karakter huruf ’C’ ke mikrokontroler. Selanjutnya

mikrokontroler akan menjalankan fungsi tutup() servo untuk menutup

keran air, PORTC.4 untuk relay bernilai low, dan fungsi diam() untuk

lampu indikator kuning.

Pada saat program ini dijalankan pada plant, ternyata hasilnya

tidak seperti yang diharapkan. Hal ini terjadi pada saat pengguna menekan

tombol buang dan kemudian setelah beberapa lama bermaksud untuk

menghentikan proses buang dengan menekan tombol stop. Dengan

menekan tombol buang berarti mikrokontroler akan menerima data

USART berupa karakter ‘B’. Dengan diterimanya input berupa karakter

‘B’ maka mikrokontroler akan menjalankan fungsi buka() servo,

PORTC.4 bernilai low, dan fungsi buang() akan aktif untuk menyalakan

lampu indikator berwarna hijau. Kemudian apabila ditekan tombol stop,

seharusnya mikrokontroler akan menjalankan fungsi tutup() servo,

PORTC.4 bernilai low dan indikator lampu kuning akan menyala. Namun

pada prakteknya saat pengguna menekan tombol stop, motor servo tidak

mau menutup keran. Dengan kata lain, rutin program stop tidak berjalan

walaupun mikrokontroler telah menerima input karakter huruf ‘C’. Jadi

servo akan bergerak ke kiri untuk membuka keran air hanya selama

rentang waktu yang diberikan pada for (i=1;i<50;i++), setelah lewat dari

perulangan for maka servo akan berhenti (tidak ada pergerakan). Dan

mulai dari saat rentang for berjalan sampai seterusnya apabila kita

mengirimkan karakter ‘C’, rutin program stop tidak akan berjalan.


87

Penulis mencoba menggunakan PWM untuk menggerakkan motor

servo. PWM sendiri dibangkitkan dari interrupt timer 0, sehingga tidak

mengganggu rutin program yang lain. Berikut program interrupt timer 0

untuk PWM:

interrupt [TIM0_OVF] void timer0_ovf_isr(void)


{
TCNT0 = 0x00;
1<x<100;x++;
if (x>=pwmKa_val)
{
pwm=0;
}
else
{
pwm=1;
};
if (x>=pwmKi_val)
{
pwm=0;
}
else
{
pwm=1;
}
};

Fungsi buka() dan tutup() servo mengalami perubahan sebagai

berikut:

//=========FUNGSI TUTUP SERVO=========================

void tutup (void){


pwmKa_val = 0x80;
pwmKi_val = 0x20;
delay_ms(80);
pwmKa_val = 0x00;
pwmKi_val = 0x00;
}
//=================================================

//==========FUNGSI BUKA SERVO========================

void buka (void){


pwmKa_val = 0x20;
pwmKi_val = 0x80;
delay_ms(2900);
pwmKa_val = 0x00;
pwmKi_val = 0x00;
}
88

Sedangkan pada listing program pengendalian level cairan secara

manual, perulangan for dihilangkan, sehingga menjadi:

if(rxtx=='A')
{
tutup ();
PORTC.4=0xFF;
isi ();
}
if(rxtx=='B')
{
buka ();
PORTC.4=0x00;
buang ();
}
if(rxtx=='C')
{
tutup ();
PORTC.4=0x00;
diam ();
}

Dengan menggunakan program di atas, motor servo dapat bergerak

ke kiri untuk membuka keran air, dan apabila tombol stop ditekan, motor

servo berhasil bergerak ke kanan untuk menutup keran. Dengan kata lain

pada saat karakter huruf ‘C’ dikirimkan ke mikrokontroler, rutin program

stop (fungsi tutup(), fungsi diam(), dan PORTC.4=0x00) berhasil

dijalankan .

Dengan modifikasi program ini, berarti penulis mengunakan dua

buah interrupt timer overflow yaitu timer 0 dan timer 1. Kedua timer dapat

dijalankan tanpa mengganggu satu sama lain. Inisialisasi dan pengaturan

dua buah timer ini terletak pada Timer / Counter Interrupt Mask Register

(TIMSK). Berikut gambar TIMSK :


89

Gambar 46. Timer / Counter Interrupt Mask Register (TIMSK)


mikrokontroler Atmega8535
(A. Winoto; Mikrokontroler Atmega8/16/32/8535
Dan Pemrogramannya dengan Bahasa C pada
WinAVR; 2008)

Pada register ini, timer 0 terletak pada bit 0 dengan nama TOIE0

dan timer 1 terletak pada bit 2 dengan nama TOIE1. TOIE sendiri disebut

sebagai bit pengaktif interupsi timer/counter. Agar kedua timer ini dapat

berjalan, maka bit 0 dan bit 2 harus diaktifkan, dengan kata lain kedua bit

ini harus bernilai 1. Sehingga bila dituliskan dalam bilangan biner menjadi

00000101 yang bernilai 5. Dalam bilangan heksadesimal, nilai tersebut

menjadi 0x05. Sehingga pada listing program, kita tuliskan nilai TIMSK

sebesar 0x05. Berikut sebagian program untuk TIMSK:

MCUCR=0x00;
MCUCSR=0x00;

TIMSK=0x05; >>>>> Timer / Counter Interrupt Mask Register


UCSRA=0x00;
UCSRB=0x08;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x19;

You might also like