תוכן עניינים:

סל מיון - איתור ומיון האשפה שלך: 9 שלבים
סל מיון - איתור ומיון האשפה שלך: 9 שלבים

וִידֵאוֹ: סל מיון - איתור ומיון האשפה שלך: 9 שלבים

וִידֵאוֹ: סל מיון - איתור ומיון האשפה שלך: 9 שלבים
וִידֵאוֹ: 11 - חיפוש בינארי ושאלות ממבחנים 2024, יולי
Anonim
Image
Image
איך זה עובד
איך זה עובד

האם אי פעם ראיתם מישהו שלא ממחזר או שעושה את זה בצורה לא טובה?

האם אי פעם ייחלת למכונה שתמחזר עבורך?

המשך לקרוא את הפרויקט שלנו, אתה לא תצטער על זה!

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

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

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

בפרקים הבאים, פרויקט זה יוסבר שלב אחר שלב.

שלב 1: איך זה עובד

איך זה עובד
איך זה עובד
איך זה עובד
איך זה עובד

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

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

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

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

שלב 2: כתב חומרים (BOM)

חלקים מכניים:

  • נקנה חלקים למבנה התחתון

    • מבנה מתכתי [קישור]
    • קופסה אפורה [קישור]
  • מדפסת תלת מימד

    PLA לכל החלקים המודפסים (ניתן להשתמש בחומרים אחרים, כמו ABS)

  • מכונת חיתוך בלייזר

    • MDF 3 מ"מ
    • פרספקס 4 מ"מ
  • ערכת מיסבים לינארית [קישור]
  • מיסב לינארי [קישור]
  • פיר [קישור]
  • מחזיק פיר (x2) [קישור]

חלקים אלקטרוניים:

  • מָנוֹעַ

    מנוע צעד לינארי Nema 17 [קישור]

  • סוֹלְלָה

    סוללה 12 v [קישור]

  • חיישנים

    • 2 חיישן אולטרסאונד HC-SR04 [קישור]
    • 2 חיישנים אינדוקטיביים LJ30A3-15 [קישור]
  • מיקרו -בקר

    1 לוח ארדואינו UNO

  • רכיבים נוספים

    • נהג DRV8825
    • 3 נוריות LED: אדום, ירוק וכתום
    • כפתור 1
    • כמה חוטי קפיצה, חוטים ולוחות הלחמה
    • לוח לחם
    • כבל USB (חיבור Arduino-PC)
    • קבלים: 100uF

שלב 3: תכנון מכני

Image
Image
עיצוב מכני
עיצוב מכני
עיצוב מכני
עיצוב מכני

בתמונות הקודמות, כל חלקי המכלול מוצגים.

עבור העיצוב המכני, SolidWorks שימשה כתוכנית CAD. חלקי המכלול השונים תוכננו תוך התחשבות בשיטת הייצור של איזה מהם הם הולכים לייצר.

חלקים בחיתוך לייזר:

  • MDF 3 מ מ

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

    פּלַטפוֹרמָה

חלקים מודפסים בתלת מימד:

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

לצורך ייצור כל אחד מהחלקים הללו, יש לייבא את קבצי ה- STEP לתבנית הנכונה, בהתאם למכונה שבה ישתמשו למטרה זו. במקרה זה, קבצי.dxf שימשו למכונת חיתוך הלייזר וקבצי.gcode למדפסת התלת -ממד (Ultimaker 2).

ניתן למצוא את ההרכבה המכאנית של פרויקט זה בקובץ ה-. STEP המצורף בחלק זה.

שלב 4: אלקטרוניקה (אפשרויות רכיב)

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

לוח ארדואינו UNO (בתור המיקרו -בקר):

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

מנוע (מנוע צעד לינארי Nema 17):

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

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

נהג DRV8825:

לוח זה משמש לשליטה במנוע צעד דו קוטבי. יש לו בקרת זרם מתכווננת המאפשרת לך להגדיר את תפוקת הזרם המקסימלית בעזרת פוטנציומטר וכן שש רזולוציות צעד שונות: צעד מלא, חצי צעד, 1/4 צעד, 1/8 צעד, 1/16- שלב, ו -1/32-צעד (סוף סוף השתמשנו בצעד מלא מכיוון שלא מצאנו צורך ללכת למיקרוסטפ אבל ניתן עדיין להשתמש בו כדי לשפר את איכות התנועה).

חיישנים אולטרא סאונד:

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

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

חיישנים אינדוקטיביים:

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

נוריות (ירוק, צהוב, אדום):

המשימה שלהם היא לתקשר עם המשתמש:

-נורית ירוקה דולקת: הרובוט מחכה לאובייקט.

-LED אדום דולק: מכונה עובדת, אתה לא יכול לזרוק שום חפץ.

-LED צהוב דולק: אובייקט מזוהה.

סוללת 12V או מקור מתח 12V + 5V USB כוח:

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

סוגיות שמצאנו:

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

    • השטח המכוסה על ידי החיישנים בתוך הרציף המרובע מייצג פחות מ -50% ממנו (כך שלא ניתן לזהות אובייקט קטן). כדי לפתור אותו אנו ממליצים להשתמש בשלושה או ארבעה חיישנים אינדוקטיביים על מנת להבטיח שיותר מ -70% מהשטח מכוסה.
    • מרחק הגילוי של החיישנים מוגבל ל -15 מ"מ ולכן מצאנו את עצמנו נאלצים להשתמש בפלטפורמת פרספקס דקה. זו גם יכולה להיות מגבלה נוספת לזיהוי עצמים בעלי צורה מוזרה.
  • זיהוי אולטרא סאונד: שוב, אובייקטים המעוצבים בצורה מורכבת נותנים בעיות שכן האות הנפלט מהחיישנים משתקף בצורה גרועה וחוזר מאוחר יותר מהצורך לחיישן.
  • סוללה: יש לנו כמה בעיות בשליטה על הזרם שמספקת הסוללה וכדי לפתור אותו השתמשנו סוף סוף במקור חשמל. עם זאת, ניתן לבצע פתרונות אחרים כמו שימוש בדיודה.

שלב 5: אלקטרוניקה (חיבורים)

אלקטרוניקה (חיבורים)
אלקטרוניקה (חיבורים)
אלקטרוניקה (חיבורים)
אלקטרוניקה (חיבורים)

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

שלב 6: תכנות

תִכנוּת
תִכנוּת

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

התוכנית מחולקת ל -4 שלבים, שהם כדלקמן:

  1. אתחל את המערכת
  2. בדוק נוכחות של אובייקטים
  3. בדוק את סוג האובייקט הקיים
  4. Move Box

לתיאור מפורט של כל שלב, ראה להלן:

שלב 1 אתחול המערכת

לוח LED (3) - הגדר כיול LED (אדום) HIGH, LED מוכן (ירוק) LOW, אובייקט קיים (צהוב) LOW

בדוק שמנוע צעד נמצא במיקום ההתחלתי

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

    • מיקום ראשוני == 0 >> עדכן ערכים של Ready LED HIGH ו- Calibrating LED LOW -> שלב 2
    • מיקום ראשוני! = 0 >> ערך קריאה דיגיטלי של חיישנים אולטראסוניים ומבוסס על ערכי חיישן:

      • עדכן ערך של מנוע נע LED גבוה.
      • הפעל את תיבת המהלך עד שהערך של שני החיישנים האולטראסוניים הוא <ערך סף.

ערך עדכון המיקום ההתחלתי = 1 >> ערך העדכון של LED Ready HIGH והמנוע נע LOW וכיול LOW >> שלב 2

שלב 2

בדוק נוכחות של אובייקטים

הפעל זיהוי אובייקטים קולי

  • אובייקט קיים == 1 >> עדכן ערך של אובייקט הנוכחי LED גבוה >> שלב 3
  • אובייקט קיים == 0 >> אל תעשה דבר

שלב 3

בדוק את סוג האובייקט הקיים

הפעל זיהוי חיישן אינדוקטיבי

  • inductiveState = 1 >> שלב 4
  • inductiveState = 0 >> שלב 4

שלב 4

Move Box

הפעל את הפעולה המוטורית

  • inductiveState == 1

    עדכן את המנוע נע LED גבוה >> עשה את המנוע זז שמאלה, (עדכן את המיקום ההתחלתי = 0) עיכוב וחזור אחורה ימינה >> שלב 1

  • inductiveState == 0

    עדכן את המנוע הנע LED גבוה >> עשה את המנוע לנוע ימינה, (עדכן את המיקום ההתחלתי = 0), עיכב וחזור שמאלה >> שלב 1

פונקציות

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

לאחר שלב 4, התוכנית בוצעה במלואה ותחזור לשלב 1 לפני הפעלה מחדש.

הפונקציות המשמשות את הגוף הראשי מוגדרות להלן.

הם בהתאמה:

  • inductiveTest ()
  • moveBox (inductiveState)
  • ultrasonicObjectDetection ()

// בדוק אם האובייקט מתכתי או לא

bool inductiveTest () {if (digitalRead (inductiveSwitchRight) == 1 || digitalRead (inductiveSwitchLeft == 0)) {return true; else {return false; }} void moveBox (bool inductiveState) {// התיבה עוברת שמאלה כאשר מתכת מתגלה ו- inductiveState = true if (inductiveState == 0) {stepper.moveTo (צעדים); // מיקום אקראי לסיום לבדיקת stepper.runToPosition (); עיכוב (1000); stepper.moveTo (0); stepper.runToPosition (); עיכוב (1000); } אחרת אם (inductiveState == 1) {stepper.moveTo (-צעדים); // מיקום אקראי לסיום לבדיקת stepper.runToPosition (); עיכוב (1000); stepper.moveTo (0); // מיקום אקראי לסיום לבדיקת stepper.runToPosition (); עיכוב (1000); }} ultrasonicObjectDetection boolean () {length11, distance1, durationTemp, distanceTemp, averageDistance1, averageDistanceTemp, averageDistanceOlympian1; // הגדר את מספר המדידות שצריך לקחת מרחק ארוך Max = 0; מרחק רב Min = 4000; Long distanceTotal = 0; עבור (int i = 0; i distanceMax) {distanceMax = distanceTemp; } if (distanceTemp <distanceMin) {distanceMin = distanceTemp; } distanceTotal+= distanceTemp; } Serial.print ("Sensor1 maxDistance"); Serial.print (distanceMax); Serial.println ("מ"מ"); Serial.print ("חיישן 1 דקות מרחק"); Serial.print (distanceMin); Serial.println ("מ"מ"); // קח מרחק ממוצע מהקריאות averageDistance1 = distanceTotal/10; Serial.print ("Sensor1 averageDistance1"); Serial.print (ממוצע מרחק 1); Serial.println ("מ"מ"); // הסר את הערכים הגבוהים והנמוכים ביותר של מדידות כדי להימנע מקריאות שגויות ממוצע טווח = distanceTotal - (distanceMax+distanceMin); averageDistanceOlympian1 = averageDistanceTemp/8; Serial.print ("Sensor1 averageDistanceOlympian1"); Serial.print (averageDistanceOlympian1); Serial.println ("מ"מ");

// אפס את ערכי הטמפ '

distanceTotal = 0; distanceMax = 0; distanceMin = 4000; משך זמן ארוך 2, מרחק 2, ממוצע מרחק 2, ממוצע מרחק אולימפיאן 2; // הגדר את מספר המדידות שיש לבצע עבור (int i = 0; i distanceMax) {distanceMax = distanceTemp; } if (distanceTemp <distanceMin) {distanceMin = distanceTemp; } distanceTotal+= distanceTemp; } Serial.print ("Sensor2 maxDistance"); Serial.print (distanceMax); Serial.println ("מ"מ"); Serial.print ("Sensor2 minDistance"); Serial.print (distanceMin); Serial.println ("מ"מ"); // קח מרחק ממוצע מהקריאות averageDistance2 = distanceTotal/10; Serial.print ("Sensor2 averageDistance2"); Serial.print (ממוצע מרחק 2); Serial.println ("מ"מ"); // הסר את הערכים הגבוהים והנמוכים ביותר של מדידות כדי להימנע מקריאות שגויות ממוצע טווח = distanceTotal - (distanceMax+distanceMin); averageDistanceOlympian2 = averageDistanceTemp/8; Serial.print ("Sensor2 averageDistanceOlympian2"); Serial.print (averageDistanceOlympian2); Serial.println ("מ"מ"); // אפס את ערכי הטמפ 'distanceTotal = 0; distanceMax = 0; distanceMin = 4000; if (averageDistanceOlympian1 + averageDistanceOlympian2 <emptyBoxDistance) {return true; } else {return false; }}

גוף עיקרי

הגוף המרכזי מכיל את אותו ההיגיון המוסבר בראש סעיף זה, אך כתוב בקוד. הקובץ זמין להורדה למטה.

אַזהָרָה

נערכו בדיקות רבות לאיתור הקבועים: emptyBoxDistance, צעדים ומהירות מקסימאלית והאצה בהתקנה.

שלב 7: שיפורים אפשריים

שיפורים אפשריים
שיפורים אפשריים

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

-בשל הבעיות שמצאנו עם הזיהוי הקולי, נוכל לחפש כמה חלופות לתפקוד זה: גלאי לייזר ולייזר KY-008 (תמונה), חיישנים קיבוליים.

שלב 8: הגבלת גורמים

פרויקט זה פועל כמתואר בהוראות אך יש להקפיד במיוחד על השלבים הבאים:

כיול חיישנים אולטרא סאונד

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

מקור כוח

הכוח הנדרש עבור נהג מנוע הצעד DRV8825 הוא 12V ובין 0.2 ל 1 אמפר. ניתן להפעיל את הארדואינו גם על ידי מקסימום 12V ו -0.2 אמפר באמצעות כניסת השקע בארדואינו. אולם יש לנקוט משנה זהירות אם משתמשים באותו מקור חשמל הן עבור Arduino והן עבור נהג מנוע הצעדים. אם הוא מופעל משקע חשמל רגיל באמצעות למשל ספק כוח של מתאם AC/DC 12V/2A, צריך להיות וסת מתח ודיודות במעגל לפני שהכוח יועבר למנהג הארדואינו והמנוע.

הבית של הקופסה

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

כוונון נהג צעדים DRV8825

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

שלב 9: נקודות זכות

פרויקט זה נעשה במסגרת קורס מכטרוניקה במהלך שנת הלימודים 2018-2019 עבור המאסטר Bruface באוניברסיטת Libre de Bruxelles (ULB) - Vrije Universiteit Brussel (VUB).

המחברים הם:

מקסים דקלייר

לידיה גומז

מרקוס פודר

אדריאנה פואנטס

נרז'יס סנוסי

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

מוּמלָץ: