A.
JUDUL
Timbangan Digital Berbasis Mikrokontroller ATMega16
B.
TUJUAN
Tujuan Tugas Akhir ini, merancang bangun
timbangan digital adalah untuk alat bantu menimbang berat berbasis
mikrokontroller ATMEGA16.
C. LATAR
BELAKANG
Dalam hal pengukuran massa,
pengukuran massa biasanya dilakukan secara manual yaitu dengan menggunakan
timbangan manual. Definisi timbangan itu sendiri adalah sebuah alat bantu yang
digunakan untuk mengetahui berat suatu benda. Dalam pemanfaatannya timbangan
digunakan diberbagai bidang salah satunya dibidang perdagangan, seperti halnya
pedagang buah dipasar yang kebanyakan masih menggunakan timbangan manual.
Berdasarkan dari penjelasan diatas,
maka dirancanglah suatu alat timbangan elektronik menggunakan mikrokontroller
ATMega16 sebagai pmroses data. Pada timbangan elektronik ini menggunakan sensor
berat yaitu sebuah potensiometer sebagai pendeteksi berat suatu benda.
Sensor diletakkan ditengah agar
alat dapat menimbang secara baik. Pada saat alat mendeteksi adanya beban, maka
secara otomatis sensor akan membaca dan mengirimkan sinyal ke mikrokontroler
yang kemudian berat buah tersebut ditampilkan oleh LCD.
Setelah suatu benda diletakkan pada
tumpuan beban pada timbangan maka timbangan akan keluar kode dari timbangan
yang akan disimpan pada EEPROM (electrically erasablle programmable read-only
memory) mikrokontroller ATMega 16.
Pada saat suatu benda diletakkan
diatas timbangan, nilai berat akan muncul pada layar LCD (Liquid Crystal
Display). Dalam hal ini kami memutuskan untuk merancang rumusan ini sebagai
bentuk tugas akhir perkuliahan Mikrokontroller yang berjudul “ Timbangan
Digital berbasis ATMega 16 ”.
D. DASAR TEORI
D.1 Mikrokontroller ATMega 16
Mikrokontroler adalah sebuah sistem komputer
lengkap dalam satu serpih (chip). Mikrokontroler lebih dari sekedar
sebuah mikroprosesor karena sudah terdapat atau berisikan ROM (Read-Only
Memory), RAM (Read-Write Memory), beberapa bandar masukan maupun keluaran,
dan beberapa peripheral seperti pencacah/pewaktu, ADC (Analog to
Digital converter), DAC (Digital to Analog converter) dan
serial komunikasi.
Salah satu mikrokontroler yang banyak
digunakan saat ini yaitu mikrokontroler AVR. AVR adalah mikrokontroler RISC (Reduce
Instuction Set Compute) 8 bit berdasarkan arsitektur Harvard. Secara
umum mikrokontroler AVR dapat dapat dikelompokkan menjadi 3 kelompok, yaitu
keluarga AT90Sxx, ATMega dan ATtiny. Pada dasarnya yang membedakan
masing-masing kelas adalah memori, peripheral, dan fiturnya
Seperti mikroprosesor pada
umumnya, secara internal mikrokontrolerATMega16 terdiri atas unit-unit
fungsionalnya Arithmetic and Logical Unit (ALU), himpunan register
kerja, register dan dekoder instruksi, dan pewaktu beserta komponen
kendali lainnya. Berbeda dengan mikroprosesor, mikrokontroler menyediakan
memori dalam serpih yang sama dengen prosesornya (in chip).
D.1.1
Arsitektur Mikrokontroller ATMega 16
Mikrokontroler ini
menggunakan arsitektur Harvard yang memisahkan memori program dari memori data,
baik bus alamat maupun bus data, sehingga pengaksesan program dan data dapat
dilakukan secara bersamaan (concurrent).
Secara garis besar mikrokontroler ATMega16 terdiri dari :
1. Arsitektur RISC dengan throughput mencapai 16 MIPS pada frekuensi
16Mhz.
2. Saluran I/O 32 buah, yaitu PORT A, PORT B, PORT C, dan PORT D.
3. CPU yang terdiri dari 32 buah register.
4. User interupsi internal dan eksternal
5. PORT antarmuka SPI dan Bandar USART sebagai komunikasi serial
6. Fitur Peripheral
• Dua buah 8-bit timer/counter dengan prescaler terpisah dan mode
compare
• Satu buah 16-bit timer/counter dengan prescaler terpisah, mode compare,
dan
mode capture
• Real time counter dengan osilator tersendiri
• Empat kanal PWM dan Antarmuka komparator analog
• 8 kanal, 10 bit ADC
• Byte-oriented Two-wire Serial Interface
•
Watchdog timer dengan osilator internal
D.1.2 Deskripsi
Mikrokontroller ATMega 16
·
VCC (Power Supply) dan GND
(Ground)
·
PORT A (PA7..PA0)
PORT A berfungsi sebagai input analog pada konverter A/D. PORT A
juga sebagai suatu bandar I/O 8-bit dua arah, jika A/D konverter tidak
digunakan. Pena - pena PORT dapat menyediakan resistor internal pull-up (yang
dipilih untuk masing-masing bit). PORT A output buffer mempunyai
karakteristik gerakan simetris dengan keduanya sink tinggi dan kemampuan
sumber. Ketika pena PA0 ke PA7 digunakan sebagai input dan secara eksternal
ditarik rendah, pena–pena akan memungkinkan arus sumber jika resistor internal
pull-up diaktifkan. Pena PORT A adalah tri-stated manakala suatu kondisi
reset menjadi aktif, sekalipun waktu habis.
·
PORT B (PB7..PB0)
PORT B adalah suatu bandar I/O 8-bit dua arah dengan resistor internal
pull-up (yang dipilih untuk beberapa bit). PORT B output buffer mempunyai
karakteristik gerakan simetris dengan keduanya sink tinggi dan kemampuan
sumber. Sebagai input, pena PORT B yang secara eksternal ditarik rendah
akan arus sumber jika resistor pull-up diaktifkan. Pena PORT B
adalah tri-stated manakala suatu kondisi reset menjadi aktif, sekalipun
waktu habis.
·
PORT C (PC7..PC0)
PORT C adalah suatu bandar I/O 8-bit dua arah dengan resistor internal
pull-up (yang dipilih untuk beberapa bit). PORT C output buffer mempunyai
karakteristik gerakan simetris dengan keduanya sink tinggi dan kemampuan
sumber. Sebagai input, pena PORT C yang secara eksternal ditarik rendah
akan arus sumber jika resistor pull-up diaktifkan. Pena PORT C
adalah tri-stated manakala suatu kondisi reset menjadi aktif, sekalipun
waktu habis.
·
PORT D (PD7..PD0)
PORT D adalah suatu bandar I/O 8-bit dua arah dengan resistor internal
pull-up (yang dipilih untuk beberapa bit). PORT D output buffer mempunyai
karakteristik gerakan simetris dengan keduanya sink tinggi dan kemampuan
sumber. Sebagai input, pena PORT D yang secara eksternal ditarik rendah
akan
arus sumber jika resistor pull-up diaktifkan. Pena PORT D adalah
tri-stated manakala suatu kondisi reset menjadi aktif, sekalipun waktu habis.
• AVCC adalah pena penyedia tegangan untuk bandar A dan Konverter A/D.
• AREF adalah pena referensi analog untuk konverter A/D.
D.1.3 Memori Program
Arsitektur
ATMega16 mempunyai dua memori utama, yaitu memori data dan memori program.
Selain itu, ATMega16 memiliki memori EEPROM untuk menyimpan data. ATMega16
memiliki 16K byte On-chip In-System Reprogrammable Flash Memory untuk
menyimpan program. Instruksi ATMega16 semuanya memiliki format 16 atau 32 bit,
maka memori flash diatur dalam 8K x 16 bit. Memori flash dibagi
kedalam dua bagian, yaitu bagian program boot dan aplikasi. Bootloader
adalah program kecil yang bekerja pada saat sistem dimulai yang dapat
memasukkan seluruh program aplikasi ke dalam memori prosesor.
D.2 LCD
LCD (Liquid Crystal Display) adalah modul
penampil yang banyak digunakan karena tampilannya menarik. LCD yang paling
banyak digunakan saat ini ialah LCD M1632 refurbish karena harganya cukup
murah. LCD M1632 merupakan modul LCD dengan tampilan 2x16 (2 baris x 16 kolom)
dengan konsumsi daya rendah. Modul tersebut dilengkapi dengan mikrokontroler
yang didesain khusus untuk mengendalikan LCD.
LCD yang umum, ada yang
panjangnya hingga 40 karakter (2x40 dan 4x40), dimana kita menggunakan DDRAM
untuk mengatur tempat penyimpanan karakter tersebut.
E.
LANGKAH
PEMBUATAN
1.
Pembuatan
Rangkaian
Langkah kerja :
1. Buat
skema rangkaian pada ISIS.
2. Lanjutkan
dengan membuat desain PCB pada ARES.
3. Cetak
rangkaian PCB pada kertas Glosy.
4. Siapkan
alat dan bahan yang diperlukan.
5. Setrika
kertas Glosy pada PCB yang telah disediakan, sebelumnya bersihkan dahulu PCB
agar saat menyetrika jalur mudah menempel.
6. Larutkan
PCB dengan Ferric Choride (FeCl3).
7. Bersihkan
PCB lalu bor letak kaki komponen.
8. Pasang
komponen pada PCB.
9. Lakukan
pengujian rangkaian.
10. Kemas
rangkaian pada box yang telah dibuat.
2.
Pembuatan
Box
Langkah pembuatan box :
1. Buat
skema box.
2. Siapkan
plat alumunium.
3. Ukur
plat sesuai skema box yang telah dibuat.
4. Potong
plat sesuai kebutuhan.
5. Lipat
plat sesuai skema box.
F.
PENGUJIAN
Langkah pengujian :
1. Pastikan
rangkaian sudah sesuai dengan desain yang telah dibuat.
2. Hubungkan
rangkaian sistem minimum dengan sensor, downloader dan LCD.
3. Uji
dengan menghubungkan downloader dengan komputer.
4. Download
program dengan Kazama.
5. Uji
alat.
No.
|
BERAT BARANG
|
HASIL PENIMBANGAN
|
1.
|
Kursi 1.8 kg
|
1.86 Kg
|
2.
|
Box 689 Gram
|
420 Gram
|
3.
|
Laptop 3 Kg
|
3.4 Kg
|
Tabel 1. Data pengujian timbangan digital
Hasil percobaan timbangan digital berbasis mikrokontroller ATMega 16 dapat dilihat di http://www.youtube.com/watch?v=7bfCJV9yHos
1.
Spesifikasi
Alat :
Berikut ini adalah spesifikasi dari sistem yang
akan direalisasikan :
1. Tegangan
Operasional Sistem : 12VDC
2. Sumber : Adaptor
3. Mikrokontroler
: ATMEGA16
4. Output : Layar LCD
5. Range Berat : 0 – 3 Kg
2. Diagram Blok :
Gambar 1. Diagram blok sistem kontrol timbangan digital berbasis ATMega16
Sistem minimum ATMEGA16 berfungsi sebagai
pengendali utama untuk mengendalikan system secara keseluruhan. Ketika potensiometer
berubah posisinya, maka masukan input dari ADC internal yang di miliki Atmega16
juga berubah yang menyebabkan perubahan nilai berat yang ditampilkan LCD.
Potensiomter berfungsi untuk menentukan nilai berat yang akan ditampilkan oleh
LCD
3. Cara Kerja Rangkaian :
Jenis timbangan yang digunakan adalah
jenis timbangan pegas. Timbangan berfungsi sebagai alat pokok dalam sistem ini.
Di dalam timbangan ini dipasang sebuah potensiometer geser. Ketika timbangan
mendapatkan beban,maka akan
terjadi perubahan atau pergeseran pada potensiometer.
Karena adanya perubahan pada resistansi, berubah pula tegangan yang di berikan
ke AVR ATMega 16. Di dalam AVR
sudah terintegrasi rangkaian ADC yang mengubah data analog menjadi data digital
yang nantinya bisa di program di dalam AVR. Output dari AVR masuk ke dalam LCD.
Nilai berat yang diterima ditampilkan oleh LCD.
4. Perancangan Hardware
4.1 Timbangan dan Potensiometer
Jenis timbangan yang
digunakan adalah jenis timbangan pegas yang dapat menimbang hingga berat
maksimal 3 kg. Timbangan berfungsi sebagai alat pokok dalam sistem ini. Di
dalam timbangan ini dipasang sebuah potensiometer geser yang biasa digunakan
untuk equalizer pada sebuah pemutar audio seperti tape, radio dan lain-lain.
Potensiometer dipasang secara permanen yang apabila timbangan diberi beban maka
pegas akan menurun dan ikut menggerakan potensiometer tersebut. Semakin berat
beban yang diberikan semakin besar hambatan yang dihasilkan oleh potensiometer.
Gambar 2. Realisasi timbangan pegas berbasis mikrokontroller ATMega16
Gambar 3. Potensiometer geser yang digunakan dalam timbangan pegas
4.2 Mikrokontroller
Sistem minimum yang
ingin digunakan adalah berupa modul mikrokontroler ATMEGA16, mikrokontroler ini memiliki 4 Port, ( Port A sampai port D ),
semuanya ada 40 pin input output.
Gambar 4.
ATMega 16 dalam bentuk fisik
Gambar 5.
Arsitektur ATMega 16
Port
|
Fungsi
|
Keterangan
|
PA0
|
Input
|
Input dari potensiometer
|
PB0 – PB6
|
Output
|
Inisial LCD
|
PC5
|
Tombol
|
Tombol mode
|
PC6
|
Tombol
|
Tombol setting
|
PC7
|
Tombol
|
Tombol setting tambah
|
Tabel 2.
PORT-PORT yang digunakan di dalam modul timbangan digital
4.3 Desain Box
Gambar 6.
Rancangan box timbangan digital
4.4 Skema Rangkaian Timbangan
(ISIS)
4.4.1
Skema
Rangkaian Sistem Minimum :
Gambar 7.
Skema rangkaian system minimum
4.4.2
Skema Rangkaian Timbangan
Gambar 8.
Skema rangkaian timbangan digital
5. Perancangan Software
5.1 Flowchart Program
Sesuai perancangan hardware, maka dapat
dirancang flowchart program yang sesuai dengan fungsi alat yang diinginkan,
berikut gambar rancangan flowchart program :
Gambar 9. Flowchart program timbangan digital
5.2 Listing
Program
Dari
rancangan flowchart program diatas, dapat dirancang program seperti yang
diinginkan, berikut adalah listing program pada mikrokontroler sesuai dengan
rancangan flowchart :
/*****************************************************
This program was produced by the
CodeWizardAVR V2.05.0 Professional
Automatic Program Generator
© Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project :
Version :
Date : 24/05/2014
Author : NeVaDa
Company :
Comments:
Chip type : ATmega16
Program type :
Application
AVR Core Clock frequency: 16,000000 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 256
*****************************************************/
#include <mega16.h>
#include <delay.h>
#include <alcd.h>
#include <stdio.h>
#define ADC_VREF_TYPE 0x00
//deklarasi ADC
#define P5 PINC.5 //deklarasi PINC 5 sebagai P5
#define P6 PINC.6
#define P7 PINC.7
eeprom unsigned char batas,batas1; //pengatur nilai eeprom, batas
sebagai pengatur nilai bulat, batas1 sebagai pengatur nilai desimal
int adc_in; //deklrasi
variabel adc_in bertipe integer
float nilai; //deklrasi
variabel nilai bertipe float
char_buff[33]; //deklarasi
variabel buff untuk penyalaan LCD
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
delay_us(10);
ADCSRA|=0x40;
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}
//global variabel
void main(void)
{
unsigned char a=0,b=0,c; //membuat variabel a, b
diisi dengan 0, dan membuat variabel c
float set; //membuat
variabel set bertipe float
PORTA=0x00; //port A
sebagai input dari ADC dan aktif saat 1
DDRA=0x00;
PORTB=0x00;
DDRB=0x00;
PORTC=0xFF; //PORT C sebagai
input dan aktif saat 0
DDRC=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;
// Timer/Counter 2 initialization
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
MCUCR=0x00;
MCUCSR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
// USART initialization
UCSRB=0x00;
// Analog Comparator initialization
ACSR=0x80;
SFIOR=0x00;
// ADC initialization
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x84;
// SPI initialization
SPCR=0x00;
// TWI initialization
TWCR=0x00;
// Alphanumeric LCD initialization
// Connections specified in the
// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
// RS - PORTB Bit 6
// RD - PORTB Bit 5
// EN - PORTB Bit 4
// D4 - PORTB Bit 3
// D5 - PORTB Bit 2
// D6 - PORTB Bit 1
// D7 - PORTB Bit 0
// Characters/line: 16
lcd_init(16);
//deklarasi menggunakan lcd 16x2
lcd_clear();
lcd_putsf(" Selamat datang ");
delay_ms(2000);
lcd_gotoxy(0,0);
lcd_putsf(" Hashemi Group
");
delay_ms(2000);
//Mengambil data batas maksimal dari eeprom
set=batas;
//nilai batas dimasukkan ke variabel set(untuk pengaturan bilangan bulat
setingan
set=set+(float)batas1/100; //mengatur angka
desimal, nilai batas 1 dibagi 100 dan dijadikan float untuk bilangan desimal
while (1)
{
/*******************************************************
**************** PENGOLAHAN
DATA ADC ******************
*******************************************************/
adc_in = read_adc(0); //Membaca data ADC yang
didapat dari pin ADC0 dimasukkan pada variabel adc_in
nilai =
(float)adc_in*3/1024; //Hasil
pembacaan diolah menggunakan float dengan nilai maksimal=3 kg dan dimasukkan
pada variabel nilai
lcd_gotoxy(0,0); //Penempatan posisi
karakter pada LCD untuk karakter nilai pengukuran
lcd_putsf("Berat :
");
lcd_puts(buff); //Menampilkan data
pada layar LCD
lcd_gotoxy(0,1);
//penempatan layar lcd untuk seting berat
sprintf(buff,"Set : %0.2f kg
",set);
//setting menggunakan satuan kilogram dengan dua angka dibelakang koma
lcd_puts(buff);
delay_ms(300);
/*******************************************************
*************** KONVERSI
SATUAN BERAT *****************
*******************************************************/
if(!P5){a++;if(a>2){a=0;}delay_ms(100);} //Tombol konversi ditekan, maka nilai
var a bertambah, saat a>2 maka kembali ke 0
if(a==0) //saat
ditekan 1 kali, nilai buff diambil dari konversi kilogram
{ //nilai ini
akan dikirimkan pada buff di blok ADC sebagai penampil pengukuran nilai berat
sprintf(buff,"%0.2f
kg ",nilai);
}
if(a==1)
{
nilai=(float)nilai*10;
//dikali 10 untu konversi
ons
sprintf(buff,"%2.1f
ons ",nilai);
}
if(a==2)
{
nilai=(float)nilai*1000; //dikalo 100 untuk
konversi gram
sprintf(buff,"%4.0f
gr ",nilai);
}
/*******************************************************
*************** PENGATURAN
BERAT MAKSIMAL *************
*******************************************************/
if(!P6)
//Program akan bekerja saat tombol Setting atau tombol P6 ditekan
{
b++;
//variabel b terus bertambah dengan 1 saat ditekan
if(b>2) //saat
nilai b lebih dar 2 maka
{
batas=set; //untuk angka
didepan koma: nilai set pada setingan dimasukkan pada var batas
c=set*100; //untuk angka
dibelakang koma: nilai set terlebih dulu dikalikan 100 agar dapat terbaca
karena nilai awalnya masih char dan desimal
c=c%100; //c mod 100 digunakan
untuk mengambil 2 digit terakhir
batas1=c; //memasukkan
nilai c pada variabel batas1
b=0;
//mengembalikan nilai b ke 0
}
delay_ms(200);
}
if(b==1) //saat
tombol P6 ditekan dan b ditekan 1 kali
{
//digunakan untuk mengatur setingan bilangan depan koma
lcd_gotoxy(8,1); //penempatan
posisi lcd
lcd_putsf(" ");
delay_ms(100);
if(!P7)
{delay_ms(100);set=set+1;if(set>3){set=0;}} //saat tombol P7 ditekan, nilai set
ditambahkan 1, sampai set>3 maka kembali menjadi 1
}
if(b==2) //saat
tombol P6 ditekan dan b ditekan 2 kali
{
//digunakan untuk mengatur setingan bilangan belakang koma
lcd_gotoxy(9,1);
lcd_putsf(". ");
delay_ms(100);
if(!P7){delay_ms(100);set=set+0.01;if(set>3){set=0;}} //saat tombol
P7 ditekan, nilai set ditambahkan 0.01, sampai set>3 maka kembali menjadi 1
}
//Saat beben melebihi
maksimal
while(nilai>set) //Untuk nilai
pengukuran lebih besar dari nilai setingan
{
//Pembacaan data ADC digunakan agar selama nilai>set maka
pemberitahuan akan tetap ada
adc_in = read_adc(0); //Membaca data ADC yang
didapat dari pin ADC0 dimasukkan pada variabel adc_in
nilai =
(float)adc_in*3/1024;
lcd_gotoxy(0,0);
lcd_putsf("Beban
melampaui batas ");
}
}
}
H. KESIMPULAN
DAN SARAN
E.1 KESIMPULAN
Berdasarkan dari
pengujian, maka akhirya pembuatan tugas proyek ini dapat diambil beberapa simpulan diantaranya :
1.
Timbangan hanya dapat
membaca berat minimal 0 kg dan maksimal 3 kg
2.
Apabila beban diberi kurang
dari 1 kg, maka timbangan kurang sensitive. Jika diberi beban lebih dari 1 kg,
maka timbangan lebih sensitive.
E.2 SARAN
1.
Sebaiknya digunakan sensor
tekan (berat) yang lebih sensitif sehingga akan terjadi perubahan nilai
tegangan meskipun diberi beban yang ringan.
2.
Sebaiknya digunakan jenis
timbangan yang menggunakan pegas yang lunak dan skala pembacaan berat yang
lebih besar.