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

לוח Servodriver עם Python-GUI ו- Arduino: 5 שלבים
לוח Servodriver עם Python-GUI ו- Arduino: 5 שלבים

וִידֵאוֹ: לוח Servodriver עם Python-GUI ו- Arduino: 5 שלבים

וִידֵאוֹ: לוח Servodriver עם Python-GUI ו- Arduino: 5 שלבים
וִידֵאוֹ: Control Position and Speed of Stepper motor with L298N module using Arduino 2024, נוֹבֶמבֶּר
Anonim
לוח Servodriver עם Python-GUI ו- Arduino
לוח Servodriver עם Python-GUI ו- Arduino

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

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

זה עובד בצורה מפתיעה היטב, אפילו עם 6 סרוווס שמתרוצצים מעמדה אחת לאחרת בלופ.

כמו כן, זהו פרויקט נחמד ללמוד על תקשורת בין Python-GUI ל- Arduino באמצעות Serial.

שלב 1: מה שאתה צריך …

לפרויקט זה תזדקק לדברים הבאים:

חוּמרָה

  • ארדואינו ננו עם כבל. השתמשתי בשיבוט, וקוד ה- Python למעשה מצפה לשבב CH340 של שיבוט
  • לוח אב טיפוס. 7x5 ס"מ מספיק
  • כמה כותרות וסיכות של 54 מ"מ
  • 1-6 סרוו
  • ספק כוח לסרוווס (השתמשתי בחבילה עם 4 סוללות)

תוֹכנָה

  • Python 3:
  • מנהל התקן USB עבור שבבי CH340: פשוט חפש בגוגל מנהלי התקנים עבור מנהלי התקנים CH340
  • Arduino IDE:

שלב 2: הלחמת הלוח

הלחמת הלוח
הלחמת הלוח

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

  • שורות 3 הפינים מחוברות לסיכה דיגיטלית 3, 5, 6, 9, 10 ו -11 של ננו הארדואינו.
  • החוט האדום מחובר לסיכה 5V של הארדואינו
  • החוט השחור מחובר לסיכת ה- GND של הארדואינו
  • זוג הפינים מתחת לשורות 3 הפינים נועדו לחיבור ספק כוח רגיל של מקלט RC, אתה יכול להוסיף מחברים כרצונך, כמו מסופי הברגה, מחברי XT, JST או … או …

אישית, אני אוהב שורות של כותרות נשיות להכניס את הארדואינו, אבל זה תלוי בך.

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

שלב 3: הגדרת הארדואינו

התקן את ה- Arduino IDE והבהב את ה- Nano Arduino עם הסקיצה המצורפת.

שלב 4: הגדרת פייתון

הגדרת פייתון
הגדרת פייתון

התקן את Python 3 לאחר הורדתו. הקפד לבדוק את האפשרות ליצירת משתנה "PATH".

עליך להתקין עוד שתי חבילות באמצעות pip. לשם כך, הקש על מקש "Windows", הקלד "cmd" ולחץ על "enter". בשורת הפקודה הקלד את הפקודות הבאות:

  • pip להתקין סדרתי
  • piip להתקין pyserial
  • pip להתקין tkinter

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

פתח את ה- Python-Script ב- IDE והפעל אותו, או הפעל אותו ישירות מהמסוף.

בתפריט הנפתח, אתה יכול לבחור בין שני מצבים, "לך ישר" ו"פינג פונג ":

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

שלב 5: היכן שהקסם קורה

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

עכשיו, מה קורה בתוכנית Python?

קודם כל, התוכנית בודקת מה מחובר ליציאות ה- COM בשורה זו ושומרת אותו ברשימה:

self. COMPortsList = list (serial.tools.list_ports.comports ())

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

עבור p ב- self. COMPortsList: אם "CH340" ב- p [1]: # מחפש self שיבוט Arduino. COMPort = p [0] אחר: עבר self. Ser = serial. Serial (self. COMPort, 57600)

החיבור הטורי נוצר עם יציאת ה- COM עם קצב שידור של 57600.

ומה עושה קוד הארדואינו? ובכן, מכיוון שלארדואינו יש רק יציאת COM אחת, החיבור הטורי הוא רק שורה אחת:

Serial.begin (57600);

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

Command = struct.pack ('> B', self. Place) # המשתנה int 'self. Place' הופך לבייט

self. Ser.write (Command) # כתיבת הבייט בפקודה Serial-Port = int (self. ServoPos.get ()) // 10 # קריאת הקלט מהשדה והזנת int Command = struct.pack (' > B ', Command) # הפיכת ה- int בתא עצמי. Ser.write (Command) # כתיבת הבייט ביציאה הסידורי

כמו כן, ניתוח הנתונים לוקח זמן (למשל פירוש ארבעה בתים "1", "2", "3" ו- "0" כ- int 1230, לא כארבעה תווים שונים) ועדיף לעשות זאת לא על הארדואינו.

בצד Arduino, המידע שנשלח נאסף כדלקמן:

אם (Serial.available ()> 1) {// אם יש נתונים סדרתיים זמינים, הלולאה מוזנת c = Serial.read (); // הבייט הראשון (מספר סרוו) נשמר במשתנה Micros = Serial.read (); // מיקום הסרוו נשמר כאן מיקרו = מיקרו * 10; }

מוּמלָץ: