Perancangan dan Realisasi Inclinometer Menggunakan Mikrokontroler ATMega 16.

PERANCANGAN DAN REALISASI INCLINOMETER MENGGUNAKAN
MIKROKONTROLER ATMEGA16
Disusun oleh:
Nama : Rudy Halim
NRP

: 0222019

Jurusan Teknik Elektro, Fakulas Teknik, Universitas Kristen Maranatha,
Jalan Prof. Drg. Suria Sumantri, MPH no 65, Bandung, Indonesia,
email : tek1_06@yahoo.com

ABSTRAK
Digital Inclinometer adalah salah satu bentuk dari alat ukur yang mampu
mengukur suatu kemiringan bidang. Digital Inclinometer ini dapat digunakan
untuk keperluan sipil seperti mengukur kemiringan jalan, keperluan arsitektur
untuk mengukur kemiringan suatu bangunan dan lain-lain.
Pada tugas akhir ini telah dibuat Digital Inclinometer menggunakan
mikrokontroler ATMega16 dan sensor sudut ADXL202E yang mampu mengukur
sudut kemiringan suatu bidang pada satu sumbu, yakni sumbu X. Digital
Inclinometer ini mampu mengukur sudut dari range -90o sampai dengan +90o.

Untuk mengukur kemiringan suatu bidang, Digital Inclinometer diletakkan pada
suatu bidang yang hendak diukur kemiringannya, nilai sudut kemiringan dapat
dilihat melalui LCD Display dan indikator lampu LED.
Berdasarkan hasil pengujian diperoleh pengukuran yang didapat oleh
Digital Inclinometer dengan aplikasi pihak ketiga inclinometer iHandy Level pada
ipod Touch menunjukkan hasil pengukuran yang sama per skala 1o. Tingkat
presentasi error pengukuran sudut pada range (-90o hingga -45o) adalah 1.06%,
range (-45o hingga 0o) adalah 4.38% dan range (0o hingga 40o) adalah 11.60%.

Kata kunci : Digital Inclinometer, iHandy Level, mikrokontroler ATMEGA16.

i
Universitas Kristen Maranatha

DESIGNING AND REALIZATION INCLINOMETER USING ATMEGA16
MICROCONTROLLER
Composed by:
Name : Rudy Halim
NRP


: 0222019

Electrical Engineering, Maranatha Christian University,
Jln Prof. Drg. Suria Sumantri, MPH no 65, Bandung, Indonesia,
email : tek1_06@yahoo.com

ABSTRACT
Digital Inclinometer is one of the measurement tools which can measure
inclination of an area. This Digital Inclinometer can be used for civil like
measuring inclination of road, architecture for measuring inclination of building.
In this Final Project has been made a Digital Inclinometer using
ATMEGA16 microcontroller and ADXL202E angle sensor which able to measure
one axis measurement, which is X axis. This Digital Inclinometer capable to
measure from tilt range -90o to +90o. To measure an inclination of an area, put the
Digital Inclinometer in a particular area which will be measured. Inclination
angular value can be seen through LCD Display and LED indicator lamps.
Based on the examination result, the measurement using Digital
Inclinometer and third party inclinometer application iHandy Level on ipod Touch
shows the same measurement on per 1o scale. With inclination measurement error
percentage for range (-90o to -45o) is 1.06%, range (-45o to 0o) is 4.38% and range

(0o to 40o) is 11.60%.

Keyword : Digital Inclinometer, iHandy Level, ATMEGA16 Microcontroller

ii
Universitas Kristen Maranatha

DAFTAR ISI

Halaman
ABSTRAK……………………………………………………………………. i
ABSTRACT…………………………………………………………………… ii
KATA PENGANTAR……………………………………………………….... iii
DAFTAR ISI…………………………………………………………………... v
DAFTAR TABEL……………………………………………………………… viii
DAFTAR GAMBAR ………………………………………………………….. ix

BAB I

PENDAHULUAN


1.1

Latar Belakang ……………………………………………………… 1

1.2

Perumusan Masalah ………………………………………………… 1

1.3

Tujuan……………………………………………………………..... 2

1.4

Pembatasan Masalah………………………………………………... 2

1.5

Sistematika Penulisan……………………………………………….. 3


BAB II

LANDASAN TEORI

2.1

Inclinometer………………………………………………………….4

2.2

Accelerometer ADXL202E…………………………………………. 4

2.2.1

Karakteristik Operasional Accelerometer ADXL202E……………... 5

2.2.2

Konfigurasi Pin-pin pada Accelerometer ADXL202E……………… 5


2.2.3

Cara Kerja Sensor…………………………………………………… 6

2.2.4

Format Pengoperasian Accelerometer ADXL202E………………… 9

2.3

LCD…………………………………………………………………. 10

2.4

Mikrokontroler ATMEGA16……………………………………….. 11

2.4.1

Deskripsi Mikrokontroler ATMEGA16…………………………….. 12

iii
Universitas Kristen Maranatha

2.4.2

Fitur ATMEGA16…………………………………………………... 14

2.4.3

Konfigurasi pin ATMEGA16………………………………………. 14

2.5

CodeVision AVR C Compiler……………………………………… 15

2.6

Operational Amplifier………………………………………………. 20

2.6.1


Op-Amp Differensial………………………………………………... 20

BAB III PERANCANGAN SISTEM
3.1

Desain Sistem……………………………………………………….. 22

3.1.1

Rangkaian Sensor…………………………………………………… 23

3.1.2

Rangkaian Mikrokontroler………………………………………….. 23

3.2

Perencanaan Hardware……………………………………………… 24


3.2.1

Perencanaan Elektronik……………………………………………... 24

3.2.1.1

ATMEGA16………………………………………………………… 24

3.2.1.2

Sensor ADXL202E………………………………………………….. 26

3.2.1.3

LCD Display…………………………………………………………. 26

3.3

Perencanaan Software………………………………………………. 28


BAB IV PENGUJIAN ALAT
4.1

Kalibrasi Sensor Accelerometer dan iHandy Level………………… 31

4.2

Pengujian Output Sensor ADXL202E……………………………… 31

4.3

Pengujian dengan Papan …………………………………………… 33

4.3.1

Perbandingan Sudut Papan Licin pada iHandy Level dengan
Inclinometer………………………………………………………….34

4.4


Analisa Keseluruhan…………………………………………………38

iv
Universitas Kristen Maranatha

BAB V

PENUTUP

5.1

Kesimpulan………………………………………………………….. 39

5.2

Saran………………………………………………………………… 39

DAFTAR PUSTAKA………………………………………………………….. 41
LAMPIRAN A DATASHEET ADXL202E
LAMPIRAN B PROGRAM INCLINOMETER

v
Universitas Kristen Maranatha

DAFTAR TABEL

Halaman
Tabel 2.1 Konfigurasi Pin…………………………………………………….. 5
Tabel 2.2 Konstanta…………………………………………………………… 10
Tabel 3.1 Nilai Resistor untuk menentukan Periode T2……………………… 25
Tabel 4.1 Pengujian dengan papan licin sumbu X (-90o hingga -46o)……….. 35
Tabel 4.2 Pengujian dengan papan licin sumbu X (-45o hingga 0o)………….. 36
Tabel 4.3 Pengujian dengan papan licin sumbu X (1o hingga 40o)…………... 37

vi
Universitas Kristen Maranatha

DAFTAR GAMBAR
Halaman
Gambar 2.1 Port pin-pin pada ADXL202E…………………………………… 5
Gambar 2.2 Ruang Gas pada ADXL202E……………………………………. 6
Gambar 2.3 Hubungan Sensor dengan gravitasi……………………………… 7
Gambar 2.4 Terminologi akselerasi sensor accelerometer …………………… 7
Gambar 2.5 Posisi +1g (perubahan +1g menuju < +1g)……………………… 8
Gambar 2.6 Posisi 0g (perubahan 0g menuju suatu nilai g)………………….. 9
Gambar 2.7 Contoh Pulsa PWM ADXL202E………………………………… 9
Gambar 2.8 LCD 16x2………………………………………………………… 11
Gambar 2.9 Penghubungan LCD dengan mikrokontroler ATMEGA16……… 11
Gambar 2.10 Blok Diagram Fungsional ATMEGA16 ………………………... 13
Gambar 2.11 Konfigurasi pin mikrokontroler ATMEGA16 ………………….. 15
Gambar 2.12 Tampilan CodeWizardAVR pada bagian Chip…………………. 16
Gambar 2.13 Tampilan CodeWizardAVR pada bagian LCD…………………. 17
Gambar 2.14 Tampilan CodeWizardAVR pada bagian Ports…………………. 18
Gambar 2.15 Tampilan CodeWizardAVR pada bagian External IRQ………… 19
Gambar 2.16 Rangkaian Op-Amp Differensial……………………………….. 21
Gambar 3.1 Sistem secara keseluruhan……………………………………….. 22
Gambar 3.2 Arah sumbu pada sensor accelerometer ADXL202E……………. 23
Gambar 3.3 Rangkaian Lampu Indicator LED………………………………... 24
Gambar 3.4 Rangkaian Tombol Kalibrasi…………………………………….. 25
Gambar 3.5 Rangkaian Lengkap Sensor………………………………………. 26
Gambar 3.6 Rangkaian LCD Display…………………………………………. 27
Gambar 3.7 Rangkaian Lengkap Inclinometer………………………………... 28
Gambar 3.8 Diagram Alir Utama……………………………………………… 29
Gambar 3.9 Diagram Alir sub-routine read_adc………………………………. 29
vii
Universitas Kristen Maranatha

Gambar 3.10 Diagram Alir sub-routine Kalibrasi …………………………….. 30
Gambar 3.11 Diagram Alir sub-routine “konversi ke derajat”………………… 30
Gambar 4.1 Hasil output yang dikeluarkan oleh XOUT………………………… 32
Gambar 4.2 Hasil output yang dikeluarkan oleh XFILT………………………… 32
Gambar 4.3 Rangkaian Inclinometer dan iHandy Level………………………. 33

viii
Universitas Kristen Maranatha

LAMPIRAN A
ADXL202E APPLICATION NOTES

LAMPIRAN B
PROGRAM INCLINOMETER

#include
#include
#include
#include
#include
#asm
.equ __lcd_port=0x15 ;PORTB
#endasm
// Alphanumeric LCD Module functions#include
#define ADC_VREF_TYPE 0x00
// Read the AD conversion result
// Declare your global variables here

char lcd_buffer[10];
unsigned int tanda_kalibrasi=1;
unsigned int kalibrasi_h = 0;
unsigned int kalibrasi_l = 0;
void read_adc(void);
void derajat(unsigned char adch,unsigned char adcl);
unsigned char data_table_min [91][4] = {{19,'9','0',0b10000000},
{20,'8','9',0b10000000},
{21,'8','8',0b10000000},
{23,'8','7',0b10000000},
{24,'8','6',0b10000000},
{25,'8','5',0b10000000},
{26,'8','4',0b10000000},
{28,'8','3',0b10000000},
{29,'8','2',0b10000000},
{30,'8','1',0b10000000},
{31,'8','0',0b10000000},
{32,'7','9',0b10000000},
{34,'7','8',0b10000000},
{35,'7','7',0b10000000},
{36,'7','6',0b10000000},
{37,'7','5',0b10000000},
{39,'7','4',0b10000000},

{40,'7','3',0b10000000},
{41,'7','2',0b10000000},
{42,'7','1',0b10000000},
{43,'7','0',0b10000000},
{45,'6','9',0b10000000},
{46,'6','8',0b10000000},
{47,'6','7',0b10000000},
{48,'6','6',0b10000000},
{50,'6','5',0b10000000},
{51,'6','4',0b10000000},
{52,'6','3',0b10000000},
{53,'6','2',0b10000000},
{54,'6','1',0b10000000},
{56,'6','0',0b01000000},
{57,'5','9',0b01000000},
{58,'5','8',0b01000000},
{59,'5','7',0b01000000},
{60,'5','6',0b01000000},
{62,'5','5',0b01000000},
{63,'5','4',0b01000000},
{64,'5','3',0b01000000},
{65,'5','2',0b01000000},
{67,'5','1',0b01000000},
{68,'5','0',0b01000000},
{69,'4','9',0b01000000},
{70,'4','8',0b01000000},
{72,'4','7',0b01000000},
{73,'4','6',0b01000000},
{74,'4','5',0b01000000},
{75,'4','4',0b01000000},
{76,'4','3',0b01000000},
{78,'4','2',0b01000000},
{79,'4','1',0b01000000},
{80,'4','0',0b01000000},
{81,'3','9',0b01000000},
{83,'3','8',0b01000000},
{84,'3','7',0b01000000},
{85,'3','6',0b01000000},
{86,'3','5',0b01000000},
{87,'3','4',0b01000000},
{89,'3','3',0b01000000},
{90,'3','2',0b01000000},
{91,'3','1',0b01000000},
{92,'3','0',0b00100000},
{94,'2','9',0b00100000},
{95,'2','8',0b00100000},

{96,'2','7',0b00100000},
{97,'2','6',0b00100000},
{98,'2','5',0b00100000},
{100,'2','4',0b00100000},
{101,'2','3',0b00100000},
{102,'2','2',0b00100000},
{103,'2','1',0b00100000},
{105,'2','0',0b00100000},
{106,'1','9',0b00100000},
{107,'1','8',0b00100000},
{108,'1','7',0b00100000},
{109,'1','6',0b00100000},
{111,'1','5',0b00100000},
{112,'1','4',0b00100000},
{113,'1','3',0b00100000},
{114,'1','2',0b00100000},
{116,'1','1',0b00100000},
{117,'1','0',0b00100000},
{118,'0','9',0b00100000},
{119,'0','8',0b00100000},
{120,'0','7',0b00100000},
{122,'0','6',0b00100000},
{123,'0','5',0b00010000},
{124,'0','4',0b00010000},
{125,'0','3',0b00010000},
{127,'0','2',0b00010000},
{128,'0','1',0b00010000},
{129,'0','0',0b00010000}
};
unsigned char data_table_max [90][4] = {{130,'0','1',0b00010000},
{131,'0','2',0b00010000},
{133,'0','3',0b00010000},
{134,'0','4',0b00010000},
{135,'0','5',0b00010000},
{136,'0','6',0b00001000},
{138,'0','7',0b00001000},
{139,'0','8',0b00001000},
{140,'0','9',0b00001000},
{141,'0','0',0b00001000},
{142,'1','1',0b00001000},
{144,'1','3',0b00001000},
{145,'1','3',0b00001000},
{146,'1','4',0b00001000},
{147,'1','5',0b00001000},
{149,'1','6',0b00001000},

{150,'1','7',0b00001000},
{151,'1','8',0b00001000},
{152,'1','9',0b00001000},
{153,'2','0',0b00001000},
{155,'2','1',0b00001000},
{156,'2','2',0b00001000},
{157,'2','3',0b00001000},
{158,'2','4',0b00001000},
{160,'2','5',0b00001000},
{161,'2','6',0b00001000},
{162,'2','7',0b00001000},
{163,'2','8',0b00001000},
{164,'2','9',0b00001000},
{166,'3','0',0b00001000},
{167,'3','1',0b00000100},
{168,'3','2',0b00000100},
{169,'3','3',0b00000100},
{171,'3','4',0b00000100},
{172,'3','5',0b00000100},
{173,'3','6',0b00000100},
{174,'3','7',0b00000100},
{175,'3','8',0b00000100},
{177,'3','9',0b00000100},
{178,'4','0',0b00000100},
{179,'4','1',0b00000100},
{180,'4','2',0b00000100},
{182,'4','3',0b00000100},
{183,'4','4',0b00000100},
{184,'4','5',0b00000100},
{185,'4','6',0b00000100},
{186,'4','7',0b00000100},
{188,'4','8',0b00000100},
{189,'4','9',0b00000100},
{190,'5','0',0b00000100},
{191,'5','1',0b00000100},
{193,'5','2',0b00000100},
{194,'5','3',0b00000100},
{195,'5','4',0b00000100},
{196,'5','5',0b00000100},
{197,'5','6',0b00000100},
{199,'5','7',0b00000100},
{200,'5','8',0b00000100},
{201,'5','9',0b00000100},
{202,'6','0',0b00000100},
{204,'6','1',0b00000010},
{205,'6','2',0b00000010},

{206,'6','3',0b00000010},
{207,'6','4',0b00000010},
{208,'6','5',0b00000010},
{210,'6','6',0b00000010},
{211,'6','7',0b00000010},
{212,'6','8',0b00000010},
{213,'6','9',0b00000010},
{215,'7','0',0b00000010},
{216,'7','1',0b00000010},
{217,'7','2',0b00000010},
{218,'7','3',0b00000010},
{219,'7','4',0b00000010},
{221,'7','5',0b00000010},
{222,'7','6',0b00000010},
{223,'7','7',0b00000010},
{224,'7','8',0b00000010},
{226,'7','9',0b00000010},
{227,'8','0',0b00000010},
{228,'8','1',0b00000010},
{229,'8','2',0b00000010},
{230,'8','3',0b00000010},
{232,'8','4',0b00000010},
{233,'8','5',0b00000010},
{234,'8','6',0b00000010},
{235,'8','7',0b00000010},
{237,'8','8',0b00000010},
{238,'8','9',0b00000010},
{239,'9','0',0b00000010}
};

void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In
Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0b11111100;
DDRA=0x00;
// Port B initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In
Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0xff;
// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In
Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;
// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In
Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0xff;
DDRD=0x00;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;

ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud rate: 9600
UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x67;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
// ADC initialization
// ADC Clock frequency: 86.400 kHz

// ADC Voltage Reference: AREF pin
// ADC Auto Trigger Source: None
ADMUX=0b00000010;
ADCSRA=0b10100011;
// LCD module initialization
lcd_init(16);
lcd_gotoxy(0,0);
lcd_putsf(" INCLINOMETER");
delay_ms(1000);
lcd_gotoxy(0,1);
lcd_putsf(" RUDEE 022019");
delay_ms(1500);
lcd_gotoxy(0,0);
lcd_putsf("
");
delay_ms(1000);
lcd_gotoxy(0,1);
lcd_putsf("
");
delay_ms(1000);
while (1)
{
read_adc();
delay_ms(500);
if(PIND.2 ==0)
{
ambil_kalibrasi();
}
};
}
void read_adc(void)
{
unsigned char data_adc10_h;
unsigned char data_adc10_l;
unsigned int temp_data_adc;
ADCSRA = ADCSRA | 0b01000000; //(1