Pernah melihat dan menggunakan Fitbit sebelumnya? Alat kecil seperti
gelang ini ketika digunakan ditangan bisa menghitung berapa banyak Anda
melangkah setiap hari. Beberapa aplikasi penghitung langkah ini juga banyak
tersedia di Android dan Apple. Sebenarnya bagaimanakah mekanisme penghitung
langkah ini bekerja? Kali ini kita mencoba mengkaji salah satu caranya
menggunakan accelerometer. Fitbit dan alat kommersial lainnya tentu saja punya
teknik lainnya yang proprietary. Kita tidak membicarakan cara mereka disini,
poinnya adalah untuk mengetahui kira-kira bagaimana alat tersebut bekerja.
Perhatikan cara kerja accelerometer berikut:
Jika digerakkan keatas Y akan bernilai positif dan sebaliknya. Bagaimana
kalau handphone sedang dalam keadaan diam? Dia akan negatif karena ada
gravitasinya bumi 9.8 m/s2. Bagaimana jika handphone tersebut
ditaruh didalam saku celana?
Perhatikan kondisi ketika ketika berjalan dan handphone berapa disaku celana.
- Berjalan biasa, berjalan cepat, ataupun berlari akan membuat handphone berayun sesuai dengan langkah kaki. Ayunan ini mengakibatkan ada percepatan yang ditangkap oleh accelerometer pada handphone. Dengan menangkap semua angka pada frekuensi tinggi (100Hz) atau sekitar 100 data poin setiap detik kita akan mendapatkan pergerakan angka-angka ayunan kaki tersebut secara granular.
- Langkah kaki pada umumnya bergerak pada bidang planar (mengayun ke atas dan bergerak ke depan). Artinya secara teori hanya dua sumbu accelerometer yang mendeteksi percepatan gerakan.
- Pada saku yang tidak ketat, handphone kemungkinan berpindah-pindah posisi sehingga deteksi percepatan mungkin terjadi pada semua sensor axis
Bagaimana kita bisa menyatukan semua gerakan axis accelerometer hingga bisa mendeteksi gerakan? Cara yang sederhana adalah dengan menambahkan nilai kuadrat semua nilainya.
Sensor Number= X2 + Y2
+ Z2
Kenapa rumus diatas?
- Angka accelerometer ada yang negative, kuadrat akan membuat semua nilai positif
- Tipikal gerakan mengayun pada bidang planar secara teori mengakibatkan hanya dua axis yang meregister ayunan
- Apabila handphone berputar di dalam saku, pengurangan nilai pada satu axis akan dikompensasi dari nilai axis lainnya, akibatkan jumlah ketiganya secara probabilitas masih dalam angka yang sama
PROGRAM-nya:
Testing menggunakan Samsung
Galaxy S4 dengan setting sensor maksimal. Alasannya karena hardware Samsung
Galaxy S4 cukup akurat (flagship Samsung) dan sensor maksimal untuk memastikan
granularity data.
Set sensor Android di
100Hz:
@Override
protected void onResume() {
super.onResume();
sensorManager.registerListener(this,
sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
SensorManager.SENSOR_DELAY_FASTEST);
sensorManager.registerListener(this,
sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE),
SensorManager.SENSOR_DELAY_FASTEST);
}
Ambil nilainya:
@Override
public void onSensorChanged(SensorEvent event) {
if ((event.sensor.getType() == Sensor.TYPE_ACCELEROMETER)&&(Running)) {
getAccelerometer(event);
}
if ((event.sensor.getType() == Sensor.TYPE_GYROSCOPE)&&(Running)) {
getGyroscope(event);
}
}
private void getAccelerometer(SensorEvent event) {
float[] values = event.values;
long actualTime = System.nanoTime();
float x = values[0];
float y = values[1];
float z = values[2];
try {
result= result+ "ACC\t"+actualTime+"\t"+x+"\t"+y+"\t"+z+"\n";
counter++;
if (counter%15==0){
out.append(result);
counter=0;
result="";
}
} catch (Exception e){
e.printStackTrace();
}
}
Selain itu, perhatikan
hal-hal teknis berikut:
- Rekam ke dalam sdcard data hasil sensor minal untuk setiap 20 record. Kecepatan penulisan SDCard berbeda-beda dan kita berusaha menghindari masalah I/O
- Prevent Sleeping pada Andorid. Ini supaya sensor terus bekerja meskipun didalam celana
- Time series ubah ke dalam System.nanoTime(); untuk memastikan granularity
Perhatikan plot hasil
rekaman accelerometer diatas dalam chart berikut:
Anda lihat? terdapat pola pada setiap langkah kita? Hmm silahkan explore lebih lanjut ya, dengan menquantifisir chart tersebut ke dalam algoritma SAX dan PLA, kita bisa membedakan mana yang jalan biasa, jalan cepat, dan berlari.



