Jawabannya:
Accelerometer dapat memberikan pengukuran sudut kemiringan (tilt) yang akurat ketika sistem sedang diam (statis). Bila sistem sedang berotasi atau bergerak, accelerometer tidak bisa mengikuti pergerakan yang cepat dikarenakan responnya yang lamban dan memiliki noise.
Gyroscope dapat membaca kecepatan sudut (angular rate) yang dinamis. Setelah melakukan komputasi menggunakan integral data dari waktu ke waktu, maka perpindahan sudut atau sudut kemiringan dapat dihitung. Tetapi sudut ini akan menjadi tidak akurat dalam jangka panjang karena efek bias yang dihasilkan oleh gyroscope.
Gyroscope dapat membaca kecepatan sudut (angular rate) yang dinamis. Setelah melakukan komputasi menggunakan integral data dari waktu ke waktu, maka perpindahan sudut atau sudut kemiringan dapat dihitung. Tetapi sudut ini akan menjadi tidak akurat dalam jangka panjang karena efek bias yang dihasilkan oleh gyroscope.
Untuk lebih jelasnya tentang kelemahan sensor-sensor tersebut, saya telah melihat dan membuat grafik tentang respon output dari kedua sensor tersebut. Grafik ini saya dapatkan dengan mengirimkan data output masing-masing sensor ke komputer melalui komunikasi serial.
Accelerometer.
Accelerometer yang saya gunakan adalah MMA7260Q.
Untuk dapat mengkases dan membaca serta mengkalibrasi sensor ini, silakan klik disini.
Untuk dapat mengkases dan membaca serta mengkalibrasi sensor ini, silakan klik disini.
Setelah saya lakukan kalibrasi, sensor tersebut saya gunakan untuk mengukur kemiringan sudut (tilt). Berikut adalah keluaran sensor accelerometer saat mengukur kemiringan sudut 0 derajat.
Dari output accelerometer terlihat jelas bahwa sinyal keluarannya masih memiliki noise.
Gyroscope yang saya gunakan adalah LISY300 Gyroscope Module.
Untuk dapat membaca atau mengakses sensor ini silakan klik disini.
Gyroscope mempunyai cara kerja sebagai berikut:
"Sensor gyroscope yang digunakan akan mempunyai nilai keluaran jika sedang berotasi. Ketika sensor gyroscope berotasi searah jarum jam pada sumbu Z, maka tegangan keluarannya akan mengecil. Sedangkan jika berotasi berlawanan arah jarum jam, maka tegangan keluarannya akan membesar. Jika sensor gyroscope tidak berotasi (keadaan diam) maka keluaran tegangan gyroscope akan bernilai sama dengan nilai offset-nya."
Berikut adalah ourput gyroscope ketika berotasi:
Sekarang perhatikan ketika sedang diam (tidak berotasi)
Cukup untuk dasar teorinya, sekarang langsung ke algoritma complementary filter. Pada dasarnya ada sebuah metode algoritma yang lebih baik dibanbing complementary filter yaitu algoritma kalman filter. Tetapi saya kurang begitu paham, jadi saya pakai complementary filter saja.
Dibawah ini adalah diagram blok dari komplementary filter.
Menggunakan 2 sumbu sensor accelerometer untuk mendapatkan nilai kemiringan sudut (θ), yaitu sumbu X dan Z. Kemudian sudut kemiringan dari accelerometer ini di umpankan ke low-pass filter untuk menghilangkan noise. Sedangkan keluaran sensor Gyroscope yang berupa kecepatan sudut (ω) harus diintegralkan terlebih dahulu untuk mendapatkan nilai perpindahan sudut atau sudut kemiringan. Kemudian diumpankan ke high-pass filter untuk menghilangkan efek bias pada gyroscope.
Jika complementary filter ini diaplikasikan ke bahasa pemrograman, maka akan terlihat pada cuplikan program dibawah ini.
Jika complementary filter ini diaplikasikan ke bahasa pemrograman, maka akan terlihat pada cuplikan program dibawah ini.
sudut = (a)*(sudut+out_gyro*dt)+(1-a)*(sudut_acc);
Dimana:
a = koefisien filter
dt = waktu sampling, disesuaikan dengan waktu sampling nilai sensor
sudut = sudut keluaran complementary filter
out_gyro = keluaran sensor gyroscope berupa kecepatan sudut
sudut_acc = keluaran sensor accelerometer yang sudah berupa sudut
Mudah bukan???
Jika cuplikan program diatas menggunakan waktu sampling sebesar dt, maka time constant (τ) dapat ditentukan:
τ=(a*dt)/(1-a)
dimana:a=koefisien filter
dt=waktu sampling
Time constant adalah lamanya waktu update sinyal keluaran dari complementary filter.
Sekarang saya akan jelaskan pengaruh koefisien filter (a) dan pengaruh wakru sampling (dt).
Pengaruh koefisien filter (a)
Nilai koefisien filter (a) akan saya ubah-ubah sebesar 0,6, 0,8 dan 0.97 dengan waktu sampling (dt) tetap yaitu 10 ms. Berikut adalah respon keluaran dari sinyal complementary filter.
koefisien filter 0,6 sedang diam (tidak berotasi)
koefisien filter 0,8 sedang diam (tidak berotasi)
koefisien filter 0,8 sedang berotasi
koefisien filter 0,97 sedang berotasi
Garis berwarna merah adalah keluaran sensor accelerometer, hitam adalah keluaran sensor gyroscope dan biru adalah sinyal keluaran dari complementary filter.
Semakin besar nilai koefisien filter (a) maka sinyal keluaran complementary filter akan lebih stabil (semakin tidak ber-noise) tetapi akan memperlama time constant yang mengakibatkan waktu update sinyal semakin lama.
Coba anda bandingkan dengan persamaan untuk mencari nilai time constant, maka kesimpulan diatas berdasarkan pengujian akan sesuai dengan persamaannya.
Pengaruh waktu sampling (dt)
Nilai waktu sampling akan saya ubah-ubah dengan nilai 0,1 detik (10Hz), 0,05 detik (20Hz) dan 0,01 detik (100Hz).
dt=0.01
dt=0.05
dt=0.1
Sekali lagi anda perhatikan persamaan untuk menghitung time constant, maka kesimpulan diatas yang berdasarkan pengujian sinyal keluaran complementary filter, akan sesuai dengan teori pada persamaan menghitung nilai time constant.
Pemilihan nilai koefisien filter (a) dan waktu sampling (dt) harus disesuaikan dengan respon pada aplikasi yang anda buat. Jika respon sistem aplikasi anda cepat, maka disarankan untuk mempercepat nilai time constant, dan jika respon sistem pada aplikasi yang anda buat relatif lambat, maka nilai time constans pada algoritma complementary filter dapat anda buat relatif lebih lama.
Semoga bermanfaat...
kedua sensor yang saya gunakan saya beli di digi-ware.com
Colton, Shane, The Balance Filter: A Simple Solution for Integrating Accelerometer and Gyroscope Measurements for a Balancing Platform.
kedua sensor yang saya gunakan saya beli di digi-ware.com
REFERENSI:
semakin menarik aja informasi diatas, kalau keluaran accelerometer untuk 3 axis yg digunakan tanpa dari gyro.
BalasHapusx_acc=(float)(x_acc_ADC-x_acc_offset)*x_acc_scale; //dalam radian
atau tetap menggunakan rumus sebelumnya mas.
algoritma complementary filter ini digunakan untuk fusion sensor accelerometer dan dan gyroscope
BalasHapusSaat ditampilkan dlm bentuk sudut sumbu Y terhadap Z menunjukkan nilai 40 (int) saat kondisi diam. sedangkan y=read_adc(2) nilainya 85 dan z=read_adc(1) nilainya 99. Apa ada kesalahan terhadap nilai tsb mas
BalasHapusKomentar ini telah dihapus oleh administrator blog.
BalasHapusmasih keren klo bikin kalman filter<<TOP BGT
BalasHapusapa bisa data out dari sensor lagsung di filter??
BalasHapusbukannya untuk menfilter kedua sensor tersebut data out dari sensor di rubah kePWM untuk mengetahui frekuensi sehingga dapat di filter.....
Tentu saja bisa...
BalasHapusUntuk apa harus dicari PWMnya... apakah anda bisa menentukan frekuensi dari sebuah data yang berboise? dan apakan frekuensi dari noise itu konstan?
intinya data yg saya dapat dari sensor ingin dikurangi noisenya...
Tergantung dari karakteristik sensor itu sendiri