PracticU

חיישן Accelerometer

בלי כתוביותעם כתוביות
PracticU › קורס פיתוח אפליקציות - לאנדרואיד - Android - ב-JAVA › חיישן Accelerometer
מילון מושגים:
רכיב - יחידת בניין עצמאית וניתנת לשימוש חוזר בתוך מערכת או ממשק משתמש, שאחראית על חלק מוגדר מהתפקוד.
ממשק - נקודת מגע בין רכיבים: ממשק משתמש שבו אדם מפעיל תוכנה, או ממשק תכנותי שמגדיר אילו פעולות רכיב אחד חושף לאחר.
Activity - ב-Android, רכיב שמייצג מסך יחיד של האפליקציה שאיתו המשתמש מתקשר.
פונקציה - קטע קוד בעל שם שמבצע משימה מוגדרת, מקבל ערכי קלט (פרמטרים) ויכול להחזיר תוצאה. מאפשרת לארגן קוד ולהשתמש בו שוב.
אובייקט - יחידה בתכנות מונחה עצמים שמאגדת נתונים (תכונות) ופעולות (מתודות). נוצר בדרך כלל ממחלקה המשמשת כתבנית.
אירוע - התרחשות שהמערכת מזהה ויכולה להגיב לה, כמו לחיצת עכבר, הקשה או סיום פעולה.
אמולטור - תוכנה שמחקה מכשיר או סביבה אחרת, למשל כדי להריץ ולבדוק אפליקציית מובייל על המחשב.

חיישן Accelerometer
אחרי שהוצאנו את רשימת החיישנים, כאן קוראים ערכים מחיישן ספציפי, ה-Accelerometer, ומציגים אותם בזמן אמת. אותו עיקרון חל על כל חיישן אחר.
מה זה Accelerometer
רכיב פנימי שמדווח על תנועת המכשיר דרך שלושה ערכים. כשמרימים את הצד הימני, x חיובי, ואת הצד השמאלי, x שלילי. הרמת החלק העליון נותנת y חיובי, והרמת התחתון y שלילי. z קשור לכוח המשיכה, שבמנוחה הוא בערך 9.8, ובמכשיר הפוך מינוס 9.8.
השלבים העיקריים
1. SensorManager וחיישן: ב-onCreate מקבלים את SensorManager עם getSystemService, ולוקחים את החיישן עם getDefaultSensor(Sensor.TYPE_ACCELEROMETER). אם חוזר null, החיישן לא קיים במכשיר וצריך לטפל בזה.
2. ממשק: האקטיביטי מממשת את SensorEventListener, שדורש שתי פונקציות.
3. הרשמה ב-onResume: sensorManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_NORMAL). קצב הדיווח יכול להיות UI (הנמוך ביותר), NORMAL (ברירת מחדל), GAME (מהיר, למשחקים) או FASTEST.
4. ביטול ב-onPause: unregisterListener(this), כי קריאת חיישנים בדרך כלל מרוקנת סוללה.
5. onSensorChanged: האובייקט event.values מכיל את הערכים. ב-Accelerometer values[0] הוא x, values[1] הוא y ו-values[2] הוא z, ומציגים אותם ב-TextView, שורה לכל ערך. בחיישנים אחרים מספר הערכים ומשמעותם שונים (למשל מצפן נותן זווית אחת), ולכן קוראים את התיעוד.
6. onAccuracyChanged: מודיעה על שינוי בדיוק החיישן, למשל חיישן מגנטי בתוך מנהרה. עושים switch על הקבועים HIGH, MEDIUM, LOW, UNRELIABLE ו-NO_CONTACT (וברירת מחדל Unknown), ומציגים Toast שהדיוק השתנה.
בדיקה
באמולטור אין תנועה אמיתית, ולכן בודקים על מכשיר אמיתי. הרמת החלק העליון נותנת y חיובי, התחתון y שלילי, וההטיה לצדדים משנה את x. הרמה והורדה באוויר משנה את z, והיפוך המכשיר נותן z שלילי. המרצה העיר שהדיוק המדויק של הערכים פחות חשוב מהעובדה שהצליחו לקבל מידע מחיישן.
כעת אפשר לקרוא ערכים מכל חיישן, ובשיעור הבא מיישמים עליהם לוגיקה.
השיעור הבא בקורס: Device Inclination

פרקי ההרצאה: חיישן Accelerometer

  1. 00:00

    מה מודד חיישן ה-Accelerometer

  2. 00:41

    משמעות ערכי X, Y ו-Z

  3. 02:14

    קבלת הסנסור דרך Sensor Manager

  4. 04:02

    רישום וביטול רישום לחיסכון בסוללה

  5. 04:51

    בחירת מהירות דגימה לסנסור

  6. 06:46

    קריאת הערכים ב-onSensorChanged

  7. 09:03

    טיפול בשינוי דיוק עם onAccuracyChanged

תמלול ההרצאה: חיישן Accelerometer

הטקסט המלא של הדקות הראשונות בהרצאה «חיישן Accelerometer» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:02

    אחרי שהוצאנו את רשימת הסנסורים מהמכשיר, בואו נראה איך אנחנו יכולים להוציא values מסנסור ספציפי. בגלל שיש לנו במכשיר האמיתי כרגע רק את האקסלרומטר סנסור, אז אנחנו נעבוד איתו ונוציא את הערכים מהאקסלרומטר, אבל באותו האופן אנחנו בעצם מוציאים ערכים מכל סנסור שהוא.

  2. 00:24

    דבר ראשון, מה זה בעצם אקסלרומטר? אקסלרומטר זה איזשהו רכיב פנימי בתוך המכשיר, ואומר לנו לאן המכשיר זז, מה הזוויות שלו, לאן הוא בעצם זז על ידי היוזר.

  3. 00:39

    יש לנו כאן איזשהו שרטוט שמראה את כל האופציות של האקסלרומטר ואתם תצטרכו לסלוח לי על זה שהשרטוט הזה קצת דומה לאייפון אבל זה השרטוט הכי ברור שהצלחתי למצוא.

  4. 00:52

    אז אם בעצם היוזר מזיז את המכשיר כאשר החלק הימני שלו הולך לכיוון למעלה והחלק השמאלי שלו הולך לכיוון למטה. תחשבו שהוא כרגע נניח על שולחן ואנחנו פשוט מרימים את החלק הימני שלו, אז ה-X של האקסלרומטר יהיה חיובי.

  5. 01:14

    האקסלרומטר נותן לנו שלושה ערכים X, Y ו-Z ואנחנו נקבל X חיובי. אם המכשיר שוכב על שולחן ואנחנו מעלים את הקצה השמאלי למעלה אז אנחנו נקבל X שלילי.

  6. 01:28

    אם אנחנו מעלים את החלק העליון שלו אז אנחנו אנחנו נקבל y חיובי, אם אנחנו מעלים את החלק התחתון שלו אנחנו נקבל y שלילי. ערך ה-Z מתאר את כוח המשיכה.

  7. 01:41

    כוח המשיכה במנוחה שווה בערך ל-9.8G, זה הערך של כוח המשיכה במנוחה. זאת אומרת שאם המכשיר הזה פשוט שוכב על שולחן והחלק הרגיל שלו, העליון, נמצא למעלה, אז Z יהיה שווה לבערך 9.8.

  8. 02:02

    אם אנחנו משכיבים את הטלפון הפוך על השולחן, אז אנחנו נקבל מינוס 9.8. כאשר אם אנחנו מזיזים את המכשיר ומפילים אותו, אז כמובן כוח המשיכה שלו ישתנה.

  9. 02:18

    אז אנחנו בעצם הולכים להצליח לקבל קודם כל בדוגמה הזאת את כל הערכים ולראות תוך כדי תנועה איך הערכים האלה משתנים. כדי להצליח לקבל את הערכים אנחנו צריכים להירשם לקבלת המידע של סנסור האקסלרומטר.

  10. 02:37

    הדבר הראשון בואו ניגש וניצור כאן משתנה מסוג סנסור מנאג'ר שעבדנו איתו מקודם. ניגש ל-onCreate, סנסור מנאג'ר, שווה, נעשה קאסטינג לסנסור מנאג'ר, get system service ואנחנו רוצים את sensor service מידע לגבי הסנסורים עכשיו שיש לנו את הסנסור מנאג'ר שנותן לנו מידע לגבי סנסורים

  11. 03:11

    במכשיר אנחנו רוצים סנסור ספציפי אז בואו ניקח משתנה סנסור רגיל ניגש ל-on create ונגיד שאנחנו רוצים להכניס לתוך הסנסור הזה את sensor-manager.get-default-sensor ולתת את הטייפ שלו.

  12. 03:35

    אנחנו רוצים את האקסלרומטר טייפ. עכשיו המידע ספציפית לגבי חיישן האקסלרומטר נמצא תחת הסנסור הזה. הדבר הבא שאנחנו צריכים לבצע זה להירשם לקבלת מידע תוך כדי התזוזה של המכשיר, הרי זה בדיוק מה שהחיישן מבצע, כל חיישן שהוא, נותן לנו מידע מסוים במהלך חיי המכשיר.

  13. 04:03

    אבל יש נקודה חשובה שחשוב להבין בנוגע לעבודה עם סנסורים. קבלת מידע של סנסורים זה משהו שברוב המקרים זולל סוללה.

  14. 04:17

    לכן מה שמקובל לבצע זה להירשם ב-on resume וב-on pause לבטל רישום. זאת אומרת אם אין לנו יותר התעסקות עם האקטיביטי ואנחנו לא צריכים לקבל מידע לגבי הסנסורים, אז בשביל לחסוך בסוללה כדאי לנו לבטל את הרישום.

  15. 04:39

    אז איך אנחנו עושים את זה? כאשר אנחנו רוצים להירשם, אז מה שאנחנו עושים זה sensor-manager.register listener, ואנחנו אומרים לו כזה דבר, אנחנו, זה ה-dis, זה הקונטקסט, רוצים לקבל מידע לגבי הסנסור הספציפי הזה והדבר האחרון שאנחנו צריכים להגיד

  16. 05:06

    לו זה מה המהירות שבה הוא צריך לתת לנו את המידע הזה זה יהיה סנסור מנג'ר נקודה דיליי נורמל או פסטס או גיים או UI כאשר UI הוא הכי הכי נמוך נורמל זה הדיפולט גיים זה אומר אנחנו רוצים לקבל חיישנים מאוד גבוהים לגבי של לדוגמה שימוש במשחק שאנחנו רוצים לדעת איך היוזר מזיז את וזה מאוד חשוב לנו לקבל במהירות גבוהה את המידע הזה, או fastest זה כמובן הכי הכי גבוה.

  17. 05:43

    אז בואו ניקח את ה-normal, וזה אומר שאנחנו נקבל את המידע במהירות שנחשבת כנורמלית אצלהם. אנחנו צריכים לבוא ולהירשם על ידי, אנחנו רואים שהוא לא נותן לנו פה את ה-Make Main Activity Implement וכולי, אז אנחנו צריכים לגשת ו-to implement בעצמנו את sensor event listener.

  18. 06:14

    ניגש ו-implement methods ויש לנו פה שתי מתודות. אז קודם כל מה שעשינו זה נרשמנו וכעת ברגע שהאפליקציה תרוץ והאקטיביטית תעלה onRezume מתבצע ואנחנו אומרים שאנחנו רוצים להתחיל לקבל את המידע.

  19. 06:34

    ב-onPause מה שאנחנו צריכים לעשות זה לגשת עוד פעם לסנסור מנג'ר ו-to unregister listener this וזה יגרום למכשיר להפסיק לדווח לנו על שינויים בסנסור וכמובן לחסוך בתוללה.

  20. 06:51

    מה אנחנו רוצים לעשות ב-onSensorChange? ב-onSensorChange אנחנו מקבלים את המידע לגבי הסנסור ברגע שהמידע הזה השתנה. יש לנו כאן משתנה שנקרא Event שנשלח לפונקציה וה-Event הזה מחזיק values ועכשיו זה לא משנה עם איזה סנסור אנחנו עובדים, הקונספט הוא אותו הקונספט.

  21. 07:16

    אם אנחנו לדוגמה עובדים עם האקסלרומטר הvalues ייתן לנו את ערכי האקסלרומטר, זאת אומרת שבמקרה של האקסלרומטר זה יהיה x, y ו-z.

  22. 07:25

    אם אנחנו עובדים עם מצפן לדוגמה אז הvalues לא יהיה ערכי האקסלרומטר אלא יהיה ערכי הזווית יחסית לצפון כדור הארץ. אם אנחנו עובדים לדוגמא עם חיישן קרבה אז ה-values יכיל משהו שמטפל בחיישן קרבה או שמתאר משהו לגבי חיישן קרבה.

  23. 07:46

    לכן אנחנו צריכים לראות בדוקומנטציה איך לעבוד ולקבל את ה-values שזה בעצם אוסף שמתאים לכל הסנסורים. בגלל שאנחנו עובדים עם האקסלומטר אז אנחנו רוצים x וזה יהיה values במיקום 0, נשכפל y וזה יהיה values במיקום 1, ו-Z, וזה יהיה values במיקום 2.

  24. 08:13

    זה בעצם הנוהל עבודה עם קבלת המידע של ה-values. ואקסלרומטר נותן לנו שלושה ערכים. כמובן, לא כל חיישה נותן שלושה ערכים. זווית של כדור הארץ זה כמובן ערך אחד בלבד.

  25. 08:29

    Good. ומה שאנחנו רוצים לעשות זה רק להציג את זה, אז בואו ניגש ל-text view שיש לנו, טקסט ונגדיר x נשרשר אותו עם x נגדיר y נשרשר אותו עם y ו-z נשרשר אותו עם z ואולי האמת במקום פסיקים פשוט נרד כאן שורה וזה יהיה קצת יותר ברור להצגה מה זאת הפונקציה on accuracy changed כאשר אנחנו מקבלים מידע

  26. 09:10

    מחיישן יכול יכול להיות שהדיוק של החיישן הוא נפגם או נהיה יותר גבוה כתלות בכל מיני מקרים. לדוגמה, אם אנחנו נכנסים לתוך מהרה, אז יכול להיות שחיישן מגנטי כבר עובד פחות טוב או לא עובד בכלל.

  27. 09:28

    אז כאן המערכת מודיעה לנו כאשר יש איזשהו שינוי בדיוק של החיישן, ואנחנו יכולים כמובן לשלב את זה בלוגיקה שלנו, אולי להודיע הודעה כאשר החיישן לא פעיל באופן זמני, אולי לבצע חישובים אחרים וכדומה.

  28. 09:43

    אז בואו כרגע רק נציג את המידע הזה בטוסט. אז בואו ניקח פה String Accuracy ו-String Accuracy, ומה שאנחנו רוצים זה לבצע סוויץ' על ה-Accuracy שקיבלנו. האמת, אני רואה שכבר יש כאן משתנה Accuracy, אז בואו ניקח Accuracy Value וניגש ל-Accuracy, שזה משתנה אינטג'רי שנשלח לפונקציה ומה שאנחנו

  29. 10:17

    רוצים לעשות זה קייסים במידה והאקיורסי הוא

לקורס המלא: קורס פיתוח אפליקציות לאנדרואיד

ההרצאה הקודמת: חיישנים של המכשיר

ההרצאה הבאה: Device Inclination

הרצאות קשורות מקורסים אחרים

  • Accelerometer

קורסים נוספים במסלול

  • קורס יסודות התכנות - שפת JAVA - קורס ג'אווה למתחילים
  • קורס פיתוח אפליקציות - לאייפון iPhone iOS - ב-Swift-Xcode
  • קורס פלאטר - Flutter - שפת DART של גוגל למובייל - פיתוח אפליקציות לאנדרואיד ואייפון
  • קורס PhoneGap - פיתוח אפליקציות לאנדרואיד ואייפון