- חומרים נדרשים:
- תרשים מעגל:
- הפעלת ההתקנה שלך:
- תכנות את Arduino שלך:
- הכנת יישום Android באמצעות עיבוד:
- עבודה של מפל השיפוע Arduino:
MPU6050 הוא IC תאוצה 3 צירים ג'ירוסקופ 3-ציר משולב לתוך יחידה אחת. הוא כולל גם חיישן טמפרטורה ו- DCM לביצוע משימה מורכבת. MPU6050 משמש בדרך כלל בבניית מזל"ט ורובוטים מרוחקים אחרים כמו רובוט המאזן על עצמו. בפרויקט זה נלמד כיצד להשתמש ב- MPU6050 בנוי בשיפוע מד או ברמת הרמה. כידוע משתמשים בשיפוע מד כדי לבדוק אם משטח מפולס בצורה מושלמת או לא, הם זמינים כמדי בועת שפריץ או כמדי דיגיטליים. בפרויקט זה אנו הולכים לבנות מד שיפוע דיגיטלי שניתן לפקח עליו באמצעות אפליקציית Android. הסיבה לשימוש בתצוגה מרחוק כמו טלפון סלולרי היא שאנחנו יכולים לפקח על הערכים מ- MPU6050 מבלי שנצטרך להסתכל על החומרה, זה יהיה שימושי מאוד כאשר ה- MPU6050 ממוקם על מזל"ט או על מיקומים אחרים שאינם נגישים אחרים.
חומרים נדרשים:
- Arduino Pro-mini (5V)
- חיישן ג'יירו MPU6050
- מודול בלוטות 'HC-05 או HC-06
- לוח FTDI
- קרש לחם
- חוטי חיבור
- טלפון חכם
תרשים מעגל:
תרשים המעגל השלם עבור פרויקט חיישן הטיה זה של Arduino מוצג להלן. זה רק כולל שלושה מרכיבים וניתן לבנות אותו בקלות מעל קרש הלחם.
ה- MPU6050 מתקשר בעזרת I2C ומכאן שסיכה SDA מחוברת לסיכת A4 של ארדואינו שהיא סיכת SDA וסיכה SCL מחוברת לסיכה A5 של ארדואינו. מודול HC-06 Bluetooth פועל בעזרת תקשורת הסידורית ומכאן סיכת Rx של Bluetooth מחובר D11 סיכה ואת סיכת Tx של Bluetooth מחובר D10 סיכה של Arduino. סיכות D10 ו- D11 אלה יוגדרו כסיכה טורית על ידי תכנות הארדואינו. מודול HC-05 ומודול MSP6050 פועלים ב- + 5V ולכן הם מופעלים באמצעות סיכת ה- Vcc של הארדואינו, כפי שמוצג לעיל.
השתמשתי בכמה חוטי חיבור של קרש לחם ובניתי את המערך מעל קרש לחם קטן. לאחר סיום החיבורים הלוח שלי נראה כך למטה.
הפעלת ההתקנה שלך:
אתה יכול להפעיל את המעגל שלך דרך לוח התכנות FTDI כפי שעשיתי, או להשתמש בסוללת 9 וולט או במתאם 12 וולט ולחבר אותו לסיכה הגולמית של ה- Arduino pro mini. ל- Arduino Pro-mini וסת מתח מובנה אשר ימיר את המתח החיצוני המווסת +5 וולט.
תכנות את Arduino שלך:
לאחר שהחומרה מוכנה, נוכל להתחיל לתכנת את Arduino שלנו. כמו תמיד ניתן למצוא את הקוד המלא לפרויקט זה בתחתית עמוד זה. אבל כדי להבין את הפרויקט טוב יותר שברתי את הקוד לסיבוכים קטנים והסברתי אותם כשלבים למטה.
הצעד הראשון יהיה ממשק ה- MPU6050 עם Arduino. עבור פרויקט זה אנו נשתמש בספריה שפותחה על ידי Korneliusz שניתן להוריד מהקישור למטה
MPU6050 Liberty - Korneliusz Jarzebski
הורד את קובץ ה- ZIP והוסף אותו ל- ID של ארדואינו שלך. ואז עבור לקובץ-> דוגמאות-> Arduino_MPU6050_Master -> MPU6050_gyro_pitch_roll_yaw . פעולה זו תפתח את תוכנית הדוגמה המשתמשת בספרייה שהורדנו זה עתה. אז לחצו על העלאה והמתינו להעלאת התוכנית למיני ה- Arduino Pro שלכם. ברגע שזה נעשה, פתח את המסך הטורי שלך והגדר את קצב השידור שלך ל 115200 ובדוק אם אתה מקבל את הדברים הבאים.
בתחילה, כל שלושת הערכים יהיו כאפס, אך כאשר אתה מזיז את קרש הלחם שלך אתה יכול לראות ערכים אלה משתנים. אם הם משתנים זה אומר שהחיבור שלך נכון, אחרת בדוק את החיבורים שלך. קח קצת זמן כאן, שים לב לאופן שבו שלושת הערכים Pitch Roll ו- Yaw משתנים בהתאם לאופן בו אתה מטה את החיישן שלך. אם אתה מתבלבל לחץ על כפתור האיפוס בארדואינו והערכים יותחלו לאפס שוב, ואז הטה את החיישן לכיוון אחד ובדוק אילו ערכים משתנים. התמונה למטה תעזור לך להבין טוב יותר.
מתוך שלושת הפרמטרים הללו אנו מתעניינים רק ב- Roll and Pitch. שווה הרול יגיד לנו על הנטייה ב ציר ה- X ואת ערך Pitch יגיד לנו על הנטייה ב Y-Axis. עכשיו, אחרי שהבנו את היסודות, אנו יכולים להתחיל לתכנת את Arduino לקרוא את הערכים הללו ולשלוח אותו ל- Arduino באמצעות Bluetooth. כמו תמיד נתחיל בהכללת כל הספריות הדרושות לפרויקט זה
#לִכלוֹל
לאחר מכן אנו מאותחלים את סדרת התוכנה עבור מודול Bluetooth. זה אפשרי בגלל ספריית התוכנה הסדרתית בארדואינו, ניתן לתכנת את סיכות ה- IO לעבוד כסיכות סדרתיות. כאן אנו משתמשים בסיכות הדיגיטליות D10 ו- D11, כאשר D10 id Rx ו- D11 הוא Tx.
SoftwareSerial BT (10, 11); // RX, TX
לאחר מכן אנו מאתחלים את המשתנים והאובייקטים הדרושים לתוכנית ועוברים לפונקציית setup () שם אנו מציינים את קצב השידור עבור צג סידורי ו- Bluetooth. עבור HC-05 ו- HC-06 קצב השידור הוא 9600 ולכן חובה להשתמש בו. לאחר מכן אנו בודקים אם אוטובוס ה- IIC של ארדואינו מחובר ל- MPU6050 אם לא אנו מדפיסים הודעת אזהרה ונשארים שם כל עוד המכשיר מחובר. לאחר מכן, אנו מכיילים את הג'ירו ומגדירים את ערכי הסף שלו באמצעות הפונקציות המתאימות לו כמוצג להלן.
הגדרת חלל () {Serial.begin (115200); BT.begin (9600); // התחל את תקשורת ה- Bluetooth ב- 9600 baudrate // אתחל את MPU6050 תוך כדי (! mpu.begin (MPU6050_SCALE_2000DPS, MPU6050_RANGE_2G)) {Serial.println ("לא ניתן למצוא חיישן MPU6050 חוקי, בדוק חיווט!"); עיכוב (500); } mpu.calibrateGyro (); // כיול גירוסקופ במהלך ההתחלה mpu.setThreshold (3); // שולט ברגישות}
השורה " mpu.calibrateGyro ();" כיול את ה- MPU6050 למיקום בו הוא ממוקם כעת. ניתן לקרוא לקו זה מספר פעמים בתוך התוכנית בכל פעם שיש לכייל את ה- MPU6050 וכל האובדן אמור להיות מוגדר לאפס. "Mpu.setThreshold (3);" פונקציה זו שולטת עד כמה הערך משתנה לתנועה בחיישן, ערך נמוך מדי יגדיל את הרעש, אז היזהר תוך כדי התעסקות עם זה.
בתוך לולאת הריק (), אנו קוראים שוב ושוב את הערכים של גירוסקופ וחיישן טמפרטורה מחשבים את ערך המגרש, הגלגול והסיבוב, שולחים אותו למודול ה- Bluetooth. בשתי השורות הבאות נקרא ערכי הג'ירו הגולמיים וערך הטמפרטורה
נורמה וקטורית = mpu.readNormalizeGyro (); temp = mpu.readTemperature ();
לאחר מכן, אנו מחשבים את גובה הצליל, הגלגול והמפה על ידי הכפלתו עם שלב הזמן והוספנו לערכים הקודמים. Timestep אינו אלא המרווח בין קריאות רצופות.
המגרש = המגרש + הנורמה. YAxis * timeStep; roll = roll + norm.XAxis * timeStep; yaw = yaw + norm.ZAxis * timeStep;
כדי להבין טוב יותר את שלב הזמן בואו נסתכל על השורה הבאה. קו זה ממוקם כדי לקרוא את הערכים מ- MPU6050 בדיוק במרווח של 10mS או 0.01 שנייה. אז אנו מכריזים על ערך timeStep כ- 0.01. והשתמש בשורה שלמטה כדי להחזיק את התוכנית אם יש עוד זמן. (millis () - timer ()) נותן את הזמן שנדרש לביצוע התוכנית עד כה. אנחנו פשוט מחסירים אותו עם 0.01 שניות ובמשך הזמן הנותר פשוט מחזיקים שם את התוכנית שלנו באמצעות פונקציית ההשהיה.
עיכוב ((timeStep * 1000) - (מיליס () - טיימר));
לאחר שסיימנו לקרוא ולחשב את הערכים, נוכל לשלוח אותם לטלפון שלנו באמצעות Bluetooth. אבל יש כאן מלכוד. מודול Bluetooth בו אנו משתמשים יכול לשלוח בתים בלבד (8 סיביות) המאפשרים לנו לשלוח מספרים רק בין 0 ל 255. לכן עלינו לפצל את הערכים שלנו ולמפות אותו בטווח זה. זה נעשה על ידי השורות הבאות
אם (גליל> -100 && רול <100) x = מפה (גליל, -100, 100, 0, 100); אם (המגרש> -100 && המגרש <100) y = מפה (המגרש, -100, 100, 100, 200); אם (temp> 0 && temp <50) t = 200 + int (temp);
כפי שאתה יכול להבין את זה, ערך הגלגול ממופה ל- 0 עד 100 למשתנה x והמגרש ממופה ל- 100 עד 200 למשתנה y והטמפ ממופה ל- 200 ומעלה למשתנה t. אנו יכולים להשתמש באותו מידע כדי לאחזר את הנתונים ממה ששלחנו. לבסוף אנו כותבים ערכים אלה באמצעות Bluetooth באמצעות השורות הבאות.
BT.write (x); BT.write (y); BT.write (t);
אם הבנת את התוכנית השלמה, גלול מטה כדי להעיף מבט בתוכנית והעלה אותה ללוח Arduino.
הכנת יישום Android באמצעות עיבוד:
אפליקציית האנדרואיד עבור שיפוע מד Arduino זה פותחה באמצעות IDE Processing. זה דומה מאוד לארדואינו וניתן להשתמש בו ליצירת יישום מערכת, אפליקציית אנדרואיד, עיצובי אתרים ועוד. השתמשנו כבר בעיבוד כדי לפתח כמה מהפרויקטים המגניבים האחרים שלנו המפורטים להלן
- משחק פינג פונג באמצעות ארדואינו
- רדיו FM מבוקר בטלפון חכם באמצעות עיבוד.
- מערכת מכ"ם Arduino באמצעות חיישן עיבוד וקולי
עם זאת, לא ניתן להסביר את הקוד המלא כיצד ליצור יישום זה. אז יש לך שתי דרכים לעבור על זה. או שתוכל להוריד את קובץ ה- APK מהקישור למטה ולהתקין את יישום האנדרואיד ישירות בטלפון שלך. או גלול למטה כדי למצוא את קוד העיבוד השלם ולמד בעצמך כיצד הוא עובד
בתוך קובץ ה- ZIP, אתה יכול למצוא תיקייה בשם data המורכבת מכל התמונות ומקורות אחרים שאותם יש לטעון ליישום האנדרואיד. השורה שלמטה מחליטה לאיזה שם Bluetooth צריך להתחבר אוטומטית
bt.connectToDeviceByName ("HC-06");
בתוך פונקציית הציור () , הדברים יבוצעו שוב ושוב כאן אנו מציירים את התמונות, מציגים את הטקסט ומנפישים את הסורגים על בסיס הערכים של מודול ה- Bluetooth. אתה יכול לבדוק מה קורה בתוך כל פונקציה על ידי קריאה דרך התוכנית.
חלל ציור () // הלולאה האינסופית {רקע (0); imageMode (CENTER); תמונה (לוגו, רוחב / 2, גובה / 1.04, רוחב, גובה / 12); טוען תמונות(); textfun (); getval (); }
לסיום, יש עוד דבר אחד חשוב להסביר, זכרו שאנו מחלקים את ערך המגרש, הגליל והטמפ 'ל -0 עד 255. אז הנה אנחנו מחזירים אותו שוב לערכים רגילים על ידי מיפוי הפוך לערכים רגילים.
אם (מידע <100 && מידע> 0) x = מפה (מידע, 0, 100, - (רוחב / 1.5) / 3, + (רוחב / 1.5) / 3); // x = מידע; אחרת אם (מידע <200 && מידע> 100) y = מפה (מידע, 100, 200, - (רוחב / 4.5) /0.8, + (רוחב / 4.5) /0.8); // y = מידע; אחרת אם (מידע> 200) temp = מידע -200; println (temp, x, y);
ישנן דרכים טובות בהרבה להעביר נתונים ממודול Bluetooth לטלפון, אך מכיוון שזה רק פרויקט תחביב התעלמנו מהם, אתה יכול לחפור עמוק אם אתה מעוניין.
עבודה של מפל השיפוע Arduino:
אחרי שתתכונן עם החומרה והיישום, הגיע הזמן ליהנות עם מה שבנינו. העלה את קוד Arduino ללוח, אתה יכול גם להסיר את ההערות על שורות Serial.println ולבדוק אם החומרה עובדת כצפוי באמצעות הצג הסדרתי. בכל מקרה, זה אופציונלי לחלוטין.
לאחר העלאת הקוד, הפעל את אפליקציית Android בטלפון הנייד שלך. היישום אמור להתחבר אוטומטית למודול ה- HC-06 שלך ויציג "התחבר אל: HC-06" בחלק העליון של היישום כמוצג להלן.
בתחילה, כל הערכים יהיו אפסיים למעט ערך הטמפרטורה. הסיבה לכך היא שהארדואינו כיול את ה- MPU-6050 למיקום זה כהפניה, כעת ניתן להטות את החומרה ולבדוק שהערכים ביישום הנייד משתנים גם יחד עם האנימציה. את העבודה המלאה של היישום תוכלו למצוא בסרטון המופיע להלן. אז עכשיו תוכלו למקם את קרש הלחם בכל מקום ולבדוק אם המשטח מפולס לחלוטין.
מקווה שהבנת את הפרויקט ולמדת ממנו משהו שימושי. אם יש לך ספק, אנא השתמש בסעיף ההערות שלמטה או בפורומים כדי לפתור את הבעיה.