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

רובר מבוקר אינטרנט: 14 שלבים (עם תמונות)
רובר מבוקר אינטרנט: 14 שלבים (עם תמונות)

וִידֵאוֹ: רובר מבוקר אינטרנט: 14 שלבים (עם תמונות)

וִידֵאוֹ: רובר מבוקר אינטרנט: 14 שלבים (עם תמונות)
וִידֵאוֹ: RANGE ROVER 2022 חדש | כל הפרטים והפרטים! 2024, נוֹבֶמבֶּר
Anonim
רובר מבוקר אינטרנט
רובר מבוקר אינטרנט
רובר מבוקר אינטרנט
רובר מבוקר אינטרנט

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

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

לפרויקט כזה נזדקק למחשב לוח יחיד מוצק טוב ובשביל הבוט הזה בחרתי להשתמש ב- Raspberry Pi (RPI) מחשב מבוסס לינוקס. ה- RPI (ו- Linux) נותן לנו הרבה אפשרויות קידוד ופייתון ישמש את הצד לקידוד. עבור ממשק האינטרנט אני משתמש ב- Flask, מסגרת אינטרנט קלילה עבור Python.

כדי להניע את המנועים, בחרתי ב- RoboClaw 2x5a. היא מאפשרת תקשורת סדרתית פשוטה לפיקוד עליה ועובדת היטב עם ה- RPI והמנועים על הגוזן.

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

שלב 1: דרושה חומרה

דרושה חומרה
דרושה חומרה
דרושה חומרה
דרושה חומרה
דרושה חומרה
דרושה חומרה
דרושה חומרה
דרושה חומרה
  • מארז Actobotics Gooesneck או תחליף מתאים לבחירתכם
  • פטל פאי לבחירתך (או שיבוט) - דגם RPI B משמש בבוט זה, אך כל אחד עם לפחות שתי יציאות USB יעבוד
  • צלחת סרוו סטנדרטית B x1
  • סוגר תעלת זווית אחת 90 ° x1
  • נהג מנוע RoboClaw 2x5a
  • סרוו S3003 או דומה בגודל סטנדרטי
  • קרש לחם קטן או מיני לחם
  • חוטי מגשר נקבה לנקבה
  • חוטי מגשר זכר לנקבה
  • מצלמת אינטרנט (אופציונלי) - אני משתמש ב- Logitech C110, והנה רשימה של מצלמות נתמכות עבור ה- RPI
  • מקור כוח 5v-6v עבור כוח סרוו
  • סוללת 7.2v-11.1v להפעלת מנוע הכונן
  • 5V 2600mah (ומעלה) בנק כוח USB ל- RPI
  • מתאם Wifi USB

בבוט שלי אני משתמש בגלגלים בגודל 4 אינץ 'כדי להפוך אותו לקצת יותר שטח-פנימי. בשביל אפשרות זו תזדקק ל:

  • 4 "גלגל כבד x2
  • רכזת בורג סט 4 מ"מ (0.770 אינץ ') x2

שלב 2: הרכבת המארז

הרכבת המארז
הרכבת המארז
הרכבת המארז
הרכבת המארז
הרכבת המארז
הרכבת המארז

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

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

שלב 3: הרכבת האלקטרוניקה

הרכבת האלקטרוניקה
הרכבת האלקטרוניקה
הרכבת האלקטרוניקה
הרכבת האלקטרוניקה
הרכבת האלקטרוניקה
הרכבת האלקטרוניקה

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

שלב 4: הוספת מצלמת האינטרנט

הוספת מצלמת הרשת
הוספת מצלמת הרשת
הוספת מצלמת הרשת
הוספת מצלמת הרשת
הוספת מצלמת הרשת
הוספת מצלמת הרשת

קח את סוגר 90 מעלות, רכזת סרוו קלה וארבעה (4) מברגי.3125 לשלב זה:

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

השתמש בתמונות למדריכים במידת הצורך.

שלב 5: חיווט הכל

חיווט הכל
חיווט הכל
חיווט הכל
חיווט הכל
חיווט הכל
חיווט הכל
חיווט הכל
חיווט הכל

החיווט די קדימה עבור הרובוט הזה.

המוטורים:

הלחמות מוליכות על שני המנועים אם עדיין לא עשית זאת

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

  • חבר את חוטי המנוע במנוע השמאלי לערוץ M1A ו- M1B
  • חבר את חוטי המנוע במנוע הימני לערוץ M2A ו- M2B

חיבורי קרקע (GND):

  • חבר סיכת הארקה אחת על RoboClaw ללוח המגשר הקרקע. קו הסיכה הקרקע ברובוקלו הכי קרוב למרכז (ראה תמונה)
  • חבר את PIN 6 ב- RPI ללוח המגשר. עיין בתמונת הכותרת של RPI לצורך הקצאת סיכות.
  • חבר את ה- GND מחבילת סוללות הסרוו לאחד הפינים בלוח המגשר.
  • הפעל חוט מגשר מלוח המגשר אל חוט ה- GND של סרוווס.

RPI ל- RoboClaw:

חבר את סיכת TXP RIO GPIO14 לסיכה של RoboClaw S1

כּוֹחַ:

  • חבר את חוט ה- POS מסוללת הסרווו אל מוביל ה- POS של ה- servos
  • חבר את חוט ה- POS מסוללת המנוע ל- POS (+) של מסוף הכניסה של מנוע RoboClaw. נשאיר את מסוף ה- GND מנותק לעת עתה.

שלב 6: הגדרת ה- RPI

הגדרת ה- RPI
הגדרת ה- RPI

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

כדי לקבל את הגדרת ה- RPI שלך, עיין בדפים הבאים:

  • התקנה בסיסית של RPI
  • מדריך התחלה מהירה של RPI
  • NOOBS הגדרת גילדה

לדפי קפיצה כלליים, הדף הראשי של RPI ודפי eLinux הם מקומות מצוינים להתחיל בהם.

עיין בקישור זה להתקנת Wi -Fi כללית של RPI.

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

  • הגדרת מצלמת RPI
  • התקנת מצלמת eLinix RPI

הזרמת וידאו:

יש כמה דרכים לגרום להזרמת וידאו לעבוד על RPI, אבל השיטה שאני מעדיף היא באמצעות Motion.

כדי להתקין אותו ב- RPI שלך הפעל זאת: sudo apt-get install motion

מדריך זה עובר על הגדרת אותו גם לסטרימינג.

שלב 7: הגדרת היציאה הטורית של RPI

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

שלב 8: התקנת מודולי פייתון

יהיה עליך להתקין פייתון ב- RPI כמו גם על פיפ ההתקנה של חבילת פייתון.

כדי להתקין pip לעשות:

  1. sudo apt-get להתקין python-setuptools
  2. sudo easy_install pip

לאחר מכן:

  1. בקבוק ההתקנה של sudo pip
  2. sudo pip התקן pyserial
  3. sudo pip התקן RPIO

אלה יהיו כל המודולים הדרושים להפעלת הקוד.

שלב 9: הגדרת RoboClaw

יש לי את קוד הרובוט מדבר עם RoboClaw במצב סידורי סטנדרטי ב -19200 שידור.

כדי להגדיר את RoboClaw לשם כך בצע:

  1. לחץ על כפתור "MODE" ברובוקלאו
  2. לחץ על כפתור ההגדרה עד שהנורית מהבהבת 5 (חמש) פעמים בין העיכובים
  3. לחץ על כפתור "LIPO" לאחסון
  4. לאחר מכן לחץ על כפתור "SET" עד שהנורית מהבהבת 3 (שלוש) פעמים בין העיכובים
  5. לחץ על כפתור LIPO לאחסון

זהו זה להגדרת בקר המנוע. עיין בקובץ ה- pdf המקושר למעלה לעיל למידע נוסף במידת הצורך.

שלב 10: התקנת תוכנית/קבצים של רובר

הורד והעתק את הקובץ rover.zip ל- RPI שלך בספריית המשתמש שלך ב- pi.

אם אתה מפעיל Linux או Mac, תוכל לעשות זאת באמצעות 'scp':

scp ~/location/of/the/file/rover.zip pi@your_rpi_ip:/~

עבור Windows, תוכל להוריד ולהשתמש ב- pscp ולאחר מכן בצע:

pscp /location/of/the/file/rover.zip pi@your_rpi_ip:/~

לאחר העתקת ה- zipfile ל- RPI, היכנס אליו כמשתמש pi.

עכשיו רץ:

לפתוח rover.zip

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

  • restrover.py (קוד הפיתון של הרובוט)
  • סטטי (מחזיק את קבצי התמונות של הכפתורים בדף הבקרה)
  • תבניות (מכיל את קובץ index.htlm, דף האינטרנט של הפקד)

אם אתה משתמש במצלמת אינטרנט, שנה את השורה הקרובה לתחתית הקובץ index.html בתיקיית התבנית. שנה את כתובת האתר בשורת IFRAME כך שתתאים לכתובת ה- src של זרם הווידאו שלך.

שלב 11: הפעלת Bot Up

הפעלת Bot Up
הפעלת Bot Up

חבר את מתח ה- USB ל- RPI.

כדי להפעיל את קוד הבוט, היכנס כמשתמש pi והפעל:

  • תקליטור רובר
  • sudo python restrover.py

אם הכל בסדר, אתה אמור לראות מסך הדומה לתמונה בשלב זה

אם אתה רואה שגיאות או בעיות, יהיה עליך לתקן אותן לפני שתמשיך.

כעת, חבר את חוט ה- GND (-) למסוף NEG (-) בכניסת החשמל של מנוע RoboClaw.

שלב 12: גישה לדף בקרת הבוט

גישה לדף בקרת הבוט
גישה לדף בקרת הבוט
גישה לדף בקרת הבוט
גישה לדף בקרת הבוט

לאחר הפעלת סקריפט הפיתון של הרובוט, הפעל את RoboClaw ולאחר מכן נווט אל ה- IP של ה- RPI שלך כמו:

your_rpi_ip

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

לאחר שנמצא בדף, אתה מוכן לשלוט בבוט.

הרובוט יתחיל בהגדרת "ריצת מד" ובמהירות בינונית.

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

המפתחות הם:

  • w - קדימה
  • z - הפוך/לאחור
  • א - פנייה שמאלה ארוכה
  • s - סיבוב ימינה ארוך
  • q - סיבוב קצר שמאלה
  • e - סיבוב קצר ימינה
  • 1 - מצלמת פאן שמאלה
  • 2 - מצלמת פאן ימינה
  • 3 - מחבת מלאה שמאל
  • 4 - מחבת ימנית מלאה
  • / - מצלמה ביתית/ מרכזית
  • h - עצור/עצור רובוט

יש חיץ עיכוב של חצי שניות בין הפקודות שנשלחות. עשיתי זאת כדי לחסל פקודות חוזרות ולא רצויות. אתה כמובן יכול להסיר את זה מהקוד אם תרצה (ב- index.html)

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

שלב 13: קוד Python/Flask

בוט זה משתמש ב- Python ובמסגרת האינטרנט Flask. תוכל ללמוד עוד על בקבוק כאן אם אתה מעוניין בכך.

ההבדל הגדול מאפליקציית Flask ומסקריפט Python רגיל הוא @app.route class/שיטה המשמשת לביצוע הטיפול ב- URI. חוץ מזה זה פייתון די רגיל לרוב.

#!/usr/bin/env python

# # רובר Wifi/אינטרנט מונע # # נכתב על ידי סקוט ביזלי - 2015 # # משתמש ב- RPIO, pyserial ובבקבוק # זמן ייבוא סדרתי של ייבוא מ- RPIO ייבוא PWM מתוך בקבוק ייבוא בקבוקים, render_template, בקשת אפליקציה = בקבוק (_name_, static_url_path = ") # התחבר ליציאת הקומקום כדי לדבר עם בקר המנוע של רובוקלאו נסה: # שנה את קצב השידור כאן אם הוא שונה מ- 19200 roboclaw = serial. Serial ('/dev/ttyAMA0', 19200) למעט IOError: print ("יציאת Comm לא נמצא ") sys.exit (0) # משתני בקרת מהירות והנעה last_direction = -1 speed_offset = 84 turn_tm_offset = 0.166 run_time = 0.750 # Servo_pos = home servo_pos = 1250 servo = PWM. Servo () servo.set_servo (18, servo_pos) # התעכבות קטנה ליישוב זמן הזמן. שינה (3) # # מטפלים ב- URI - כל פעולות דף הבוט נעשות כאן # # שלח את דף הבקרה של הרובוטים (דף הבית) @app.route ("/") def index (): return render_template ('index.html', name = None) @app.route ("/קדימה") def forward (): global_direction global, run_ti אני מדפיס "קדימה" go_forward () last_direction = 0 # שינה 100ms + ריצה_זמן time.sleep (0.100 + run_time) # אם לא רציף, אז עצור לאחר עיכוב אם run_time> 0: last_direction = -1 עצור () החזר "בסדר" @ app.route ("/לאחור") def לאחור (): global_direction global, run_time הדפסה "אחורה" go_backward () last_direction = 1 # שינה 100 ms + run_time time.sleep (0.100 + run_time) # אם לא רציף, אז עצור לאחר עיכוב אם run_time> 0: last_direction = -1 halt () החזר "בסדר" @app.route ("/left") def left (): global_direction global, turn_tm_offset print "Left" go_left () last_direction = -1 # sleep @1 /2 שניות time.sleep (0.500 - turn_tm_offset) # stop stop () time.sleep (0.100) החזר "בסדר" @app.route ("/ימין") def right (): global_direction global, turn_tm_offset הדפס "ימין" go_right () # שינה @1/2 פעם השנייה. שינה (0.500 - turn_tm_offset) last_direction = -1 # עצור עצירה () time.sleep (0.100) החזר "בסדר" @app.route ("/ltforward") def ltforward (): כיוון אחרון_גלובלי, turn_t הדפס m_offset "סיבוב שמאלה קדימה" go_left () # שינה @1/8 פעם שניה. שינה (0.250 - (turn_tm_offset / 2)) last_direction = -1 # עצור עצירה () time.sleep (0.100) חזור "בסדר" @app.route ("/rtforward") def rtforward (): global_direction global, turn_tm_offset הדפסה "פנייה ימינה קדימה" go_right () # sleep @1/8 פעם שניה. שינה (0.250 - (turn_tm_offset/2)) last_direction = -1 # stop stop () time.sleep (0.100) return "ok" @app.route ("/stop") def stop (): global last_direction הדפס "עצור" stop () last_direction = -1 # שינה 100ms time.sleep (0.100) החזר "ok" @app.route ("/panlt") def panlf (): servo_pos העולמי הדפס "Panlt" servo_pos -= 100 אם servo_pos 2500: servo_pos = 2500 servo.set_servo (18, servo_pos) # שינה 150ms זמן. sleep (0.150) החזר "בסדר" @app.route ("/home") def home (): servo_pos העולמי הדפס "Home" servo_pos = 1250 servo.set_servo (18, servo_pos) # שינה 150ms time.sleep (0.150) חזרה "בסדר" @app.route ("/panfull_lt") def panfull_lt (): הדפסה servo_pos גלובלית "פאן מלא l eft "servo_pos = 500 servo.set_servo (18, servo_pos) # שינה 150ms time.sleep (0.150) החזר" בסדר " @app.route ("/panfull_rt ") def panfull_rt (): servo_pos גלובלי הדפס" pan full right "servo_pos = 2500 servo.set_servo (18, servo_pos) # שינה 150ms time.sleep (0.150) החזר "בסדר" @app.route ("/speed_low") def speed_low (): global_offset, last_direction, turn_tm_offset speed_offset = 42 turn_tm_offset = 0.001 # עדכן את הכיוון הנוכחי כדי לקבל מהירות חדשה אם last_direction == 0: go_forward () if last_direction == 1: go_backward () # sleep 150ms time.sleep (0.150) return "ok" @app.route ("/speed_mid") def speed_mid (): speed_offset גלובלי, last_direction, turn_tm_offset speed_offset = 84 turn_tm_offset = 0.166 # עדכן את הכיוון הנוכחי כדי לקבל מהירות חדשה אם last_direction == 0: go_forward () אם last_direction == 1: go_backward () # שינה 150ms זמן. שינה (0.150)) החזר "בסדר" @app.route ("/speed_hi") def speed_hi (): global_offset, last_direction, turn_tm_offset speed_offset = 126 tur n_tm_offset = 0.332 # עדכן את הכיוון הנוכחי כדי לקבל מהירות חדשה אם last_direction == 0: go_forward () if last_direction == 1: go_backward () # שינה 150ms time.sleep (0.150) החזר "בסדר" @app.route ("/רציף ") def continu (): הדפסה מקיפה של run_time" ריצה מתמשכת "run_time = 0 # שינה 100ms time.sleep (0.100) החזרה" בסדר " @app.route ("/mid_run ") def mid_run (): הדפסה_הפעלה של זמן ריצה" אמצע run "run_time = 0.750 halt () # sleep 100ms time.sleep (0.100) return" ok " @app.route ("/short_time ") def short_time (): global run_time print" ריצה קצרה "run_time = 0.300 halt () # שינה 100 ms time.sleep (0.100) החזר "בסדר" # # פונקציות כונן המנוע # def go_forward (): speed_offset גלובלי אם speed_offset! = 42: roboclaw.write (chr (1 + speed_offset)) roboclaw.write (chr (128 + speed_offset)) else: roboclaw.write (chr (127 - speed_offset)) roboclaw.write (chr (255 - speed_offset)) def go_backward (): global_offset אם speed_offset! = 42: roboclaw.write (chr (127 - speed_offset)) roboclaw.wri te (chr (255 - speed_offset)) else: roboclaw.write (chr (1 + speed_offset)) roboclaw.write (chr (128 + speed_offset)) def go_left (): speed_offset גלובלי אם speed_offset! = 42: roboclaw.write (chr (127 - speed_offset)) roboclaw.write (chr (128 + speed_offset)) else: roboclaw.write (chr (1 + speed_offset)) roboclaw.write (chr (255 - speed_offset)) def go_right (): global_offset off speed_offset! = 42: roboclaw.write (chr (1 + speed_offset)) roboclaw.write (chr (255 - speed_offset)) else: roboclaw.write (chr (127 - speed_offset)) roboclaw.write (chr (128 + speed_offset)) def halt (): roboclaw.write (chr (0)) אם _name_ == "_main_": app.run (host = '0.0.0.0', port = 80, debug = True)

אם אינך רוצה או צריך מידע על איתור באגים מ- Flask, הגדר באגים ל- 'false' בשורת app.run.

אם _name_ == "_ עיקר_":

app.run (host = '0.0.0.0', port = 80, debug = False)

תוכל גם לשנות את היציאה בה שרת http הבקבוק מאזין גם כאן.

שלב 14: שימוש בחומרה אחרת

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

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

מוּמלָץ: