במדריך זה אנו הולכים לפתח מעגל באמצעות חיישן FLEX, Arduino Uno ומנוע סרוו. פרויקט זה הוא מערכת בקרת סרוו כאשר מיקום פיר הסרוו נקבע על ידי כיפוף או כפיפה או סטייה של חיישן FLEX.
בואו נדבר קודם על מנועי סרוו. מנועי סרוו משמשים כאשר יש צורך בתנועת פיר או במיקום מדויק. אלה אינם מוצעים ליישומים במהירות גבוהה. אלה מוצעים עבור מהירות נמוכה, מומנט בינוני ויישום מיקום מדויק. מנועים אלה משמשים במכונות זרוע רובוטיות, בקרות טיסה ומערכות בקרה. מנועי סרוו משמשים במערכות משובצות כמו מכונות אוטומטיות וכו '.
מנועי סרוו זמינים בצורות ובגדלים שונים. במנוע סרוו יהיו בעיקר חוטים, אחד מהם הוא למתח חיובי, אחר הוא לקרקע והאחרון הוא להגדרת מיקום. החוט האדום מחובר לחשמל, החוט השחור מחובר לקרקע וחוט הצהוב מחובר לאות.
מנוע סרוו הוא שילוב של מנוע DC, מערכת בקרת מיקום, הילוכים. מיקום הפיר של מנוע ה- DC מותאם על ידי אלקטרוני הבקרה בסרוו, בהתבסס על יחס החובה של אות ה- PWM, סיכת ה- SIGNAL.
במילים פשוטות, האלקטרוניקה שליטה מכוונת את מיקום הפיר באמצעות שליטה במנוע DC. נתונים אלה לגבי מיקום הפיר נשלחים דרך סיכת הסיגנל. יש לשלוח את נתוני המיקום לבקרה בצורה של אות PWM דרך סיכת האות של מנוע הסרוו.
תדירות האות PWM (Pulse Width Modulated) יכולה להשתנות בהתאם לסוג מנוע הסרוו. הדבר החשוב כאן הוא יחס החובה של אות ה- PWM. בהתבסס על תנאי זה, האלקטרוניקה לבקרה מכוונת את הפיר. כדי שהפיר יועבר לשעון 9 מעלות, הפעל את המנה חייב להיות 1/18. 1 מילי שניה של 'זמן ON' ו -17 מילי שניה של 'זמן OFF' באות 18 ms.
כדי שהמנוע יועבר לשעון 12o זמן ההפעלה של האות חייב להיות 1.5ms וזמן ה- OFF צריך להיות 16.5ms. יחס זה מפוענח על ידי מערכת בקרה בסרוו והוא מתאים את המיקום על פיו.
PWM זה כאן נוצר באמצעות ARDUINO UNO. אז לעת עתה אנו יודעים זאת, אנו יכולים לשלוט על פיר המנוע סרוו על ידי שינוי יחס החובה של אות PWM שנוצר על ידי Arduino Uno. ל- UNO פונקציה מיוחדת המאפשרת לנו לספק את המיקום של SERVO מבלי להטריד את אות ה- PWM. עם זאת חשוב להכיר את יחס החובה PWM - עמדת סרוו. נדבר יותר על כך בתיאור.
עכשיו בואו נדבר על FLEX SENSOR. כדי לממשק חיישן FLEX ל- ARDUINO UNO, אנו נשתמש בתכונה ADC 8 סיביות (אנלוגית להמרה דיגיטלית) כדי לבצע את העבודה. חיישן FLEX הוא מתמר שמשנה את התנגדותו כאשר משתנה צורתו. חיישן FLEX באורך 2.2 אינץ 'או באורך האצבעות. זה מוצג באיור.
חיישן Flex הוא מתמר שמשנה את התנגדותו כאשר המשטח הליניארי מכופף. מכאן השם חיישן הגמיש. במילים פשוטות ההתנגדות של מסוף החיישן עולה כאשר היא כפופה. זה מוצג באיור להלן.
שינוי בהתנגדות זה לא יכול להועיל אלא אם כן נוכל לקרוא אותם. הבקר בהישג יד יכול לקרוא רק את הסיכויים במתח ולא פחות מכך, לשם כך נשתמש במעגל מחלקי מתח, ובכך נוכל להפיק את שינוי ההתנגדות כשינוי מתח.
מחלק מתח הוא מעגל התנגדות ומוצג באיור. ברשת התנגדות זו יש לנו התנגדות קבועה אחת והתנגדות משתנה אחרת. כפי שמוצג באיור, R1 כאן הוא התנגדות קבועה ו- R2 הוא חיישן FLEX אשר פועל כהתנגדות.
נקודת האמצע של הענף נלקחת למדידה. עם שינוי R2, יש לנו שינוי ב- Vout. אז עם זה יש לנו מתח שמשתנה עם המשקל.
כעת חשוב לציין שכאן, הקלט שנלקח על ידי הבקר לצורך המרת ADC הוא נמוך עד 50µAmp. אפקט טעינה זה של מחלק מתח מבוסס התנגדות חשוב מכיוון שהזרם הנובע מ- Vout של מחלק המתח מגדיל את אחוז השגיאה עולה, לעת עתה איננו צריכים לדאוג להשפעת הטעינה.
חיישן FLEX כאשר כפוף משתנה התנגדותו. כאשר מתמר זה מחובר למעגל מחלק מתח, יהיה לנו מתח משתנה עם FLEX על המתמר. מתח משתנה זה הוא FED לאחד מערוצי ADC, יהיה לנו ערך דיגיטלי המתייחס ל- FLEX.
אנו נתאים ערך דיגיטלי זה למצב סרוו, ובכך תהיה לנו שליטה על סרוו באמצעות Flex.
רכיבים
חומרה: Arduino Uno , ספק כוח (5V), קבל 1000 uF, קבלים 100nF (3 חתיכות), נגד 100KΩ, SERVO MOTOR (SG 90), נגד 220Ω, חיישן FLEX.
תוכנה: Atmel studio 6.2 או Aurdino מדי לילה.
תרשים מעגל והסבר
דיאגרמת מעגל עבור שליטה מוטורית סרוו ידי חיישן FLEX מוצג מתחת לדמות.
המתח על פני החיישן אינו ליניארי לחלוטין; זה יהיה רעשני. כדי לסנן את הרעש, קבלים ממוקמים על פני כל נגדים במעגל המחלק כפי שמוצג באיור.
כאן אנו ניקח את המתח שמספק המחלק (מתח המייצג משקל באופן ליניארי) ולהאכיל אותו באחד מערוצי ה- ADC של ארדואינו UNO. אנו הולכים להשתמש ב- A0 לשם כך. לאחר אתחול ה- ADC יהיה לנו ערך דיגיטלי המייצג את חיישן הכפיפה. ניקח ערך זה ונשווה אותו למיקום סרוו.
כדי שזה יקרה עלינו לקבוע כמה הוראות בתוכנית ונדבר עליהן בפירוט בהמשך.
ל- ARDUINO שישה ערוצי ADC, כפי שמוצג באיור. באלה כל אחד מהם או כולם יכולים לשמש ככניסות למתח אנלוגי. ה- UNO ADC הוא ברזולוציה של 10 סיביות (כך שערכי המספר השלם מ- (0- (2 ^ 10) 1023)). פירוש הדבר שהוא ימפה את מתח הכניסה בין 0 ל -5 וולט לערכים שלמים בין 0 ל 1023. אז לכל (5/1024 = 4.9mV) ליחידה.
כאן נשתמש ב- A0 של UNO.
עלינו לדעת כמה דברים.
|
ראשית לערוצי UNO ADC יש ערך הפניה ברירת מחדל של 5V. זה אומר שאנחנו יכולים לתת מתח כניסה מרבי של 5V להמרת ADC בכל ערוץ קלט. מכיוון שחיישנים מסוימים מספקים מתח מ -0-2.5 וולט, עם הפניה של 5 וולט אנו מקבלים דיוק נמוך יותר, כך שיש לנו הוראות המאפשרות לנו לשנות את ערך הייחוס הזה. אז לשינוי ערך הייחוס שיש לנו ("AnalogReference ();") לעת עתה אנו משאירים את זה כ-.
כברירת מחדל אנו מקבלים את רזולוציית ה- ADC המקסימלית בלוח שהיא 10 ביט, ניתן לשנות את הרזולוציה הזו באמצעות הוראות ("analogReadResolution (bits);"). שינוי ברזולוציה זה יכול להיות שימושי במקרים מסוימים. לעת עתה אנו משאירים את זה כ.
כעת אם התנאים שלמעלה מוגדרים כברירת מחדל, אנו יכולים לקרוא את הערך מ- ADC של הערוץ '0' על ידי קריאה ישירה לפונקציה "analogRead (pin);", כאן "pin" מייצג את הפין שבו חיברנו אות אנלוגי, במקרה זה זה יהיה "A0".
ניתן לקחת את הערך מ- ADC למספר שלם כ- int SENSORVALUE = analogRead (A0); ", לפי הוראה זו הערך לאחר ADC נשמר במספר השלם" SENSORVALUE ".
עכשיו בואו נדבר על SERVO, ל- UNO יש תכונה שמאפשרת לנו לשלוט במיקום הסרווו על ידי מתן ערך התואר בלבד. נניח שאם אנו רוצים שהסרוו יהיה בגיל 30, נוכל לייצג ישירות את הערך בתוכנית. קובץ הכותרת של SERVO דואג לכל חישובי יחס החובה באופן פנימי.
#לִכלוֹל
סרוו סרוו; servo.attach (3); servo.write (מעלות); |
הצהרה ראשונה מייצגת את קובץ הכותרת לשליטה במנוע SERVO.
הצהרה שנייה היא מתן שם לסרוו; אנחנו משאירים את זה כסרוו עצמו.
הצהרה שלישית קובעת היכן מחובר סיכת אות הסרוו; זה חייב להיות סיכת PWM. כאן אנו משתמשים ב- PIN3.
הצהרה רביעית נותנת פקודות למיקום מנוע סרוו והיא במעלות. אם נותנים לו 30, המנוע הסרובי מסתובב 30 מעלות.
עכשיו ה- sg90 יכול לנוע בין 0-180 מעלות, יש לנו תוצאת ADC 0-1024
אז ADC הוא בערך פי שש מיקום SERVO. אז על ידי חלוקת תוצאת ADC ב 6 נקבל את מיקום היד SERVO המשוער.
עם זאת נקבל ערך מיקום סרוו המנוע סרוו, שהוא פרופורציונלי לכופף או כפוף. כאשר חיישן הגמיש הזה מותקן על כפפה, אנו יכולים לשלוט על מיקום סרוו על ידי תנועת יד.