2213100341 anas set laporan fp
TRANSCRIPT
-
8/19/2019 2213100341 Anas SET Laporan FP
1/30
LAPORAN PROYEK AKHIR
SISTEM ELEKTRONIKA TERTANAM
Alat Ukur Tinggi Gedung Meggunakan Sensor BMP180
Oleh :
Anas Maulidi Utama (2213100341)
JURUSAN TEKNIK ELEKTRO
FAKULTAS TEKNOLOGI INDUSTRI
INSTITUT TEKNOLOGI SEPULUH NOPEMBER
SURABAYA
2016
-
8/19/2019 2213100341 Anas SET Laporan FP
2/30
Bidang Studi Elektronika
Jurusan Teknik Elektro
Fakultas Teknologi Industri
INSTITUT TEKNOLOGI SEPULUH NOPEMBER SUR B Y
A. TOPIK PROYEK AKHIR
“Alat Ukur Tinggi Gedung Meggunakan Sensor BMP180”
B. PENDAHULUAN
Mengetahui berapa tinggi suatu gedung bertingkat, pohon, atau tiang bendera
mungkin adalah hal yang tidak penting bagi orang-orang. Namun, bagi suatu
pekerjaan atau aktivitas tertentu, tinggi tersebut adalah informasi yang sangat
membantu.
Tinggi gedung bertingkat akan bermanfaat bagi tukang cat yang mengecat
tembok gedung. Dengan tinggi gedung sang tukang bisa menghitung luas tembok
yang akan dicat, sehingga tukang tersebut bisa memperkirakan berapa ember cat
yang dibutuhkan agar pembelian cat menjadi lebih hemat.
Selain itu, bagi seorang penebang pohon yang tidak bisa menghitung tinggi
pohon, jika penebang tidak tahu tinggi pohon bisa berakibat pada lingkungan sekitar,
seperti rumah di dekat pohon bisa tertimpa pohon. Namun, jika si penebang tahu
tinggi pohon tersebut, si penebang bisa mengukur jangkauan tumbangnya pohon dan
bisa mengarahkan arah tumbang pohon agar lingkungan sekitarnya aman.Terakhir, seseorang membeli tali untuk tiang bendera, namun tidak tahu tinggi
tiang tersebut, sehingga tali yang dibeli terlalu pendek atau terlalu panjang. Untuk
membeli tali yang tepat, orang tersebut membutuhkan tinggi tiang untuk mengetahui
berapa panjang tali yang dibutuhkan.
Dari tiga contoh kasus diatas mengetahui tinggi gedung yang akan dicat untuk
menghitung berapa ember yang dibutuhkan, mengetahui tinggi pohon yang akan di
tebang untuk memperkirakan jangkauan jatuhnya pohon tersebut, dan mengetahui
tinggi tiang bendera untuk mengukur panjang tali. Kegiatan tersebut perlu
mengetahui tinggi objek yang akan mereka hadapi, akan tetapi mereka tidak bisa
mengukur tinggi tersebut karena tidak mungkin mengukur tinggi dengan meteran
dari bawah sampai atas.
Salah satu metode pengukuran tinggi objek yang tidak mungkin diukur dengan
menggunakan alat ukur panjang yang umum adalah dengan menggunakan perbedaan
tekanan antara titik bawah dan titik atas objek. Hal ini dikarenakan di dalam teori
fisika, terdapat hubungan antara tekanan udara dan ketinggian tempat. Secara
-
8/19/2019 2213100341 Anas SET Laporan FP
3/30
Bidang Studi Elektronika
Jurusan Teknik Elektro
Fakultas Teknologi Industri
INSTITUT TEKNOLOGI SEPULUH NOPEMBER SUR B Y
sederhana, di dalam suatu fluida homogen, hubungan antara tekanan dan kedalaman
zat cair adalah
Hal ini juga berlaku pada tekanan udara di mana tekanan udara memiliki hubungan
tertentu dengan ketinggian tempat. Namun, rumus di atas tidak bias dipakai karena
zat yang terkandung di dalam udara lebih heterogen dan lebih kompleks. Sehingga,
bisa digunakan hubungan empiris antara tekanan dan ketinggian udara yang salah
satu persamaannya adalah sebagai berikut:
( )
h : ketinggian di atas permukaan laut (mdpl)
P : tekanan yang terukur
P0 : tekanan di atas permukaan laut (asumsi: 101325 Pa)
C. RUMUSAN MASALAH
Pada proyek ini, pengukuran tinggi gedung akan diukur melalui pengukuran
tekanan antara dasar objek dan bagian atas objek. Pengukuran tekanan dilakukan
dengan menggunakan dua buah BMP180, dua buah mikrokontroler, dua buah LCD
16x2, dan modul RF 433 MHz. Suplai yang digunakan pada proyek kali ini berasa
dari dua buah power bank .
D. DESKRIPSI PROYEK
Proyek akhir ini bertujuan untuk menghasilkan alat pengukur tinggi objek
yang murah dan portable sehingga mudah digunakan oleh orang-orang. Proyek inimenggunakan dua mikrokontroler ATMega16, dua sensor barometer BMP180,
modul RF 433 MHz, dua LCD 16x2, dan modul USB to TTL.
-
8/19/2019 2213100341 Anas SET Laporan FP
4/30
Bidang Studi Elektronika
Jurusan Teknik Elektro
Fakultas Teknologi Industri
INSTITUT TEKNOLOGI SEPULUH NOPEMBER SUR B Y
Gambar 1 Cara Kerja Sistem
Cara kerja sistem ini ditunjukkan seperti diagram blok di atas. Transmitter
akan diletakkan di lantai dasar, sedangkan receiver akan diletakkan di lantai atas
yang ingin diukur ketinggiannya. Pada bagian transmitter , proses-proses yang
dilakukan adalah sebagai berikut:
1. Tekanan dari BMP180 yang ada di transmitter dibaca oleh Mikrokontroler
ATMega16 melalui i2c.
2. Suhu dan tekanan yang terukur akan ditampilkan di LCD 16x2.
3. Tekanan yang terukur tadi akan ditransmisikan melalui modul Tx RF 433
MHz dengan protokol khusus untuk menghindari kesalahan data yang diterima
receiver .
Sedangkan pada bagian receiver , proses-proses yang dilakukan adalah sebagai berikut:
1. Data dari transmitter akan diterima akan diambil melalui modul Rx RF 433
MHz.
2. Data tersebut akan dicek di Mikrokontroler ATMega 16 yang ada di receiver
apakah sudah benar atau tidak dengan mengecek menggunakan protokol yang
dikirimkan transmitter .
3. Tekanan dari BMP180 yang ada di receiver akan dibaca oleh ATMega 16
melalui i2c.
-
8/19/2019 2213100341 Anas SET Laporan FP
5/30
Bidang Studi Elektronika
Jurusan Teknik Elektro
Fakultas Teknologi Industri
INSTITUT TEKNOLOGI SEPULUH NOPEMBER SUR B Y
4. Tekanan-tekanan yang diperoleh, baik yang diperoleh dari Rx RF 433 MHz
maupun pembacaan BMP180, akan dikonversikan menjadi tinggi terhadap
permukaan laut menggunkan rumus:
()
5. Dari tinggi yang diperoleh dari tekanan BMP180 dan dari penerimaan data Rx
RFF 433 MHz, diperoleh tinggi gedung. Secara matematis dapat dituliskan:
E.
PERANCANGAN HARDWARE
Sebelum masuk ke perancangan hardware, divais-divais yang akan digunakan
di dalam proyek ini adalah sebagai berikut:
BMP 180
Gambar 2 BMP180
BMP 180 merupakan sensor tekanan yang di dalamnya juga tersedia
pengukurann suhu. Untuk membaca hasil pengukuran tekanan dan suhu dari
BMP harus dilakukan melalu i2c yang langkah-langkahnya terdapat di dalam
datasheet BMP180. Mikrokontroler ATMega16
Gambar 3 ATMega16
-
8/19/2019 2213100341 Anas SET Laporan FP
6/30
Bidang Studi Elektronika
Jurusan Teknik Elektro
Fakultas Teknologi Industri
INSTITUT TEKNOLOGI SEPULUH NOPEMBER SUR B Y
ATMega16 merupakan salah satu mikrokontroler keluaran ATMEL.
Mikrokontoler ini memiliki 40 pin yang di dalamnya juga sudah terdapat
beberapa fitur, di antaranya:
8 pin Analaog to Digital Converter (ADC)
I2C
Serial Communication
32 pin input/output digital
Internal clock hingga 8 MHz
Timer/Counter serta PWM Generator
LCD 16x2
Gambar 4 LCD 16x2
LCD merupakan salah satu interface yang berupa output display untuk
pengguna. 16x memiliki makna LCD ini memiliki dua baris dengan jumlah
karakter maksimal yang dapat ditampilkan adalah 16 karakter.
Modul RF 433 MHz
Gambar 5 Modul RF433MHz
Modul ini merupakan modul untuk modulasi data ke sinyal pembawa dengan
menggunakan metode ASK sehingga data dari transmitter ke receiver bias
dikirimkan secara nirkabel.
-
8/19/2019 2213100341 Anas SET Laporan FP
7/30
Bidang Studi Elektronika
Jurusan Teknik Elektro
Fakultas Teknologi Industri
INSTITUT TEKNOLOGI SEPULUH NOPEMBER SUR B Y
Pada bagian transmitter , port-port mikrokontroler yang akan dipakai adalah
sebagai berikut:
PORTB 0,1,2,3 sebagai port data untuk LCD
PORTB 5 sebagai pin E untuk LCD
PORTB 6 sebagai pin R/W untuk LCD
PORTB 7 sebagai pin RS untuk LCD
PORTC 1 sebagai SCL untuk i2c BMP180
PORTC 0 sebagai SDA untuk i2c BMP180
PORTD 1 sebagai tx untuk mengirim data melalui RF433MHz
Pada bagian receiver , port-port mikrokontroler yang dipakai adalah sebagai
berikut:
PORTB 0,1,2,3 sebagai port data untuk LCD
PORTB 5 sebagai pin E untuk LCD
PORTB 6 sebagai pin R/W untuk LCD
PORTB 7 sebagai pin RS untuk LCD
PORTC 1 sebagai SCL untuk i2c BMP180
PORTC 0 sebagai SDA untuk i2c BMP180
PORTD 0 sebagai rx untuk menerima data melalui RF433MHz
F. PEMBUATAN SOFTWARE
Agar sistem bisa bekerja sesuai keinginan, program yang diisikan ke dalam
mikrokontroler yang digunakan harus tepat. Dalam proyek ini, CodeVision AVR
digunakan dalam membuat program tersebut. Untuk list program keseluruahan, baik
transmitter maupun receiver , terlampir di akhir laporan ini.
-
8/19/2019 2213100341 Anas SET Laporan FP
8/30
Bidang Studi Elektronika
Jurusan Teknik Elektro
Fakultas Teknologi Industri
INSTITUT TEKNOLOGI SEPULUH NOPEMBER SUR B Y
G. REALISASI PROYEK AKHIR
Gambar 6 Transmitter
Gambar 7 Receiver
-
8/19/2019 2213100341 Anas SET Laporan FP
9/30
Bidang Studi Elektronika
Jurusan Teknik Elektro
Fakultas Teknologi Industri
INSTITUT TEKNOLOGI SEPULUH NOPEMBER SUR B Y
Dari gambar 2 dan gambar 3 masing-masing merupakan realisasi transmitter
dan receiver proyek ini. Pada bagian receiver , LCD 16x2, BMP180, dan Rx
RF433MHz dibuatkan sebuah shield agar bisa diletakkan di atas mikrokontroler
ATMega16 sehingga lebih mudah untuk dibawa.
Salah satu pengujian yang telah dilakukan adalah pengukuran ketinggian
antara lantai 2 dan lantai 3 Gedung B Jurusan Teknik Elektro ITS Surabaya. Dan
dari data yang ditampilkan di LCD pada Receiver didapatkan ketinggian sekitar 4.68
meter. Tampilan terlihat seperti pada gambar 4 di bawah ini.
Gambar 8 Hasil Pengujian Pengukuran Ketinggian
H. KESIMPULAN DAN SARAN
Kesimpulan
1. Alat ini lebih praktis digunakan dalam melakukan pengukuran tinggi gedung
atau bangunan jika dibandingkan alat ukur tinggi gedung lain seperti theodolit .
2. Masalah terbesar terdapat pada modul transmitter karena jika banyak orang
yang mnggunakan frekuensi 433 MHz, data yang diterima sering mengalami
error.
Saran
1. Dibutuhkan power yang besar dan antenna yang tepat di bagian transmitter agar
jarak transmitter dan receiver bisa lebih jauh.
-
8/19/2019 2213100341 Anas SET Laporan FP
10/30
Bidang Studi Elektronika
Jurusan Teknik Elektro
Fakultas Teknologi Industri
INSTITUT TEKNOLOGI SEPULUH NOPEMBER SUR B Y
I. LAMPIRAN
Bagian-bagian Transmitter :
1. Power Bank sebagai supplai Mikrokontroler, LCD, dan BMP180
2.
Mikrokontroler ATMega 16 sebagai tempat pemrosesan data
3. Tx RF433MHz sebagai media pengirim data ke Receiver tanpa melalui kabel
4. LCD 16x2 sebagai penampil data tekanan dan suhu
5.
BMP180 sebagai sensor tekanan dan suhu
-
8/19/2019 2213100341 Anas SET Laporan FP
11/30
Bidang Studi Elektronika
Jurusan Teknik Elektro
Fakultas Teknologi Industri
INSTITUT TEKNOLOGI SEPULUH NOPEMBER SUR B Y
Bagian-bagian receiver :
1.
Power Bank sebagai supplai Mikrokontroler, LCD, dan BMP180
2. Tx RF433MHz sebagai media pengirim data ke Receiver tanpa melalui kabel
3. LCD 16x2 sebagai penampil data tekanan dan suhu
4.
BMP180 sebagai sensor tekanan dan suhu
5. Mikrokontroler ATMega 16 sebagai tempat pemrosesan data
-
8/19/2019 2213100341 Anas SET Laporan FP
12/30
Bidang Studi Elektronika
Jurusan Teknik Elektro
Fakultas Teknologi Industri
INSTITUT TEKNOLOGI SEPULUH NOPEMBER SUR B Y
List Program
Transmitter
/*****************************************************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 : 10/01/2016
Author :
Company :
Comments:
Chip type : ATmega16
Program type : Application
AVR Core Clock frequency: 8,000000 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 256
*****************************************************/
#include
#include
#include
#include
#include
// I2C Bus functions
#asm
.equ __i2c_port=0x15 ;PORTC
.equ __sda_bit=0
.equ __scl_bit=1
#endasm
#include
// Alphanumeric LCD Module functions
#include
// Standard Input/Output functions
#include
// Declare your global variables here
-
8/19/2019 2213100341 Anas SET Laporan FP
13/30
Bidang Studi Elektronika
Jurusan Teknik Elektro
Fakultas Teknologi Industri
INSTITUT TEKNOLOGI SEPULUH NOPEMBER SUR B Y
#include
#define BMP180_FILTERPRESSURE 1 //avarage filter for pressure
#define BMP180_AUTOUPDATETEMP 1#define BMP180_MODE 0
#define BMP180_UNITPAOFFSET 0 //define a unit offset (pa)
#define BMP180_UNITMOFFSET 0 //define a unit offset (m)
// Declare your global variables here
float suhu;
char buffsuhu[16];
long tekanan;
char bufftekanan[16];
float ketinggian;
char buffketinggian[16];
int bmp180_regac1, bmp180_regac2, bmp180_regac3, bmp180_regb1,
bmp180_regb2, bmp180_regmb, bmp180_regmc, bmp180_regmd;
unsigned int bmp180_regac4, bmp180_regac5, bmp180_regac6;
long bmp180_rawtemperature, bmp180_rawpressure;
void bmp180_writemem(unsigned char reg, unsigned char value) {
i2c_start();
i2c_write(0xEE);
i2c_write(reg);i2c_write(value);
i2c_stop();
}
void bmp180_readmem(unsigned char reg, unsigned char buff[], unsigned char
bytes) {
unsigned char i =0;
i2c_start();
i2c_write(0xEE);
i2c_write(reg);
i2c_start();i2c_write(0xEF);
for(i=0; i
-
8/19/2019 2213100341 Anas SET Laporan FP
14/30
Bidang Studi Elektronika
Jurusan Teknik Elektro
Fakultas Teknologi Industri
INSTITUT TEKNOLOGI SEPULUH NOPEMBER SUR B Y
memset(buff, 0, sizeof(buff));
bmp180_readmem(0xAA, buff, 2);
bmp180_regac1 = ((int)buff[0]
-
8/19/2019 2213100341 Anas SET Laporan FP
15/30
Bidang Studi Elektronika
Jurusan Teknik Elektro
Fakultas Teknologi Industri
INSTITUT TEKNOLOGI SEPULUH NOPEMBER SUR B Y
bmp180_getrawtemperature();
bmp180_writemem(0xF4, 0x34+(BMP180_MODE > 11;
x2 = (bmp180_regac2 * b6) >> 11;
x3 = x1 + x2;
b3 = (((((long)bmp180_regac1) * 4 + x3) > 2;
x1 = (bmp180_regac3 * b6) >> 13;
x2 = (bmp180_regb1 * ((b6 * b6) >> 12)) >> 16;
x3 = ((x1 + x2) + 2) >> 2;
b4 = (bmp180_regac4 * (unsigned long int)(x3 + 32768)) >> 15;
b7 = ((unsigned long int)up - b3) * (50000 >> BMP180_MODE);
p = b7 < 0x80000000 ? (b7 8) * (p >> 8);
x1 = (x1 * 3038) >> 16;
x2 = (-7357 * p) >> 16;
bmp180_rawpressure = p + ((x1 + x2 + 3791) >> 4);}
float bmp180_gettemperature() {
float temperature;
bmp180_getrawtemperature();
temperature = ((bmp180_rawtemperature + 8)>>4);
temperature = temperature /10;
return temperature;
}
long int bmp180_getpressure() { bmp180_getrawpressure();
return bmp180_rawpressure + BMP180_UNITPAOFFSET;
}
float bmp180_getaltitude() {
return ((1 - pow(bmp180_getpressure()/(float)101325, 0.1903 )) /
0.0000225577) + BMP180_UNITMOFFSET;
}
void bmp180_init() {
bmp180_getcalibration(); //get calibration data bmp180_getrawtemperature(); //update raw temperature, at least the first time
-
8/19/2019 2213100341 Anas SET Laporan FP
16/30
Bidang Studi Elektronika
Jurusan Teknik Elektro
Fakultas Teknologi Industri
INSTITUT TEKNOLOGI SEPULUH NOPEMBER SUR B Y
}
void datatx(unsigned char data)
{while ( !( UCSRA & (116) & 0b11111111);
//buffer[2]=1;
buffer[2]=(unsigned char)((data>>8) & 0b11111111);
//buffer[4]='
-
8/19/2019 2213100341 Anas SET Laporan FP
17/30
Bidang Studi Elektronika
Jurusan Teknik Elektro
Fakultas Teknologi Industri
INSTITUT TEKNOLOGI SEPULUH NOPEMBER SUR B Y
// 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=0x00;
DDRD=0x00;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=0xFF
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=0xFFFF// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 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: Timer2 Stopped// Mode: Normal top=0xFF
-
8/19/2019 2213100341 Anas SET Laporan FP
18/30
Bidang Studi Elektronika
Jurusan Teknik Elektro
Fakultas Teknologi Industri
INSTITUT TEKNOLOGI SEPULUH NOPEMBER SUR B Y
// 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: Off
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 9600
UCSRA=0x00;
UCSRB=0x08;
UCSRC=0x86;UBRRH=0x00;
UBRRL=0x33;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
// ADC initialization
// ADC disabledADCSRA=0x00;
// SPI initialization
// SPI disabled
SPCR=0x00;
// TWI initialization
// TWI disabled
TWCR=0x00;
// I2C Bus initializationi2c_init();
-
8/19/2019 2213100341 Anas SET Laporan FP
19/30
Bidang Studi Elektronika
Jurusan Teknik Elektro
Fakultas Teknologi Industri
INSTITUT TEKNOLOGI SEPULUH NOPEMBER SUR B Y
// Alphanumeric LCD initialization
// Connections specified in the
// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:// RS - PORTB Bit 7
// RD - PORTB Bit 6
// EN - PORTB Bit 5
// D4 - PORTB Bit 3
// D5 - PORTB Bit 2
// D6 - PORTB Bit 1
// D7 - PORTB Bit 0
// Characters/line: 16
lcd_init(16);
lcd_gotoxy(0,0);
lcd_puts("BBB");
bmp180_init();
while (1)
{
// Place your code here
suhu=bmp180_gettemperature();tekanan=bmp180_getpressure();
ketinggian=bmp180_getaltitude();
ftoa(suhu,1,buffsuhu);
ltoa(tekanan,bufftekanan);
ftoa(ketinggian,2,buffketinggian);
sendPressure(tekanan,suhu);
//datatx(113);
lcd_gotoxy(0,0);
lcd_putsf("T:");lcd_puts(buffsuhu);lcd_putchar((char)223);lcd_putsf("C");lcd_gotoxy(0,1);
lcd_putsf("P:");lcd_puts(bufftekanan);lcd_putsf("Pa ");
delay_ms(500);
//lcd_gotoxy(0,0);
//lcd_puts("AAAAA");
}
}
-
8/19/2019 2213100341 Anas SET Laporan FP
20/30
Bidang Studi Elektronika
Jurusan Teknik Elektro
Fakultas Teknologi Industri
INSTITUT TEKNOLOGI SEPULUH NOPEMBER SUR B Y
Receiver
/*****************************************************
This program was produced by theCodeWizardAVR V2.05.0 Professional
Automatic Program Generator
© Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project :
Version :
Date : 11/01/2016
Author :
Company :
Comments:
Chip type : ATmega16
Program type : Application
AVR Core Clock frequency: 8,000000 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 256
*****************************************************/
#include #include
#include
#include
#include
#include
// I2C Bus functions#asm
.equ __i2c_port=0x15 ;PORTC
.equ __sda_bit=0
.equ __scl_bit=1
#endasm
#include
// Alphanumeric LCD Module functions
#include
#ifndef RXB8
#define RXB8 1
#endif
#ifndef TXB8#define TXB8 0
-
8/19/2019 2213100341 Anas SET Laporan FP
21/30
Bidang Studi Elektronika
Jurusan Teknik Elektro
Fakultas Teknologi Industri
INSTITUT TEKNOLOGI SEPULUH NOPEMBER SUR B Y
#endif
#ifndef UPE
#define UPE 2#endif
#ifndef DOR
#define DOR 3
#endif
#ifndef FE
#define FE 4
#endif
#ifndef UDRE
#define UDRE 5
#endif
#ifndef RXC
#define RXC 7
#endif
#define FRAMING_ERROR (1
-
8/19/2019 2213100341 Anas SET Laporan FP
22/30
Bidang Studi Elektronika
Jurusan Teknik Elektro
Fakultas Teknologi Industri
INSTITUT TEKNOLOGI SEPULUH NOPEMBER SUR B Y
{
// datarx[z]=UDR;
// z++;
// if(z>19){z=0;}char jumlah;
if(penanda==0)
{
if(UDR==']') penanda=1;
else penanda=0;
}
else if(penanda==1)
{
switch(datake){
case 0: datanya[datake]=UDR;datake++;break;
case 1: datanya[datake]=UDR;datake++;break;
case 2: datanya[datake]=UDR;datake++;break;
case 3: datanya[datake]=UDR;datake++;break;
case 4: datanya[datake]=UDR;datake++;break;
case 5: datanya[datake]=UDR;
penanda=0;
datake=0;
jumlah=(int)(datanya[0]+datanya[1]+datanya[2]+datanya[3]+datanya[4])%256;
if(datanya[5]==jumlah)
{konversi_tekanan_ke_long();
}
break;
}
}
}
void getAnotherPressure()
{
int temp[3];
temp[0]=datanya[0];
temp[1]=datanya[1];temp[2]=datanya[2];
for(iter=0;iter
-
8/19/2019 2213100341 Anas SET Laporan FP
23/30
Bidang Studi Elektronika
Jurusan Teknik Elektro
Fakultas Teknologi Industri
INSTITUT TEKNOLOGI SEPULUH NOPEMBER SUR B Y
}
}
datanya[0]=Pr[0];
if(Pr[1]==1){
datanya[1]=Pr[2];
if(Pr[3]=='
-
8/19/2019 2213100341 Anas SET Laporan FP
24/30
Bidang Studi Elektronika
Jurusan Teknik Elektro
Fakultas Teknologi Industri
INSTITUT TEKNOLOGI SEPULUH NOPEMBER SUR B Y
i2c_write(0xEF);
for(i=0; i
-
8/19/2019 2213100341 Anas SET Laporan FP
25/30
Bidang Studi Elektronika
Jurusan Teknik Elektro
Fakultas Teknologi Industri
INSTITUT TEKNOLOGI SEPULUH NOPEMBER SUR B Y
//calculate raw temperature
x1 = ((long)ut - bmp180_regac6) * bmp180_regac5 >> 15;
x2 = ((long)bmp180_regmc 11;
x2 = (bmp180_regac2 * b6) >> 11;x3 = x1 + x2;
b3 = (((((long)bmp180_regac1) * 4 + x3) > 2;
x1 = (bmp180_regac3 * b6) >> 13;
x2 = (bmp180_regb1 * ((b6 * b6) >> 12)) >> 16;
x3 = ((x1 + x2) + 2) >> 2;
b4 = (bmp180_regac4 * (unsigned long int)(x3 + 32768)) >> 15;
b7 = ((unsigned long int)up - b3) * (50000 >> BMP180_MODE);
p = b7 < 0x80000000 ? (b7 8) * (p >> 8);
x1 = (x1 * 3038) >> 16;
x2 = (-7357 * p) >> 16; bmp180_rawpressure = p + ((x1 + x2 + 3791) >> 4);
}
float bmp180_gettemperature() {
float temperature;
bmp180_getrawtemperature();
temperature = ((bmp180_rawtemperature + 8)>>4);
temperature = temperature /10;
return temperature;
}
long int bmp180_getpressure() {
-
8/19/2019 2213100341 Anas SET Laporan FP
26/30
Bidang Studi Elektronika
Jurusan Teknik Elektro
Fakultas Teknologi Industri
INSTITUT TEKNOLOGI SEPULUH NOPEMBER SUR B Y
bmp180_getrawpressure();
return bmp180_rawpressure + BMP180_UNITPAOFFSET;
}
float bmp180_getaltitude() {
return ((1 - pow(bmp180_getpressure()/(float)101325, 0.1903 )) /
0.0000225577) + BMP180_UNITMOFFSET;
}
void bmp180_init() {
bmp180_getcalibration(); //get calibration data
bmp180_getrawtemperature(); //update raw temperature, at least the first time
}
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
char buffer[50];
char buffP0[16];
char buffT0[16];
float T0a;float suhu;
char buffsuhu[16];
long tekanan, suhub;
char bufftekanan[16];;
float deltah;
char deltahv[16];
PORTA=0x00;
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=0x00;
// 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
-
8/19/2019 2213100341 Anas SET Laporan FP
27/30
Bidang Studi Elektronika
Jurusan Teknik Elektro
Fakultas Teknologi Industri
INSTITUT TEKNOLOGI SEPULUH NOPEMBER SUR B Y
// 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=0x00;
DDRD=0x00;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=0xFF
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=0xFFFF
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 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: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// External Interrupt(s) initialization
-
8/19/2019 2213100341 Anas SET Laporan FP
28/30
Bidang Studi Elektronika
Jurusan Teknik Elektro
Fakultas Teknologi Industri
INSTITUT TEKNOLOGI SEPULUH NOPEMBER SUR B Y
// 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=0x98;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x33;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;SFIOR=0x00;
// ADC initialization
// ADC disabled
ADCSRA=0x00;
// SPI initialization
// SPI disabled
SPCR=0x00;
// TWI initialization// TWI disabled
TWCR=0x00;
// I2C Bus initialization
i2c_init();
// Alphanumeric LCD initialization
// Connections specified in the
// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
// RS - PORTB Bit 7
// RD - PORTB Bit 6// EN - PORTB Bit 5
-
8/19/2019 2213100341 Anas SET Laporan FP
29/30
Bidang Studi Elektronika
Jurusan Teknik Elektro
Fakultas Teknologi Industri
INSTITUT TEKNOLOGI SEPULUH NOPEMBER SUR B Y
// D4 - PORTB Bit 3
// D5 - PORTB Bit 2
// D6 - PORTB Bit 1
// D7 - PORTB Bit 0// Characters/line: 16
lcd_init(16);
bmp180_init();
lcd_clear();
#asm("sei")
lcd_gotoxy(0,0);
lcd_putsf("Pengukur Tinggi");
lcd_gotoxy(0,1);
lcd_putsf("Gedung");
delay_ms(1500);
lcd_clear();
while (1)
{
// Place your code here
T0b=(long)T0;
T0a=(float)T0 / 100;
tekanan=bmp180_getpressure();
suhu=bmp180_gettemperature();
suhub=(long)(suhu * 100);if(PINA.0==0 && P0!=0){
deltap=tekanan-P0;
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("Calibrating...");
delay_ms(5000);
lcd_clear();
}
deltah=((1 - pow(tekanan/(float)101325, 0.1903 )) / 0.0000225577)-((1 -
pow(P0/(float)101325, 0.1903 )) / 0.0000225577);
ftoa(deltah, 2, deltahv);ftoa(suhu,2,buffsuhu);
ftoa(T0a,2,buffT0);
ltoa(tekanan,bufftekanan);
ltoa(P0, buffP0);
lcd_gotoxy(0,0);
lcd_putsf("T:");lcd_puts(buffsuhu);lcd_putchar((char)223);lcd_putsf("C ");
lcd_gotoxy(0,1);
lcd_putsf("P:");lcd_puts(bufftekanan);lcd_putsf("Pa ");
delay_ms(1500);
lcd_gotoxy(0,0);
-
8/19/2019 2213100341 Anas SET Laporan FP
30/30
Bidang Studi Elektronika
Jurusan Teknik Elektro
Fakultas Teknologi Industri
INSTITUT TEKNOLOGI SEPULUH NOPEMBER SUR B Y
lcd_putsf("T:");lcd_puts(buffT0);lcd_putchar((char)223);lcd_putsf("C ");
lcd_gotoxy(0,1);
lcd_putsf("P:");lcd_puts(buffP0);lcd_putsf("Pa ");
delay_ms(1500);
lcd_gotoxy(0,0);
lcd_putsf("Tinggi: ");
lcd_gotoxy(0,1);
lcd_puts(deltahv);lcd_putsf("m ");
delay_ms(1500);
sprintf(buffer,"%6li:%4li:%6li:%4li:0",P0,T0b,tekanan,suhub);
delay_ms(100);
puts(buffer);
delay_ms(100);
// sprintf(bufftekanan,"%6li",tekanan);
// lcd_gotoxy(0,1);
// lcd_putsf("P2:");lcd_puts(bufftekanan);//lcd_putsf("Pa ");
// //getAnotherPressure();
// sprintf(buffP0,"%6li",P0);
// lcd_gotoxy(0,0);
// lcd_putsf("P1:");lcd_puts(buffP0);//lcd_putsf("Pa ");
//
// deltah=((1 - pow(tekanan/(float)101325, 0.1903 )) / 0.0000225577)-((1 -
pow(P0/(float)101325, 0.1903 )) / 0.0000225577);// ftoa(deltah,2,deltahv);
// lcd_gotoxy(11,0);
// lcd_puts(deltahv);//lcd_putsf("Pa ");
}
}