• Berke Başara

Sensör: İvmeölçer Uygulaması Geliştirilmesi

Güncelleme tarihi: 21 Mar




Mobil cihazların yaygınlaşması ile birlikte elde edilen veri çeşitleri ve sayısı inanılmaz bir hızla artmıştır. Bu verilerden ivmeölçer (accelerometer) neredeyse tüm cihazlarda bulunan bir özellik olarak bulunmaktadır. İvmeölçer verilerinin güvenilirliği konusunda bugün tartışmalar olsa da uygulamada önemli faydalar sağladığı bilinmektedir. Öyle ki telefonlardaki ivme ölçerle erken uyarı sistemi geliştirilmesi üzerine çalışılmaktadır.


https://blog.google/products/android/earthquake-detection-and-alerts/


Bu kapsamda uygulamayı Android mobil telefonlarda ve tabletlerde kullanmak üzere geliştirildi. Uygulamayı yapmak için ilk olarak aşağıdaki kaynakları okuyarak geliştireceğiniz uygulama hakkında daha fazla bilgi edinebilirsiniz.


https://ieeexplore.ieee.org/document/7294490

https://www.sciencedirect.com/science/article/pii/S1750583614000553


Android uygulama geliştirmek için ilk önce Android Studio’yu çalıştırıyoruz, uygulamaya başlarken ilk olarak layout’u oluşturuyoruz.


Yukarıdan aşağı doğru sırasıyla: Progress bar, ivme verisi aralarındaki farkı gösteren TextView, real-time dalga ivmesi ve en altta da eski dalga ivmesi yer almaktadır.


Layout’u detaya girmeden bitirdikten sonra MainActitivity içerisine girerek field’larımı oluşturuyorum. Field’ların altına onCreate methodu oluşturarak reseource dan layoutlarımızı çağırdım ve yeni TextView’ ları define ettim.


İlk aşamayı hallettikten sonra uygulamanın ana amaca hizmet etmesi için SensorManager methodunu kullanıyoruz.


SensorManager cihazların içerisinde yer alan sensörlere erişim sağlamak amacıyla kullanılan önemli bir method olarak yer almaktadır. Gerekli methodlar oluşturulduktan sonra SensorEventListener methodunu kullanarak, cihazda bulunan sensörün koordinat düzleminde anlık x, y ve z eksenlerindeki verinin bileşkesini alarak accelerationCurrentValue field’ını oluşturuyoruz.


Değişen dalgaları(ivme) göstermek üzere changeInAcceleration methodunu ekliyoruz. Bu methoddan alınan değerlerin değişen farklarını göstermek için mevcut ivme değerinden eski ivme değerinin mutlak değer içerisinde farkını alarak değişen ivmeyi bulmuş oluyoruz (changeInAcceleration).






onCreate methodun içerisine ivme değişimlerini analiz ederek ivme, anlık ivme, eski ivme veriyi elde etmiş olduk. Bu aşamada belirttiğim methodları kullanarak progrress bar ve sensor methodlarının çalışmaya başladığını görebilirsiniz.


Aşağıda sensörümüzün doğru çalıştığına kanıt olarak y ekseninde cihazımızın başlangıç ivme değeri olan g kuvvetinin 9,81 olarak çalıştığını uygulama bize göstermektedir.




Cihazın x, y ve z eksenlerinde aldığı veriyle ivme değişimini elde etmiş olduk.


İkinci kısımda ise alınan veriyi kullanıcıya daha anlaşılır göstermek için uygulamamızı detaylandıracağız.


Değişen ivmenin basamak sayısında yeterli azaltmalar yaparak alınan veriyi daha anlaşılır kılmak için DecimalFormat methodunu kullanabiliriz. Bu methodu ivme değerleri içerisinde kullanarak basamak sayısını 4 haneye düşürmüş olduk.


SensorEvenetListener ın içerisine if-else statement’ı kullanarak değişen ivmeyi 3 farklı renkte sınıflandırarak uygulamamıza ekliyoruz. Her bir renge sayısal olarak karşılık gelen değerlerin bilimsel açıdan hiçbir bağlantısı bulunmamaktadır. Burada amacımız uygulamamızın kullanıcıya rengi nasıl verdiğini test etmektir. Statement’ımızla değişen ivme miktarı 7’den büyük eşitse kırmızı, 5’ten büyük eşitse turuncu ve 2’den büyük ve eşitse sarı, eğer 2’den düşükse beyaz rengi verecek şekilde sınıflandırıyoruz.



Renkleri başarıyla test ettikten sonra bilimsel sonuçlara bağlı kalmak adına aşağıda renk kodlarını ve formülünü kullanıyoruz.



Daha sonra sensör ivmeölçer uygulamamızda yer alan x, y ve z eksenlerini göstermek için layout’umuzu açıyoruz.


Layout’da yeni TextView larımızı yukarıda ilk başta yaptığımız gibi sırasıyla x, y ve z eksen değerleri için yapıyoruz. Eklediğimiz TextView’lar yukarıdan aşağı doğru sırasıyla: txt_accel(X, Y, Z), txt_currentAccel(X, Y, Z), txt_prevAccel(X, Y, Z) şeklinde layout’umuzda gösteriyoruz.



MainAcitivty’e girerek oluşturmuş olduğumuz TextView’ları initialize ediyoruz. İvme değerlerimizi yine eski ve mevcut olarak ayırarak gösteriyoruz ve ivme değişimini göstermek için tekrar mutlak değer içerisinde mevcut ve eski ivme değerlerinin farkını alarak ChangeInAcceleration(X, Y, Z) setText() methoduyla gösteriyoruz. Uygulamadaki değişimleri veri yönünden daha anlaşılır kılmak ve iki dalga arasındaki farkı göstermek için Line Graph kullanmamız gerekmektedir.



Layout’da gerekli düzenlemi yaptıktan sonra kodlama için MainActivity’ e geçiyoruz.



pointsPlotted method u ile kaç adet nokta oluşturduğumuzu belirttik, graphIntervalCounter variable ile sensor hareketini real-time almak için oluşturduk. Viewport sayesinde grafiğini ve viewport.setAxisBoundManual methoduyla x koorinattaki miktarı göstermiş olduk.



Son olarak uygulamamızda x, y ve z eksenlerindeki veriyi grafik olarak göstermemiz için yeni MainActivity ve Layout oluşturuyoruz.




Uygulamanın ilk sayfasında oluşturduğumuz gibi sıralamaya uygun olarak aynı adımları izliyoruz. 3 farklı eksen için 3 farklı bar grafiğimizi oluşturuyoruz ve ilk sayfaya dönebilmek için de Manifest in içerisine girip gerekli değişiklikleri yapıyoruz. Yapılan son değişiklikleri ekledikten sonra uygulamamız artık hazır.



Böylelikle staj dönemimde geliştirmiş olduğum sensör ivmeölçer uygulamamı sizlerle paylaşmış oldum.

83 görüntüleme