स्पिरिट लेवल ऐप कैसे काम करते हैं: फ़ोन एक्सेलेरोमीटर की पूरी बात
आपका फ़ोन जानता है कि नीचे किस तरफ़ है, क्योंकि उसमें एक छोटा-सा सेंसर लगा है जिसे MEMS एक्सेलेरोमीटर कहते हैं। यह सेंसर मापता है कि गुरुत्वाकर्षण फ़ोन को एक साथ तीन दिशाओं में कितना खींच रहा है। स्पिरिट लेवल ऐप इन तीन संख्याओं को पढ़ता है, थोड़ी-सी त्रिकोणमिति चलाता है, और आपको कोण दिखा देता है। यह काम सेकंड में सैकड़ों बार होता है, एक ऐसी चिप के अंदर जो नंगी आँख से मुश्किल से दिखती है। इस लेख में हम बताते हैं कि असल में होता क्या है।
- एक्सेलेरोमीटर मापता है कि गुरुत्वाकर्षण तीन अक्षों में कैसे बँटता है। फ़ोन स्थिर रहने पर यह गति नहीं मापता।
- पिच और रोल इन्हीं तीन गुरुत्वाकर्षण रीडिंग पर arctan सूत्र लगाकर निकलते हैं।
- Spirit Level Pro कच्ची रीडिंग को exponential moving average (alpha=0.15) से गुज़ारता है ताकि बुलबुला काँपना बंद कर दे।
- MEMS सेंसर तापमान के साथ खिसकते हैं, इसलिए जहाँ काम करना है वहीं कैलिब्रेट करें।
- किसी सतह पर स्थिर रखे फ़ोन के लिए एक्सेलेरोमीटर अकेला ही पूरा काम कर देता है। आपको गायरोस्कोप की ज़रूरत नहीं।
MEMS एक्सेलेरोमीटर क्या है?
MEMS का मतलब है माइक्रो-इलेक्ट्रो-मैकेनिकल सिस्टम। फ़ोन के एक्सेलेरोमीटर के अंदर जो सेंसिंग हिस्सा होता है वह बहुत छोटा है, कुछ सौ माइक्रॉन चौड़ा, नमक के दाने से भी छोटा। यह उसी सिलिकॉन पर बैठता है जिस पर बाक़ी चिप के पुर्ज़े होते हैं, और बनता भी उसी तरीक़े से है। इसीलिए ये सेंसर सस्ते होते हैं और लगभग हर फ़ोन में आ जाते हैं।
तरीक़ा समझ में आ जाए तो बात सीधी है। चिप में खुदी हुई सिलिकॉन की छोटी-छोटी कमानियों पर एक नन्हा द्रव्यमान टँगा रहता है। जब आप चिप को झुकाते हैं, गुरुत्वाकर्षण उस द्रव्यमान को थोड़ा किनारे खींच देता है। इस हिलने से कंघी जैसी धातु की उँगलियों के बीच का फ़ासला बदल जाता है, और फ़ासला बदलने से उनके बीच की कैपेसिटेंस बदल जाती है। चिप इस बदलाव को पढ़ती है और उसे g में मापा गया त्वरण संख्या बना देती है।
अब वह हिस्सा जो स्पिरिट लेवल को मुमकिन बनाता है। जब फ़ोन स्थिर पड़ा है, एक्सेलेरोमीटर गति नहीं पढ़ रहा। वह पढ़ रहा है कि गुरुत्वाकर्षण उसके तीनों अक्षों में से हर एक के साथ कितना खींच रहा है। गुरुत्वाकर्षण एक तय, जाना-पहचाना बल है। एक बार आपको पता चल जाए कि वह तीनों अक्षों में कैसे बँटता है, तो आप ठीक-ठीक निकाल सकते हैं कि फ़ोन कितना झुका है।
3-अक्ष एक्सेलेरोमीटर झुकाव कैसे मापता है?
तीन-अक्ष एक्सेलेरोमीटर फ़ोन को अपनी दिशाएँ दे देता है: X बाएँ से दाएँ चलता है, Y ऊपर से नीचे, और Z आगे से पीछे। फ़ोन को मेज़ पर सपाट रख दीजिए तो गुरुत्वाकर्षण लगभग पूरा Z के साथ खींचता है, इसलिए Z करीब 9.81 m/s² पढ़ता है और X तथा Y शून्य के आसपास। फ़ोन झुकाइए तो गुरुत्वाकर्षण खिसक जाता है, Z पर कम और X तथा Y पर ज़्यादा, कोण के अनुपात में।
उन तीन रीडिंग को कोण में बदलना सीधी त्रिकोणमिति है। पिच आगे-पीछे का झुकाव है, रोल बाएँ-दाएँ का, और दोनों एक arctan से निकलते हैं:
ये दो पंक्तियाँ ही स्पिरिट लेवल ऐप का पूरा गणित हैं। तीन कच्चे मान डालिए, गणना चलाइए, और आपको पिच तथा रोल रेडियन में मिल जाते हैं। 180/π से गुणा कीजिए तो डिग्री बन जाते हैं। यही वह संख्या है जो आपकी स्क्रीन पर आती है।
आप सोच सकते हैं कि भाजक में सिर्फ़ एक अक्ष के बजाय बाक़ी दो अक्षों का वर्गमूल क्यों लिया जाता है। इससे पूरे घुमाव में रीडिंग स्थिर रहती है। अगर आप किसी एक अक्ष से भाग दें, तो लंबवत के पास गणित बिगड़ जाता है, क्योंकि वह अक्ष शून्य तक गिर जाता है और आप लगभग शून्य से भाग देने लगते हैं। बाक़ी दोनों अक्षों का जुड़ा हुआ परिमाण इस्तेमाल करने से यह दिक़्क़त नहीं आती।
Spirit Level Pro EMA स्मूथिंग, पाँच टॉलरेंस प्रीसेट और एक-टैप कैलिब्रेशन के साथ लाइव पिच और रोल कोण दिखाता है। कोई डाउनलोड नहीं चाहिए।
Spirit Level Pro मुफ़्त आज़माएंकच्चा सेंसर डेटा इतना शोरगुल वाला क्यों होता है?
कच्चा एक्सेलेरोमीटर आउटपुट उम्मीद से ज़्यादा उछलता-कूदता है। बिल्कुल स्थिर पड़ा फ़ोन भी अपनी रीडिंग में हल्के झटके दिखाता है। इसमें से कुछ तो सेंसर के अंदर का ही बिजली का शोर है, कुछ सतह से आती कंपन है, और कुछ राउंडिंग की चूक है जब एनालॉग संकेत संख्याओं में बदलता है। यही कच्ची धारा स्क्रीन पर दिखा दीजिए तो बुलबुला लगातार फड़फड़ाता है, जो सावधानी वाले काम के लिए बेकार है।
शोर कुछ जगहों से आता है। थर्मल शोर गरमी से पैदा होने वाला बेतरतीब बिजली का उतार-चढ़ाव है। इसे हटाया नहीं जा सकता, और यही तय करता है कि सेंसर ज़्यादा से ज़्यादा कितना शांत हो सकता है। कंपन शोर आसपास की दुनिया से आता है: फ़्रिज का कंप्रेसर, क़दमों की आहट, बाहर का ट्रैफ़िक। और सेंसर का शून्य बिंदु अपने आप धीरे-धीरे समय के साथ खिसकता रहता है। हर एक का इलाज अलग है।
सॉफ़्टवेयर में इसका आम इलाज है लो-पास फ़िल्टर। यह धीमे बदलाव को गुज़रने देता है, जैसे असली झुकाव, और तेज़ बदलाव को रोक लेता है, जैसे कंपन। इसे करने का आम तरीक़ा है एक्सपोनेंशियल मूविंग एवरेज, यानी EMA। हर नई रीडिंग एक अंश alpha जितनी गिनी जाती है, और बाक़ी पिछली फ़िल्टर की हुई क़ीमत से चली आती है:
Spirit Level Pro alpha=0.15 वाला EMA इस्तेमाल करता है। कई मान हाथ से आज़माने के बाद हम इसी पर पहुँचे। alpha=0.05 पर रीडिंग शीशे-सी चिकनी थी पर धीमी, और फ़ोन हिलाने पर बुलबुला पीछे रह जाता था। alpha=0.3 पर वह अच्छी तरह साथ चलता था पर इतना फड़फड़ाता था कि सटीक रीडिंग पकड़ना मुश्किल हो जाता। alpha=0.15 बीच में बैठता है। बुलबुला जीवंत लगता है, पर घबराया हुआ नहीं।
गायरोस्कोप की क्या भूमिका है?
गायरोस्कोप मापता है कि फ़ोन कितनी तेज़ी से घूम रहा है, डिग्री प्रति सेकंड में। यह नहीं मापता कि फ़ोन किस तरफ़ मुँह किए है। यही फ़र्क़ मायने रखता है। अकेला गायरोस्कोप आपको नहीं बता सकता कि फ़ोन समतल है या नहीं। वह सिर्फ़ जानता है कि घूम रहा है या नहीं और कितनी तेज़ी से। स्थिर रखे फ़ोन की लेवल रीडिंग के लिए एक्सेलेरोमीटर के पास पहले से सब कुछ है जो चाहिए।
गायरोस्कोप अपनी जगह तब बनाता है जब फ़ोन चल रहा हो, सेंसर फ़्यूज़न के ज़रिए। एक्सेलेरोमीटर स्थिर झुकाव अच्छा पढ़ते हैं पर तेज़ हरकत के दौरान धीमे और शोरगुल वाले हो जाते हैं। गायरोस्कोप तेज़ घुमाव अच्छा ट्रैक करते हैं पर खिसकते हैं, क्योंकि उनकी छोटी-छोटी चूकें समय के साथ जुड़ती जाती हैं। एक कॉम्प्लीमेंटरी या कालमन फ़िल्टर दोनों को मिला देता है: गायरोस्कोप तेज़ हरकत सँभालता है, और एक्सेलेरोमीटर लंबी अवधि की रीडिंग को वापस सही पर खींच लाता है।
ज़्यादातर स्पिरिट लेवल ऐप, Spirit Level Pro समेत, सेंसर फ़्यूज़न छोड़ देते हैं क्योंकि काम स्थिर है। आप फ़ोन रख देते हैं, वह थम जाता है, आप कोण पढ़ लेते हैं। एक्सेलेरोमीटर यह अकेले ही ठीक सँभाल लेता है। सेंसर फ़्यूज़न वहाँ ज़्यादा मायने रखता है जहाँ कोई चीज़ हवा में हो, जैसे अपनी हरकत ट्रैक करता ड्रोन, न कि तब जब आप शेल्फ़ जाँच रहे हों।
कैलिब्रेशन इतना ज़रूरी क्यों है?
हर MEMS सेंसर कारख़ाने से एक छोटे-से जन्मजात ऑफसेट के साथ निकलता है। यह एक पूर्वाग्रह है जो बनते समय बैठ जाता है, और हर रीडिंग पर एक-सा रहता है: तय मात्रा, तय दिशा में। इसलिए फ़ोन सचमुच सपाट होने पर भी चिप एक-दो डिग्री ग़लत पढ़ सकती है। किसी स्पिरिट लेवल ऐप के डिब्बे से निकलते ही ग़लत दिखने की सबसे बड़ी वजह यही है।
कैलिब्रेशन इसे ठीक कर देता है, उस ऑफसेट को ऐसी सतह पर मापकर जिसके सपाट होने का आपको भरोसा है, फिर उसे सहेजकर। Spirit Level Pro इन मानों को localStorage में calibrationPitch और calibrationRoll के नीचे सहेजता है। उसके बाद हर रीडिंग स्क्रीन पर आने से पहले उन सहेजी संख्याओं को घटा देती है। ऑफसेट ग़ायब।
फ़र्क़ बड़ा है। कैलिब्रेशन छोड़ दीजिए और 1.5° पूर्वाग्रह वाला फ़ोन हर चीज़ पर 1.5° ग़लत पढ़ेगा। वह असली 1.5° ढलान पर बैठकर भी 0.0° दिखा सकता है। उसी फ़ोन को कैलिब्रेट कीजिए और वह घटकर एक डिग्री के कुछ दसवें हिस्से पर आ जाता है। सटीकता का यह सबसे बड़ा एकल फ़ायदा है, और इसमें कुछ सेकंड के सिवा कुछ ख़र्च नहीं होता।
तापमान सटीकता को कैसे प्रभावित करता है?
MEMS सेंसर तापमान पर प्रतिक्रिया देते हैं। द्रव्यमान को टाँगे रखने वाली सिलिकॉन कमानियाँ चिप के गरम और ठंडा होने पर फैलती-सिकुड़ती हैं, जिससे शून्य बिंदु खिसक जाता है। इसलिए फ़ोन को गरम गाड़ी से ठंडे गैराज में ले जाइए तो सेंसर नए तापमान पर थमने से पहले रीडिंग थोड़ी खिसक जाती है। यह कोई बड़ा खिसकाव नहीं, पर असली है।
व्यावहारिक सीख सीधी है: जिस तापमान पर काम करना है, उसी पर कैलिब्रेट कीजिए। गरम दफ़्तर में किया गया कैलिब्रेशन ठंडे गैराज में पूरी तरह नहीं टिकता। हर काम के लिए इस पर सिर खपाने की ज़रूरत नहीं। तस्वीर टाँगने या शेल्फ़ जाँचने के लिए यह खिसकाव इतना छोटा है कि दिखता ही नहीं। एक डिग्री के कुछ दसवें हिस्से के भीतर वाले कड़े काम के लिए, बड़े तापमान बदलाव के बाद फ़ोन को एक-दो मिनट थमने दीजिए, फिर कैलिब्रेट कीजिए।
iPhone बनाम Android: क्या सेंसर हार्डवेयर अलग है?
अलग है, और यह ऐप के एहसास में झलकता है। ऐपल अपना ख़ुद का मोशन सिस्टम बनाता है। 6s के बाद के iPhone में एक ऐपल मोशन कोप्रोसेसर लगा रहता है जो सेंसर डेटा को मुख्य CPU से अलग सँभालता है। सैमसंग गैलेक्सी फ़्लैगशिप STMicroelectronics के पुर्ज़ों पर टिकते हैं, जो 3-अक्ष एक्सेलेरोमीटर और 3-अक्ष गायरोस्कोप को एक ही डाई पर रखते हैं। गूगल पिक्सल फ़ोन साल के हिसाब से Bosch और TDK InvenSense के सेंसर इस्तेमाल करते आए हैं।
कैलिब्रेशन के बाद एक फ़्लैगशिप iPhone और एक फ़्लैगशिप Android लगभग बराबर उतरते हैं। जो फ़र्क़ सचमुच मायने रखता है वह फ़्लैगशिप और बजट Android के बीच है। बजट फ़ोन सस्ते MEMS इस्तेमाल करते हैं जिनका रिज़ॉल्यूशन कम होता है, और उनका कच्चा आउटपुट ज़्यादा शोरगुल वाला होता है। कैलिब्रेशन फिर भी उन्हें काफ़ी पास ले आता है, और ज़्यादातर DIY काम के लिए नतीजा ठीक रहता है।
स्पिरिट लेवल ऐप में iPhone को जो अलग करता है, वह एक्सेलेरोमीटर से ज़्यादा वह मोशन कोप्रोसेसर है। यह ऐप सामने न होने पर भी ऊँची दर से सेंसर डेटा बटोरता रहता है, इसलिए स्मूथिंग फ़िल्टर के पास काम करने को ज़्यादा नमूने रहते हैं। यही बड़ी वजह है कि iPhone यहाँ इतने चिकने लगते हैं, उन Android फ़ोन के मुक़ाबले भी जिनके सेंसर काग़ज़ पर उतने ही अच्छे हैं।
अक्सर पूछे जाने वाले सवाल
स्पिरिट लेवल ऐप फ़ोन पर कैसे काम करते हैं?
वे फ़ोन के MEMS एक्सेलेरोमीटर को पढ़ते हैं, जो मापता है कि गुरुत्वाकर्षण तीन अक्षों (X, Y, Z) के साथ कितना खींच रहा है। फ़ोन झुकाइए तो गुरुत्वाकर्षण उन अक्षों के बीच खिसक जाता है। ऐप पिच और रोल निकालने के लिए arctan सूत्र चलाता है, सेंसर के शोर को शांत करने के लिए नतीजे को चिकना करता है, और उसे बुलबुले की शीशी या एक संख्या के रूप में दिखाता है। यह पूरा काम सेकंड में सैकड़ों बार चलता है।
स्पिरिट लेवल के काम के लिए फ़ोन एक्सेलेरोमीटर कितना सटीक है?
कैलिब्रेट किया हुआ फ़्लैगशिप फ़ोन एक डिग्री के कुछ दसवें हिस्से के भीतर पढ़ता है। बजट Android फ़ोन बिना कैलिब्रेशन के इससे बुरा पढ़ते हैं, क्योंकि उनके सेंसर सस्ते होते हैं और इकाई-दर-इकाई ज़्यादा बदलते हैं। सबसे बड़ी बात कैलिब्रेशन है: यह कारख़ाने का ऑफसेट हटाकर लगभग किसी भी फ़ोन को पास ले आता है। ज़्यादातर DIY और पेशेवर काम के लिए एक कैलिब्रेट किया मध्यम-श्रेणी का फ़ोन काफ़ी सटीक है।
क्या स्पिरिट लेवल ऐप गायरोस्कोप का उपयोग करते हैं?
स्थिर फ़ोन के लिए नहीं। एक्सेलेरोमीटर अकेला ही आपको झुकाव का कोण दे देता है। गायरोस्कोप घूमने की गति मापता है, स्थिति नहीं, इसलिए वह नहीं बता सकता कि फ़ोन समतल है या नहीं, सिर्फ़ यह कि वह कितनी तेज़ी से घूम रहा है। कुछ ऐप हरकत के दौरान चिकनी रीडिंग के लिए दोनों सेंसर मिला देते हैं, पर फ़ोन को दीवार से सटाकर कोण पढ़ने के लिए एक्सेलेरोमीटर अकेला पूरा काम कर देता है।
मेरा स्पिरिट लेवल ऐप समतल सतह पर भी थोड़ा ग़लत क्यों पढ़ता है?
आमतौर पर वजह कारख़ाने का ऑफसेट है। हर MEMS चिप में एक छोटा जन्मजात पूर्वाग्रह होता है जो फ़ोन सपाट होने पर भी उसे शून्य से हटकर पढ़वाता है। जिस सतह पर आपको भरोसा हो, उस पर कैलिब्रेट करने से यह साफ़ हो जाता है। दूसरी वजहें हैं तापमान का खिसकाव, ऐसा फ़ोन केस जो सतह पर एक किनारा उठा देता है, या फ़ोन के नीचे की धूल। किसी भी बड़े तापमान बदलाव के बाद साफ़ काँच की मेज़ पर कैलिब्रेट कर लेने से ज़्यादातर बात सँभल जाती है।
पूरी तस्वीर
स्पिरिट लेवल ऐप इसलिए काम करते हैं क्योंकि इनके पीछे की भौतिकी भरोसेमंद है। गुरुत्वाकर्षण स्थिर है, एक्सेलेरोमीटर उसे हर वक़्त मापता है, और त्रिकोणमिति तीन संख्याओं को कोण में बदल देती है। सेंसिंग हिस्से से बुलबुले तक का रास्ता पूरे रास्ते तय गणित है। इसमें कोई अंदाज़ा नहीं।
एक स्पिरिट लेवल ऐप को दूसरे से बेहतर हार्डवेयर नहीं बनाता। हर फ़्लैगशिप फ़ोन पहले से ऐसे सेंसर के साथ आता है जो ज़रूरत से ज़्यादा अच्छे हैं। फ़र्क़ सॉफ़्टवेयर का है: कच्ची धारा को कितनी अच्छी तरह फ़िल्टर किया गया, कैलिब्रेशन को कैसे सहेजा और लगाया गया, टॉलरेंस प्रीसेट असली कामों से कितने मेल खाते हैं। ये सही कर लीजिए और एक सस्ती MEMS चिप उन समर्पित औज़ारों के सामने भी टिकी रहती है जो कहीं ज़्यादा महँगे हैं।
सेंसर कैसे काम करता है यह जान लेने से आप उसे बेहतर इस्तेमाल भी करने लगते हैं। काम के तापमान पर कैलिब्रेट कीजिए। सटीक रीडिंग के लिए केस उतार दीजिए। संख्या पर भरोसा करने से पहले उसे एक पल थमने दीजिए। ये सारी आदतें सीधे इसी समझ से आती हैं कि हार्डवेयर कर क्या रहा है।