PENGUKURAN KEMIRINGAN MENGGUNAKAN ACCELEROMETER MMA7260 DENGAN CODEVISION AVR TERKALIBRASI

Sensor accelerometer mma7260 buatan Freescale Semiconductor ini mempunyai 6 buah fungsi yaitu untuk mengukur gerakan (movement), getaran (vibration), jatuh (fall), kemiringan (tilt), posisi (positioning) dan benturan (shock).

Saya akan jelaskan bagaimana cara mengakses sensor accelerometer mma7260 untuk mengukur kemiringan (tilt measurement) yang ditampilkan pada LCD 2×16 menggunakan compiler CodeVision AVR.

Berikut adalah schematic accelerometer mma7260.

 

Pada PD.0 dan PD.1 terdapat 2 buah push button yang digunakan untuk melakukan kalibrasi pada accelerometer, dikarenakan output mma7260 masih berupa tegangan analog yang tidak linear. Berikut adalah output sensor mma7260:
 gambar output mma7260 sumbu X, Y, Z
Pada dasarnya model matematis persamaan garis diatas sudah diketahui dengan mengacu pada application note AN3107 Measuring Tilt with Low-g Accelerometers.pdf adalah sebagai berikut:
Vout=Voffset+((sensitivitas)*1g *sin θ)
Vout adalah tegangan output accelerometer
Voffset adalah VDD/2 atau saat percepatan=0g atau 1,65 Volt
dari persamaan diatas dapat dirubah menjadi:
Vout=Voffset+S*sin θ;         S=sensitivitas

Ada beberapa cara metode untuk melakukan pembacaan kemiringan, yaitu:

1. Measuring Tilt Using One Axis;
Ax=(Voutx-Voffset)/S;
Ax=percepatan sumbu X(gravitasi);
θ= arcsin (Ax);                     dimana θ=kemiringan (sudut)

2. Measuring Tilt Using Two Axis Solution;
menggunakan sumbu X dan Z.
Ax=(Voutx-Voffset)/S;
Az=(Voutz-Voffset)/S;
θ=arctan (Ax/Az);                dimana θ=kemiringan (sudut)

3. Measuring Tilt Using Three Axis Solution
Ax=(Voutx-Voffset)/S;
Az=(Voutz-Voffset)/S;
Ay=(Vouty-Voffset)/S;
ρ=arctan(Ax/√(Ay²+Az²));         →picth
Φ=arctan(Ay/√(Ax²+Az²));         →roll
ø=arctan(√(Ax²+Ay²)/Az);         →yaw
Dimana:
Ax = percepatan sumbu X
Ay = percepatan sumbu Y
Az = percepatan sumbu Z
Pada dasarnya jika kita mengacu pada persamaan garis diatas seharusnya kita sudah dapat menghasilkan pembacaan kemiringan dalam satuan derajat yang sudah presisi. Tapi dikarenakan adanya beberapa kelemahan, yang merujuk pada application note AN3447 yaitu:
Sources of offset errors can occur device to device based on offset variations from trim errors, mechanical stresses from the package and mounting, shifts due to temperature and due to aging. These variables can all change the offset. This can be very significant for many applications. The offset error alone can affect a tilt reading on a flat surface by as much as 12 degrees. That is an unacceptable error for this application.
Untuk menghilangkan ketidaklinearan sensor dan adanya kelemahan seperti yang diatas, maka perlu dilakukan kalibrasi (auto zero) yang mengacu pada application note AN3447 Implementing Auto-Zero Calibration Technique for Accelerometers.pdf. Pada AN3447 ada beberapa metode untuk melakukan kalibrasi diantaranya:

1. Manual 0g X, Y, Z Full Range Calibration
2. Simple 0g X, Y, Z Calibration
3. Freefall Calibration, dan
4. Simple 0g X, 0g Y, +1g Z Calibration

Disini saya akan menggunakan metode kedua yaitu “Simple 0g X, Y, Z Calibration” dengan alasan dapat dilakukan dengan mudah, dengan pengambilan data melalui penekanan tombol (push button). Dimana pada kalibrasi ini data setiap sumbu X, Y dan Z  diambil nilai saat 0g (zero gravitation), 1g (earth gravitation atau one gravitation) dan nilai selisih antara 1g dengan 0g (1g-0g atau dengan kata lain adalah Sensitivitas (S)).
Berikut adalah cuplikan program pengukuran kemiringan (tilt measurement) mma7260 menggunakan dua buah axis X dan Z (Dual Axis XZ) dengan range pengukuran -180 sampai +180 derajat dan cara kalibrasinya, dengan rata-rata error 0.4 derajat (dalam sudut) pada setiap pengukuran.

void kalibrasiZ()
{
if (PIND.0==0 && indeks==3)   // kalibrasi Z
{
g0X = VoutX;              // paralel to earth surface
g0Y = VoutY;            //Z_axis is vertical with Z label UP
g1Z = VoutZ;
indeks=2;
lcd_clear();
lcd_putsf(“proses cal. Z”);
delay_ms(3000);
}
}

void kalibrasiX()
{
if (PIND.0==0 && indeks==2)           // kalibrasi X
{                        //X_axis is vertical with X label UP
g1X = VoutX;
g0Z = VoutZ;
indeks=1;
lcd_clear();
lcd_putsf(“proses cal. X”);
delay_ms(3000);
}
}
void kalibrasiY()
{
if (PIND.0==0 && indeks==1)          //kalibrasi Y
{
g1Y = VoutY;    //Y_axis is vertical with Y label UP
indeks=3;
lcd_clear();
lcd_putsf(“proses cal. Y”);
delay_ms(3000);
}
}

void baca_adc()   //baca adc untuk sumbu X dan Z
{
VoutX = (float)read_adc(0); //0=sumbu X, 1=sumbu Y, 2=sumbu Z
VoutZ = (float)read_adc(2);
}

void hitung_accelerometer()
{
Ax = (float)(VoutX – g0X)/(g1X-g0X);  //persamaan menghitung percepatan X
Az = (float)(VoutZ – g0Z)/(g1Z-g0Z);
sudut = atan2(Ax,Az);     //persamaan menghitung sudut, masih dlm radian
sudut = (sudut*180)/3.14;    //ubah ke dlm sudut
}

void tampilkan_lcd()
{
lcd_putsf(“sudut =”);
ftoa(sudut,1,temp);   //nampilin nilai sudut
lcd_gotoxy(8,0);
lcd_puts(temp);
}

Untuk listing program lengkap yang sudah terkalibrasi dan schematic dapat didownload pada link dibawah ini.

DOWNLOAD PROGRAM DAN SCHEMATIC .

Beberapa application note tentang sensor accelerometer mma7260 yang wajib dijadikan panduan jika anda ingin mengakses sensor tersebut:
Semoga bermanfaat…

Sumber: https://elektro-kontrol.blogspot.co.id/2011/06/pengukuran-kemiringan-menggunakan.html

Leave a Reply