Accelerometer adalah suatu alat untuk mengukur percepatan sehingga dapat mendeteksi adanya perubahan posisi device dan berapa banyak perubahan itu terjadi. Microsoft mewajibkan kepada seluruh manufaktur Windows Phone untuk menempatkan sensor ini pada setiap device yang mendukung Windows Phone. Dengan demikian perubahan fisik device dapat dijadikan salah satu alternatif interaksi pengguna dengan aplikasi pada Windows Phone. Alat ini memberikan pengalaman baru dalam berinteraksi dengan device bergerak dan tidak hanya dapat digunakan untuk aplikasi biasa namun juga terutama untuk game.
Untuk menggunakan Accelerometer Anda perlu meng-import dll Microsoft.Devices.Sensors. Penggunaanya cukup sederhana, tersedia dua fungsi dasar Start dan Stop dan event yang harus ditangani yaitu ReadingChanged. Accelerometer akan menangkap perubahan pada posisi pada dimensi x, y dan z. Dengan menangkap perubahan itu kita dapat menuliskan kode yang bereaksi pada perubahan tertentu.
Sumbu pada device tidak berubah ketika orientasi (portraint dan landscape) dari device berubah. Sumbu Y akan selalu berada menuju ke atas-bawah dari device, tegak lurus tiga hardware button, sumbu X selalu berada dari sisi ke sisi searah dengan tiga hardware button dan sumbu Z merupakan sumbu maya yang menembus device jika kita memegang device dan melihat ke ara device. Rentang nilai yang akan dihasilkan berada pada nilai -1 hingga 1 .
Untuk skema pembacaan mari perhatikan beberapa ilustrasi nilai yang dihasilkan accelerometer berikut ini :
| Upright : 0 -1 0 |  |
| Rotated counterclockwise : -1 0 0 |  |
| Rotated clockwise : 1 0 0 |  |
| Lying flat : 0 0 -1 |  |
Sekarang kita akan belajar bagaimana mendapatkan data dari sensor tersebut.
1. Buatlah project baru untuk keperluan ini. Jika Anda sudah sampai pada halaman ini tentunya hal tersebut cukup mudah untuk dilakukan. Pada contoh berikut kita akan melanjutkan dengan project yang sudah ada. Klik kanan pada Project, Add New Item dan Pilih Windows Phone Portrait Page dan beri nama sesuai dengan keinginan anda, pada contoh ini adalah Accelerometer.xaml lalu pilih Add.

2. Tambahkan sebuah button dan textblock hingga seperti gambar di bawah ini.

3. Tambahkan referensi terhadap assembly Microsoft. Devices. Sensors . Pada jendela Solution Explorer , klik kanan Reference dan pilih Add New Reference

4. Tambahkan kode berikut ini :
using Microsoft.Devices.Sensors;
namespace BukuWinPhone7
{
public partial class Accelerometer : PhoneApplicationPage
{
Accelerometer accelerometer;
public Accelerometer()
{
InitializeComponent();
}
}
}
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
Jangan lupa menambahkan referensi penggunaan assembly. Pada bagian berikutnya objek Accelerometer didefinisikan dan akan kita gunakan kemudian.
5. Tambahkan event handler button dengan kode berikut ini :
private void button1_Click(object sender, RoutedEventArgs e)
{
if (accelerometer == null)
{
accelerometer = new Accelerometer();
accelerometer.ReadingChanged += new EventHandler<AccelerometerReadingEventArgs>(accelerometer_ReadingChanged);
accelerometer.Start();
}
}
void accelerometer_ReadingChanged(object sender, AccelerometerReadingEventArgs e)
{
throw new NotImplementedException();
}
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }Setelah mengintansiasi
acceloremeter, tambahkan
handler untuk menangani perubahan data yang dihasilkan sensor.
6. Untuk penanganan data yang dihasilkan karena data baru selalu masuk dan mungkin saja terjadi pada saat thread berlangsung maka untuk menangkapnya memerlukan penggunaan Dispatcher untuk invokasi penanganan perubahan data tersebut.
void accelerometer_ReadingChanged(object sender, AccelerometerReadingEventArgs e)
{
Deployment.Current.Dispatcher.BeginInvoke(() MyReadingChanged(e));
}
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }7. Tambahkan fungsi untuk menangani perubahan data tersebut.
void MyReadingChanged(AccelerometerReadingEventArgs e)
{
textBlock1.Text = String.Format("{0} {1} {2}", e.X.ToString(), e.Y.ToString(), e.Z.ToString());
}
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }Tentunya pada bagian ini adalah isi dari lojik aplikasi yang ingin Anda bangun.
8. Tekan F5 dan tekan button, perhatikan hasilnya.

Nilai accelerometer menunjukkan 0 0 -1 yang artinya sesungguhnya emulator berada pada posisi terbaring.Tentunya kita tidak dapat menggunakan emulator untuk melihat perubahan nilai karena tidak memiliki kemampuan built-in untuk itu.
Ada beberapa hal yang perlu diingat. Bagaimana pun juga mendapatkan nilai eksak 1.0 tidak akan pernah terjadi karena sesungguhnya gravitasi bumi tidak bekerja seperti itu . Anda akan kaget karena pada suatu waktu terdapat kondisi dimana kita berada di atas gunung, atau tangan Anda bergetar cukup hebat sehingga memberikan tambahan tekanan terhadap device. Accelerometer sendiri memiliki toleransi kesalahan sehingga barangkali Anda ingin berkeksperimen terhadap nilai kumulatif kesalahan yang ada .
Bayangkan anda akan sering mendapatkan perubahan data tersebut, tepatnya 50 kali tiap detik. Itu artinya kita akan seringkali mendapatkan data . Data yang akan diperoleh sangat mungkin tidak stabil karena sifat alami dari sensor accelerometer itu sendiri. Bahkan ketika device diletakkan di atas meja datar sekalipun kemungkinan variasi dapat terjadi. Artinya, untuk aplikasi yang menggunakan data accelerometer diperlukan mekanisme pembacaan, entah itu kalibrasi atau smoothing data yang diperoleh.