Sofian Yahya
I. Pendahuluan
Penggunaan mikrokontroler sangat luas, tidak hanya untuk akuisisi data melain-
kan juga untuk pengendalian motor-motor listrik, peralatan kantor, peralatan rumah
tangga, automobil, dan sebagainya. Hal ini disebabkan mikrokontroler merupakan
sistem mikroprosesor (yang didalamnya terdapat CPU, ROM, RAM dan IO) yang
telah terpadu pada satu keping, selain itu komponennya murah dan mudah diperoleh
di pasaran.
Aplikasi pengendalian/monitoring temperatur banyak digunakan dalam kehidup-
an sehari-hari, seperti pada peralatan kesehatan (inkubator bayi), proses kualitas
produksi pertanian/perkebunan (pengeringan teh, pengeringan kayu), ruang penga-
waten produksi perikanan, dan lain sebagainya.
Tujuan tulisan ini adalah membuat suatu simulator untuk mengendalikan tem-
peratur suatu ruangan dengan cara mengatur kerja fan dan pemanas pada setting
temperatur tertentu. Pengendalian akan dilakukan dengan mikrokontroler ATMega
8535, sedangkan sensor temperatur plant dengan menggunakan LM35DZ.
ATmega16 mempunyai empat buah port yang bernama PortA, PortB, PortC,
dan PortD. Keempat port tersebut merupakan jalur bidirectional dengan pilihan
internal pull-up. Tiap port mempunyai tiga buah register bit, yaitu DDxn, PORTxn,
dan PINxn. Huruf ‘x’mewakili nama huruf dari port sedangkan huruf ‘n’ mewakili
nomor bit. Bit DDxn terdapat pada I/O address DDRx, bit PORTxn terdapat pada I/O
address PORTx, dan bit PINxn terdapat pada I/O address PINx. Bit DDxn dalam
regiter DDRx (Data Direction Register) menentukan arah pin. Bila DDxn diset
1 maka Px berfungsi sebagai pin output. Bila DDxn diset 0 maka Px berfungsi
sebagai pin input. Bila PORTxn diset 1 pada saat pin terkonfigurasi sebagai pin
input, maka resistor pull-up akan diaktifkan. Untuk mematikan resistor pull-up,
PORTxn harus diset 0 atau pin dikonfigurasi sebagai pin output. Pin port
adalah tri-state setelah kondisi reset. Bila PORTxn diset 1 pada saat pin
terkonfigurasi sebagai pin output maka pin port akan berlogika 1. Dan bila
PORTxn diset 0 pada saat pin terkonfigurasi sebagai pin output maka pin port
akan berlogika 0. Saat mengubah kondisi port dari kondisi tri-state (DDxn=0,
PORTxn=0) ke kondisi output high
(DDxn=1, PORTxn=1) maka harus ada kondisi peralihan apakah itu kondisi
pull-up enabled (DDxn=0, PORTxn=1)atau kondisi output low (DDxn=1,
PORTxn=0). Biasanya, kondisi pull-up enabled dapat diterima sepenuhnya,
selama lingkungan impedansi tinggi tidak memperhatikan perbedaan antara
sebuah strong high driver dengan sebuah pull-up. Jika ini bukan suatu masalah,
maka bit PUD pada register SFIOR dapat diset 1 untuk mematikan semua pull-up
dalam semua port. Peralihan dari kondisi input dengan pull- up ke kondisi output
low juga menimbulkan masalah yang sama. Kita harus menggunakan kondisi tri-
state (DDxn=0, PORTxn=0) atau kondisi output high (DDxn=1, PORTxn=0)
sebagai kondisi transisi.
Tabel 1.1 Konfigurasi pin port
Bila bit diset bernilai 1 maka pull-up pada port I/O akan dimatikan
walaupun register DDxn dan PORTxn dikonfigurasikan untuk menyalakan pull-up
(DDxn=0, PORTxn=1).
( AV − Offset ) x 2 n
DN =
Span
Dimana: AV = nilai analog
Offset = nilai analog minimum
Span = Selisih antara nilai maksimum dengan minimum
n = Jumlah bit dalam kode digital
2.1.6 Codevision AVR C. Compiler
Codevision AVR C. Compiler (CVAVR) merupakan kompiler bahasa C untuk
AVR. Kompiler ini cukup memadai untuk belajar AVR, karena selain mudah
penggunaannya juga didukung berbagai fitur yang sangat membantu dalam
pembuatan software untuk keperluan pemrograman AVR.
CVAVR ini dapat mengimplementasikan hampir semua instruksi bahasa C
yang sesuai dengan arsitektur AVR, bahkan terdapat beberapa keunggulan
tambahan untuk memenuhi keunggulan spesifik dari AVR. Hasil kompilasi objek
CVAVR bisa digunakan sebagai source debug dengan AVR studio debugger dari
ATMEL.
Gambar 2.3 Bentuk fisik LM35 DZ. Gambar 2.4 Grafik perbandingan tegangan
Keluaran dengan temperatur pada LM35
Grafik perubahan tegangan yang dikeluarkan adalah semakin tinggi temperaturnya,
maka semakin tinggi pula tegangan yang dikeluarkan.
2.3 Pemanas
Pemanas merupakan suatu alat yang menghasilkan panas dari suatu
hambatan yang dialiri arus listrik. Dengan besar hambatan yang tetap, panas yang
dihasilkannya pun konstan. Pada alat ini sistem pemanas disimulasikan dengan
lampu halogen. Jika panas tersebut terus-menerus diberikan pada suatu ruangan
tertutup, maka temperatur dalam ruangannya akan meningkat walaupun udara
panas yang dihembuskan alat tersebut konstan. Semakin lama waktu
penghembusannya, maka semakin panas pula temperatur udara dalam ruangan
tersebut.
Optocoupler adalah suatu Integraded Circuit (IC) yang meskipun secara fisik
menjadi satu, tetapi sebenarnya di dalamnya terdiri dari dua bagian yang terpisah
antara antara bagian cahaya dengan bagian deteksi sumber cahaya. Pada
Optocoupler terdapat isolasi elektris, yaitu kondisi yang terisolasi antara masukan
dan keluarannya (electrical isolation). Penggunaannya memungkinkan untuk
memisahkan dua bagian dengan tegangan kerja berbeda.
Gambar 2.5 Pin Optocoupler 4N25
Bagian pemancar atau transmitter dibangun dari sebuah led infra merah
untuk mendapatkan ketahanan yang lebih baik daripada menggunakan led biasa.
Sensor ini bisa digunakan sebagai isolator dari rangkaian tegangan rendah
kerangkaian tegangan tinggi.
Penggunaan dari Optocoupler tergantung dari kebutuhannya. Ada berbagai
macam bentuk, jenis, dan type. Seperti MOC 3040 atau 3020, 4N25 atau 4N33dan
sebagainya. Optocoupler type 4N25 ini mempunyai tegangan isolasi sebesar 2500
Volt dengan kemampuan maksimal led dialiri arus fordward sebesar 80 mA. Namun
besarnya arus led yang digunakan berkisar antara 15mA - 30 mA dan untuk
menghubungkan-nya dengan tegangan +5 Volt diperlukan tahanan pembatas.
Relay berfungsi untuk menghubungkan atau memutus aliran arus listrik yang
dikontrol dengan memberikan tegangan dan arus tertentu pada koilnya. Relay yang
digunakan relay DC dengan tegangan koil 5V DC, arus yang diperlukan sekitar 140
mA.
2.6 LCD
"# "#
"# $ !
% & "' & $
( )* "' * +$
+ )* "'
, )* "'
)* "'
)* "'
)* "'
)*% "'
)*( "'
- .* !
% / 0 1 * !
D1-D7 pada LCD berfungsi untuk menerima data dari mikrokontroler. Untuk
menerima data, pin 5 pada LCD (RD) harus berlogika 0 (low), dan berlogika 1(high)
untuk mengirim data mikrokontroler. Setiap kali menerima / mengirim data, untuk
mengaktifkan LCD diperlukan sinyal E (Chip Enable) dalam bentuk perpindahan
logika 1 ke logika 0.
Sedangkan pin Register Selector (RS), berguna untuk memilih
Instruction Register (IR) atau Data Register (DR). Jika nilai RS Low (0) dan RD Low
(0), maka kan dilakukan operasi penulisan data ke DDRAM atau CGRAM.
Sedangkan jika RS berlogika High(1) dan RD berlogika High (1), akan membaca
data dari DDRAM atau CGRAM ke register DR. Karakter yang akan ditampilkan ke
display disimpan di memori DDRAM. Lokasi karakter yang akan ditampilkan ke
display mempunyai alamat tertentu pada memori DDRAM.
"
# ) $ %&
' $$(
* # )
& ' +(
, )
$ ' +(
#include <mega8535.h>
#include <delay.h>
#include <stdio.h>
#include <math.h>
void main(void)
{
// Declare your local variables here
unsigned int ADC_sum,ADC_output, i,temp_skrg,temp_skrg1;
PORTA=0x00;
DDRA=0x00;
PORTB=0x00;
DDRB=0xFF;
PORTC=0x00;
DDRC=0x00;
PORTD=0x00;
DDRD=0x00;
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
MCUCR=0x00;
MCUCSR=0x00;
// ADC initialization
// ADC Clock frequency: 687,500 kHz
// ADC Voltage Reference: AREF pin
// ADC High Speed Mode: Off
// ADC Auto Trigger Source: None
// Only the 8 most significant bits of
// the AD conversion result are used
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x84;
SFIOR&=0xEF;
while (1)
{
// Place your code here
delay_ms(900); // Tunda 900 ms;
ADC_sum=0; // Inisialisasi ADC_sum;
for (i=0;i<10;i++) // Mulai untuk menjumlahkan 10 ;
{ // samples ADC;
delay_ms(10); // Ambil sample ADC setiap 10 ms
ADC_sum+=read_adc(0); // Baca Output ADC dari PA0
// dan jumlahkan ke ADC_sum
}
ADC_output=ADC_sum/10; // Rata-rata Output ADC
temp_skrg=("%.2i ",ADC_output);
temp_skrg1= temp_skrg*2;
lcd_gotoxy(0,1);
sprintf(buf,"%-2u%cC",abs(temp_skrg1),0xdf); //menyimpan string ke SRAM
lcd_puts(buf); //menampilkan ke LCD
if(ADC_output<0xf)
{PORTB=0xfd;} // Bila Temp kecil 30 derajat
// PORTB.0 Heater "ON"
if((ADC_output>0xf)&&(ADC_output<0x12))
{PORTB=0xff;} // Bila Temp ada antara 30 s.d 36 derajat
// LED PORTB "OFF"
if(ADC_output>0x12)
{PORTB=0xfe;} // Bila Temp besar dari 36 derajat
// LED PORTB.1 Fan "ON"
}
}
IV. Pengujian
Pengujian dilakukan dengan memasang pin-pin LM35DZ ke mikrokontroler yang te-
lah diisi dengan program utama dan memanaskan sensor untuk mendapatkan peru-
bahan pada outputnya.
Tabel 4.1 Pengujian LM35DZ
Temp LCD Vout LM35 Hex
(º C) (Volt)
24 0,242 C
26 0,268 D
28 0,282 E
30 0,307 F
32 0,322 10
34 0,343 11
36 0,360 12
38 0,380 13
40 0,402 14
42 0,422 15
44 0,442 16
Berdasarkan data pengujian seperti diperlihatkan pada tabel diatas, LCD dapat
mampu menunjukkan nilai temperatur yang disensor oleh LM35DZ tidak jauh dari
spesifikasi yaitu sebesar 10mV/ºC.