Akıllı Telefon Sensörlerinin Kullanımı ve Ham Sensör Verilerine Erişim Ensar Arif Sağbaş, Serkan Ballı Muğla Sıtkı Koçman Üniversitesi, Bilişim Sistemleri Mühendisliği Bölümü, Muğla arifsagbas@mu.edu.tr, serkan@mu.edu.tr Özet: Teknolojinin hızla gelişmesiyle birlikte, akıllı telefonlardaki donanım türleri artış göstermiştir. Bu donanımlardan en önemlileri GPS, ivmeölçer, jiroskop ve manyetometre sensörleridir. Teknolojideki gelişmeler sayesinde akıllı telefonların kullanım alanları da artış göstermektedir. Başlangıçta, akıllı telefon normal telefonların kişiselleştirilebilir hali gibi düşünülse de; mevcut sensörlerin kullanılması ile sadece telefon değil aynı zamanda insanların günlük yaşantısını takip eden, konum bulan ve birçok ihtiyacı karşılayan bir cihaz haline gelmiştir. Bu çalışmada, GPS, ivmeölçer, jiroskop ve manyetometre sensörlerinin nasıl kullanıldığı bu sensörlerden ne tür veriler elde edildiği ve yazılım geliştirme aşamasında hangi kütüphanelerden faydalanıldığı örneklerle açıklanmış ve sonuçlar tartışılmıştır. Anahtar Sözcükler: Akıllı Telefon Sensörleri, GPS, İvmeölçer, Jiroskop, Manyetometre Usage of the Smartphone Sensors and Accessing Raw Sensor Data Abstract: Along with the rapid advancement of the technology, the hardware types in smartphones have been increased. The most important ones of these hardware are the sensors of GPS, accelerometer, gyroscope and magnetometer. The usage of smartphones has also grown through the developments in technology. Even though smartphone was thought as personalized form of normal phone at first; by the usage of the existing sensors it has become not only a phone but also a device that can track the daily life of people, find location and satisfy many other needs. In this study, how to use the sensors of GPS, accelerometer, gyroscope and magnetometer, what type of data obtained from these sensors and which libraries utilized in the software development phase are clarified with examples and the results are discussed. Keywords: Smartphone Sensors, GPS, Accelerometer, Gyroscope, Magnetometer 1. Giriş Akıllı telefonlar, güncel hayatta insanlar tarafından gün boyu taşınan, hesaplama yapabilen, dahili sensörleri olan aynı zamanda haberleşme imkanı sunan cihazlardır [1]. Bu cihazlar ilk çıktığında sabit telefonların taşınabilir hali olarak düşünülse de teknolojinin hızla gelişmesi ile farklı kullanım alanları ortaya çıkmıştır. Akıllı telefonları diğer mobil telefonlardan ayıran özellikler ise kullanıcılar tarafından özelleştirilebilir olması ve ivmeölçer, jiroskop, GPS vb. gibi donanımlara sahip olmasıdır [2]. Bu donanımlar sayesinde akıllı telefonlar kullanıcıları ve çevresi hakkında çok miktarda veri elde edebilmektedir. Bu verilerin analizi ile kullanıcıların yaptıkları fiziksel aktiviteler tespit edilebilmektedir. Örnek olarak kullanıcının yürüyüş yapma, koşma veya sabit durma durumlarının tespiti bu sensörlerden elde edilen veriler sayesinde mümkündür [3]. Mobil sensörler konusunda çalışmalar yapan insanlar, oyundan eğitime, sosyal medyadan sağlığa kadar birçok uygulama geliştirebilmektedir. Feng ve Timmermans [4] tarafından yapılan çalışmada GPS ve ivmeölçer verileri kullanılarak seyahat modu tespiti gerçekleştirilmiştir. Stenneth vd. [5] tarafından yapılan çalışmada cep telefonlarındaki GPS alıcıları yardımı ile seyahat modu sınıflandırması için yeni bir yaklaşım geliştirilmiştir. Byon vd. [6] tarafından yapılan çalışmada GPS donanımlı mobil cihazlardan elde edilen GPS izleri aracılığı ile mobil cihaz kullanıcılarının taşıma modu tespiti gerçekleştirilmiştir. Çinaz ve Arnrich [3] tarafından yapılan çalışmada akıllı telefonlardan elde edilen sensör verileri ile kullanıcı davranış analizi gerçekleştirilmiştir. Kansız ve Güvensan [7] tarafından yapılan çalışmada mobil telefonların sahip olduğu sensörler yardımı kişilerin günlük aktiviteleri arasında meydana gelen kazaları tespit edip ilgili birimlere bildiren mobil uygulama gerçekleştirilmiştir. Bu çalışmada, akıllı telefonlarda bulunan GPS, ivmeölçer, jiroskop ve manyetometre sensörlerinin nasıl kullanıldığı bu sensörlerden ne tür veriler elde edildiği ve yazılım geliştirme aşamasında hangi kütüphanelerden faydalanıldığı örneklerle ele alınmıştır. 2. Akıllı Telefon Sensörleri Güncel akıllı telefonlardan biri olan iphone 6 ve 180
Samsung Galaxy S4 mobil telefonu, barometre, üç eksenli jiroskop, ivmeölçer, manyetometre, GPS, ortam ışığı, yakınlık sensörlerine sahiptir [3]. Aşağıda bu sensörlerden GPS, ivmeölçer, jiroskop ve manyetometre sensörleri detaylı olarak ele alınmıştır. 2.1 GPS (Global Positioning System) Sensörü GPS, yani küresel konumlandırma sistemi, düzenli olarak kodlanmış bilgi yollayan bir uydu ağıdır. Bu sistem Amerika Birleşik Devletleri Savunma Bakanlığı na ait 24 uydudan oluşmaktadır. Bu uydular Şekil 1 deki gibi dünya etrafında yörünge üzerindedir ve düşük güçlü radyo sinyalleri yaymaktadır. Yeryüzündeki GPS alıcıları bu sinyaller yardımı ile konum tespitini gerçekleştirebilmektedir [8]. baz istasyonun konumu ile tespit edebilmektedir [9]. Fakat cihaz GPS sensörüne sahip değilse doğruluk oranı limitli olmaktadır. GPS verisi şu parametreleri içerir [11]: Enlem ve boylam bilgisi Hareket hızı ve yönü Yükseklik (rakım) Enlem: Derece biriminde elde edilir. Enlemin pozitif değerleri ekvatorun kuzeyini, negatif değerleri ekvatorun güneyini belirtir. Boylam: Ölçümler sıfır meridyenine göredir. Derece biriminde elde edilir. Pozitif değerler doğu meridyenlerini, negatif değerler batı meridyenlerini belirtir. Hız: Cihazın anlık hızı metre/saniye türünden hesaplanır. Negatif değerdeki hızlar geçersizdir. Yükseklik (rakım): Yükseklik metre cinsinden hesaplanır. Pozitif değerler cihazın deniz seviyesinden yüksekliğini belirtir. GPS alıcısının iki boyutlu (enlem ve boylam) konum tespiti için en az 3, üç boyutlu (enlem, boylam ve yükseklik) konum tespiti için ise en az 4 uydu ile haberleşiyor olması gerekmektedir. Alıcının daha çok uydu ile haberleşmesi doğruluk oranını artırmaktadır. Tipik hassasiyet 20-50 metre iken maksimum hassasiyet 10 metredir [9]. 2.2 İvmeölçer Sensörü Şekil 1: Dünya yörüngesindeki 24 GPS uydusu Ayrıca GPS in diğer özellikleri şunlardır: [9,10]: El GPS cihazları pasif alıcılardır. Uydulara geri bildirim yapmazlar. 24 operasyonel GPS uydusu atomik saatler kullanılarak senkronize edilmiştir. Uydular, belirli aralıklarla geçerli konumları ve zaman emisyonlarını içeren sinyaller gönderirler. GPS kapalı ortamlarda çalışmaz. GPS, cihazın pil ömrünü çabuk tüketir. Bir konum düzeltmesi çok uzun süre alır (30sn- 12dk). Binalar GPS sinyallerini yansıtır veya tıkar. Bu sebepten dolayı doğruluk oranı yerleşim yerlerinde düşmektedir. Akıllı telefonlarda konum bulma servisleri cihazın konumunu; GPS, WiFi ağları yada ilişkili Bu sensör cihaza uygulanan ivmeyi ölçer [12]. İvmeölçer, Şekil 2 de gösterilen X, Y ve Z eksenlerinin ivmelenme değerlerini G cinsinden bildirir [13]. G yerçekimi alanı tarafından uygulanan yerçekimi kuvvetine eşittir (9.81 m/s2) [11]. X ekseni cihazın yan yüzü üzerinde, Y ekseni dik bir pozisyonda, Z ekseni ise sırtüstü durup durmadığı hakkında bilgi verir. Z değeri 0 veya çok yakın bir değere sahipse cihaz kenarlarının birinin üzerinde duruyor demektir. İvmeölçer ile işlem yaparken, ivm eölçerin cihazın doğrusal ivmesini hesapladığını, elde edilen sayısal değerin cihaza etki eden yerçekimi kuvveti olduğunu ve eğer cihaz hareket halinde ise cihazın ivmesi ve yerçekimi kuvveti olduğu akılda bulundurulmalıdır [13]. 181
Şekil 3: Bir jiroskopun yapısı Şekil 2: İvmeölçer eksenleri Birçok akıllı telefon yüksek hassasiyet için geniş değer aralığına sahiptir. Örnek olarak iphone için bu değer ±2g şeklindedir. Hassasiyet ise 0.018g dir [9]. Örnek durumlardaki ivmelenme değerleri Tablo 1 de gösterilmiştir. Jiroskop, Şekil 4 deki gibi cihazın üç eksen etrafında (X, Y ve Z) dönme açısını rad/s cinsinden ifade eder yani cihazın mevcut yönünü yada yön değişimini tespit etmede kullanılır [9,16]. Jiroskop ve ivmeölçer verilerinin kombinasyonu ile cihazın başlangıç noktasına göre yaptığı fiziksel hareket hesaplanabilir [13]. 2.3 Jiroskop Sensörü Jiroskop yön tespiti veya ölçümünde kullanılan bir alettir. Bu alet 1817 yılında Bohnenberger tarafından icat edilmiştir. Gündelik hayatta uçak ve gemilerde yön bulmak için kullanılmaktadır [14]. Jiroskopun yapısı Şekil 3 deki gibidir. Jiroskop verilerini hesaplamak ve kullanmak çok da yeni bir özellik değildir. Fakat çok sık kullanılmamaktadır. Bu sensör verileri sağlık uygulamalarında, adım saymada, oyun uygulamalarında karakterleri yönlendirmede ve buna benzer eylemlerde kullanılmaktadır [15]. Şekil 4: Jiroskop eksenleri 2.4 Manyetometre Sensörü Manyetometre, cihazı çevreleyen manyetik alanın gücünü ölçmektedir. Veriler mikrotesla biriminden elde edilmektedir (µt) ve X, Y ve Z eksenlerinde -128 ile +128 arasında normalize edilmiştir. Cihaz tarafından gözlemlenen toplam manyetik alan dünyanın jeomanyetik alanı ve cihazın kendi çevresindeki manyetik alanın toplamıdır. Manyetometre, dijital pusula için kullanılabilmektedir. Bu sensörden elde edilen verilerin ivmeölçer ve jiroskop sensörleri verileri ile birleştirilmesi ile cihazın gerçek zamanlı hareketi ve sapması Şekil 5 de gösterildiği üzere tespit edilebilmektedir [11,13]. 182
platformunda ise Location API [20] kütüphanesi kullanılmaktadır. Konum bilgisini elde etmek ve konum güncellemesine başlamak için ios için CLLocationManager, Android için LocationManager, Windows Phone için ise Geolocator sınıfı kullanılır. GPS verilerini elde edebileceğimiz örnek kodlar aşağıda verilmiştir: aşağıda verilmiştir: Şekil 5: Manyetometre verileri ile cihazdaki sapmanın tespiti iphone 4 için manyetometre değer aralığı ±2 mt dir. Örnek durumlardaki manyetik alan gücü değerleri Tablo 2 de gösterilmiştir [9]. Tablo 2: Örnek durumlardaki manyetik alan güçleri Manyetik Rezonans Görüntüleme (MRI), canlıların iç yapısını görüntüleme amacıyla daha çok tıpta kullanılan bir yöntemdir. MRI tarayıcıları insan vücudunu görüntülemek için yüksek güçte manyetik alan ve radyo dalgaları kullanır [24]. 3. Sensörlerden Veri Elde Etme Sensör verisi elde etme uygulamaları akıllı telefonlardaki sensörlere direk erişim sağlanmasını sağlar. Verilerin UDP (User Datagram Protocol) yolu ile bilgisayara akışı sağlanabilir veya bu veriler CSV (Comma-Seperated Values) dosyası olarak transfer edilebilir [11]. Çalışmada sensörlere erişim sağlayan bir uygulama geliştirilmiştir. Geliştirilen uygulama ile ios, Android ve Windows Phone işletim sistemine sahip telefonlarda bulunan sensörlerden nasıl veri elde edileceği aşağıdaki alt bölümlerde sırasıyla anlatılmıştır. 3.1 GPS Sensörü GPS bilgilerine ulaşmak için ios platformunda CoreLocation Framework [17], Android platformunda Location Services[19], Windows Phone CLLocation *konum; CLLocationDegrees *lat = konum.coordinate.latitude; CLLocationDegrees *long = konum.coordinate. longitude; CLLocationDegrees *altitude = konum.altitude; CLLocationDegrees *speed = konum.speed; Location konum; double enlem = konum.getlatitude(); double boylam = konum.getlongitude(); double yukseklik = konum.getaltitude(); double hiz = konum.getspeed(); Geolocator geolocator = new Geolocator(); Geoposition geoposition; string boylam = geoposition.coordinate.longitude.tostring(); string enlem = geoposition.coordinate.latitude. ToString(); GeoCoordinateWatcher watcher = new GeoCoordinateWatcher(); String hiz = watcher.position.location.speed. ToString(); Elde edilen verilerin uygulama üzerindeki ekran görüntüsü ise Şekil 6 da gösterilmiştir: Şekil 6: Örnek GPS verileri Şekilde enlem (latitude) değeri olarak 37, boylam (longitude) değeri olarak 28 bulunduğu görülmektedir. Değerlerin pozitif olması kullanıcının kuzey yarım kürede ve doğu meridyenlerinde yer aldığını göstermektedir. Uygulamada bulunan hız değeri km/saat birimine çevrilip ekranda gösterilmiştir. Altitude ise deniz seviyesinden yüksekliği (rakım) belirtmektedir. 183
3.2 İvmeölçer Sensörü İvmeölçer verilerini elde etmek için ios platformunda CoreMotion Framework [18], Android platformunda SensorManager[16], Windows Phone platformunda ise Motion API[21] kütüphanesi kullanılmaktadır. İvmeölçer verilerini elde etmek için kullanılan kodlar şu şekildedir: CMAccelerometerData *acd; CMAcceleration acc = acd.acceleration; double x = acc.x; double y = acc.y; double z = acc.z; Accelerometer accelerometer; SensorManager sm; Sensor s; sm = (SensorManager) getsystemservice (Context.SENSOR_SERVICE); s = sm.getdefaultsensor (Sensor_TYPE_AC- CELEROMETER); public void onsensorchanged(sensorevent event){ float xacc = event.values[0]; float yacc = event.values[1]; float zacc = event.values[2]; Vector3 acceleration = accelerometerreading. Acceleration; string accx = acceleration.x.tostring(); string accy = acceleration.y.tostring(); string accz = acceleration.z.tostring(); Şekil 7,8 ve 9 da sırasıyla dik, yan kenarı üzerinde ve masa üzerinde sırtüstü duran telefondan elde edilmiş ivmeölçer verilerinin ekran görüntüleri verilmiştir: Şekil 7: Dik pozisyonda duran cihaz Şekil 8: Yan kenarı üzerinde duran cihaz Şekil 9: Masa üzerinde duran cihaz Şekil 7, 8 ve 9 da cihaz sabit durmaktadır. Bu da gösteriyor ki, cihaz sabit konumdayken Şekil 2 deki eksenler doğrultusunda cihaza yaklaşık olarak 1g kadar yerçekimi kuvveti etki etmektedir. 3.3 Jiroskop Sensörü Jiroskop verilerini elde etmek için de ivmeölçer sensöründe olduğu gibi ios için CoreMotion Framework [18], Android için SensorManager[16], Windows Phone için Motion API[21] kütüphanesi kullanılmak-tadır. Jiroskop verilerini elde etmek için kullanılan kodlar şu şekildedir: CMGyroData *gd; CMRotationRate *rotate = gd.rotationrate; double x = rotate.x; double y = rotate.y; double z = rotate.z; SensorManager sm; Sensor s; sm = (SensorManager) getsystemservice (Context.SENSOR_SERVICE); s = sm.getdefaultsensor(sensor_type_gyro- SCOPE); public void onsensorchanged(sensorevent event){ float x = event.values[0]; float y = event.values[1]; float z = event.values[2]; Gyroscope gyroscope; Vector3 rotationrate = Vector3.Zero; string x = rotationrate.x.tostring(); string y = rotationrate.y.tostring(); string z = rotationrate.z.tostring(); Şekil 10 da X ekseni etrafında dönmekte olan telefondan elde edilmiş ekran görüntüsü verilmiştir. Şekil 10 da cihazın, Şekil 4 de gösterilen eksenlerden, X ekseni etrafında saniyede yaklaşık 1.47 radyan açı yapacak şekilde döndürüldüğü görülmektedir. 184
Şekil 10: Örnek jiroskop verisi 3.4 Manyetometre Sensörü Manyetometre, CoreMotion Framework [18], SensorManager [16], Motion API [21] kütüphanesini kullanan bir diğer sensördür. Manyetometre verilerini elde etmek için kullanılan kodlar şu şekildedir: CMMagnetometerData *md; CMMagneticField field = md.magneticfield; double x = field.x; double y = field.y; double z = field.z; SensorManager sm; Sensor s; sm = (SensorManager) getsystemservice (Context.SENSOR_SERVICE); s = sm.getdefaultsensor (Sensor_TYPE_MAG- NETIC_FIELD); public void onsensorchanged(sensorevent event){ float xfield = event.values[0]; float yfield = event.values[1]; float zfield = event.values[2]; Compass compass; Vector3 rawmagnetometer; string x = rawmagnetometer.x.tostring(); string y = rawmagnetometer.y.tostring(); string z = rawmagnetometer.z.tostring(); Şekil 11: Örnek manyetometre verileri Manyetometre verilerinin elde edildiği örnek uygulamanın ekran görüntüsü Şekil 11 de verilmiştir. Burada Total olarak adlandırılan, cihaza etki eden manyetik alan X, Y ve Z eksenlerinde elde edilen değerlerin karelerinin toplamlarının kareköküdür. Anlatılan sensörlere ek olarak; barometre sensöründen veri elde etmek için de ios platformunda Core Motion Framework [18], yakınlık sensöründen veri elde etmek için ise UIDevice[23] sınıfı kullanılabil-mektedir. Android platformunda ise diğer sensörlerde olduğu gibi SensorManager [16] sınıfı kullanılmaktadır. Windows Phone ortamında yakınlık sensörüne erişmek için Proximity API [22] barometre sensörüne erişmek için Motion API [25] kullanılmaktadır. 4. Sonuç Akıllı telefonları normal telefonlardan ayıran en büyük özellik, üzerinde uygulamalar geliştirilebilir olması ve dahili sensörlere sahip olmasıdır. Çalışmada akıllı telefonların sahip olduğu ve uygulamalarda geniş kullanıma sahip olan GPS, ivmeölçer, jiroskop ve manyetometre sensörlerinin ne türde veriler sağladığı ve bu verilerin nasıl elde edildiği hakkında bilgi verilmiştir. Sensör verileri, ios ve Android ortamında geliştirilen uygulama ile elde edilmiş ve örneklerle incelenmiştir. İlerleyen çalışmalarda bu veriler, insanların fiziksel aktivitelerinin tespiti ve araç modu sınıflandırma gibi farklı uygulamalar geliştirmek için kullanılabilecektir. 5. Kaynaklar [1] Agapie, E., Chen, G., Houston, D., Howard, E., Kim, J., Mun, M. Y., Mondschein, A., Reddy, S., Rosario, R., Ryder, J., Steiner, A., Burke, J., Estrin, E., Hansen, M. ve Rahimi, M., Seeing Our Signals: Combining location traces and web-based models for personal discovery. In Proceedings of the 9th workshop on Mobile computing systems and applications, 6-10, (2008) [2] Köroğlu, O., En yaygın iletişim ortamında artırılmış gerçeklik uygulamaları, XVII. Türkiye de İnternet Konferansı, 74-81, (2012) [3] Çinaz, B., Arnrich, B., Akıllı Telefonlar ile Kullanıcıların Yaşam Tarzı Parametrelerinin Tespiti, Akademik Bilişim 2014, 243-249, (2014) [4] Feng, T. ve Timmermans, H.J.P, Transportation mode recognition using GPS and accelerometer data, Transportation Research Part C : Emerging Technologies, 37, 118 130, (2013) [5] Stenneth, L., Wolfson, O., Yu, F.S. ve Xu, B., Transportation Mode Detection using Mobile Phones and GIS Information, Proceedings of the 19th ACM SIGSPATIAL International Conference on Advances in Geographic Information Systems, 54-63, (2010) [6] Byon, Y.J., Abdulhai, B. ve Shalaby, A., Real-Time Transportation Mode Detection via Tracking Global Positioning System Mobile De- 185
vices, Journal of Intelligent Transportation Systems: Technology, Planning, and Operations, 13(4), 161-170, (2009) [7] Kansiz, A. O., Güvensan, M. A., Mobil telefon ile kaza tespiti, Signal Processing and Communications Applications Conference (SIU), 2013 21st (pp. 1-4). IEEE. [8] GPS nedir ve Nasıl çalışır?, http://www.bilgiustam.com/gps-nedir-ve-nasil-calisir/ [9] Smartphone Hardware Sensors, https://www. uniweimar.de/medien/wiki/images/zeitmaschinen-smartphonesensors.pdf [10] Sensors and Cellphones, http://web. stanford.edu/class/cs75n/sensors.pdf [11] Sensor Data, http://wavefrontlabs.com/ Wavefront_Labs/Sensor_Data.html [12] İvmeölçer, http://tr.wikipedia.org/ wiki/%c4%b0vme%c3%b6l%c3%a7er [13] The Core Motion Framework, https:// www.inkling.com/read/learning-ios-programming-alasdair-allan-2nd/chapter-9/the-coremotion-framework [14] Jiroskop, http://tr.wikipedia.org/wiki/jiroskop [15] Reading Gyro info from iphone Tutorial, http://www.planet1107.net/blog/reading-gyro-info-from-iphone-tutorial/ [16] Sensors Overview, http://developer.android. com/guide/topics/sensors/sensors_overview. html [17] Core Location Framework Reference, https://developer.apple.com/library/ios/documentation/corelocation/reference/corelocation_framework/index.html [18] Core Motion Framework Reference, https:// developer.apple.com/library/ios/documentation/coremotion/reference/coremotion_reference/index.html [19] Location and Maps, http://developer.android.com/guide/topics/location/index.html#location [20] How to get the phone s current location for Windows Phone 8, http:// msdn.microsoft.com/en-us/library/ windows/apps/ jj206956(v=vs.105).aspx [21] Sensors for Windows Phone 8, http://msdn. microsoft.com/en-us/library/windows/apps/ hh202968(v=vs.105).aspx [22] Proximity for Windows 8, http://msdn. microsoft.com/en-us/library/windows/apps/ jj207060%28v=vs.105%29.aspx [23] UIDevice, https://developer.apple. com/library/ios/documentation/uikit/reference/uidevice_class/index.html [24] Magnetic Resonance Imaging, http:// en.wikipedia.org/wiki/magnetic_resonance_imaging [25] Your Privacy in Motion Data, http://www.microsoft.com/en/mobile/privacy/privacy/details/ motion-data/motion-data/ 186