top of page

טכומטר ואנקודר

project w.o background3.png

מה זה? 

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

אופן פעולת הטכומטר והאנקודר

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

IR sensor demonstration1.png
IR sensor demonstration2.png
slotted disk.png

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

motor+disk2.png

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

בפרוייקט שלי השתמשתי בחיישן הדיגיטלי IR Obstacle Avoidance Sensor.

חיישן IR ISO.jpg

אופן פעולת החיישן – הסבר פנימי
הרכיב מכיל לד אינפרה אדום וחיישן אינפרה אדום. הלד פולט אור והחיישן 
ממיר את ההחזר שהוא קולט למתח חשמלי - כאשר יש החזר אור הוא מומר ל-5V ומוציא את הקריאה 1, וכאשר אין החזר אור המתח החשמלי הוא 0V ומוציא את הקריאה 0. הרכיב מכיל גם פוטנציומטר (הקופסא הכחולה) המאפשר כיוונון בעזרת מברג של רגישות החיישן - המרחק בו הוא מסוגל לקלוט עצמים. טווח הקליטה שלו הוא בין 2cm-30cm.

Pinout

VCC 5Volt

GND  GND

OUT  Digital Pin (2-13)

חיישן IR explained2.jpg.png

דיאגרמת חיווט

דיאגרמת חיווט.png

קוד לדוגמה א' - קריאת החיישן

code1 - read.png

ניתן להוריד את הקוד כאן

תיאור קוד א'

קוד לקריאת החיישן על פי החיווטים המפורטים בעמוד הקודם. על מנת לראות את קריאות החיישן יש להעלות את הקוד לבקר ולאחר מכן ללחוץ בתוכנה Tools → Serial Monitor.
 

בקוד מוגדר משתנה בשם irSensorValue שנועד לשמור את קריאת החיישן. החיישן מוגדר בפין 7 וה-Serial Monitor מוגדר במהירות של 9600 ביטים לשנייה (Baud Rate).

המשתנה irSensorValue קולט לתוכו את קריאת הפין הדיגיטלי 7 אליו מחובר החיישן, כאשר ישנו אובייקט בהיר מול החיישן הקריאה תהיה 1 וכאשר אין הקריאה תהיה 0. לאחר מכן, מודפסת השורה "IR sensor value: " ובאותה השורה גם ערכו של המשתנה. נכנסים לפקודת ה-delay שעוצרת את הקוד ל-100 מילי שניות, ואז חוזרים על הלולאה שוב ושוב.

קוד לדוגמה ב' - ספירת סיבובים

code2 - count.png

ניתן להוריד את הקוד כאן

תיאור קוד ב'

על פי אותו העיקרון של הקוד הקודם, רק הפעם בחיבור מנוע וספירת הסיבובים. במקרה זה ישנו שימוש במנוע 24V ולכן שימוש ב-Motor Driver, אך זה לא חובה וניתן להשתמש בכל מנוע DC וברכיבים הדרושים לו. על מנת לספור את הסיבובים, עלינו להשתמש בדיסק המחובר למנוע בעל פס לבן ולהציב את החיישן מולו, אנו נספור את מספר הפעמים שהפס הלבן מוצב מול החיישן. נפעיל את המנוע ונבדוק מתי קריאת החיישן היא 1 ובמקרה זה נמתין עד שהיא משתנה חזרה ל-0 (חשוב על מנת למנוע מצב שבו החיישן קורא מספר פעמים את הפס באותו הסיבוב). כאשר זה קורה, המשתנה שסופר את הסיבובים גדל באחד ומוצג על ה-Serial Monitor.

קוד לדוגמה ג' - מדידת מהירות

code3 - speed.png

ניתן להוריד את הקוד כאן

תיאור קוד ג'

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

העיקרון על פיו מדידת המהירות פועל הוא שמהירות סיבוב המנוע שווה למספר הסיבובים שהוא עושה חלקי סך הזמן. ככל שנקטין את מספר הסיבובים (וכתוצאה מכך את סך הזמן), נגיע למהירות יותר מדויקת ויותר "רגעית", בניגוד למהירות ממוצעת. לכן, כל פעם כשנסיים סיבוב, נחשב את המהירות הרגעית של הסיבוב הקודם לו - 2 חלקי (הזמן שלקח לסיבוב הקודם+הזמן שלקח לסיבוב החדש). כך נקבל את המהירות ביחידות של סיבובים למילי שנייה, וכאשר נכפיל זאת ב-60,000 נקבל היחידות סיבובים לדקה RPM.

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

טבלת מעקב.png

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

Serial Monitor.png
Hall_sensor_tach.gif

חלופות לרכיב

 

אפקט הול

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

חסרונות של שימוש בשיטה האופטית לעומת המגנטית:

  • הלד אינפרה אדום נחלש עם הזמן

  • יכולות להיות הפרעות בקליטת ההחזר עקב הימצאות של מים, חול, אבק וכו' על החיישן

  • הבדלי תאורה גדולים יכולים לגרום לעיוותים בקליטת ההחזר


חסרונות של שימוש בשיטה המגנטית לעומת האופטית:

  • המרחק בין החיישן למגנט חייב להיות מאוד קטן

  • רכיבים מגנטיים אחרים יכולים לגרום להפרעה ולחוסר דיוק


גם חיישן אפקט הול וגם חיישן אינפרה אדום עולים עד 15 ש"ח.

motor+encoder.png

אנקודר קנוי

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

שגיאות שכדאי להימנע מהן וטיפים מועילים:

 

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

 

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

 

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

 

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

לוגו חוף השרון.png
bottom of page