- דרישות קדם:
- הרעיון מאחורי הפרויקט:
- תרשים מעגל:
- תכנות את Arduino שלך:
- תכנות את הפייתון שלך:
- מחשב מבוקר במחווה בפעולה:
לאחרונה מחשבים ניידים או מחשבים בשליטת המחווה הופכים מפורסמים מאוד. טכניקה זו נקראת Leap motion המאפשרת לנו לשלוט בפונקציות מסוימות במחשב / מחשב נייד שלנו פשוט על ידי הנפת ידנו לפניה. זה מאוד מגניב וכיף לעשות את זה, אבל המחשבים הניידים האלה באמת מתומחרים מאוד גבוה. אז בפרויקט זה, ננסה לבנות מחשב נייד / מחשב לבקרת מחוות משלנו על ידי שילוב הכוח של Arduino ו- Python.
נשתמש בשני חיישנים אולטרה סאונד כדי לקבוע את מיקום היד שלנו ולשלוט בנגן מדיה (VLC) בהתבסס על המיקום. השתמשתי בזה לצורך הדגמה, אך לאחר שהבנתם את הפרויקט, תוכלו לעשות הכל על ידי שינוי מספר שורות קוד בלבד ולשלוט ביישום המועדף עליכם בדרך המועדפת עליכם.
דרישות קדם:
כבר כיסינו כמה פרויקטים המשלבים ארדואינו עם פייתון. אז אני מניח שכבר התקנת את Python ואת הספרייה הסדרתית שלה וניסית בהצלחה כמה פרויקטים בסיסיים כמו LED מהבהב. אם לא, אל תדאג אתה יכול לחזור למדריכה זו של Arduino-Python Led Controlling ולהסתדר עם זה. אז וודא שהתקנת Python וספריית pyserial לפני שתמשיך.
הרעיון מאחורי הפרויקט:
הרעיון שעומד מאחורי הפרויקט הוא פשוט מאוד. אנו מציבים שני חיישנים קולי (ארה"ב) על גבי הצג שלנו ונקרא את המרחק בין המסך לידנו באמצעות Arduino, בהתבסס על ערך זה של מרחק נבצע פעולות מסוימות. כדי לבצע פעולות במחשב שלנו אנו משתמשים בספריית Python pyautogui. הפקודות מארדואינו נשלחות למחשב דרך יציאה טורית (USB). לאחר מכן נקרא נתונים אלה על ידי פיתון הפועל במחשב ועל סמך נתוני הקריאה תבוצע פעולה.
תרשים מעגל:
כדי לשלוט במחשב עם תנועות ידיים, פשוט חבר את שני חיישני האולטרה סאונד עם Arduino. אנו יודעים שהחיישן האמריקני עובד עם 5 וולט ומכאן שהם מונעים על ידי ווסת המתח של Arduino. ניתן לחבר את ה- Arduino למחשב / מחשב נייד להפעלת המודול וגם לתקשורת טורית. לאחר סיום החיבורים הצב אותם על הצג שלך כמוצג להלן. השתמשתי בסרט צדדי כפול כדי להדביק אותו על הצג שלי, אבל אתה יכול להשתמש ביצירתיות שלך. לאחר אבטחתו במקום נוכל להמשיך בתכנות.
תכנות את Arduino שלך:
יש לתכנת את הארדואינו לקרוא את מרחק היד מהחיישן האמריקני. התכנית המלאה ניתנת בסוף הדף הזה; ממש למטה נתתי את ההסבר לתוכנית. אם אתה חדש בחיישן אולטרה סאונד, פשוט עברו על מדידת מרחק מבוסס Arduino & אולטרסאונד.
על ידי קריאת ערך המרחק אנו יכולים להגיע לפעולות מסוימות שיש לשלוט בהן באמצעות מחוות, למשל בתכנית זו תכננתי 5 פעולות כהדגמה.
פעולה 1: כאשר שתי הידיים מונחות לפני החיישן במרחק רחוק במיוחד, אז הווידאו בנגן VLC אמור להפעיל / להשהות.
פעולה 2: כאשר יד ימין מונחת מעל החיישן במרחק רחוק מסוים, הסרטון צריך להעביר קדימה צעד אחד.
פעולה 3: כאשר יד שמאל מונחת מעל החיישן במרחק רחוק במיוחד, אז הסרטון אמור לאחור צעד אחד.
פעולה 4: כאשר יד ימין מונחת לפני החיישן במרחק קרוב מסוים ואז אם מועבר לכיוון החיישן הסרטון אמור להתקדם במהירות ואם הסרט מתרחק הסרטון צריך להריץ אחורה.
פעולה 5: כאשר יד שמאל מונחת מעל החיישן במרחק קרוב מסוים ואז אם מועבר לכיוון החיישן, נפח הווידיאו אמור לעלות ואם הוא מתרחק, עוצמת הקול צריכה לרדת.
הבה נראה כיצד נכתבת התוכנית לביצוע הפעולות שלעיל. לכן, כמו כל התוכניות, אנו מתחילים בהגדרת סיכות הקלט / פלט כמוצג להלן. שני החיישנים האמריקניים מחוברים לסיכות הדיגיטליות 2,3,4 ו- 5 ומופעלים באמצעות + 5V סיכה. סיכות ההדק הן סיכת פלט וסיכות הד הן סיכות קלט.
התקשורת הסדרתית בין ארדואינו לפיתון מתבצעת בקצב שידור של 9600.
const int trigger1 = 2; // סיכת הדק של סנסור הראשון const int echo1 = 3; // סיכת הד של סנסור הראשון const int trigger2 = 4; // סיכת הדק של סנסור השני const int echo2 = 5; // סיכת הד של הגדרת הריק השני של ססנור () {Serial.begin (9600); pinMode (trigger1, OUTPUT); pinMode (echo1, INPUT); pinMode (trigger2, OUTPUT); pinMode (echo2, INPUT); }
עלינו לחשב את המרחק בין החיישן ליד בכל פעם לפני שנסיים על פעולה כלשהי. אז עלינו לעשות זאת פעמים רבות, כלומר יש להשתמש בקוד זה כפונקציה. כתבנו פונקציה בשם calc_distance () שתחזיר לנו את המרחק בין החיישן ליד.
/ * ### פונקציה לחישוב מרחק ### * / חלל חישוב מרחק (int trigger, int echo) {digitalWrite (trigger, LOW); עיכוב מיקרו-שניות (2); digitalWrite (טריגר, HIGH); עיכוב מיקרו-שניות (10); digitalWrite (טריגר, LOW); time_taken = pulseIn (הד, HIGH); dist = time_taken * 0.034 / 2; אם (dist> 50) dist = 50; }
בתוך הלולאה הראשית שלנו אנו בודקים את ערך המרחק ומבצעים את הפעולות שהוזכרו לעיל. לפני כן אנו משתמשים בשני משתנים distL ו- distR המתעדכנים בערך המרחק הנוכחי.
מרחק_חישוב (trigger1, echo1); distL = dist; // קבל מרחק של חיישן שמאל calc_distance (trigger2, echo2); distR = dist; // קבל מרחק של חיישן נכון
מכיוון שאנו מכירים את המרחק בין שני החיישנים, כעת אנו יכולים להשוות אותו לערכים מוגדרים מראש ולהגיע לפעולות מסוימות. לדוגמא אם שתי הידיים ממוקמות במרחק של 40 מק 'אז אנו מנגנים / מפסיקים את הסרטון. כאן המילה "הפעל / השהה" תישלח דרך היציאה הטורית
if ((distL> 40 && distR> 40) && (distL <50 && distR <50)) // זיהוי שתי הידיים {Serial.println ("הפעל / השהה"); עיכוב (500);}
אם יד ימין לבדה ממוקמת לפני המודול, אז אנחנו מקדימים את הווידאו צעד אחד, ואם זה יד שמאל, אחורה צעד אחד אחורה. בהתבסס על הפעולה, כאן המילה "אחורה אחורה" או "קדימה" תישלח דרך היציאה הטורית
if ((distL> 40 && distL <50) && (distR == 50)) // זיהוי יד שמאל {Serial.println ("Rewind"); עיכוב (500);} אם ((distR> 40 && distR <50) && (distL == 50)) // זיהוי יד ימין {Serial.println ("קדימה"); עיכוב (500);}
אם אנו מבקשים בקרה מפורטת על עוצמת הקול והמסלול אנו משתמשים במתודולוגיה שונה כדי למנוע טריגרים כוזבים. כדי לשלוט בעוצמת הקול עלינו להניח את יד שמאל בערך. במרחק של 15 ס"מ, אז אתה יכול להזיז אותו לכיוון החיישן כדי להקטין את עוצמת הקול להזיז אותו מהחיישן כדי להגדיל את עוצמת הקול. הקוד עבור אותו מוצג להלן. בהתבסס על הפעולה, כאן המילה "Vup" או "Vdown" תישלח דרך היציאה הטורית
// נעילת שמאל - מצב בקרה אם (distL> = 13 && distL <= 17) {עיכוב (100); // זמן אחיזת יד מחשבון_טריגר (trigger1, echo1); distL = dist; אם (distL> = 13 && distL <= 17) {Serial.println ("נעול שמאל"); בעוד (distL <= 40) {calc_distance (trigger1, echo1); distL = dist; אם (distL <10) // יד נדחפה פנימה {Serial.println ("Vup"); עיכוב (300);} אם (distL> 20) // יד משוכה {Serial.println ("Vdown"); עיכוב (300);}}}}
אנו יכולים להשתמש באותה שיטה גם עבור החיישן בצד ימין, כדי לשלוט במסלול הווידיאו. כלומר אם נעביר את יד ימין לכיוון החיישן הוא ימהיר את הסרט קדימה ואם תזיזו אותו מהחיישן הוא יחזיר את הסרט לאחור. בהתבסס על הפעולה, כאן המילה "אחורה אחורה" או "קדימה" תישלח דרך היציאה הטורית
כעת אתה יכול לקרוא את הקוד השלם עבור מחשב מבוקר מחווה זה הניתן בסוף העמוד ולנסות להמעיט בערכו בכללותו ואז להעתיק אותו ל- IDE של Arduino.
תכנות את הפייתון שלך:
תוכנית הפיתון לפרויקט זה היא פשוטה מאוד. אנחנו רק צריכים ליצור תקשורת טורית עם Arduino באמצעות קצב השידור הנכון ואז לבצע כמה פעולות מקלדת בסיסיות. הצעד הראשון עם פיתון יהיה להתקין את מודול p yautogui . הקפד לבצע שלב זה מכיוון שהתוכנית לא תפעל ללא מודול pyautogui.
התקנת מודול pyautogui עבור Windows:
בצע את השלבים הבאים כדי להתקין את pyautogui עבור Windows. אם אתה משתמש בפלטפורמות אחרות השלבים גם יהיו דומים פחות או יותר. ודא שהמחשב / המחשב הנייד שלך מחובר לאינטרנט והמשך בצעדים הבאים
שלב 1: פתח את שורת הפקודה של Windows ושנה את הספרייה לתיקיה שבה התקנת פייתון. כברירת מחדל הפקודה צריכה להיות
cd C: \ Python27
שלב 2: בתוך ספריית הפיתון שלך השתמש בפקודה python –m pip install – pip up to upgrade כדי לשדרג את ה- pip שלך. פיפ הוא כלי בפייתון שעוזר לנו להתקין מודולי פיתון בקלות. לאחר שדרוג המודול הזה (כפי שמוצג בתמונה למטה) המשך לשלב הבא.
python –m pip install – pip up upgrade
שלב 3: השתמש בפקודה " python –m pip install pyautogui " כדי להתקין את מודול pyautogui. ברגע שהתהליך מצליח אתה אמור לראות להלן מסך שמשהו דומה לזה.
python –m pip install – pip up upgrade
כעת, לאחר שהמודול pyautogui ומודול ה- pyserial (שהותקן במדריך הקודם) הותקנו בהצלחה עם הפיתון, נוכל להמשיך בתוכנית הפיתון. קוד פיתון מלא ניתן בסוף ההדרכה אבל ההסבר אותו הוא כדלקמן.
הבה נייבא את כל שלושת המודולים הנדרשים לפרויקט זה. הם פיאוטוגוי, פיתון סדרתי וזמן.
ייבא # Serial סידורי המיובא לזמן ייבוא תקשורת טורית # נדרש להשתמש בפונקציות עיכוב ייבוא pyautogui
לאחר מכן אנו מקשרים קשר עם הארדואינו דרך יציאת COM. במחשב שלי ה- Arduino מחובר ל- COM 18. השתמש במנהל ההתקנים כדי למצוא לאיזו יציאת COM ה- Arduino שלך מחובר ולתקן את השורה הבאה בהתאם.
ArduinoSerial = serial.Serial ('com18', 9600) # צור אובייקט יציאה טורית בשם arduinoSerialData time.sleep (2) # המתן למשך 2 שניות עד שהתקשורת תתבסס
בתוך הלולאה בזמן האינסופי, אנו מאזינים שוב ושוב ליציאת ה- COM ומשווים את מילות המפתח לכל יצירה שהוגדרה מראש ונעשה לחיצות לוח מקשים בהתאם.
בעוד 1: נכנס = str (ArduinoSerial.readline ()) # קרא את הנתונים הטוריים והדפיס אותם כהדפסת שורה נכנסת אם 'הפעל / השהה' בכניסה: pyautogui.typewrite (, 0.2) אם 'Rewind' בכניסה: pyautogui. מקש חם ('ctrl', 'שמאל') אם 'קדימה' בכניסה: pyautogui.hotkey ('ctrl', 'ימין') אם 'Vup' בכניסה: pyautogui.hotkey ('ctrl', 'למטה') אם ' Vdown 'בכניסה: pyautogui.hotkey (' ctrl ',' up ')
כפי שאתה יכול לראות, כדי ללחוץ על מקש עלינו פשוט להשתמש בפקודה "pyautogui.typewrite (, 0.2)" שתלחץ על מרחב המקשים למשך 0.2 שניות. אם אתה זקוק למקשים חמים כמו ctrl + S, תוכל להשתמש בפקודת המקשים החמים "pyautogui.hotkey ('ctrl', 's')".
השתמשתי בשילובים אלה מכיוון שהם עובדים על נגן המדיה VLC אתה יכול לצבוט אותם בכל דרך שתרצה ליצור יישומים משלך כדי לשלוט בכל דבר במחשב עם מחוות.
מחשב מבוקר במחווה בפעולה:
בצע את החיבורים כמוגדר לעיל והעלה את קוד Arduino על לוח Arduino שלך. לאחר מכן השתמש בסקריפט הפיתון שלמטה והפעל את התוכנית במחשב הנייד / המחשב שלך.
עכשיו אתה יכול לנגן כל סרט במחשב שלך באמצעות נגן המדיה VLC ולהשתמש ביד שלך כדי לשלוט בסרט כפי שמוצג בסרטון המופיע להלן.
מקווה שהבנתם את הפרויקט ונהניתם לשחק איתו. זו רק הדגמה ואתה יכול להשתמש ביצירתיות שלך כדי לבנות הרבה יותר דברים נשלטים על מחוות סביב זה. ספר לי אם זה היה שימושי ומה תיצור באמצעות זה בסעיף ההערות ואשמח לדעת זאת.