PhoneGap/Cordova Accelerometer API

26 Şubat 2013
Bu yazıyı beğendiysen paylaşmayı unutma :)
Pin It

Accelerometer, TDK’nın belirlediği Türkçe yazılışı ile “Akselerometre” anlam itibarı ile İvmeölçer anlamına gelir. Mobil cihazlar üzerinde, cihazın x, y ve z yönünde yapmış olduğu hareketleri yakalar. Bu anlamı ile bir hareket sensörü olarak da tanımlayabiliriz.

“Acceleration” nesnesinin kullanımı

Acceleration, Accelerometer API’nin sahip olduğu ve salt okunur olarak çalışan bir nesnesidir. Herhangi bir zaman içerisinde belirli bir noktada yakalanan accelerometer verilerini elde eder. Cihazın x, y ve z yönünde yapmış olduğu hareketler yakalandığında bu değerler bir yer çekimi etkisi (9.81 m / s ^ 2) içerir. Örneğin; cihazınızı yukarı bakacak şekilde masa üzerine koyduğunuzda bu değerlerin x = 0, y = 0, z = 9.81 şeklinde olması gerekir.

Biraz bilgi..

Yer çekimi ivmesi, kutuplarda saniyede 9.83 m/s^2, ekvatorda ise 9.78 m/s^2’dir. Yer çekimi ivmesi de ortalama 9.81 m/s^2 olarak kabul edilir. Yer çekimi kuvveti sabit olduğu için yer çekimi ivmesi de sabittir; yani düşen bir cismin, düşme süresi boyunca geçen her saniyede hızı aynı miktarda artar. Bu sebeple havasız bir ortamda bütün cisimler aynı hızla düşerler. (Evet, bir saç teli ve bowling topu bile!)

“Acceleration”’ın Özellikleri

x: x-ekseni üzerinde hızlanma miktarı. (m/s^2) (Sayı)
y: y ekseni üzerindeki hızlanma miktarı. (m/s^2) (Sayı)
z: z-ekseni üzerinde hızlanma miktarı. (m/s^2) (Sayı)
timestamp: milisaniye cinsinden oluşma zamanı. (DOMTimeStamp)

Accelerometer API Metotları

– accelerometer.getCurrentAcceleration
– accelerometer.watchAcceleration
– accelerometer.clearWatch

“accelerometer.getCurrentAcceleration” Kullanımı

Herhangi bir zaman içerisinde anlık olarak belirli bir noktada yakalanan accelerometer verilerini elde eder ve bunları “accelerometerSuccess” parametresi ile geri döndür. Bu esnada bir hata oluşmuşsa bunu da “accelerometerError” parametresi ile yakalar.

Kullanım Şekli:
navigator.accelerometer.getCurrentAcceleration(accelerometerSuccess, accelerometerError);

Örnek-1:

Kod   
document.addEventListener("deviceready", onDeviceReady, false);
 
function onDeviceReady() {
	navigator.accelerometer.getCurrentAcceleration(onSuccess, onError);
}
 
function onSuccess(acceleration) {
	alert('Acceleration X: ' + acceleration.x + '\n' +
      	'Acceleration Y: ' + acceleration.y + '\n' +
      	'Acceleration Z: ' + acceleration.z + '\n' +
      	'Timestamp: '  	+ acceleration.timestamp + '\n');
}
 
function onError() {
	alert(Hata!');
}

Timestamp’i daha anlaşılır bir şekilde görüntülemek isterseniz örneğimizi aşağıdaki gibi düzenleyebiliriz.

Örnek-2:

Kod   
document.addEventListener("deviceready", onDeviceReady, false);
 
function onDeviceReady() {
	navigator.accelerometer.getCurrentAcceleration(onSuccess, onError);
}
 
function onSuccess(acceleration) {
    ts = new Date(acceleration.timestamp);
 
	alert('Acceleration X: ' + acceleration.x + '\n' +
      	'Acceleration Y: ' + acceleration.y + '\n' +
      	'Acceleration Z: ' + acceleration.z + '\n' +
      	'Timestamp: '  	+ ts + '\n');
}
 
function onError() {
	alert('onError!');
}

“accelerometer.watchAcceleration” Kullanımı

getCurrentAcceleration o andaki accelerometer verilerini alırken, watchAcceleration ile düzenli aralıkla güncel verilerin alınmasını sağlar. getCurrentAcceleration’da olduğu gibi elde edilen accelerometer verileri “accelerometerSuccess” parametresi ile geri döndür. Bu esnada bir hata oluşmuşsa bunu da “accelerometerError” parametresi ile yakalar. Ek olarak accelerometerOptions parametresine sahiptir. Bu parametre; “frequency” seçeneği ile veri alım süresinin kaç milisaniyede bir tekrarlanacağını belirtir. Varsayılan değeri 10.000 milisaniyedir.

Kullanım Şekli:
var watchID = navigator.accelerometer.watchAcceleration(accelerometerSuccess,
accelerometerError,
[accelerometerOptions]);

Buradaki “watchID”, accelerometer için özel olarak üretilen unique bir takip numarasıdır.

Örnek-1:

Kod   
var watchID = null;
document.addEventListener("deviceready", onDeviceReady, false);
 
function onDeviceReady() {
	var options = { frequency: 3000 };
	watchID = navigator.accelerometer.watchAcceleration(onSuccess, onError, options);
}
 
function onSuccess(acceleration) {
	var element = document.getElementById('accelerometer');
	element.innerHTML = 'Acceleration X: ' + acceleration.x + '<br />' +
                    	'Acceleration Y: ' + acceleration.y + '<br />' +
                    	'Acceleration Z: ' + acceleration.z + '<br />' +
                    	'Timestamp: '  	+ acceleration.timestamp + '<br />';
}
 
function onError() {
	alert('Hata!');
}
Kod   
<body>
    <div id="accelerometer">Accelerometer bekleniyor..</div>
</body>

“accelerometer.clearWatch” Kullanımı

watchAcceleration” ile oluşturulan takip işlemini, yani accelerometer verilerini almayı durdurur. Bu işlemi ise “watchAcceleration” ile oluşturulan “watchID” aracılığı ile yapar.

Kullanım Şekli:
navigator.accelerometer.clearWatch(watchID);

Örnek-1:

Kod   
var watchID = null;
document.addEventListener("deviceready", onDeviceReady, false);
 
function onDeviceReady() {
	var options = { frequency: 3000 };
	watchID = navigator.accelerometer.watchAcceleration(onSuccess, onError, options);
	alert("watchID: " + watchID);
}
 
function onSuccess(acceleration) {
	var element = document.getElementById('accelerometer');
	element.innerHTML = 'Acceleration X: ' + acceleration.x + '<br />' +
                    	'Acceleration Y: ' + acceleration.y + '<br />' +
                    	'Acceleration Z: ' + acceleration.z + '<br />' +
                    	'Timestamp: '  	+ acceleration.timestamp + '<br />';
}
 
function onError() {
	alert('Hata!');
}
 
function stopWatch() {
    navigator.accelerometer.clearWatch(watchID);
    alert("Accelerometer durduruldu!");
}
Kod   
<body>
    <div id="accelerometer">Accelerometer bekleniyor...</div>
    <button onclick="stopWatch()" type="button">İzlemeyi Durdur!</button>
</body>

Bir sonraki yazı da görüşmek üzere..

Benzer Yazılar


DeliPenguen'i Google+'da bulun



  1. teoman
    5 Şubat 2014 - 00:22

    super ve aciklayici bir yazi. tesekkurler.

  2. Tarık Aybak
    24 Nisan 2016 - 12:05

    Gayet yeterli olmuş elinize sağlık
    Teşekkür ederim