Su Terazisi Uygulamaları Nasıl Çalışır: Telefon İvmeölçerleri
Telefonunuz aşağının hangi yön olduğunu bilir, çünkü içinde MEMS ivmeölçer denen küçücük bir sensör vardır. Bu sensör, yerçekiminin telefonu üç yönde birden ne kadar çektiğini ölçer. Su terazisi uygulaması bu üç sayıyı okur, biraz trigonometri çalıştırır ve size bir açı gösterir. Bunu, çıplak gözle zor seçeceğiniz bir çip içinde saniyede yüzlerce kez yapar. Bu yazıda tam olarak ne olduğunu adım adım anlatıyoruz.
- İvmeölçer, yerçekiminin üç eksene nasıl dağıldığını ölçer. Telefon dururken hareketi ölçmez.
- Eğim değerleri (pitch ve roll), bu üç yerçekimi okumasına uygulanan arctan formüllerinden çıkar.
- Spirit Level Pro, baloncuğun titreşmesini önlemek için ham okumaları üstel hareketli ortalamadan (alpha=0,15) geçirir.
- MEMS sensörleri sıcaklıkla kayar, bu yüzden çalıştığınız yerde kalibrasyon yapın.
- Bir yüzeye sabit tutulan telefon için işi ivmeölçer tek başına yapar. Jiroskopa gerek yoktur.
MEMS ivmeölçer nedir?
MEMS, Mikro-Elektro-Mekanik Sistemler anlamına gelir. Telefon ivmeölçerinin içindeki algılama parçası çok küçüktür, birkaç yüz mikron genişliğinde, bir tuz tanesinden bile küçük. Sıradan çip elektroniğiyle aynı silikonun üzerinde oturur ve aynı yöntemle üretilir. Bu yüzden bu sensörler ucuzdur ve neredeyse her telefona girer.
Çalışma mantığı, bir kez gözünüzde canlandırınca basittir. Çipe kazınan silikon yaylara küçük bir kütle asılıdır. Çipi eğdiğinizde yerçekimi bu kütleyi biraz merkezden kaydırır. Bu hareket, tarak biçimindeki metal parmakların arasındaki boşluğu değiştirir ve boşluğun değişmesi aralarındaki kapasitansı değiştirir. Çip bu değişimi okur ve g cinsinden bir ivme sayısına çevirir.
İşte su terazisini mümkün kılan kısım. Telefon dururken ivmeölçer hareket okumaz. Yerçekiminin üç ekseninin her biri boyunca ne kadar çektiğini okur. Yerçekimi sabit ve bilinen bir kuvvettir. Üç eksen arasında nasıl bölündüğünü bir kez bildiğinizde, telefonun tam olarak nasıl eğik durduğunu çıkarabilirsiniz.
3 eksenli ivmeölçer eğimi nasıl ölçer?
Üç eksenli ivmeölçer, telefona kendi yön takımını verir: X soldan sağa, Y yukarıdan aşağıya, Z önden arkaya gider. Telefonu masaya düz yatırın, yerçekimi neredeyse tümüyle Z boyunca çeker; yani Z yaklaşık 9,81 m/s² okur, X ve Y ise sıfıra yakın kalır. Telefonu eğdiğinizde yerçekimi kayar: Z'de azalır, X ve Y'de artar, hem de açıyla orantılı olarak.
Bu üç okumayı açıya çevirmek temel trigonometridir. Pitch önden arkaya eğimdir, roll soldan sağa eğimdir ve ikisi de ters tanjanttan (arctan) çıkar:
Bir su terazisi uygulamasının bütün matematik çekirdeği bu iki satırdır. Üç ham değeri verin, hesabı çalıştırın, radyan cinsinden pitch ve roll alın. Dereceye çevirmek için 180/π ile çarpın. Ekranınızdaki sayı budur.
Payda neden tek bir eksen yerine diğer iki eksenin karekökünü kullanıyor diye merak edebilirsiniz. Bu, okumayı tam bir dönüş boyunca kararlı tutar. Tek bir eksene bölerseniz, dikeye yakın yerlerde hesap bozulur; çünkü o eksen sıfıra düşer ve neredeyse hiçbir şeye bölmeye başlarsınız. Diğer iki eksenin birleşik büyüklüğünü kullanmak bunu önler.
Spirit Level Pro, canlı pitch ve roll açılarını EMA yumuşatması, beş tolerans ayarı ve tek dokunuşla kalibrasyonla gösterir. İndirmeye gerek yok.
Spirit Level Pro'yu Ücretsiz DeneHam sensör verisi neden bu kadar gürültülü?
Ham ivmeölçer çıkışı beklediğinizden daha fazla oynar. Kıpırdamadan duran bir telefon bile okumalarında küçük dalgalanmalar gösterir. Bunun bir kısmı sensörün kendi elektriksel gürültüsüdür, bir kısmı yüzeyden gelen titreşimdir, bir kısmı da analog sinyal sayıya çevrilirken oluşan yuvarlama hatasıdır. Bu ham akışı ekrana verirseniz baloncuk durmadan seğirir ve dikkat isteyen iş için işe yaramaz.
Gürültü birkaç kaynaktan gelir. Isıl gürültü, sıcaklıktan doğan rastgele elektriksel dalgalanmadır. Onu tümüyle kaldıramazsınız ve sensörün ne kadar sessiz olabileceğinin alt sınırını belirler. Titreşim gürültüsü çevrenizden gelir: buzdolabı kompresörü, ayak sesleri, dışarıdaki trafik. Sensörün sıfır noktası da zamanla kendiliğinden yavaşça kayar. Her biri ayrı bir çözüm ister.
Yazılımdaki alışılmış çözüm bir alçak geçiren filtredir. Gerçek eğim gibi yavaş değişimleri geçirir, titreşim gibi hızlı değişimleri tutar. En yaygın yolu üstel hareketli ortalamadır, kısaca EMA. Her yeni okuma bir kesir kadar, yani alpha kadar sayılır; gerisi bir önceki filtrelenmiş değerden gelir:
Spirit Level Pro, alpha=0,15 olan bir EMA kullanır. Bu sayıya, elle bir dizi değeri deneyerek karar verdik. alpha=0,05'te okuma cam gibi pürüzsüzdü ama yavaştı; telefonu oynattığınızda baloncuk arkadan geliyordu. alpha=0,3'te iyi ayak uyduruyordu ama hassas bir okumayı yakalamayı zorlaştıracak kadar seğiriyordu. alpha=0,15 ikisinin arasındadır. Baloncuk gergin olmadan canlı hissettirir.
Jiroskopun rolü nedir?
Jiroskop, telefonun ne kadar hızlı döndüğünü ölçer, saniyede derece olarak. Telefonun hangi yöne baktığını ölçmez. Bu fark önemlidir. Tek başına jiroskop, telefonun düz olup olmadığını söyleyemez. Yalnızca dönüp dönmediğini ve ne kadar hızlı döndüğünü bilir. Telefon sabit dururken alınan bir düzlük okuması için ivmeölçer zaten gerekeni verir.
Jiroskop, telefon hareket ederken sensör füzyonu sayesinde işe yarar. İvmeölçerler duran eğimi iyi okur ama hızlı hareket sırasında yavaş ve gürültülü olur. Jiroskoplar hızlı dönüşü iyi izler ama kayar; çünkü küçük hataları zamanla birikir. Tamamlayıcı filtre ya da Kalman filtresi ikisini birleştirir: jiroskop hızlı hareketi üstlenir, ivmeölçer uzun vadeli okumayı gerçeğe geri çeker.
Spirit Level Pro dahil çoğu su terazisi uygulaması, iş durağan olduğu için sensör füzyonunu atlar. Telefonu koyarsınız, oturur, açıyı okursunuz. İvmeölçer bunu tek başına gayet iyi halleder. Sensör füzyonu, kendi hareketini izleyen bir drone gibi havada bir şey varken önemlidir; rafı kontrol ederken değil.
Kalibrasyon neden bu kadar önemli?
Her MEMS sensörü fabrikadan küçük bir yerleşik sapmayla çıkar. Bu, üretim sırasında oluşan bir yanlılıktır ve her okumada aynıdır: sabit bir miktar, sabit bir yönde. Yani telefon gerçekten düzken bile çip bir iki derece şaşabilir. Bir su terazisi uygulamasının kutudan çıktığı haliyle yanlış görünmesinin en büyük tek nedeni budur.
Kalibrasyon bunu, düz olduğuna güvendiğiniz bir yüzeyde bu sapmayı ölçüp saklayarak düzeltir. Spirit Level Pro değerleri localStorage içinde calibrationPitch ve calibrationRoll altında saklar. Bundan sonra her okuma, ekrana gelmeden önce bu saklanan sayıları çıkarır. Sapma ortadan kalkar.
Fark büyüktür. Kalibrasyonu atlarsanız, 1,5° sapması olan bir telefon her şeyi 1,5° yanlış okur. Gerçekte 1,5°'lik bir eğimde dururken 0,0° gösterebilir. Aynı telefonu kalibre edin, sapma birkaç onda bir dereceye iner. Bu, elde edebileceğiniz en büyük tek doğruluk kazancıdır ve birkaç saniyeden başka hiçbir maliyeti yoktur.
Sıcaklık doğruluğu nasıl etkiler?
MEMS sensörleri sıcaklığa tepki verir. Kütleyi tutan silikon yaylar, çip ısınıp soğudukça genişler ve büzülür, bu da sıfır noktasını kaydırır. Yani telefonu sıcak bir arabadan soğuk bir garaja götürün, sensör yeni sıcaklığa oturana kadar okuma biraz kayar. Büyük bir kayma değildir ama gerçektir.
Pratik sonuç basit: çalışmayı planladığınız sıcaklıkta kalibrasyon yapın. Sıcak bir ofiste yapılan kalibrasyon, soğuk bir garajda tam olarak tutmaz. Bunu her iş için dert etmeniz gerekmez. Resim asmak ya da raf kontrol etmek için kayma göze görünmeyecek kadar küçüktür. Birkaç onda bir derece içindeki hassas işlerde ise, büyük bir sıcaklık değişiminden sonra telefona bir iki dakika oturma payı verin, sonra kalibre edin.
iPhone ile Android: sensör donanımı farklı mı?
Farklı, ve bu, uygulamanın hissinde kendini gösterir. Apple kendi hareket sistemini kurar. 6s'ten itibaren iPhone'larda, sensör verisini ana işlemciden ayrı işleyen bir Apple hareket yardımcı işlemcisi bulunur. Samsung Galaxy amiral gemileri, 3 eksenli ivmeölçer ile 3 eksenli jiroskopu tek bir çipe koyan STMicroelectronics parçalarına dayanır. Google Pixel telefonları, yıla göre Bosch ve TDK InvenSense sensörleri kullanmıştır.
Kalibrasyondan sonra amiral gemi bir iPhone ile amiral gemi bir Android aşağı yukarı aynı çıkar. Asıl önemli fark, amiral gemi ile uygun fiyatlı Android arasındadır. Ucuz telefonlar daha düşük çözünürlüklü, daha ucuz MEMS kullanır ve ham çıkışları daha gürültülüdür. Kalibrasyon yine de onları yaklaştırır ve çoğu ev işi için sonuç yeterlidir.
iPhone'u bir su terazisi uygulamasında öne çıkaran şey ivmeölçerden çok o hareket yardımcı işlemcisidir. Uygulama önde olmasa bile sensör verisini yüksek hızda toplamayı sürdürür, böylece yumuşatma filtresinin elinde daha çok örnek olur. iPhone'ların burada bu kadar akıcı hissettirmesinin, hatta kağıt üzerinde en az onlar kadar iyi sensörü olan Android telefonlara karşı bile öyle hissettirmesinin büyük nedeni budur.
Sık sorulan sorular
Telefonda su terazisi uygulamaları nasıl çalışır?
Telefonun MEMS ivmeölçerini okurlar; bu sensör yerçekiminin üç eksen (X, Y, Z) boyunca ne kadar çektiğini ölçer. Telefonu eğince yerçekimi bu eksenler arasında kayar. Uygulama pitch ve roll'u bulmak için arctan formüllerini çalıştırır, sonucu sensör gürültüsünü yatıştırmak için yumuşatır ve bir baloncuk şişesi ya da bir sayı olarak gösterir. Bütün bu iş saniyede yüzlerce kez döner.
Su terazisi için telefon ivmeölçeri ne kadar doğrudur?
Kalibre edilmiş amiral gemi bir telefon, birkaç onda bir derece hassasiyetle okur. Uygun fiyatlı Android telefonlar kalibrasyonsuz daha kötü okur, çünkü sensörleri daha ucuzdur ve cihazlar arasında daha çok değişir. En büyük tek etken kalibrasyondur: fabrika sapmasını kaldırır ve hemen hemen her telefonu yaklaştırır. Çoğu ev ve zanaat işi için kalibre edilmiş orta seviye bir telefon yeterince doğrudur.
Su terazisi uygulaması jiroskopu kullanır mı?
Duran bir telefon için hayır. İvmeölçer eğim açısını tek başına verir. Jiroskop konumu değil dönme hızını ölçer, bu yüzden telefonun düz olup olmadığını söyleyemez; yalnızca ne kadar hızlı döndüğünü bilir. Bazı uygulamalar hareket sırasında daha pürüzsüz okuma için iki sensörü birleştirir, ama telefonu duvara bastırıp açıyı okumak için işi ivmeölçer tek başına yapar.
Su terazisi uygulamam düz bir yüzeyde bile neden biraz yanlış okuyor?
Genellikle nedeni fabrika sapmasıdır. Her MEMS çipinin, telefon düzken bile sıfırdan farklı okumasına yol açan küçük bir yerleşik yanlılığı vardır. Güvendiğiniz bir yüzeyde kalibrasyon yapmak bunu temizler. Diğer nedenler sıcaklık kayması, cihazın bir kenarını yüzeyden kaldıran bir telefon kılıfı ya da telefonun altındaki tozdur. Büyük bir sıcaklık değişiminden sonra temiz bir cam masada kalibrasyon yapmak çoğunu çözer.
Bütün resim
Su terazisi uygulamaları çalışır, çünkü arkasındaki fizik güvenilirdir. Yerçekimi sabittir, ivmeölçer onu sürekli ölçer ve trigonometri üç sayıyı bir açıya çevirir. Algılama parçasından baloncuğa uzanan yol baştan sona belirli bir matematiktir. İçinde tahmin yoktur.
Bir su terazisi uygulamasını diğerinden daha iyi yapan şey donanım değildir. Her amiral gemi telefon zaten fazlasıyla iyi sensörlerle gelir. Fark yazılımdadır: ham akış ne kadar iyi filtreleniyor, kalibrasyon nasıl saklanıp uygulanıyor, tolerans ayarları gerçek işlere ne kadar uyuyor. Bunları doğru yapın, ucuz bir MEMS çipi kendinden çok daha pahalı özel aletlere karşı kendini tutar.
Sensörün nasıl çalıştığını bilmek, onu kullanmakta da sizi daha iyi yapar. Çalışma sıcaklığında kalibre edin. Hassas okumalar için kılıfı çıkarın. Bir sayıya güvenmeden önce bir saniye oturmasını bekleyin. Bu alışkanlıkların her biri, donanımın ne yaptığını anlamaktan doğrudan gelir.