- מודול חיישן מהירות LM393 (H206)
- סידור הרכבה חיישן H206
- DIY Arduino LM393 חיישן מהירות תרשים מעגל רובוט
- היגיון מאחורי מדידת מהירות עם מודול חיישן מהירות LM393
- היגיון מאחורי מדידת המרחק שעבר ההגה
- היגיון מאחורי מדידת זווית הבוט
- קוד רובוט של ארדואינו
- בדיקת רובוט הארדואינו למדידת מרחק, מהירות וזווית
לאט לאט החלו הרובוטים לזחול לחברה שלנו כדי להפוך את חיינו לפשוטים יותר. אנחנו כבר יכולים למצוא את ששת הרובוטים לאספקת מזון על גלגלים מבית סטארשיפ בכבישי בריטניה, המנווטים בחוכמה בין האזרחים כדי להגיע ליעדם. כל רובוט נייד שמנווט לסביבה צריך להיות תמיד מודע למיקומו ולכיוון שלו ביחס לעולם האמיתי. ישנן דרכים רבות להשיג זאת באמצעות טכנולוגיות שונות כמו GPS, משולש RF, תאוצה, גירוסקופים וכו '. לכל טכניקה יש יתרון משלה והיא ייחודית בפני עצמה. בכך הדרכת חיישן מהירות Arduino LM393 נשתמש פשוט ובקלות הזמין מודול חיישן LM393 המהירכדי למדוד כמה פרמטרים חיוניים כמו מהירות, מרחק נסיעה וזווית הרובוט באמצעות ארדואינו. בעזרת פרמטרים אלה יוכל הרובוט לדעת את מצבו בעולם האמיתי והוא יכול להשתמש בו כדי לנווט בבטחה.
ארדואינו הוא הבחירה הפופולרית ביותר בקרב חובבים לבניית רובוטים, החל מחסיד קו פשוט ועד לרובוט מורכב יותר לאיזון עצמי או ניקוי רצפה. אתה יכול לבדוק את כל סוגי הרובוטים במדור הרובוטיקה.
נבנה רובוט קטן שמופעל על ידי סוללת ליתיום ונניע אותו באמצעות ג'ויסטיק. במהלך זמן הריצה נוכל למדוד את המהירות, המרחק והזווית של הרובוט ולהציגו בזמן אמת על גבי צג ה- LCD המחובר לארדואינו. פרויקט זה פשוט עוזר לך במדידת פרמטרים אלה, לאחר שתסיים זאת תוכל להשתמש בפרמטרים אלה להפעלת הבוט שלך באופן אוטונומי כנדרש. נשמע מעניין נכון? אז בואו נתחיל.
מודול חיישן מהירות LM393 (H206)
לפני שנכנס לתרשים המעגל ולקוד לפרויקט, הבה נבין את מודול חיישן המהירות LM393 מכיוון שהוא ממלא תפקיד חיוני בפרויקט. מודול חיישן H206 המהירות מורכב אור אינפרא אדום חיישן משולב עם קומפרטור מתח LM393 IC ומכאן חיישן שם LM393 המהיר. המודול מורכב גם מפלטת רשת אשר יש להתקין על הפיר המסתובב של המנוע. כל הרכיבים מתויגים בתמונה למטה.
חיישן האור האינפרא - אדום מורכב מ- LED LED ומטרנזיסטור פוטו המופרד על ידי גב קטן. כל סידור החיישן ממוקם בתוך בית שחור כמו שמוצג לעיל. לוח הרשת מורכב מחריצים, הלוח מסודר בין הפער של חיישן האור האינפרא-אדום באופן שהחיישן יכול לחוש את הפערים בצלחת הרשת. כל פער בפלטת הרשת מפעיל את חיישן ה- IR בעת מעבר דרך הפער; טריגרים אלה מומרים לאחר מכן לאותות מתח באמצעות המשווה. המשווה אינו אלא IC LM393 ממוליכים למחצה ON. למודול שלושה פינים, שניים מהם משמשים להפעלת המודול וסיכת פלט אחת משמשת לספירת מספר הטריגרים.
סידור הרכבה חיישן H206
הרכבה מסוג חיישנים מסוג זה היא מעט מסובכת. ניתן להתקין אותו רק למנועים שהצבא שלהם בלט משני הצדדים. צד אחד של הפיר מחובר לגלגל ואילו הצד השני משמש להרכבת לוחית הרשת כמוצג לעיל.
מכיוון שהגלגל והלוח מחוברים לאותו פיר שניהם מסתובבים באותה מהירות וכך על ידי מדידת מהירות הלוח נוכל למדוד את מהירות הגלגל. ודא שהפערים בצלחת הרשת עוברים דרך חיישן ה- IR, רק אז החיישן יוכל לספור את מספר הפערים שעברו. אתה יכול גם להמציא סידור מכני משלך להרכבת החיישן כל עוד הוא עומד בתנאי שצוין. בדרך כלל משתמשים בחיישן IR בפרויקטים רבים של רובוטיקה להנחיית הרובוט לגבי המכשולים.
לוח הרשת שהוצג לעיל מכיל 20 חריצים (רשתות). המשמעות היא שהחיישן ימצא 20 פערים לסיבוב אחד של הגלגל. על ידי ספירת מספר הפערים שהחיישן זיהה נוכל לחשב את המרחק שעבר הגלגל, באופן דומה על ידי מדידה כמה מהר החיישן מוצא את הפערים שנוכל לזהות את מהירות הגלגל. ברובוט שלנו יהיה לנו חיישן זה מותקן בשני הגלגלים ומכאן שנוכל למצוא גם את זווית הרובוט. עם זאת ניתן לחשב את זווית הסיבוב בצורה יותר הגיונית באמצעות ה- Accelerometer או ה- Gyroscope, למדו כאן לממשק Accelerometer וג'ירוסקופ עם Arduino ונסו למדוד זווית סיבוב באמצעותם
DIY Arduino LM393 חיישן מהירות תרשים מעגל רובוט
תרשים המעגל השלם של רובוט חישת מהירות ומרחק זה מוצג להלן. הבוט מורכב מ- Arduino Nano כמוחו, שני מנועי DC לגלגלים מונעים על ידי מודול L298N H-Bridge Motor Driver. הג'ויסטיק משמש לבקרת המהירות והכיוון של הבוט ושני חיישני המהירות H206 משמשים למדידת המהירות, המרחק והמלאך של הבוט. הערכים הנמדדים מוצגים לאחר מכן במודול ה- LCD 16x2. בעזרת הפוטנציומטר המחובר ל- LCD ניתן לכוונן את הניגודיות של ה- LCD והנגד משמש להגבלת הזרם הזורם לתאורה האחורית של ה- LCD.
המעגל השלם הוא מופעל על ידי סוללת ליתיום 7.4V. 7.4V זה מסופק לסיכה 12V של מודול מנהל התקן המנוע. מווסת המתח במודול נהג המנוע ממיר את 7.4V לוויסות + 5V המשמש להפעלת Arduino, LCD, חיישנים וג'ויסטיק.
המנוע נשלט על ידי הפינים הדיגיטליים 8,9,10 ו- 11 של הארדואינו. מכיוון שיש גם לשלוט על מהירות המנוע עלינו לספק אותות PWM למסוף החיובי של המנוע. מכאן שיש לנו סיכה 9 ו -10 ששניהם סיכות מסוג PWM. ערכי X ו- Y יוצרים את הג'ויסטיק הנקרא באמצעות הפינים האנלוגיים A2 ו- A3 בהתאמה.
כידוע חיישן H206 עם ליצור טריגר כאשר מתגלה הפער בלוחית הרשת. מכיוון שלא תמיד יש לקרוא את הטריגרים הללו בכדי לחשב את המהירות והמרחק הנכונים, שני סיכות ההדק (פלט) מחוברות לסיכת ההפסקה החיצונית 2 ו- 3 של לוח Arduino. הרכיבו את כל המעגל על שלדה והרכיבו את חיישן המהירות כפי שהוסבר, הבוט שלי נראה משהו כמו למטה לאחר השלמת החיבורים. אתה יכול גם לצפות בסרטון בסוף עמוד זה כדי לדעת כיצד הותקן החיישן.
כעת, לאחר שחלק החומרה הושלם, ניכנס להיגיון כיצד נמדוד את המהירות, המרחק והסינגל של הבוט ונמשיך לקטע התכנות.
היגיון מאחורי מדידת מהירות עם מודול חיישן מהירות LM393
ממערך הרכבת החיישן עליך להיות מודע לכך שמודול חיישן המהירות LM393 (H206) מודד רק את הפערים הקיימים בלוח הרשת. בזמן ההרכבה עליו לוודא שהגלגל (שאותו יש למדוד את מהירותו) ופלטת הרשת מסתובבים באותה מהירות. כמו כאן, מכיוון שהרכבנו את הגלגל ואת הלוח על אותו פיר שניהם מסתובבים באותה מהירות ללא ספק.
במערך שלנו הקמנו שני חיישנים לכל גלגל למדידת זווית הבוט. אבל אם המטרה שלך היא למדוד רק את המהירות והמרחק נוכל להרכיב את החיישן על כל גלגל אחד. הפלט של החיישן (אותות ההדק) יהיה מחובר לרוב לסיכת הפסקה חיצונית של מיקרו-בקר. בכל פעם שמזהים את הפער בלוחית הרשת, יופסק הפרעה והקוד ב- ISR (Interrupt Service Routine) יבוצע. אם אנו מצליחים לחשב את מרווח הזמן בין שני טריגרים כאלה נוכל לחשב את מהירות הגלגל.
בארדואינו אנו יכולים לחשב בקלות את מרווח זמן זה באמצעות פונקציית ה- millis () . פונקציית מיליס זו תמשיך להתגבר ב -1 לכל מילי שניה מרגע הפעלת המכשיר. כך שכאשר מתרחשת ההפרעה הראשונה אנו יכולים לשמור את הערך של מילי () במשתנה דמה (כמו pevtime בקוד זה) ואז כאשר הפרעה השנייה מתרחשת נוכל לחשב את הזמן שנדרש על ידי חיסור ערך pevtime מהמילי ().
זמן נלקח = זמן נוכחי - לוח זמנים של זמן קודם = מיליס () - זמן pevtime ; // timetaken ב millisec
לאחר שחישבנו את הזמן שנלקח נוכל פשוט לחשב את ערך הסל"ד באמצעות הנוסחאות שלהלן, כאשר (1000 / לפי לוח זמנים) נותן את ה- RPS (מהפכות לשנייה) והוא מוכפל ב- 60 להמיר RPS ל- RPM (מהפכות לדקה).
סל"ד = (1000 / לוח זמנים) * 60;
לאחר חישוב הסל"ד נוכל לחשב את מהירות הרכב באמצעות הנוסחאות הבאות בתנאי שנדע את רדיוס הגלגל.
מהירות = 2π × RPS × רדיוס הגלגל. v = רדיוס_גלגל * סל"ד * 0.104
שים לב, הנוסחה שלעיל מיועדת לחישוב המהירות ב- m / s, אם ברצונך לחשב בקמ"ש ואז להחליף את 0.0104 ב- 0.376. אם אתה סקרן לדעת כיצד הושג הערך 0.104, נסה לפשט את הנוסחה V = 2π × RPS × רדיוס הגלגל.
נעשה שימוש באותה טכניקה גם אם משתמשים בחיישן אולם למדידת מהירות אובייקט מסתובב. אבל עבור חיישן H206 יש מלכוד, בלוח הרשת יש 20 חריצים ומכאן שמדידת הזמן בין שני פערים בחריץ תעמיס על המיקרו-בקר. מכאן שאנחנו מודדים את המהירות רק בסיבוב מלא של הגלגל. מכיוון שתי הפרעות ייווצרו עבור כל פער (אחד בתחילתו ואחר בסוף הפער) נקבל בסך הכל 40 הפרעות שהגלגל יבצע סיבוב שלם אחד. אז אנחנו מחכים ל -40 הפרעות לפני שאנחנו באמת מחשבים את מהירות הגלגל. הקוד עבור אותו מוצג להלן
אם (סיבוב> = 40) { timetaken = millis () - pevtime; // לוח זמנים בסל"ד אלפיות = (1000 / לוח זמנים) * 60; // נוסחאות לחישוב סל"ד pevtime = millis (); סיבוב = 0; }
חסרון נוסף בשיטה זו הוא שערך המהירות לא יירד לאפס מאחר וההפסקה תמיד תחכה שהגלגל ישלים סיבוב אחד לחישוב ערך הסל"ד. ניתן להתגבר על החיסרון הזה בקלות על ידי הוספת קוד פשוט שעוקב אחר מרווח הזמן בין שתי הפרעות ואם הוא עולה מהרגיל אז נוכל לאלץ את ערך הסל"ד והמהירות לאפס. קישור בקוד שלמטה השתמשנו ב- dtime משתנה לבדיקת ההפרש בזמן ואם הוא עולה על 500 מילי שניות ערך המהירות והסל"ד נאלץ להיות אפס.
/ * לרדת לאפס אם הרכב עצר * / אם (מילי () - זמן זמן> 500) // לא נמצאה הפסקה במשך 500 ms { סל"ד = v = 0; // הפוך סל"ד ומהירות לאפס זמן = מיליס (); }
היגיון מאחורי מדידת המרחק שעבר ההגה
אנחנו כבר יודעים שהארדואינו יחוש 40 הפרעות כאשר הגלגל מבצע סיבוב שלם אחד. כך שלכל סיבוב אחד שנעשה על ידי הגלגל ניכר שהמרחק שעובר הגלגל שווה להיקף הגלגל. מכיוון שאנו כבר מכירים את רדיוס הגלגל אנו יכולים לחשב בקלות את המרחק שנכסה באמצעות הנוסחה שלהלן
מרחק = 2πr * מספר סיבובים מרחק = (2 * 3.141 * רדיוס_גלגל) * (שמאל_כניסה / 40)
כאשר היקף הגלגל מחושב באמצעות הנוסחה 2πr ואז הוא מוכפל במספר הסיבובים שנעשה על ידי הגלגל.
היגיון מאחורי מדידת זווית הבוט
ישנן דרכים רבות לקבוע את מלאך הרובוט. בדרך כלל משתמשים במאיצים וגירוסקופים לקביעת ערכים אלה. אך גישה זולה נוספת היא להשתמש בחיישן H206 בשני הגלגלים. בדרך זו נדע כמה סיבובים ביצע כל גלגל. האיור שלהלן מדגים את אופן חישוב הזווית.
כאשר הרובוט מאותחל, הזווית שהוא פונה אליה נחשבת כ 0 °. משם הוא מסתובב שמאלה הזווית מוגברת בשלילה ואם היא מסתובבת ימינה המלאך מצטבר בחיוב. לשם הבנה בואו ניקח בחשבון את הטווח של -90 עד +90 כפי שמוצג באיור. בסידור כזה מכיוון ששני הגלגלים הם בקוטר זהה, אם אחד מהגלגלים מבצע סיבוב מוחלט לבוט אנו נפנה בזווית של 90 °.
למשל אם הגלגל השמאלי מבצע סיבוב שלם אחד (80 הפרעות) אז הבוט יפנה 90 ° לכיוון שמאל וכמו כן אם הגלגל הימני מבצע סיבוב שלם אחד (80 קטעים) אז הבוט יפנה -90 ° לכיוון ימין. כעת אנו יודעים שאם הארדואינו מזהה 80 הפרעות על גלגל אחד אז הבוט הסתובב ב 90 ° ועל סמך איזה גלגל נוכל לדעת אם הבוט פנה על ידי חיובי (מימין) או שלילי (שמאל). אז ניתן לחשב את הזווית השמאלית והימנית באמצעות הנוסחאות הבאות
int angle_left = (left_intr% 360) * (90/80); int angle_right = (right_intr% 360) * (90/80);
כאשר 90 היא הזווית המכוסה בעת ביצוע הפסקה של 80. הערך המתקבל הוא הפרעות מספרים מוכפלות. השתמשנו גם במודולוס של 360 כך שהערך המתקבל לעולם לא יעלה על 36. לאחר שחישבנו גם את הזווית השמאלית וגם את הזווית הימנית, ניתן להשיג את הזווית האפקטיבית בה הבוט פונה על ידי חיסור הזווית השמאלית מהזווית הנכונה.
זווית = זווית ימינה - זווית שמאלה;
קוד רובוט של ארדואינו
את קוד הארדואינו השלם לרובוט זה למדידת מהירות וזווית ניתן למצוא בסוף עמוד זה. מטרת התוכנית היא לחשב את המהירות, המרחק והזווית של הבוט באמצעות הלוגיקה לעיל ולהציגו על גבי מסך ה- LCD. מלבד זאת זה אמור לספק אפשרות לשלוט בבוט באמצעות הג'ויסטיק.
אנו מתחילים את התוכנית על ידי הגדרת סיכות ה- I / O הדיגיטליות עבור שני המנועים. שים לב שעלינו לשלוט גם במהירות המנוע ולכן עלינו להשתמש בסיכות PWM בארדואינו כדי לשלוט במנועים. כאן השתמשנו בסיכה 8,9,10 ו- 11.
# הגדר LM_pos 9 // מנוע שמאלי # הגדר LM_neg 8 // מנוע שמאלי # הגדר RM_pos 10 // מנוע ימני # הגדר RM_neg 11 // מנוע ימני # הגדר שמחה X A2 # הגדר שמחה Y A3
כדי למדוד את המהירות והמרחק המכוסים עלינו לדעת את רדיוס הגלגל, למדוד את הערך ולהזין אותו במטרים כמוצג להלן. עבור הבוט שלי הרדיוס היה 0.033 מטר אבל זה יכול להיות שונה מבחינתך בהתאם לבוט שלך.
רדיוס צף_גלגל = 0.033; // מדוד את רדיוס הגלגל שלך והזן אותו כאן בס"מ
בתוך פונקציית ההתקנה , אנו מאותחלים את כל הערך לאפס ואז מציגים טקסט מבוא על גבי ה- LCD. ביצענו גם אתחול של המסך הטורי לצורך איתור באגים. ואז הזכרנו כי חיישני המהירות H206 מחוברים לסיכה 2 ו -3 כהפרעות חיצוניות. זה המקום שבו מתגלה הפסקת פונקציית ISR Left_ISR ו- Right_ISR תבוצע בהתאם.
הגדרת חלל () { rotation = rpm = pevtime = 0; // אתחל את כל המשתנים לאפס Serial.begin (9600); lcd.begin (16, 2); // אתחל 16 * 2 LCD lcd.print ("צג בוט"); // שורת הודעות מבוא 1 lcd.setCursor (0, 1); lcd.print ("- CircuitDigest"); // עיכוב קו 2 הודעה מבוא (2000); lcd.clear (); lcd.print ("Lt: Rt:"); lcd.setCursor (0, 1); lcd.print ("S: D: A:"); pinMode (LM_pos, OUTPUT); pinMode (LM_neg, OUTPUT); pinMode (RM_pos, OUTPUT); pinMode (RM_neg, OUTPUT); digitalWrite (LM_neg, LOW); digitalWrite (RM_neg, LOW); attachInterrupt (digitalPinToInterrupt (2), Left_ISR, CHANGE); // שמאל_ISR נקרא כאשר מופעל חיישן הגלגל השמאלי attachInterrupt (digitalPinToInterrupt (3), Right_ISR, CHANGE); // Right_ISR נקרא כאשר מופעל חיישן הגלגל הימני }
בתוך השגרה Left_ISR, אנו פשוט מגדילים משתנה בשם left_intr אשר ישמש מאוחר יותר למדידת זווית הבוט. בתוך Right_ISR אנו עושים את אותו הדבר, אך בנוסף אנו גם מחשבים את המהירות כאן. הסיבוב המשתנה מצטבר לכל הפסקה ואז משתמשים בהגיון הנ"ל לחישוב המהירות.
בטל Left_ISR () { left_intr ++; עיכוב (10); } בטל Right_ISR () { right_intr ++; עיכוב (10); סיבוב ++; זמן זמן = מיליס (); אם (סיבוב> = 40) { timetaken = millis () - pevtime; // לוח זמנים בסל"ד אלפיות = (1000 / לוח זמנים) * 60; // נוסחאות לחישוב סל"ד pevtime = מילי (); סיבוב = 0; } }
בתוך פונקציית הלולאה האינסופית הראשית אנו עוקבים אחר הערכים של X ו- Y מהג'ויסטיק. בהתבסס על הערך אם מזיזים את הג'ויסטיק אנו שולטים בבוט בהתאם. מהירות הבוט תלויה עד כמה דוחפים את הג'ויסטיק.
int xValue = analogRead (joyX); int yValue = analogRead (joyY); תאוצה int = מפה (xValue, 500, 0, 0, 200); אם (xValue <500) { analogWrite (LM_pos, תאוצה); analogWrite (RM_pos, האצה); } אחר { analogWrite (LM_pos, 0); analogWrite (RM_pos, 0); } אם (yValue> 550) analogWrite (RM_pos, 80); אם (yValue <500) analogWrite (LM_pos, 100);
זה יעזור למשתמש להזיז את הבוט ולבדוק אם הערכים שהושגו הם כצפוי. לבסוף נוכל לחשב את המהירות, המרחק והזווית של הבוט באמצעות הלוגיקה שלעיל ולהציגו על גבי LCD בעזרת הקוד שלמטה.
v = רדיוס_גלגל * סל"ד * 0.104; //0.033 הוא רדיוס הגלגל במרחק מטר = (2 * 3.141 * רדיוס_גלגל) * (שמאל_כניסה / 40); int angle_left = (left_intr% 360) * (90/80); int angle_right = (right_intr% 360) * (90/80); זווית = זווית ימינה - זווית שמאלה; lcd.setCursor (3, 0); lcd.print (""); lcd.setCursor (3, 0); lcd.print (left_intr); lcd.setCursor (11, 0); lcd.print (""); lcd.setCursor (11, 0); lcd.print (right_intr); lcd.setCursor (2, 1); lcd.print (""); lcd.setCursor (2, 1); lcd.print (v); lcd.setCursor (9, 1); lcd.print (""); lcd.setCursor (9, 1); lcd.print (מרחק); lcd.setCursor (13, 1); lcd.print (""); lcd.setCursor (13, 1); lcd.print (זווית);
בדיקת רובוט הארדואינו למדידת מרחק, מהירות וזווית
לאחר שהחומרה שלך מוכנה העלה את הקוד לארדואינו שלך והשתמש בג'ויסטיק כדי להזיז את הבוט שלך. מהירות הבוט, המרחק המכוסה בו והזווית יוצגו על גבי LCD כמוצג להלן.
על גבי LCD המונח Lt ו- Rt מייצג ספירת הפרעות שמאלי וספירת הפרעות ימינה בהתאמה. אתה יכול למצוא את הערכים האלה הולכים וגוברים עבור כל פער שמגלה החיישן. Tem S מציין את מהירות הבוט ב- m / sec והמונח D מציין מרחק מכוסה במטרים. זווית הבוט מוצגת בסוף כאשר 0 ° מיועד לישר והיא הולכת לשלילה לסיבוב נגד כיוון השעון וחיוב לסיבוב בכיוון השעון.
ניתן גם לצפות בסרטון בסוף עמוד זה כדי להבין כיצד עובד הבוט. מקווה שהבנתם את הפרויקט ונהניתם לבנות אותו. אם יש לך חששות השאיר אותם בסעיף ההערות ואנסה כמיטב יכולתי להשיב. אתה יכול גם להשתמש בפורומים לעזרה טכנית מהירה.