انواع سنسور

این بخش محورهای حسگر، حسگرهای پایه و حسگرهای مرکب (فعالیت، وضعیت، کالیبره نشده و تعامل) را شرح می‌دهد.

محورهای حسگر

مقادیر رویدادهای حسگر از بسیاری از حسگرها در یک فریم خاص بیان می‌شوند که نسبت به دستگاه ثابت است.

محورهای دستگاه تلفن همراه

رابط برنامه‌نویسی کاربردی حسگر (Sensor API) فقط نسبت به جهت طبیعی صفحه نمایش عمل می‌کند (محورها هنگام تغییر جهت صفحه نمایش دستگاه جابجا نمی‌شوند.)

سیستم مختصات API حسگر برای دستگاه‌های تلفن همراه

شکل ۱. سیستم مختصات (نسبت به دستگاه تلفن همراه) مورد استفاده توسط API حسگر

محورهای خودرو

در پیاده‌سازی‌های اندروید اتوموتیو، محورها نسبت به قاب بدنه خودرو تعریف می‌شوند. مبدا قاب مرجع خودرو، مرکز محور عقب است. قاب مرجع خودرو به گونه‌ای جهت‌گیری شده است که:

  • محور X به سمت راست اشاره دارد و در یک صفحه افقی، عمود بر صفحه تقارن خودرو قرار دارد.
  • محور Y به سمت جلو و در یک صفحه افقی قرار دارد.
سیستم مختصات API حسگر برای دستگاه‌های خودرو

شکل ۲. سیستم مختصات (نسبت به یک دستگاه خودرو) مورد استفاده توسط API حسگر

چارچوب مرجع خودرو یک سیستم مختصات راستگرد است. بنابراین، محور Z رو به بالا است.

محور Z چارچوب مرجع با نیروی جاذبه هم‌تراز است، به این معنی که محور X و محور Y هر دو افقی هستند. در نتیجه، محور Y ممکن است همیشه از محور جلو عبور نکند.

سنسورهای پایه

انواع حسگرهای پایه بر اساس حسگرهای فیزیکی که نشان می‌دهند نامگذاری می‌شوند. این حسگرها داده‌ها را از یک حسگر فیزیکی واحد منتقل می‌کنند (برخلاف حسگرهای مرکب که داده‌ها را از حسگرهای دیگر تولید می‌کنند). نمونه‌هایی از انواع حسگرهای پایه عبارتند از:

  • SENSOR_TYPE_ACCELEROMETER
  • SENSOR_TYPE_GYROSCOPE
  • SENSOR_TYPE_MAGNETOMETER

با این حال، حسگرهای پایه با حسگر فیزیکی زیرین خود برابر نیستند و نباید با آنها اشتباه گرفته شوند. داده‌های یک حسگر پایه، خروجی خام حسگر فیزیکی نیست زیرا اصلاحاتی (مانند جبران بایاس و جبران دما) اعمال می‌شود.

برای مثال، ویژگی‌های یک حسگر پایه ممکن است در موارد استفاده زیر با ویژگی‌های حسگر فیزیکی زیرین آن متفاوت باشد:

  • یک تراشه ژیروسکوپ که محدوده بایاس آن ۱ درجه بر ثانیه است.
    • پس از کالیبراسیون کارخانه‌ای، اعمال جبران دما و جبران بایاس، بایاس واقعی سنسور اندروید کاهش می‌یابد، ممکن است تا جایی که بایاس تضمین شده زیر 0.01 درجه بر ثانیه باشد.
    • در این شرایط، می‌گوییم که حسگر اندروید بایاس کمتر از 0.01 درجه بر ثانیه دارد، حتی اگر در برگه اطلاعات حسگر اصلی، 1 درجه بر ثانیه ذکر شده باشد.
  • یک فشارسنج با مصرف توان ۱۰۰ میکرووات.
    • از آنجا که داده‌های تولید شده باید از تراشه به SoC منتقل شوند، هزینه واقعی برق برای جمع‌آوری داده‌ها از حسگر فشارسنج اندروید ممکن است بسیار بیشتر باشد، مثلاً ۱۰۰۰ میکرووات.
    • در این شرایط، می‌گوییم که سنسور اندروید مصرف برق ۱۰۰۰ میکرووات دارد، حتی اگر مصرف برق اندازه‌گیری شده در سیم‌های تراشه فشارسنج ۱۰۰ میکرووات باشد.
  • مغناطیس‌سنجی که در حالت کالیبره ۱۰۰ میکرووات مصرف می‌کند، اما در حالت کالیبره شدن مصرفش بیشتر می‌شود.
    • روال کالیبراسیون آن ممکن است نیاز به فعال کردن ژیروسکوپ، مصرف ۵۰۰۰ میکرووات، و اجرای یک الگوریتم، هزینه ۹۰۰ میکرووات دیگر داشته باشد.
    • در این شرایط، می‌گوییم حداکثر مصرف برق سنسور (مغناطیس‌سنج) اندروید ۶۰۰۰ میکرووات است.
    • در این حالت، میانگین مصرف برق معیار مفیدتری است و همان چیزی است که از طریق HAL در مشخصات استاتیک سنسور گزارش می‌شود.

شتاب‌سنج

حالت گزارش‌دهی: پیوسته

getDefaultSensor(SENSOR_TYPE_ACCELEROMETER) یک حسگر غیر فعال را برمی‌گرداند.

یک حسگر شتاب‌سنج، شتاب دستگاه را در امتداد سه محور حسگر گزارش می‌دهد. شتاب اندازه‌گیری شده شامل شتاب فیزیکی (تغییر سرعت) و شتاب گرانش است. اندازه‌گیری در فیلدهای x، y و z از sensors_event_t.acceleration گزارش می‌شود.

تمام مقادیر در واحد SI (m/s^2) هستند و شتاب دستگاه منهای نیروی جاذبه را در امتداد سه محور حسگر اندازه‌گیری می‌کنند.

در اینجا مثال‌هایی آورده شده است:

  • نرم (x, y, z) در سقوط آزاد باید نزدیک به 0 باشد.
  • وقتی دستگاه به صورت صاف روی میز قرار دارد و از سمت چپ به سمت راست هل داده می‌شود، مقدار شتاب x مثبت است.
  • وقتی دستگاه به صورت صاف روی میز قرار دارد، مقدار شتاب در امتداد z برابر با +9.81 alo است که مربوط به شتاب دستگاه (0 m/s^2) منهای نیروی جاذبه (-9.81 m/s^2) است.
  • وقتی دستگاه به صورت صاف روی میز قرار دارد و به سمت آسمان هل داده می‌شود، مقدار شتاب بیشتر از +9.81 است که مربوط به شتاب دستگاه (+A m/s^2) منهای نیروی جاذبه (-9.81 m/s^2) است.

مقادیر خوانده شده با استفاده از موارد زیر کالیبره می‌شوند:

  • جبران دما
  • کالیبراسیون بایاس آنلاین
  • کالیبراسیون ترازو آنلاین

کالیبراسیون بایاس و مقیاس فقط باید زمانی که سنسور غیرفعال است، به‌روزرسانی شوند تا از ایجاد جهش در مقادیر در حین پخش جریانی جلوگیری شود.

شتاب‌سنج همچنین از طریق sensors_event_t.acceleration.status میزان دقت مورد انتظار خود را برای قرائت‌هایش گزارش می‌دهد. برای اطلاعات بیشتر در مورد مقادیر ممکن برای این فیلد، به ثابت‌های SENSOR_STATUS_* از SensorManager مراجعه کنید.

دمای محیط

حالت گزارش‌دهی: در حال تغییر

getDefaultSensor(SENSOR_TYPE_AMBIENT_TEMPERATURE) یک حسگر غیر بیدارباش را برمی‌گرداند.

این سنسور دمای محیط (اتاق) را بر حسب درجه سانتیگراد ارائه می‌دهد.

حسگر میدان مغناطیسی

حالت گزارش‌دهی: پیوسته

getDefaultSensor(SENSOR_TYPE_MAGNETIC_FIELD) یک حسگر غیرفعال را برمی‌گرداند.

SENSOR_TYPE_GEOMAGNETIC_FIELD == SENSOR_TYPE_MAGNETIC_FIELD

یک حسگر میدان مغناطیسی (که با نام مغناطیس‌سنج نیز شناخته می‌شود) میدان مغناطیسی محیط را که در امتداد سه محور حسگر اندازه‌گیری می‌شود، گزارش می‌دهد.

اندازه‌گیری در میدان‌های x، y و z از sensors_event_t.magnetic گزارش شده است و همه مقادیر بر حسب میکرو تسلا (uT) هستند.

مغناطیس‌سنج همچنین از طریق sensors_event_t.magnetic.status گزارش می‌دهد که انتظار دارد قرائت‌هایش چقدر دقیق باشند. برای اطلاعات بیشتر در مورد مقادیر ممکن برای این فیلد، به ثابت‌های SENSOR_STATUS_* در SensorManager مراجعه کنید.

مقادیر خوانده شده با استفاده از موارد زیر کالیبره می‌شوند:

  • جبران دما
  • کالیبراسیون آهن نرم کارخانه‌ای (یا آنلاین)
  • کالیبراسیون آنلاین آهن سخت

ژیروسکوپ

حالت گزارش‌دهی: پیوسته

getDefaultSensor(SENSOR_TYPE_GYROSCOPE) یک حسگر غیر فعال را برمی‌گرداند.

یک حسگر ژیروسکوپ، سرعت چرخش دستگاه را حول سه محور حسگر گزارش می‌دهد.

چرخش در جهت خلاف عقربه‌های ساعت مثبت است (قانون دست راست). یعنی، ناظری که از یک مکان مثبت روی محور x، y یا z به دستگاهی که در مبدا مختصات قرار دارد نگاه می‌کند، اگر به نظر برسد که دستگاه در حال چرخش در خلاف جهت عقربه‌های ساعت است، چرخش مثبت را گزارش خواهد کرد. توجه داشته باشید که این تعریف ریاضی استاندارد از چرخش مثبت است و با تعریف هوافضایی غلتش مطابقت ندارد.

اندازه‌گیری در فیلدهای x، y و z از sensors_event_t.gyro گزارش می‌شود و همه مقادیر بر حسب رادیان بر ثانیه (rad/s) هستند.

مقادیر خوانده شده با استفاده از موارد زیر کالیبره می‌شوند:

  • جبران دما
  • جبران خسارت مقیاس کارخانه (یا آنلاین)
  • کالیبراسیون بایاس آنلاین (برای حذف رانش)

ژیروسکوپ همچنین از طریق sensors_event_t.gyro.status میزان دقت مورد انتظار برای قرائت‌هایش را گزارش می‌دهد. برای اطلاعات بیشتر در مورد مقادیر ممکن برای این فیلد، به ثابت‌های SENSOR_STATUS_* در SensorManager مراجعه کنید.

ژیروسکوپ را نمی‌توان بر اساس مغناطیس‌سنج‌ها و شتاب‌سنج‌ها شبیه‌سازی کرد، زیرا این امر باعث کاهش ثبات و پاسخگویی محلی آن می‌شود. باید بر اساس یک تراشه ژیروسکوپ معمولی باشد.

ضربان قلب

حالت گزارش‌دهی: در حال تغییر

getDefaultSensor(SENSOR_TYPE_HEART_RATE) یک حسگر غیر فعال را برمی‌گرداند.

یک حسگر ضربان قلب، ضربان قلب فعلی فردی که دستگاه را لمس می‌کند را گزارش می‌دهد.

ضربان قلب فعلی بر حسب ضربان در دقیقه (BPM) در sensors_event_t.heart_rate.bpm و وضعیت حسگر در sensors_event_t.heart_rate.status گزارش می‌شود. برای اطلاعات بیشتر در مورد مقادیر ممکن برای این فیلد، به ثابت‌های SENSOR_STATUS_* در SensorManager مراجعه کنید. به طور خاص، در اولین فعال‌سازی، مگر اینکه مشخص شود دستگاه روی بدن نیست، فیلد وضعیت اولین رویداد باید روی SENSOR_STATUS_UNRELIABLE تنظیم شود. از آنجا که این حسگر در حال تغییر است، رویدادها فقط و فقط زمانی تولید می‌شوند که heart_rate.bpm یا heart_rate.status از آخرین رویداد تغییر کرده باشند. رویدادها سریع‌تر از هر sampling_period تولید نمی‌شوند.

این چارچوب به طور خودکار sensor_t.requiredPermission به مجوز مناسب برای حفظ سازگاری لغو می‌کند. این چارچوب از مجوز SENSOR_PERMISSION_READ_HEART_RATE برای اندروید ۱۶ و بالاتر و از مجوز SENSOR_PERMISSION_BODY_SENSORS برای اندروید ۱۵ و پایین‌تر استفاده می‌کند.

نور

حالت گزارش‌دهی: در حال تغییر

getDefaultSensor(SENSOR_TYPE_LIGHT) یک حسگر غیر فعال را برمی‌گرداند.

یک حسگر نور، روشنایی فعلی را بر حسب واحد SI lux گزارش می‌دهد.

اندازه‌گیری در sensors_event_t.light گزارش شده است.

نزدیکی

حالت گزارش‌دهی: در حال تغییر

معمولاً به عنوان یک حسگر بیدارباش تعریف می‌شود

getDefaultSensor(SENSOR_TYPE_PROXIMITY) یک حسگر بیدارباش را برمی‌گرداند.

یک حسگر مجاورتی، فاصله حسگر تا نزدیک‌ترین سطح قابل مشاهده را گزارش می‌دهد.

تا اندروید ۴.۴، حسگرهای مجاورت همیشه حسگرهای بیدارباش بودند و هنگام تشخیص تغییر در نزدیکی، SoC را بیدار می‌کردند. پس از اندروید ۴.۴، توصیه می‌کنیم ابتدا نسخه بیدارباش این حسگر را پیاده‌سازی کنید، زیرا این حسگر برای روشن و خاموش کردن صفحه نمایش هنگام برقراری تماس تلفنی استفاده می‌شود.

اندازه‌گیری در sensors_event_t.distance بر حسب سانتی‌متر گزارش می‌شود. توجه داشته باشید که برخی از حسگرهای مجاورتی فقط از اندازه‌گیری دودویی «نزدیک» یا «دور» پشتیبانی می‌کنند. در این حالت، حسگر مقدار sensor_t.maxRange خود را در حالت «دور» و مقداری کمتر از sensor_t.maxRange در حالت «نزدیک» گزارش می‌دهد.

فشار

حالت گزارش‌دهی: پیوسته

getDefaultSensor(SENSOR_TYPE_PRESSURE) یک حسگر غیرفعال را برمی‌گرداند.

یک سنسور فشار (که با نام بارومتر نیز شناخته می‌شود) فشار اتمسفر را بر حسب هکتوپاسکال (hPa) گزارش می‌دهد.

مقادیر خوانده شده با استفاده از کالیبره می‌شوند

  • جبران دما
  • کالیبراسیون بایاس کارخانه
  • کالیبراسیون مقیاس کارخانه

فشارسنج اغلب برای تخمین تغییرات ارتفاع استفاده می‌شود. برای تخمین ارتفاع مطلق، فشار سطح دریا (که بسته به آب و هوا تغییر می‌کند) باید به عنوان مرجع استفاده شود.

رطوبت نسبی

حالت گزارش‌دهی: در حال تغییر

getDefaultSensor(SENSOR_TYPE_RELATIVE_HUMIDITY) یک حسگر غیر فعال را برمی‌گرداند.

یک سنسور رطوبت نسبی، رطوبت نسبی هوای محیط را اندازه‌گیری می‌کند و مقداری را بر حسب درصد برمی‌گرداند.

انواع حسگر کامپوزیت

یک حسگر مرکب با پردازش و/یا ترکیب داده‌ها از یک یا چند حسگر فیزیکی، داده‌ها را تولید می‌کند. (هر حسگری که حسگر پایه نباشد، حسگر مرکب نامیده می‌شود.) نمونه‌هایی از حسگرهای مرکب عبارتند از:

  • آشکارساز گام و حرکت قابل توجه ، که معمولاً مبتنی بر شتاب‌سنج هستند، اما در صورت قابل قبول بودن مصرف برق و دقت، می‌توانند مبتنی بر حسگرهای دیگر نیز باشند.
  • بردار چرخش بازی ، بر اساس شتاب‌سنج و ژیروسکوپ.
  • ژیروسکوپ کالیبره نشده ، که مشابه حسگر پایه ژیروسکوپ است، اما کالیبراسیون بایاس به جای اصلاح در اندازه‌گیری، جداگانه گزارش می‌شود.

همانند حسگرهای پایه، ویژگی‌های حسگرهای مرکب از ویژگی‌های داده‌های نهایی آنها ناشی می‌شود. برای مثال، مصرف برق یک بردار چرخش بازی احتمالاً برابر با مجموع مصرف برق تراشه شتاب‌سنج، تراشه ژیروسکوپ، تراشه پردازش داده‌ها و باس‌های انتقال داده‌ها است. به عنوان مثال دیگر، رانش یک بردار چرخش بازی به همان اندازه که به ویژگی‌های فیزیکی حسگر بستگی دارد، به کیفیت الگوریتم کالیبراسیون نیز بستگی دارد.

جدول زیر انواع حسگرهای ترکیبی موجود را فهرست می‌کند. هر حسگر ترکیبی به داده‌های یک یا چند حسگر فیزیکی متکی است. از انتخاب حسگرهای فیزیکی دیگر برای تخمین نتایج خودداری کنید زیرا تجربه کاربری ضعیفی را ارائه می‌دهند.

نوع حسگر دسته بندی حسگرهای فیزیکی زیربنایی حالت گزارش‌دهی

بردار چرخش بازی

نگرش

شتاب‌سنج، ژیروسکوپ، نباید از مغناطیس‌سنج استفاده شود

پیوسته

بردار چرخش ژئومغناطیسی حسگر کم مصرف

نگرش

شتاب‌سنج، مغناطیس‌سنج، نباید از ژیروسکوپ استفاده کرد

پیوسته

ژست نگاه حسگر کم مصرف

تعامل

تعریف نشده

تک‌ضرب

جاذبه

نگرش

شتاب‌سنج، ژیروسکوپ (در صورت وجود) یا مغناطیس‌سنج (در صورت عدم وجود ژیروسکوپ)

پیوسته

ژیروسکوپ کالیبره نشده

کالیبره نشده

ژیروسکوپ

پیوسته

شتاب خطی

فعالیت

شتاب‌سنج، ژیروسکوپ (در صورت وجود) یا مغناطیس‌سنج (در صورت عدم وجود ژیروسکوپ)

پیوسته

میدان مغناطیسی کالیبره نشده

کالیبره نشده

مغناطیس سنج

پیوسته

جهت‌گیری (منسوخ شده)

نگرش

شتاب‌سنج، مغناطیس‌سنج، ژیروسکوپ (در صورت وجود)

پیوسته

ژست برداشتن حسگر کم مصرف

تعامل

تعریف نشده

تک‌ضرب

بردار چرخش

نگرش

شتاب‌سنج، مغناطیس‌سنج، ژیروسکوپ (در صورت وجود)

پیوسته

حرکت قابل توجه حسگر کم مصرف

فعالیت

شتاب‌سنج (یا هر نوع دیگری که مصرف انرژی بسیار پایینی داشته باشد)

تک‌ضرب

شمارنده گام حسگر کم مصرف

فعالیت

شتاب‌سنج

در حال تغییر

آشکارساز گام حسگر کم مصرف

فعالیت

شتاب‌سنج

ویژه

آشکارساز شیب حسگر کم مصرف

فعالیت

شتاب‌سنج

ویژه

ژست بیدار شدن حسگر کم مصرف

تعامل

تعریف نشده

تک‌ضرب

حسگر کم مصرف = حسگر کم مصرف

حسگرهای ترکیبی فعالیت

شتاب خطی

حسگرهای فیزیکی زیربنایی: شتاب‌سنج و (در صورت وجود) ژیروسکوپ (یا مغناطیس‌سنج در صورت عدم وجود ژیروسکوپ)

حالت گزارش‌دهی: پیوسته

getDefaultSensor(SENSOR_TYPE_LINEAR_ACCELERATION) یک حسگر غیر فعال را برمی‌گرداند.

یک حسگر شتاب خطی، شتاب خطی دستگاه را در قاب حسگر گزارش می‌دهد، بدون در نظر گرفتن جاذبه.

خروجی از نظر مفهومی عبارت است از: خروجی شتاب‌سنج منهای خروجی حسگر گرانش . این خروجی بر حسب m/s^2 در فیلدهای x، y و z از sensors_event_t.acceleration گزارش می‌شود.

وقتی دستگاه بی‌حرکت است، مقادیر روی همه محورها باید نزدیک به ۰ باشند.

اگر دستگاه دارای ژیروسکوپ باشد، حسگر شتاب خطی باید از ژیروسکوپ و شتاب‌سنج به عنوان ورودی استفاده کند.

اگر دستگاه ژیروسکوپ نداشته باشد، سنسور شتاب خطی باید از شتاب‌سنج و مغناطیس‌سنج به عنوان ورودی استفاده کند.

حرکت قابل توجه

حسگر فیزیکی زیرین: شتاب‌سنج (یا حسگر دیگری که مصرف انرژی کمی داشته باشد)

حالت گزارش‌دهی: یک‌باره

قدرت کم

فقط نسخه بیدارباش این حسگر را پیاده‌سازی کنید.

getDefaultSensor(SENSOR_TYPE_SIGNIFICANT_MOTION) یک حسگر بیدارباش را برمی‌گرداند.

یک آشکارساز حرکت قابل توجه هنگام تشخیص یک حرکت قابل توجه فعال می‌شود: حرکتی که ممکن است منجر به تغییر موقعیت مکانی کاربر شود.

نمونه‌هایی از چنین حرکات قابل توجهی عبارتند از:

  • پیاده‌روی یا دوچرخه‌سواری
  • نشستن در ماشین، اتوبوس یا قطار در حال حرکت

نمونه‌هایی از موقعیت‌هایی که حرکت قابل توجهی ایجاد نمی‌کنند:

  • تلفن در جیب و شخص در حال حرکت نیست
  • تلفن روی میز است و میز به دلیل ترافیک یا ماشین لباسشویی در نزدیکی کمی می‌لرزد.

در سطح بالا، از آشکارساز حرکت قابل توجه برای کاهش مصرف برق تعیین موقعیت مکانی استفاده می‌شود. هنگامی که الگوریتم‌های مکان‌یابی تشخیص می‌دهند که دستگاه ثابت است، می‌توانند به حالت کم‌مصرف تغییر حالت دهند، جایی که با تکیه بر حرکت قابل توجه، دستگاه را هنگام تغییر مکان کاربر، بیدار می‌کنند.

این حسگر باید کم‌مصرف باشد. این کار باعث می‌شود که مصرف برق کاهش یابد و در نتیجه ممکن است مقدار کمی خطای منفی ایجاد شود. این کار به چند دلیل انجام می‌شود:

  • هدف این سنسور صرفه‌جویی در مصرف انرژی است.
  • فعال کردن یک رویداد زمانی که کاربر در حال حرکت نیست (مثبت کاذب) از نظر توان مصرفی پرهزینه است، بنابراین باید از آن اجتناب شود.
  • عدم ایجاد رویداد هنگام حرکت کاربر (منفی کاذب) تا زمانی که به طور مکرر انجام نشود قابل قبول است. اگر کاربر به مدت 10 ثانیه در حال راه رفتن بوده باشد، عدم ایجاد رویداد در این 10 ثانیه قابل قبول نیست.

هر رویداد حسگر 1 را در sensors_event_t.data[0] گزارش می‌دهد.

آشکارساز گام

حسگر فیزیکی زیرین: شتاب‌سنج (+ احتمالاً حسگرهای دیگر تا زمانی که مصرف انرژی پایینی داشته باشند)

حالت گزارش‌دهی: ویژه (یک رویداد در هر گام برداشته شده)

قدرت کم

getDefaultSensor(SENSOR_TYPE_STEP_DETECTOR) یک حسگر غیرفعال (non-wake-up) را برمی‌گرداند.

یک آشکارساز گام، هر بار که کاربر گامی برمی‌دارد، یک رویداد تولید می‌کند.

مهر زمانی رویداد sensors_event_t.timestamp مربوط به زمانی است که پا به زمین برخورد می‌کند و تغییرات زیادی در شتاب ایجاد می‌کند.

در مقایسه با گام‌شمار، آشکارساز گام باید تأخیر کمتری داشته باشد (کمتر از دو ثانیه). هم آشکارساز گام و هم گام‌شمار، زمان راه رفتن، دویدن و بالا رفتن از پله‌ها را تشخیص می‌دهند. آنها نباید هنگام دوچرخه‌سواری، رانندگی یا استفاده از وسایل نقلیه دیگر فعال شوند.

این سنسور باید کم مصرف باشد. یعنی اگر تشخیص گام به صورت سخت‌افزاری امکان‌پذیر نباشد، این سنسور نباید تعریف شود. به طور خاص، وقتی آشکارساز گام فعال است و شتاب‌سنج فعال نیست، فقط گام‌ها باید وقفه ایجاد کنند (نه هر خوانش شتاب‌سنج).

sampling_period_ns هیچ تاثیری بر آشکارسازهای پله ندارد.

هر رویداد حسگر 1 را در sensors_event_t.data[0] گزارش می‌دهد.

شمارنده گام

حسگر فیزیکی زیرین: شتاب‌سنج (+ احتمالاً حسگرهای دیگر تا زمانی که مصرف انرژی پایینی داشته باشند)

حالت گزارش‌دهی: در حال تغییر

کم مصرف

getDefaultSensor(SENSOR_TYPE_STEP_COUNTER) یک حسگر غیرفعال را برمی‌گرداند.

یک شمارنده گام، تعداد گام‌های برداشته شده توسط کاربر را از آخرین راه‌اندازی مجدد در زمان فعال بودن، گزارش می‌دهد.

این اندازه‌گیری به صورت یک uint64_t در sensors_event_t.step_counter گزارش می‌شود و فقط با راه‌اندازی مجدد سیستم به صفر بازنشانی می‌شود.

مهر زمانی رویداد، زمانی تنظیم می‌شود که آخرین گام برای آن رویداد برداشته شده است.

برای اطلاع از زمان یک گام، به نوع حسگر آشکارساز گام مراجعه کنید.

در مقایسه با آشکارساز گام، شمارنده گام می‌تواند تأخیر بیشتری (تا 10 ثانیه) داشته باشد. به لطف این تأخیر، این حسگر از دقت بالایی برخوردار است؛ تعداد گام‌ها پس از یک روز کامل اندازه‌گیری باید در حدود 10٪ از تعداد گام‌های واقعی باشد. هم آشکارساز گام و هم شمارنده گام، زمانی را که کاربر در حال راه رفتن، دویدن و بالا رفتن از پله‌ها است، تشخیص می‌دهند. آنها نباید زمانی که کاربر در حال دوچرخه‌سواری، رانندگی یا استفاده از وسایل نقلیه دیگر است، فعال شوند.

سخت‌افزار باید تضمین کند که شمارش گام داخلی هرگز سرریز نمی‌شود. حداقل اندازه شمارنده داخلی سخت‌افزار باید ۱۶ بیت باشد. در صورت سرریز قریب‌الوقوع (حداکثر هر ~۲^۱۶ گام)، SoC می‌تواند بیدار شود تا درایور بتواند نگهداری شمارنده را انجام دهد.

همانطور که در بخش تعامل بیان شده است، در حین کار این حسگر، نباید هیچ حسگر دیگری، به ویژه شتاب‌سنج، که ممکن است به خوبی در حال استفاده باشد را مختل کند.

اگر یک دستگاه خاص نتواند از این حالت‌های عملکرد پشتیبانی کند، این نوع حسگر نباید توسط HAL گزارش شود. یعنی، "شبیه‌سازی" این حسگر در HAL قابل قبول نیست.

این سنسور باید کم مصرف باشد. یعنی اگر تشخیص گام به صورت سخت‌افزاری امکان‌پذیر نباشد، این سنسور نباید تعریف شود. به طور خاص، وقتی شمارنده گام فعال است و شتاب‌سنج فعال نیست، فقط گام‌ها باید وقفه ایجاد کنند (نه داده‌های شتاب‌سنج).

آشکارساز شیب

حسگر فیزیکی زیرین: شتاب‌سنج (+ احتمالاً حسگرهای دیگر تا زمانی که مصرف انرژی پایینی داشته باشند)

حالت گزارش‌دهی: ویژه

کم مصرف

فقط نسخه بیدارباش این حسگر را پیاده‌سازی کنید.

getDefaultSensor(SENSOR_TYPE_TILT_DETECTOR) یک حسگر بیدارباش را برمی‌گرداند.

یک آشکارساز شیب، هر بار که یک رویداد شیب شناسایی می‌شود، یک رویداد تولید می‌کند.

یک رویداد کج‌شدگی با تغییر جهت میانگین گرانش در پنجره ۲ ثانیه‌ای به میزان حداقل ۳۵ درجه از زمان فعال‌سازی یا آخرین رویداد ایجاد شده توسط حسگر تعریف می‌شود. الگوریتم آن به شرح زیر است:

  • reference_estimated_gravity = میانگین اندازه‌گیری‌های شتاب‌سنج در ثانیه اول پس از فعال‌سازی یا گرانش تخمینی هنگام ایجاد آخرین رویداد شیب.
  • current_estimated_gravity = میانگین اندازه‌گیری‌های شتاب‌سنج در ۲ ثانیه گذشته.
  • وقتی angle(reference_estimated_gravity, current_estimated_gravity) > 35 degrees فعال می‌شود.

شتاب‌های زیاد بدون تغییر جهت تلفن نباید باعث ایجاد رویداد کج شدن شوند. به عنوان مثال، یک چرخش تند یا شتاب زیاد هنگام رانندگی نباید باعث ایجاد رویداد کج شدن شود، حتی اگر زاویه شتاب متوسط ​​​​ممکن است بیش از 35 درجه تغییر کند. معمولاً این سنسور فقط با کمک یک شتاب سنج پیاده سازی می‌شود. در صورتی که مصرف برق را به میزان قابل توجهی افزایش ندهند، می‌توان از سنسورهای دیگر نیز استفاده کرد. این یک سنسور کم مصرف است که باید به SoC اجازه دهد تا به حالت تعلیق درآید. این سنسور را در HAL شبیه‌سازی نکنید. هر رویداد سنسور 1 را در sensors_event_t.data[0] گزارش می‌دهد.

حسگرهای کامپوزیتی وضعیت

بردار چرخش

حسگرهای فیزیکی زیربنایی: شتاب‌سنج، مغناطیس‌سنج و ژیروسکوپ

حالت گزارش‌دهی: پیوسته

getDefaultSensor(SENSOR_TYPE_ROTATION_VECTOR) یک حسگر غیر فعال را برمی‌گرداند.

یک حسگر بردار چرخش، جهت دستگاه را نسبت به چارچوب مختصات شرق-شمال-بالا گزارش می‌دهد. این جهت معمولاً با ادغام شتاب‌سنج، ژیروسکوپ و مغناطیس‌سنج به دست می‌آید. سیستم مختصات شرق-شمال-بالا به صورت یک مبنای متعامد مستقیم تعریف می‌شود که در آن:

  • X به سمت شرق اشاره دارد و مماس بر زمین است.
  • Y به سمت شمال اشاره دارد و مماس بر زمین است.
  • Z به سمت آسمان اشاره می‌کند و عمود بر زمین است.

جهت‌گیری گوشی با چرخش لازم برای هم‌تراز کردن مختصات شرق-شمال-بالا با مختصات گوشی نشان داده می‌شود. یعنی، اعمال چرخش به چارچوب جهانی (X، Y، Z) آنها را با مختصات گوشی (x، y، z) هم‌تراز می‌کند.

چرخش را می‌توان به صورت چرخاندن گوشی به اندازه زاویه تتا حول محور rot_axis در نظر گرفت تا از جهت دستگاه مرجع (هم‌تراز با شرق-شمال-بالا) به جهت دستگاه فعلی برود. چرخش به صورت چهار مؤلفه x، y، z و w بدون واحد از یک کواترنیون واحد کدگذاری می‌شود:

  • sensors_event_t.data[0] = rot_axis.x*sin(theta/2)
  • sensors_event_t.data[1] = rot_axis.y*sin(theta/2)
  • sensors_event_t.data[2] = rot_axis.z*sin(theta/2)
  • sensors_event_t.data[3] = cos(theta/2)

کجا:

  • میدان‌های x، y و z از rot_axis مختصات شرق-شمال-بالای یک بردار با طول واحد هستند که محور چرخش را نشان می‌دهند.
  • theta زاویه چرخش است

کواترنیون یک کواترنیون واحد است: باید از هنجار 1 باشد. عدم اطمینان از این امر باعث رفتار نامنظم مشتری خواهد شد.

علاوه بر این، این سنسور دقت تقریبی جهت‌یابی را گزارش می‌دهد:

sensors_event_t.data[4] = estimated_accuracy (برحسب رادیان)

خطای جهت باید در ۹۵٪ مواقع کمتر از estimated_accuracy باشد. این سنسور باید از یک ژیروسکوپ به عنوان ورودی اصلی تغییر جهت استفاده کند.

این سنسور همچنین از ورودی شتاب‌سنج و مغناطیس‌سنج برای جبران انحراف ژیروسکوپ استفاده می‌کند و نمی‌توان آن را فقط با استفاده از شتاب‌سنج و مغناطیس‌سنج پیاده‌سازی کرد.

بردار چرخش بازی

حسگرهای فیزیکی زیرین: شتاب‌سنج و ژیروسکوپ (بدون مغناطیس‌سنج)

حالت گزارش‌دهی: پیوسته

getDefaultSensor(SENSOR_TYPE_GAME_ROTATION_VECTOR) یک حسگر غیر فعال را برمی‌گرداند.

یک حسگر بردار چرخش بازی مشابه حسگر بردار چرخش است اما از میدان ژئومغناطیسی استفاده نمی‌کند. بنابراین محور Y به سمت شمال اشاره نمی‌کند، بلکه به سمت مرجع دیگری است. آن مرجع مجاز است با همان مرتبه بزرگی که ژیروسکوپ حول محور Z حرکت می‌کند، تغییر جهت دهد.

برای جزئیات بیشتر در مورد نحوه تنظیم sensors_event_t.data[0-3] به حسگر بردار چرخش مراجعه کنید. این حسگر دقت جهت تخمینی را گزارش نمی‌کند: sensors_event_t.data[4] رزرو شده است و باید روی 0 تنظیم شود.

در حالت ایده‌آل، یک گوشی که چرخانده شده و به همان جهت دنیای واقعی خود بازگشته است، باید بردار چرخش بازی یکسانی را گزارش دهد.

این سنسور باید مبتنی بر ژیروسکوپ و شتاب‌سنج باشد. نمی‌تواند از مغناطیس‌سنج به عنوان ورودی استفاده کند، علاوه بر این، به طور غیرمستقیم، از طریق تخمین بایاس ژیروسکوپ.

جاذبه

حسگرهای فیزیکی زیربنایی: شتاب‌سنج و (در صورت وجود) ژیروسکوپ (یا مغناطیس‌سنج در صورت عدم وجود ژیروسکوپ)

حالت گزارش‌دهی: پیوسته

getDefaultSensor(SENSOR_TYPE_GRAVITY) یک حسگر غیر فعال را برمی‌گرداند.

یک حسگر گرانش، جهت و بزرگی گرانش را در مختصات دستگاه گزارش می‌دهد.

مولفه‌های بردار گرانش بر حسب m/s^2 در میدان‌های x، y و z از sensors_event_t.acceleration گزارش شده‌اند.

وقتی دستگاه در حالت سکون است، خروجی حسگر گرانش باید با خروجی شتاب‌سنج یکسان باشد. روی زمین، بزرگی شتاب حدود ۹.۸ متر بر مجذور ثانیه است.

اگر دستگاه دارای ژیروسکوپ باشد، حسگر گرانش باید از ژیروسکوپ و شتاب‌سنج به عنوان ورودی استفاده کند.

اگر دستگاه ژیروسکوپ نداشته باشد، حسگر گرانش باید از شتاب‌سنج و مغناطیس‌سنج به عنوان ورودی استفاده کند.

بردار چرخش ژئومغناطیسی

حسگرهای فیزیکی زیرین: شتاب‌سنج و مغناطیس‌سنج (بدون ژیروسکوپ)

حالت گزارش‌دهی: پیوسته

کم مصرف

getDefaultSensor(SENSOR_TYPE_GEOMAGNETIC_ROTATION_VECTOR) یک حسگر غیرفعال را برمی‌گرداند.

یک بردار چرخش ژئومغناطیسی مشابه حسگر بردار چرخش است اما از یک مغناطیس‌سنج استفاده می‌کند و ژیروسکوپ ندارد.

این سنسور باید مبتنی بر یک مغناطیس‌سنج باشد. نمی‌توان آن را با استفاده از ژیروسکوپ پیاده‌سازی کرد و ورودی ژیروسکوپ نمی‌تواند توسط این سنسور استفاده شود.

برای جزئیات بیشتر در مورد نحوه تنظیم sensors_event_t.data[0-4] به حسگر بردار چرخش مراجعه کنید.

درست مانند حسگر بردار چرخش، خطای جهت باید در ۹۵٪ مواقع کمتر از دقت تخمینی ( sensors_event_t.data[4] ) باشد.

این حسگر باید کم‌مصرف باشد، بنابراین باید به‌صورت سخت‌افزاری پیاده‌سازی شود.

جهت‌گیری (منسوخ شده)

حسگرهای فیزیکی زیربنایی: شتاب‌سنج، مغناطیس‌سنج و (در صورت وجود) ژیروسکوپ

حالت گزارش‌دهی: پیوسته

getDefaultSensor(SENSOR_TYPE_ORIENTATION) یک حسگر غیرفعال را برمی‌گرداند.

توجه: این یک نوع حسگر قدیمی است که در SDK اندروید منسوخ شده است. این حسگر با حسگر بردار چرخش جایگزین شده است که تعریف واضح‌تری دارد. در صورت امکان، از حسگر بردار چرخش به جای حسگر جهت‌گیری استفاده کنید.

یک حسگر جهت‌یابی، وضعیت دستگاه را گزارش می‌دهد. اندازه‌گیری‌ها بر حسب درجه در فیلدهای x، y و z از sensors_event_t.orientation گزارش می‌شوند:

  • sensors_event_t.orientation.x : آزیموت، زاویه بین جهت شمال مغناطیسی و محور Y، حول محور Z ( 0<=azimuth<360 ). 0=شمال، 90=شرق، 180=جنوب، 270=غرب.
  • sensors_event_t.orientation.y : گام، چرخش حول محور X ( -180<=pitch<=180 )، با مقادیر مثبت هنگام حرکت محور Z به سمت محور Y.
  • sensors_event_t.orientation.z : غلتش، چرخش حول محور Y ( -90<=roll<=90 )، با مقادیر مثبت هنگام حرکت محور X به سمت محور Z.

لطفا توجه داشته باشید، به دلایل تاریخی، زاویه غلتش در جهت عقربه‌های ساعت مثبت است. (از نظر ریاضی، باید در جهت خلاف عقربه‌های ساعت مثبت باشد):

نمایش جهت گیری نسبت به یک دستگاه

شکل ۳. جهت‌گیری نسبت به یک دستگاه

این تعریف با انحراف، پیچ و غلتش مورد استفاده در هوانوردی که در آن محور X در امتداد ضلع طولی هواپیما (از دم تا دماغه) قرار دارد، متفاوت است.

حسگر جهت‌یابی همچنین از طریق sensors_event_t.orientation.status میزان دقت مورد انتظار برای قرائت‌های خود را گزارش می‌دهد. برای اطلاعات بیشتر در مورد مقادیر ممکن برای این فیلد، به ثابت‌های SENSOR_STATUS_* در SensorManager مراجعه کنید.

حسگرهای کالیبره نشده

حسگرهای کالیبره نشده نتایج خام بیشتری ارائه می‌دهند و ممکن است شامل مقداری بایاس باشند، اما همچنین شامل «پرش‌های» کمتری از اصلاحات اعمال شده از طریق کالیبراسیون هستند. برخی از برنامه‌ها ممکن است این نتایج کالیبره نشده را به عنوان نتایج روان‌تر و قابل اعتمادتر ترجیح دهند. به عنوان مثال، اگر یک برنامه در تلاش است تا ادغام حسگر خود را انجام دهد، معرفی کالیبراسیون‌ها می‌تواند در واقع نتایج را تحریف کند.

شتاب‌سنج کالیبره نشده

حسگر فیزیکی زیربنایی: شتاب‌سنج

حالت گزارش‌دهی: پیوسته

getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_UNCALIBRATED) یک حسگر غیرفعال (non-wake-up) را برمی‌گرداند.

یک حسگر شتاب‌سنج کالیبره نشده، شتاب دستگاه را در امتداد سه محور حسگر بدون هیچ گونه اصلاح بایاس (بایاس کارخانه‌ای و جبران دما برای اندازه‌گیری‌های کالیبره نشده اعمال می‌شود) به همراه یک تخمین بایاس گزارش می‌دهد. همه مقادیر در واحدهای SI (m/s^2) هستند و در فیلدهای sensors_event_t.uncalibrated_accelerometer گزارش می‌شوند:

  • x_uncalib : شتاب (بدون جبران بایاس) در امتداد محور X
  • y_uncalib : شتاب (بدون جبران بایاس) در امتداد محور Y
  • z_uncalib : شتاب (بدون جبران بایاس) در امتداد محور Z
  • x_bias : بایاس تخمینی در امتداد محور X
  • y_bias : تعصب تخمینی در امتداد محور Y
  • z_bias : بایاس تخمینی در امتداد محور Z

ژیروسکوپ کالیبره نشده

حسگر فیزیکی زیرین: ژیروسکوپ

حالت گزارش‌دهی: پیوسته

getDefaultSensor(SENSOR_TYPE_GYROSCOPE_UNCALIBRATED) یک حسگر غیرفعال (non-wake-up) را برمی‌گرداند.

یک ژیروسکوپ کالیبره نشده، نرخ چرخش حول محورهای حسگر را بدون اعمال جبران بایاس به آنها، همراه با تخمین بایاس گزارش می‌دهد. همه مقادیر بر حسب رادیان بر ثانیه هستند و در فیلدهای sensors_event_t.uncalibrated_gyro گزارش می‌شوند:

  • x_uncalib : سرعت زاویه‌ای (بدون جبران رانش) حول محور X
  • y_uncalib : سرعت زاویه‌ای (بدون جبران رانش) حول محور Y
  • z_uncalib : سرعت زاویه‌ای (بدون جبران رانش) حول محور Z
  • x_bias : رانش تخمینی حول محور X
  • y_bias : رانش تخمینی حول محور Y
  • z_bias : رانش تخمینی حول محور Z

از نظر مفهومی، اندازه‌گیری کالیبره نشده مجموع اندازه‌گیری کالیبره شده و تخمین بایاس است: _uncalibrated = _calibrated + _bias .

انتظار می‌رود مقادیر x_bias ، y_bias و z_bias به محض تغییر تخمین بایاس، جهش کنند و در بقیه زمان‌ها پایدار باشند.

برای جزئیات بیشتر در مورد سیستم مختصات مورد استفاده، به تعریف حسگر ژیروسکوپ مراجعه کنید.

کالیبراسیون کارخانه‌ای و جبران‌سازی دما باید برای اندازه‌گیری‌ها اعمال شود. همچنین، تخمین رانش ژیروسکوپ باید پیاده‌سازی شود تا تخمین‌های معقولی در x_bias ، y_bias و z_bias گزارش شوند. اگر پیاده‌سازی قادر به تخمین رانش نباشد، این سنسور نباید پیاده‌سازی شود.

اگر این سنسور وجود داشته باشد، سنسور ژیروسکوپ مربوطه نیز باید وجود داشته باشد و هر دو سنسور باید مقادیر sensor_t.name و sensor_t.vendor یکسانی داشته باشند.

میدان مغناطیسی کالیبره نشده

حسگر فیزیکی زیرین: مغناطیس‌سنج

حالت گزارش‌دهی: پیوسته

getDefaultSensor(SENSOR_TYPE_MAGNETIC_FIELD_UNCALIBRATED) یک حسگر غیرفعال (non-wake-up) را برمی‌گرداند.

یک حسگر میدان مغناطیسی کالیبره نشده، میدان مغناطیسی محیط را به همراه تخمین کالیبراسیون آهن سخت گزارش می‌دهد. همه مقادیر بر حسب میکرو تسلا (uT) هستند و در فیلدهای sensors_event_t.uncalibrated_magnetic گزارش می‌شوند:

  • x_uncalib : میدان مغناطیسی (بدون جبران‌سازی با آهن سخت) در امتداد محور X
  • y_uncalib : میدان مغناطیسی (بدون جبران‌سازی با آهن سخت) در امتداد محور Y
  • z_uncalib : میدان مغناطیسی (بدون جبران‌سازی با آهن سخت) در امتداد محور Z
  • x_bias : بایاس تخمینی آهن سخت در امتداد محور X
  • y_bias : بایاس تخمینی آهن سخت در امتداد محور Y
  • z_bias : بایاس تخمینی آهن سخت در امتداد محور Z

از نظر مفهومی، اندازه‌گیری کالیبره نشده مجموع اندازه‌گیری کالیبره شده و تخمین بایاس است: _uncalibrated = _calibrated + _bias .

مغناطیس‌سنج کالیبره نشده به الگوریتم‌های سطح بالاتر اجازه می‌دهد تا تخمین آهن سخت بد را مدیریت کنند. انتظار می‌رود مقادیر x_bias ، y_bias و z_bias به محض تغییر تخمین آهن سخت، جهش کنند و در بقیه زمان باید پایدار باشند.

کالیبراسیون آهن نرم و جبران دما باید برای اندازه‌گیری‌ها اعمال شود. همچنین، تخمین آهن سخت باید پیاده‌سازی شود تا تخمین‌های معقولی در x_bias ، y_bias و z_bias گزارش شود. اگر پیاده‌سازی قادر به تخمین بایاس نباشد، این سنسور نباید پیاده‌سازی شود.

اگر این سنسور وجود داشته باشد، سنسور میدان مغناطیسی مربوطه نیز باید وجود داشته باشد و هر دو سنسور باید مقادیر sensor_t.name و sensor_t.vendor یکسانی داشته باشند.

زاویه لولا

حالت گزارش‌دهی: در حال تغییر

getDefaultSensor(SENSOR_TYPE_HINGE_ANGLE) یک حسگر بیدارباش را برمی‌گرداند.

حسگر زاویه لولا، زاویه بین دو قسمت داخلی دستگاه را بر حسب درجه اندازه‌گیری می‌کند. انتظار می‌رود حرکت لولا که توسط این نوع حسگر اندازه‌گیری می‌شود، روش‌های تعامل کاربر با دستگاه را تغییر دهد، به عنوان مثال، با باز کردن یا آشکار کردن صفحه نمایش.

حسگرهای کامپوزیتی تعاملی

برخی از حسگرها عمدتاً برای تشخیص تعامل با کاربر استفاده می‌شوند. ما نحوه پیاده‌سازی این حسگرها را تعریف نمی‌کنیم، اما باید کم‌مصرف باشند و تأیید کیفیت آنها از نظر تجربه کاربری بر عهده سازنده دستگاه است.

ژست بیدار شدن

حسگرهای فیزیکی زیربنایی: نامشخص (هر چیزی با توان کم)

حالت گزارش‌دهی: یک‌باره

کم مصرف

فقط نسخه بیدارباش این حسگر را پیاده‌سازی کنید.

getDefaultSensor(SENSOR_TYPE_WAKE_GESTURE) یک حسگر بیدارباش را برمی‌گرداند.

A wake up gesture sensor enables waking up the device based on a device specific motion. When this sensor triggers, the device behaves as if the power button was pressed, turning the screen on. This behavior (turning on the screen when this sensor triggers) might be deactivated by the user in the device settings. Changes in settings don't impact the behavior of the sensor: only whether the framework turns the screen on when it triggers. The actual gesture to be detected isn't specified, and can be chosen by the manufacturer of the device.

This sensor must be low power, as it's likely to be activated 24/7.

Each sensor event reports 1 in sensors_event_t.data[0] .

Pick up gesture

Underlying physical sensors: Undefined (anything low power)

Reporting-mode: One-shot

کم مصرف

Implement only the wake-up version of this sensor.

getDefaultSensor(SENSOR_TYPE_PICK_UP_GESTURE) returns a wake-up sensor

A pick-up gesture sensor triggers when the device is picked up regardless of wherever it was before (desk, pocket, bag).

Each sensor event reports 1 in sensors_event_t.data[0] .

Glance gesture

Underlying physical sensors: Undefined (anything low power)

Reporting-mode: One-shot

کم مصرف

Implement only the wake-up version of this sensor.

getDefaultSensor(SENSOR_TYPE_GLANCE_GESTURE) returns a wake-up sensor

A glance gesture sensor enables briefly turning the screen on to enable the user to glance content on screen based on a specific motion. When this sensor triggers, the device will turn the screen on momentarily to allow the user to glance notifications or other content while the device remains locked in a non-interactive state (dozing), then the screen will turn off again. This behavior (briefly turning on the screen when this sensor triggers) might be deactivated by the user in the device settings. Changes in settings do not impact the behavior of the sensor: only whether the framework briefly turns the screen on when it triggers. The actual gesture to be detected isn't specified, and can be chosen by the manufacturer of the device.

This sensor must be low power, as it's likely to be activated 24/7. Each sensor event reports 1 in sensors_event_t.data[0] .

Limited axes IMU sensors

Available from Android 13, limited axes IMU sensors are sensors that support use cases where not all three axes (x, y, z) are available. Standard IMU types in Android (such as SENSOR_TYPE_ACCELEROMETER and SENSOR_TYPE_GYROSCOPE ) assume that all three axes are supported. However, not all form factors and devices support 3-axis accelerometers and 3-axis gyroscopes.

Accelerometer limited axes

Underlying physical sensors: Accelerometer

Reporting-mode: Continuous

getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_LIMITED_AXES) returns a non-wake-up sensor

An accelerometer limited axes sensor is equivalent to TYPE_ACCELEROMETER but supports cases where one or two axes aren't supported.

The last three sensor event values reported by the sensor represent whether the acceleration value for the x, y, and z axes are supported. A value of 1.0 indicates that the axis is supported, and a value of 0 indicates it isn't supported. Device manufacturers identify the supported axes at build time and the values don't change during runtime.

Device manufacturers must set the acceleration values for unused axes to 0 , instead of having undefined values.

Gyroscope limited axes

Underlying physical sensors: Gyroscope

Reporting-mode: Continuous

getDefaultSensor(SENSOR_TYPE_GYROSCOPE_LIMITED_AXES) returns a non-wake-up sensor

A gyroscope limited axes sensor is equivalent to TYPE_GYROSCOPE but supports cases where one or two axes aren't supported.

The last three sensor event values reported by the sensor represent whether the angular speed value for the x, y, and z axes are supported. A value of 1.0 indicates that the axis is supported, and a value of 0 indicates it isn't supported. Device manufacturers identify the supported axes at build time and the values don't change during runtime.

Device manufacturers must set the angular speed values for unused axes to 0 .

Accelerometer limited axes uncalibrated

Underlying physical sensors: Accelerometer

Reporting-mode: Continuous

getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_LIMITED_AXES_UNCALIBRATED) returns a non-wake-up sensor

An accelerometer limited axes uncalibrated sensor is equivalent to TYPE_ACCELEROMETER_UNCALIBRATED but supports cases where one or two axes aren't supported.

The last three sensor event values reported by the sensor represent whether the acceleration and bias values for the x, y, and z axes are supported. A value of 1.0 indicates that the axis is supported, and a value of 0 indicates it isn't supported. Device manufacturers identify the supported axes at build time and the values don't change during runtime.

Device manufacturers must set the acceleration and bias values for unused axes to 0 .

Gyroscope limited axes uncalibrated

Underlying physical sensors: Gyroscope

Reporting-mode: Continuous

getDefaultSensor(SENSOR_TYPE_GYROSCOPE_LIMITED_AXES_UNCALIBRATED) returns a non-wake-up sensor

A gyroscope limited axes uncalibrated sensor is equivalent to TYPE_GYROSCOPE_UNCALIBRATED but supports cases where one or two axes aren't supported.

The last three sensor event values reported by the sensor represent whether the angular speed and drift values for the x, y, and z axes are supported. A value of 1.0 indicates that the axis is supported, and a value of 0 indicates it isn't supported. Device manufacturers identify the supported axes at build time and the values don't change during runtime.

Device manufacturers must set the angular speed and drift values for unused axes to 0 .

Composite limited axes IMU

Underlying physical sensors: Any combination of 3-axis accelerometer, 3-axis gyroscope, 3-axis accelerometer uncalibrated, and 3-axis gyroscope uncalibrated sensors.

Reporting-mode: Continuous

A composite limited axes IMU sensor is equivalent to a limited axes IMU sensor but instead of being supported at the HAL, it converts the 3-axis sensor data into the equivalent limited axes variants. These composite sensors are only enabled for automotive devices.

The following table shows an example conversion from a standard 3-axis accelerometer to a composite limited axes accelerometer.

SensorEvent Values for SENSOR_TYPE_ACCELEROMETER Example SENSOR_TYPE_ACCELEROMETER SensorEvent Composite SENSOR_TYPE_ACCELEROMETER_LIMITED_AXES SensorEvent
values[0]

-0.065

-0.065

values[1]

۰.۰۷۸

۰.۰۷۸

values[2]

9.808

9.808

values[3]

ناموجود

۱.۰

values[4]

ناموجود

۱.۰

values[5]

ناموجود

۱.۰

سنسورهای خودرو

Sensors to support automotive use cases.

عنوان

Underlying physical sensors: Any combination of GPS, magnetometer, accelerometer, and gyroscope.

Reporting-mode: Continuous

getDefaultSensor(SENSOR_TYPE_HEADING) returns a non-wake-up sensor

Available from Android 13, a heading sensor measures the direction in which the device is pointing relative to true north in degrees. The heading sensor includes two SensorEvent values. One for the measured device heading and one for the accuracy of the provided heading value.

Heading values reported by this sensor must be between 0.0 (inclusive) and 360.0 (exclusive), with 0 indicating north, 90 east, 180 south, and 270 west.

Accuracy for this sensor is defined at 68 percent confidence. In the case where the underlying distribution is Gaussian normal, the accuracy is one standard deviation. For example, if the heading sensor returns a heading value of 60 degrees and an accuracy value of 10 degrees, there's a 68 percent probability of the true heading being between 50 degrees and 70 degrees.