You are on page 1of 8

1.

Arduino Uno

Gambar 1. Arduino Uno


Arduino UNO adalah sebuah board mikrokontroler yang didasarkan pada ATmega328
(datasheet). Arduino UNO mempunyai 14 pin digital input/output (6 di antaranya dapat
digunakan sebagai output PWM), 6 input analog, sebuah osilator Kristal 16 MHz, sebuah
koneksi USB, sebuah power jack, sebuah ICSP header, dan sebuat tombol reset. Arduino
UNO memuat semua yang dibutuhkan untuk menunjang mikrokontroler, mudah
menghubungkannya ke sebuah computer dengan sebuah kabel USB atau mensuplainya
dengan sebuah adaptor AC ke DC atau menggunakan baterai untuk memulainya.
Arduino Uno berbeda dari semua board Arduino sebelumnya, Arduino UNO tidak
menggunakan chip driver FTDI USB-to-serial. Sebaliknya, fitur-fitur Atmega16U2
(Atmega8U2 sampai ke versi R2) diprogram sebagai sebuah pengubah USB ke serial. Revisi
2 dari board Arduino Uno mempunyai sebuah resistor yang menarik garis 8U2 HWB ke
ground, yang membuatnya lebih mudah untuk diletakkan ke dalam DFU mode. Revisi 3 dari
board Arduino UNO memiliki fitur-fitur baru sebagai berikut:
Pinout 1.0: ditambah pin SDA dan SCL yang dekat dengan pin AREF dan dua pin
baru lainnya yang diletakkan dekat dengan pin RESET, IOREF yang memungkinkan shieldshield untuk menyesuaikan tegangan yang disediakan dari board. Untuk ke depannya, shield
akan dijadikan kompatibel/cocok dengan board yang menggunakan AVR yang beroperasi
dengan tegangan 5V dan dengan Arduino Due yang beroperasi dengan tegangan 3.3V. Yang
ke-dua ini merupakan sebuah pin yang tak terhubung, yang disediakan untuk tujuan
kedepannya
Sirkit RESET yang lebih kuat
Atmega 16U2 menggantikan 8U2

Uno berarti satu dalam bahasa Italia dan dinamai untuk menandakan keluaran (produk)
Arduino 1.0 selanjutnya. Arduino UNO dan versi 1.0 akan menjadi referensi untuk versi-versi
Arduino selanjutnya.
2. BMP 085

Gambar 2. Sensor BMP085


BMP085 adalah jenis sensor tekanan dengan presisi tinggi, energi rendah, yang dapat
digunakan dalam perangkat mobile. Kinerja yang sangat baik membuat presisi baik mencapai
minimum0.03hPa, dan itu adalah dengan konsumsi daya yang sangat rendah hanya 3u.A,
BMP085 dapat dihubungkan langsung dengan berbagai mikroprosesor s melalui bus I2C.
3. Rangkaian

Gambar 3. Rangkaian Arduino Uno


4. GUI Visual Studio Basic 2010

Gambar 4. GUI
5. Program Arduino Uno
#include <Wire.h>
#define BMP085_ADDRESS 0x77 // I2C address of BMP085
const unsigned char OSS = 0; // Oversampling Setting
// Calibration values
int ac1;
int ac2;
int ac3;
unsigned int ac4;
unsigned int ac5;
unsigned int ac6;
int b1;
int b2;
int mb;
int mc;
int md;
long b5;
short temperature;
long pressure;
const float p0 = 101325;
float altitude;

// Pressure at sea level (Pa)

void setup()
{
Serial.begin(9600);
Wire.begin();
bmp085Calibration();
}
void loop()
{
temperature = (bmp085GetTemperature(bmp085ReadUT())*0.1);
pressure = bmp085GetPressure(bmp085ReadUP());
altitude = (float)44330 * (1 - pow(((float) pressure/p0), 0.190295));
Serial.print("Temperature: ");
Serial.print(temperature, DEC);
Serial.println(" deg C");
Serial.print("Pressure: ");
Serial.print(pressure, DEC);
Serial.println(" Pa");
Serial.print("Altitude: ");
Serial.print(altitude, 2);
Serial.println(" m");
Serial.println();
delay(1000);
}
void bmp085Calibration()
{
ac1 = bmp085ReadInt(0xAA);
ac2 = bmp085ReadInt(0xAC);
ac3 = bmp085ReadInt(0xAE);
ac4 = bmp085ReadInt(0xB0);
ac5 = bmp085ReadInt(0xB2);
ac6 = bmp085ReadInt(0xB4);
b1 = bmp085ReadInt(0xB6);
b2 = bmp085ReadInt(0xB8);
mb = bmp085ReadInt(0xBA);
mc = bmp085ReadInt(0xBC);
md = bmp085ReadInt(0xBE);
}
short bmp085GetTemperature(unsigned int ut)
{
long x1, x2;
x1 = (((long)ut - (long)ac6)*(long)ac5) >> 15;
x2 = ((long)mc << 11)/(x1 + md);
b5 = x1 + x2;
return ((b5 + 8)>>4);
}
long bmp085GetPressure(unsigned long up)
{
long x1, x2, x3, b3, b6, p;
unsigned long b4, b7;
b6 = b5 - 4000;

b6 = b5 - 4000;
// Calculate B3
x1 = (b2 * (b6 * b6)>>12)>>11;
x2 = (ac2 * b6)>>11;
x3 = x1 + x2;
b3 = (((((long)ac1)*4 + x3)<<OSS) + 2)>>2;
// Calculate B4
x1 = (ac3 * b6)>>13;
x2 = (b1 * ((b6 * b6)>>12))>>16;
x3 = ((x1 + x2) + 2)>>2;
b4 = (ac4 * (unsigned long)(x3 + 32768))>>15;
b7 = ((unsigned long)(up - b3) * (50000>>OSS));
if (b7 < 0x80000000)
p = (b7<<1)/b4;
else
p = (b7/b4)<<1;
x1 = (p>>8) * (p>>8);
x1 = (x1 * 3038)>>16;
x2 = (-7357 * p)>>16;
p += (x1 + x2 + 3791)>>4;
return p;
}
char bmp085Read(unsigned char address)
{
unsigned char data;
Wire.beginTransmission(BMP085_ADDRESS);
Wire.write(address);
Wire.endTransmission();
Wire.requestFrom(BMP085_ADDRESS, 1);
while(!Wire.available())
;
return Wire.read();
}
int bmp085ReadInt(unsigned char address)
{
unsigned char msb, lsb;
Wire.beginTransmission(BMP085_ADDRESS);
Wire.write(address);
Wire.endTransmission();
Wire.requestFrom(BMP085_ADDRESS, 2);
while(Wire.available()<2)
;
msb = Wire.read();
lsb = Wire.read();
return (int) msb<<8 | lsb;
}

// Read the uncompensated temperature value


unsigned int bmp085ReadUT()
{
unsigned int ut;
Wire.beginTransmission(BMP085_ADDRESS);
Wire.write(0xF4);
Wire.write(0x2E);
Wire.endTransmission();
delay(5);
ut = bmp085ReadInt(0xF6);
return ut;
}
// Read the uncompensated pressure value
unsigned long bmp085ReadUP()
{
unsigned char msb, lsb, xlsb;
unsigned long up = 0;
Wire.beginTransmission(BMP085_ADDRESS);
Wire.write(0xF4);
Wire.write(0x34 + (OSS<<6));
Wire.endTransmission();
delay(2 + (3<<OSS));
Wire.beginTransmission(BMP085_ADDRESS);
Wire.write(0xF6);
Wire.endTransmission();
Wire.requestFrom(BMP085_ADDRESS, 3);
while(Wire.available() < 3)
;
msb = Wire.read();
lsb = Wire.read();
xlsb = Wire.read();
up = (((unsigned long) msb << 16) | ((unsigned long) lsb << 8) | (unsigned
long) xlsb) >> (8-OSS);
return up;
}

6. Program Tampilan Visual Studio 2010


Imports System.IO.Ports
Imports System
Public Class Form1
Dim receivedData As String = ""
Dim comPort = ""
Delegate Sub SetTextCallback(ByVal [text] As String)

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles


Button1.Click
If (Button1.Text = "Connect") Then
If (comPort <> "") Then
SerialPort1.Close()
SerialPort1.PortName = comPort
SerialPort1.BaudRate = 9600
SerialPort1.Open()
Button1.Text = "Disconnect"
Else
MsgBox("Select a COM port first")
End If
Else
Button1.Text = "Disconnect"
SerialPort1.Close()
Button1.Text = "Connect"
End If
End Sub
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles
MyBase.Load
End Sub
Private Sub ComboBox1_SelectedIndexChanged(sender As System.Object, e As
System.EventArgs) Handles ComboBox1.SelectedIndexChanged
comPort = ComboBox1.Text
End Sub
Private Sub SerialPort1_DataReceived(sender As System.Object, e As
System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
ReceivedText(SerialPort1.ReadExisting())
End Sub
Private Sub ReceivedText(ByVal [text] As String) 'input from ReadExisting
If Me.RichTextBox1.InvokeRequired Then
Dim x As New SetTextCallback(AddressOf ReceivedText)
Me.Invoke(x, New Object() {(text)})
Else
Me.RichTextBox1.Text &= [text] 'append text
End If
End Sub
End Class

7. Hasil

Gambar 5. Hasil Percobaan