Rabu, 29 Juni 2011

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…

11 komentar:

  1. bagaimana model instruksi pada code vision AVR untuk mencari nila sudut XY dan YZ???

    BalasHapus
  2. klo untukmencari sudut menggunakan sumbu X dan Y atau Y dan Z, tinggal diubah aja pada subprogram
    void hitung_accelerometer()

    BalasHapus
  3. salam kenal,
    apkh program tsb dpt juga digunakan pd accelero type MMA7361..
    trimakasih

    BalasHapus
  4. Makasih gan postingannya..
    sangat bermanfaat...
    nilai yang muncul kok hanya sudut 90,45,63, saja.. yang lainnya g muncul

    BalasHapus
  5. salam
    kalo ini bisa untuk mengukur media (persegi ) dalam kondisi bergerak dan apakah ada display unutuk monitoring dan apakah bisa dikomunasikan dengan pc.
    salam

    BalasHapus
  6. kok outputannya yag ditampilkan d LCD mudah berubah y padahal dalam posisi sudut 0. kira2 knp y??

    BalasHapus
    Balasan
    1. memang seperti itu, karena karakteristik dari sensor accelerometer itu sendiri memiliki noise yang cukup besar. klo anda tidak percaya silakan liat gambar keluaran accelerometer pada entri FUSION SENSOR ACCELEROMETER DAN GYROSCOPE MENGGUNAKAN ALGORITMA COMPLEMENTARY FILTER. tapi klo ingin memperhalus keluaran dari sensor tersebut lebih baik difilter terlebih dahuli menggunakan filter moving average.

      Hapus
  7. mas posting tentang SPI dan I2C dong..
    lagi nyoba akses ke accelerometer H48C
    matur nwun mas

    BalasHapus
  8. klo Acccelerometer H48C saya udah pernah akses.
    saya kasih link nya aja ya... http://iwan.blog.undip.ac.id/2011/02/07/fungsi-akses-modul-accelerometer-parallax-h48c-dengan-c-compiler-codevision/

    BalasHapus
  9. mas klo buat ngukur vibration gmn ya ?
    apakah sama kayak ngukur kemiringan ?

    BalasHapus
  10. tolong jelasin tentang prinsip kerja fhotodioda pada alat pendeteksi warna menggunakan mikrokontroler ATmega8535
    makasih

    BalasHapus