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

צור רובוט מחובר לאינטרנט (תמורת כ -500 $) (באמצעות Arduino ו- Netbook): 6 שלבים (עם תמונות)
צור רובוט מחובר לאינטרנט (תמורת כ -500 $) (באמצעות Arduino ו- Netbook): 6 שלבים (עם תמונות)

וִידֵאוֹ: צור רובוט מחובר לאינטרנט (תמורת כ -500 $) (באמצעות Arduino ו- Netbook): 6 שלבים (עם תמונות)

וִידֵאוֹ: צור רובוט מחובר לאינטרנט (תמורת כ -500 $) (באמצעות Arduino ו- Netbook): 6 שלבים (עם תמונות)
וִידֵאוֹ: זוגות שלא תאמינו שקיימים | טופטן 2024, נוֹבֶמבֶּר
Anonim
צור רובוט מחובר לאינטרנט (תמורת כ -500 $) (באמצעות Arduino ו- Netbook)
צור רובוט מחובר לאינטרנט (תמורת כ -500 $) (באמצעות Arduino ו- Netbook)
צור רובוט מחובר לאינטרנט (תמורת כ -500 $) (באמצעות Arduino ו- Netbook)
צור רובוט מחובר לאינטרנט (תמורת כ -500 $) (באמצעות Arduino ו- Netbook)
צור רובוט מחובר לאינטרנט (תמורת כ -500 $) (באמצעות Arduino ו- Netbook)
צור רובוט מחובר לאינטרנט (תמורת כ -500 $) (באמצעות Arduino ו- Netbook)

מדריך זה יראה לך כיצד לבנות רובוט מחובר אינטרנט משלך (באמצעות מיקרו-בקר Arduino ומחשב Asus eee pc). מדוע תרצה רובוט מחובר לאינטרנט? לשחק איתו כמובן. הניע את הרובוט שלך מכל החדרים או מכל רחבי הארץ, באמצעות לא יותר מסקייפ ודפדפן אינטרנט (אין מה להתקין במחשב השליטה). אחרי כן? התחפר בתוכנה והתאם אותה כרצונך, הוסף GPS כך שתוכל לצפות היכן אתה נוסע על מפה, הוסף חיישני טמפרטורה למפות שיפועי טמפרטורה בביתך, או חיישני סונאר להוספת פקדים על מה שאתה באינטרנט. נהגים יכולים ולא יכולים להיתקל. מאפיינים:

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

לפניכם סרטון מהיר של הרובוט המחובר לאינטרנט שלי שמוציא מהמטבח.

שלב 1: חלקים וכלים

חלקים וכלים
חלקים וכלים

דרושים רק חלקים בודדים: רובוט: רובוט סרוו נשלט על ידי Arduino - (SERB) ($ 175 @ oomlout.com) או (עשה בעצמך)

רובוט בקוד פתוח שמשתמש בבקר מיקרו Arduino כמו המוח שלו

(ניתן להשתמש בכל פלטפורמת רובו סרוו כפולה עם ארדואינו (אפשרות 1) (אנא שלח לי הודעה אם אתה מגלה אפשרויות אחרות) מחשב: Asus eee PC 4G ($ 280) (@Best Buy)

מחשב נייד קטן ולא יקר המתאים למטרה זו

(ניתן להשתמש בכל מחשב נייד (או שולחן עבודה אם אתה רוצה לרוץ עם אקורד) המסוגל להריץ סקיצות עיבוד) שולחן עבודה למחשב נייד: לייזר חתוך אקריליק ($ 25 (@ oomlout)) או (בנה שלב 3 משלך)

כמה חתיכות אקריליק נוספות הנובעות על (SERB) כדי לתת לו שולחן עבודה למחשב הנייד לשבת עליו

אגוזים ובולס: (ניתן להשיג במחסן הביתי)

  • בורג 3 מ"מ x 10 מ"מ (x4)
  • בורג 3 מ"מ x 15 מ"מ (x4)
  • אגוז 3 מ"מ (x8)

שלב 2: חיתוך חתיכות והרכבה

חיתוך חתיכות והרכבה
חיתוך חתיכות והרכבה
חיתוך חתיכות והרכבה
חיתוך חתיכות והרכבה
חיתוך חתיכות והרכבה
חיתוך חתיכות והרכבה
חיתוך חתיכות והרכבה
חיתוך חתיכות והרכבה

ישנן שלוש אפשרויות לקבלת פריטים לשולחן העבודה של המחשב הנייד שלך. אפשרות חיתוך 1: (רכישה ב- oomlout.com)

פריטי שולחן לחיתוך לייזר והחומרה הנדרשת זמינים ב- oomlout תמורת 25 $ (כאן)

אפשרות 2: (חיתוך חותך לייזר משלך או Ponoko.com)

  • הורד את הקובץ למטה (03-WEBB-Acrylic Parts.cdr או 03-WEBB-Acrylic Parts (Ponoko P2).eps)
  • חותכים אותם מאקריליק 3 מ"מ (1/8 אינץ ')

אפשרות 3: (מסור גלילה)

  • הורד את תבנית מסור הגלילה מלמטה (תבנית 03-WEBB-ScrollSaw (A4).pdf (לנייר בגודל A4) או 03-WEBB-ScrollSaw Pattern (אות).pdf (לנייר בגודל אותיות))
  • בדוק שוב כי הוא לא הוקטן בעת ההדפסה (על ידי מדידת הסרגלים המודפסים)
  • מדביקים פיסת אקריליק בגודל 3 מ"מ וחותכים את החתיכות.

הרכבה: הורד את מדריך ההרכבה (04-WEBB-Assembly Guide.pdf) למטה והרכיב את שולחן העבודה של המחשב הנייד יחד.

שלב 3: תוכנה - (Arduino)

תוכנה - (Arduino)
תוכנה - (Arduino)

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

  • בת 1-3 (בדוק בתים "AAA")
  • פקודה בת 4 (מספרת לארדואינו מה לעשות) (פקודות נתמכות 'F' - קדימה, 'B' - אחורה, 'L' - שמאלה, 'R' - ימינה, 'S' - מהירות, 'X' - SetSpeedLeft, 'Y' - SetSpeedRight, 'C' - עצור)
  • פרמטר בת 5 - עבור פקודות המהלך זה מתפרש כמרווח זמן (פרמטר * 100 אלפיות השנייה), ולפקודות המהירות אחוזים מ -0-100

הקוד מוזר ביסודיות ובהתחשב במסגרת זו הוספת פקודות נוספות אמורה להיות קלה.

  • הורד את קובץ ה- zip המצורף. (05-WEBB-Arduino Code.zip)
  • פתח את הספרייה לספריית ה- Arduino Sketch שלך. (ברירת מחדל: המסמכים שלי / Arduino)
  • פתח את סביבת הפיתוח שלך ב- arduino והעלה ל- Arduino שלך.

להעתיק ולהדביק

  • העתק את הקוד מלמטה.
  • הדבק בסביבת הפיתוח של ארדואינו.
  • העלה ל- Arduino שלך.

נספח: תוכנית ארדואינו

/ * * רובוט מחובר אינטרנט מבוקר באמצעות Arduino (WEBB) - מארח סידורי 88, 88, (COMMAND), (TIME) * פקודות נתמכות - & apos F & apos - 70 - קדימה * & apos B & apos - 66 - אחורה * & aposL & apos - 76 - שמאל * & aposR & apos - 82 - ימין * & aposS & apos - 83 - מהירות * & aposX & aposeft - 88 - SetSpeedL * & aposY & apos - 89 - SetSpeedRight * & aposC & apos - 67 - עצור * זמנים נתמכים - ערך 0 - 255 (0 עד 25.5 שניות) * 100 אלפיות השנייה * sp * חיווט: אות סרוו ימין - סיכה 9 * אות סרוו שמאל - סיכה 10 * * רישיון: עבודה זו מורשית תחת Creative Commons * רישיון ייחוס-שיתוף זהה 3.0 לא מיובא. כדי * לצפות בעותק של רישיון זה, בקר * https://creativecommons.org/licenses/by-sa/3.0/ * או שלח מכתב ל- Creative Commons, רחוב 171 השני *, סוויטה 300, סן פרנסיסקו, קליפורניה 94105, * ארה"ב. * */// ---------------------------------------------------- ---------------------------- // תחילת ההקדמה של שרת סדרת ARDUINO // הגדרת קבועים המתאימים לכל פקודה (גם מספר קוד ascii) #define FORWARD 70 // F#להגדיר BACKWARD 66 // B#הגדר שמאל 76 // L#הגדר ימינה 82 // R#הגדר SETSPEED 83 // S#הגדר STOP 67 // C#הגדר SETSPEEDLEFT 88 // X #define SETSPEEDRIGHT 89 // Y/ *שלושת בתים הבדיקה (המשמשים כדי שהרובוט לא יגיב לנתונים סדרתיים *אקראיים) כיום "AAA" */#מגדירים checkByte1 65 // "A" #define checkByte2 65 // "A "#define checkByte3 65 //" A "// -------------------------------------- ------------------------------------ // התחלה של ARDUINO רובוט סרבו (SERB) מבוקר#כולל #define LEFTSERVOPIN 10 // הסיכה שהסרוו השמאלי מחובר אליה#להגדיר RIGHTSERVOPIN 9 // הסיכה שהסרוו הימני מחובר ל- Sero leftServo; סרוו מימין סרבו; int leftSpeed = 50; // מחזיק את מהירות הרובוטים leftServo // אחוז בין 0 ל- 100int rightSpeed = 100; // מחזיק את מהירות הרובוטים ימינה סרווו // אחוז בין 0 ל -100 // סוף של רובוט SERVO (SERB) מבוקר של ARDUINO // ------------------- -------------------------------------------------- ----- // מפעיל הכל והופך את הגדרת החשבון () {Serial.begin (9600); // מפעיל את היציאה הטורית serbSetup (); // מגדיר את המצב של כל הסיכות הנדרשות // ומוסיף סרוו למערכון שלך} // לולאת loopvoid התוכנית הראשית () {serbPollSerialPort (); // מסתכל רציף אל היציאה הטורית // אם יש נתונים הוא מעבד אותם} // ------------------------------ ----------------------------------------- // תחילת מסלולי שרת סדרתיים של ארדואינו/ * * מעבד פקודות שנמסרו ליציאה הטורית של arduino & aposs */void serbPollSerialPort () {int dta; // משתנה להחזיק את הבייט הטורי אם (Serial.available ()> = 5) {// אם 5 בתים נמצאים במאגר (אורך pf בקשה מלאה) dta = Serial.read (); if (dta = checkByte1) {// בודק אם בייט הבדיקה הראשון dta = Serial.read (); if (dta = checkByte2) {// בודק את בית הבדיקה השני dta = Serial.read (); if (dta = checkByte3) {// בודק אם הפקודה byte int לבדיקה שלישית = Serial.read (); // בית רביעי הוא הפקודה int param1 = Serial.read (); // בית חמישי הוא param1 interpretCommand (פקודה, param1); // שולח אליו את הבקשה המנותחת & מטפל ב- aposs}}}}}/ * * לוקח את הפקודה והפרמטר ומעביר אותם לרובוט */void interpretCommand (int command, int param1) {if (command == FORWARD) {goForward (); עיכוב (param1 * 100); goStop ();} // אם קדימה אחרת אם (command == BACKWARD) {goBackward (); עיכוב (param1 * 100); goStop ();} // אם לאחור אחרת אם (command == LEFT) {goLeft (); עיכוב (param1 * 100); goStop ();} // אם נשאר אחרת אם (command == RIGHT) {goRight (); עיכוב (param1 * 100); goStop ();} // אם נכון אחרת אם (command == SETSPEED) {setSpeed (param1);} // אם הגדרת מהירות אחרת if (command == STOP) {goStop ();} // if stop אחר אם (command == SETSPEEDLEFT) {setSpeedLeft (param1);} // אם הגדרת המהירות השמאלית אחרת אם (command == SETSPEEDRIGHT) {setSpeedRight (param1);} // אם הגדרת המהירות הנכונה אחרת {// אם הפקודה הבלתי מזוהה תעשי קצת שטויות פנה שמאלה(); עיכוב (150); פנה ימינה(); עיכוב (150); goStop (); }} // ---------------------------------------------- -------------------------- // תחילת דרכי רובוט SERVO (SERB) ARDUINO מבוקרות/ * * מגדירה את הארדואינו שלך כדי לפנות ל- SERB שלך באמצעות השגרה הכלולה*/void serbSetup () {setSpeed (leftSpeed); pinMode (LEFTSERVOPIN, OUTPUT); // מגדיר את סיכת אות סרוו השמאלית // לפלט pinMode (RIGHTSERVOPIN, OUTPUT); // מגדיר את סיכת אות הסרוו הימנית // לפלט leftServo.attach (LEFTSERVOPIN); // מצרף סרוו שמאל rightServo.attach (RIGHTSERVOPIN); // מצרף סרוו ימני goStop ();}/ * * קובע את מהירות הרובוט בין 0- (עצור) ל- 100- (מהירות מלאה) * הערה: המהירות לא תשנה את המהירות הנוכחית עליך לשנות מהירות * ואז להתקשר לאחת של שיטות ה- go לפני שיתרחשו שינויים.*/ void setSpeed (int newSpeed) {setSpeedLeft (newSpeed); // מגדיר מהירות שמאל setSpeedRight (newSpeed); // מגדיר את המהירות הנכונה}/ * * קובע את מהירות הגלגל השמאלי */void setSpeedLeft (int newSpeed) {if (newSpeed> = 100) {newSpeed = 100;} // אם המהירות גדולה מ -100 // הפוך אותו 100 אם (newSpeed = 100) {newSpeed = 100;} // אם המהירות גדולה מ -100 // הפוך אותה ל- 100 אם (newSpeed <= 0) {newSpeed = 0;} // אם המהירות נמוכה מ- 0 עשה // זה 0 rightSpeed = newSpeed * 0.9; // מדרג את המהירות להיות}/ * * שולח את הרובוט קדימה */void goForward () {leftServo.write (90 + leftSpeed); rightServo.write (90 - rightSpeed);} / * * שולח את הרובוט לאחור * /void goBackward () {leftServo.write (90 - leftSpeed); rightServo.write (90 + rightSpeed);} / * * שולח את הרובוט ימינה * /void goRight () {leftServo.write (90 + leftSpeed); rightServo.write (90 + rightSpeed);}/ * * שולח את הרובוט שמאלה */void goLeft () {leftServo.write (90 - leftSpeed); rightServo.write (90 - rightSpeed);}/ * * עוצר את הרובוט */void goStop () {leftServo.write (90); rightServo.write (90);} // סיום מסלולי רובו של SERVO (SERB) נשלטים על ידי ARDUINO // ---------------------------- -----------------------------------------------

שלב 4: תוכנה - מחשב נייד רובוט (WebServer)

תוכנה - מחשב נייד רובוטי (WebServer)
תוכנה - מחשב נייד רובוטי (WebServer)

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

  • הורד את קובץ ה- zip למטה (06-WEBB עיבוד שרת אינטרנט (windows exe).zip)
  • פתח אותו והפעל את קובץ.exe (_WEBB_WebServer_RobotComputer.exe)

לערוך בעיבוד:

  • הורד את קובץ ה- zip למטה (06-WEBB עיבוד שרת אינטרנט (קבצי מקור).zip)
  • לפתוח כל מקום במחשב שלך.
  • פתח את סביבת העיבוד ופתח (_WEBB_WebServer_RobotComputer.pde)

לבחון:

  • הפעל את התוכנית.
  • בתיבה מס '1 תהיה רשימה של יציאות הקומקום הזמינות במחשב שלך (לחץ על אחת שאליה מחובר הארדואינו. (הרובוט שלך יתעוות כמה פעמים כשהמחשב יתחבר, ונקודה ציאנית תופיע לצד הנבחר נמל פקודה)
  • בדוק בתיבה מס '2 כדי לבדוק אם הארדואינו שלך מחובר. לחץ על אחד החצים ובתקווה שהרובוט שלך ינוע בכיוון שנלחץ למשך חצי שנייה.
  • בתיבה מס '3 לחץ על כפתור "התחל" כדי להפעיל את שרת האינטרנט.
  • פתח דפדפן אינטרנט (במחשב הנייד של הרובוט) ובקר בכתובת https://127.0.0.1:12345/ControlPage.html (יש לקוות שדף האינטרנט של הבקרה עם לחצנים עליו יופיע) -פרטים על אופן השימוש בדף זה בשלב הבא -

מה קורה:

  • שרת האינטרנט מקשיב ליציאת 12345 לבקשות http (מה שנשלח בעת הקלדת כתובת דף אינטרנט)
  • ישנם שני סוגי בקשות שהוא מגיב אליהם.

1. הוא מקשיב ל- "ControlPage.html" וישלח את דף האינטרנט של הפקד 2. הוא מקשיב לבקשות של הטופס "/request? Command = F & param1 = 100" (פקודות אלה מנותחות ונשלחות ל- Arduino (דוגמה זו תביא ברובוט הולך קדימה למשך 10 שניות) נספח: (הקוד עבור WebServer)

/ * * רובוט מחובר אינטרנט מבוקר Arduino (WEBB) - שרת אינטרנט * לפרטים נוספים בקר: https://www.oomlout.com/serb * * התנהגות: התוכנית מקשיבה לבקשות http (דף אינטרנט) בטופס * "/בקשה ? command = F & param1 = 100 "ואז מעביר אותם לפקודות הנתמכות * Arduino * & apos F & apos - 70 - קדימה * & apos B & apos - 66 - אחורה * & aposL & apos - 76 - שמאל * & aposR & apos - 82 - ימינה * & aposS & apos - 83 - מהירות * & aposX & apos - 88 - SetSpeedLeft * & aposY & apos - 89 - SetSpeedRight * & aposC & apos - 67 - Stop * param1 & aposs - 0 - 255 (0 עד 25.5 שניות) ערך * 100 מילי שניות * * משרת גם את דף האינטרנט של הבקרה לדפדפן אם מבקשים ControlPage.html * * מבצע: 1. לחץ על יציאת ה- Comm שהארדואינו שלך מחובר * 2. השתמש בלחצני הבדיקה כדי לראות אם הארדואינו שלך מקשיב * (ינוע בכיוון שלחיצה עליו חצי שנייה) * 3. לחץ על התחל ושרת האינטרנט שלך הקשיבו לבקשות * * * רישיון: עבודה זו מורשית תחת Creative Commons * Attribu tion-Share Alike 3.0 רישיון לא מיובא. כדי * לצפות בעותק של רישיון זה, בקר * https://creativecommons.org/licenses/by-sa/3.0/ * או שלח מכתב ל- Creative Commons, רחוב 171 השני *, סוויטה 300, סן פרנסיסקו, קליפורניה 94105, * ארה"ב. * */יבוא עיבוד. סדרה. *; // ייבא את הספרייה הסדרתית כדי להשתמש ב- Serial (לשיחה עם Arduino) import processing.net.*; // ייבא את ספריית הרשת כדי להשתמש בשרת (לשיחה עם האינטרנט)/ * משתנים קשורים ביציאה טורית */int serialPortIndex = -1; // אינדקס היציאה הטורית שאנו משתמשים בה ב- Serial.list () listString commOptions; // משתנה לאחסון Serial.list () כך שלא יהיה צורך בסקר // את היציאות הטוריות בכל פעם שאנו רוצים להפנות אותו (סקר גורם ל // קפיצה בסרוודי arduino) SerialPort סידורי; // הופך את היציאה הסדרתית למתאמת לאורך כל המערכון/ * משתנים קשורים גרפיים ועיבוד */פונט פונט; // הופך את הגופן לציבורי ולכן יש לטעון אותו רק פעם אחת (Arial-72)/ * משתנים הקשורים לרשת */שרת wServer; // השרת המטפל ביציאת בקשות אינטרנט = 12345; // היציאה שהשרת מאזין אליה cycleCount = 0; // סופר את מספר הפעמים של לולאת הציור מבצעת (המשמש ל // הנפשת הטקסט "הפועל")/ * משתני השירות */PImage bg; // תמונת הרקע כרגע / WEBB-background.png/ * * כפתורים משתנים קשורים * (כפתורים מיושמים בצורה גסה מאוד, תיבות גבולות מאוחסנות וגרפיקה וטקסט * מצוירים על תמונת הרקע) כלומר. משתני כפתורים נעים לא יזיזו את מראה הכפתורים */לחצן comm1; כפתור comm2; כפתור comm3; כפתור comm4; // הלחצנים לבחירת היציאה הטורית הנכונה כפתור למעלה; כפתור ימינה; לחצן שמאל; לחצן למטה; // לחצני הכיוון לבדוק אם הרובוט מגיב על כפתור webServer; // הלחצן להפעלת webServer/ * * מגדיר את כל הגדרות */void setup () {frameRate (5); // מאט את הסקיצה מעט כך שזה לא יחייב את המערכת bg = loadImage ("WEBB-background.png"); // טוען את גודל תמונת הרקע (המאוחסן בתיקיית הסקיצות) (700, 400); // קובע את גודל גופן חלון הסקיצות = loadFont ("ArialMT-72.vlw"); // טוען את הגופן בו נשתמש באמצעות הסקיצה הזו commOptions = Serial.list (); // סקר את היציאות הסידריות ומקבל רשימה של יציאות זמינות // (פעולה זו רק פעם אחת מונעת מהרובוט להתעוות בכל פעם שהוא & aposs // יציאה טורית נבדקת) defineButtons (); // מגדיר את תיבות הגבול לכל רקע כפתורים (bg); // מצייר את תמונת הרקע (בתמונה זו יש את כל גרפיקת הכפתורים)}/ * שרטוט הלולאה הראשית */צייר חלל () {if (cycleCount == 0) {//- שגרות ציור שיחות drawCommBox (); // מציירת את האלמנטים בתיבת Comm (תיבה 1) drawTestBox (); // מצייר את כל האלמנטים בתיבת הבדיקה (תיבה 2) drawWebServerBox (); // מצייר את כל האלמנטים בתיבת WebServer (תיבה 3)} //- שיטות עבודה בשיחות pollWebServer (); // סקר את שרת האינטרנט כדי לבדוק אם הגיעו בקשות כלשהן דרך הרשת} // ------------------------------ ---------------------------------------------- // תחילת שרטוט צייר (התפצל רק כדי שהקוד יהיה נחמד יותר לקריאה)/ * * שגרת עדכון הצביעה (מבוצעת בכל מחזור) לפריטים בתיבת הקומקום (תיבה 1) */void drawCommBox () {fill (0, 0, 0); // הגדר את המילוי ל- textFont שחור (גופן, 15); // הגדר את הגופן בגודל הנכון עבור (int i = 0; i 0) {running = running + ".";} // מספר הנקודות מבוסס על cycleCount if ((cycleCount /1)> 1) { running = running + ".";} if ((cycleCount / 1)> 2) {running = running + ".";} if ((cycleCount / 1)> 3) {cycleCount = 0;} טקסט (פועל, 520, 210); } cycleCount ++; // כל פעם דרך cycleCount גדל באחד} // סוף שגרת ציור // ------------------------------- ------------------------------ // ------------------ ------------------------------------------- // התחלת שגרת השירות/ * * mousePressed נקרא בכל פעם שלוחצים על העכבר זה * בודק אם העכבר נמצא בתוך כל אחת מהתיבות המגבילות את הכפתורים * ואם זו השגרה המתאימה נקראת */void mousePressed () {if (comm1.pressed ()) { updateSerialPort (0);} // שינויים ביציאת הפקודה באינדקס 0 ב- Serial.list () אחרת אם (comm2.pressed ()) {updateSerialPort (1);} // שינויים ביציאת הפקודה באינדקס 1 בסידורי.list () אחרת אם (comm3.pressed ()) {updateSerialPort (2);} // שינויים ביציאת הפקודה באינדקס 2 ב- Serial.list () אחרת אם (comm4.pressed ()) {updateSerialPort (3);} // שינויים ביציאת הקומיקס באינדקס 3 ב- Serial.list () אחרת אם (למעלה.לחץ ()) {sendRobotCommand ("F", 5);} // שולח פקודה להעביר את הרובוט קדימה ב- 0.5 שניות אחרות אם (left.pressed ()) {sendRobotCommand ("L", 5);} / /שולח פקודה להזיז את הרובוט שמאלה למשך 0.5 שניות אחרת אם (right.pressed ()) {sendRobotCommand ("R", 5);} // שולח פקודה להזיז את הרובוט ימינה למשך 0.5 שניות אחרת אם (למטה. נלחץ ()) {sendRobotCommand ("B", 5);} // שולח פקודה להעביר את הרובוט לאחור למשך 0.5 שניות אחרת אם (webServer.pressed ()) {startWebServer ();} // מפעיל את WebServer cycleCount = 0; רקע (bg); // מצייר מחדש את תמונת הרקע (בתמונה זו יש את כל גרפיקת הכפתורים) צייר ();}/ * * התקשר לאחר ביצוע הוא בודק את השרת כדי לראות אם יש חיבורים ממתינים * אם יש חיבור ממתין שהוא מושך מוציאים את הבקשה ומעבירים אותה לשגרה parseRequest (String) * כדי להסיר טקסט נוסף. לאחר מכן זה נשלח לשגרת interpretRequest (String) כדי לקרוא * לשגרת הפעולה המתאימה (כלומר לשלוח הוראות לרובוט).* * בקשה מועברת על ידי הזנת כתובת המחשב והיציאה לדפדפן אינטרנט * למחשב מקומי "https://127.0.0.1:12345/request?command=F&param1=100" * * בקשה לדוגמא: * GET/request? command = F & param1 = 100 HTTP/1.1 * User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.19 (KHTML, כמו Gecko) * Accept: * // * * Accept-Language: en-US, en * Accept-Charset: ISO-8859-1, *, utf-8 * Accept-Encoding: gzip, deflate, bzip2 * Host: 127.0.0.1:12345 * חיבור: Keep-Alive * * תגובה לדוגמא (לבקשה מעובדת) * HTTP/1.1 200 אישור * חיבור: סגור * סוג תוכן: טקסט/html * * פקודה: F param1: 100 */void pollWebServer () {if (wServer! = null) {// אם שרת האינטרנט מפעיל בקשת לקוח = wServer.available (); // טען את הלקוח הבא בשורה בשרת // (null אם אין בקשות ממתינות) if (request! = Null) {// אם יש תהליך בקשה הוא מחרוזת fullRequest = request.readString (); // אחסן את תוכן הבקשה כמחרוזת מחרוזת ip = request.ip (); // אחסן את כתובת ה- ip של הלקוח כמחרוזת string string = parseRequest (fullRequest.toUpperCase ()); // הסר את כל המידע // הנוסף ומשאיר רק את מחרוזת הבקשה (טקסט לאחר GET) // (עובר לאותיות גדולות כדי להקל על בדיקת המחרוזות) אם (requestString.indexOf ("REQUEST?")! = -1) { // בודק אם יש לבקשה "בקשה?" מחרוזת תשובה = interpretRequest (requestString); // שולח את הבקשה לבקש מתרגם request.write ("HTTP/1.1 200 OK / n חיבור: close / nContent-Type: text/html / n / n" + תגובה); // שולח את התשובה ל- 200 כדי לומר שהבקשה // טופלה ואת מחרוזת "התשובה" כתגובה wServer.disconnect (בקשה); // מנתק את הלקוח} else if (requestString.indexOf ("CONTROLPAGE")! = -1) {// אם הבקשה מיועדת לדף האינטרנט הפקד String webPageArray = loadStrings ("WEBB -ControlPage.html"); // טוען את דף האינטרנט הפקד מ / data / WEBB-ControlPage.html // (נטען כמערך של שורות) String webPage = ""; // כדי להקל על העריכה לדף האינטרנט נותרו // שורות שורות, כך שללולאה מחלק את השורות האלה עבור (int i = 0; i portIndex) {// אם portIndex שעבר הוא אינדקס תקף ב- Serial.list () // (כלומר, לא אפשרות שלוש ברשימה של שניים) serialPortIndex = portIndex; // הגדר את המשתנה serialPortIndex לאינדקס הסדרת הסידורי החדש // (זה משמש להצגת הנקודה ליד היציאה הפעילה)} if (serialPortIndex! = -1) {// בדוק כדי לוודא שיציאה נבחרה מתישהו קודם אם (serialPort! = null) {serialPort.stop ();} // אם כבר משתמשים ביציאה טורית עצור אותה לפני טעינת סידור חדש = serial Serial (this, Serial.list () [serialPortIndex], 9600); // צור אובייקט סידורי חדש לקשר עם Arduino 9600 Baud}}/ * * לוקח מחרוזת בקשה (למשל: "request? Command = F & param1 = 100") ויפשט את הפקודה * ו- param1 ויעביר אותה ל- arduino (הוספת פרמטרים נוספים או פקודות שאינן arduino תתבצע כאן) */String interpretRequest (String requestString) {String returnValue = "OK"; // מכין פקודה מחרוזת משתנה returnValue; // שלוש השורות הבאות חולצות את הערך אחרי "command =" // (השורה הנוספת היא למקרה שפרמטר הפקודה נמצא בסוף // של הבקשה ולא אחריו & if (requestString.indexOf ("COMMAND =")! = -1) {command = requestString.substring (requestString.indexOf ("COMMAND =") + "COMMAND =". Length ());} else {command = "Z";} if (command.indexOf (" & ")! = -1) {command = command.substring (0, command.indexOf (" & "));} else {command = command;} String param1String; // שלוש השורות הבאות חולצות את הערך אחרי" param1 = "// (השורה הנוספת היא במקרה שפרמטר הפקודה נמצא // בסוף הבקשה ולא אחריו & if (requestString.indexOf (" PARAM1 = ")! = -1) {param1String = requestString.substring (requestString.indexOf ("PARAM1 =") + "PARAM1 =". length ());} else {param1String = "0";} if (param1String.indexOf ("&")! = -1) {param1String = param1String.substring (0, param1String.indexOf ("&"));} else {param1String = param1String;} int param1 = Integer.parseInt (param1String); // הופך את מחרוזת param1 ל sendRobotCommand שלם (פקודה, param1); // שולח את הפקודה לשגרה ששולחת אותה ל- Arduino returnValue = "command:" + command + "param1:" + param1; // כרגע רק הפקודה המנותחת אך שליחת // כ- html כך שניתן לכלול עיצוב returnValue;}/ * * לוקח פקודה (כרגע אות אחת) ופרמטר (בייט אחד 0-255) ושולח אותו אל arduino * המאזין ומקריא * פקודות הנתמכות כיום * F - */void sendRobotCommand (פקודת מחרוזת, int param1) {println ("command:" + command + "time:" + param1); Check String = "AAA"; if (serialPort! = null) {serialPort.write (checkString + פקודה); serialPort.write (בייט (param1)); }}} // סיום ההתקנה/שגרה לא נפוצה במיוחד // ----------------------------------- -------------------------------------------------- // לחצן דוגמה וקוד RectButton מדוגמת processing.org עם כמה שינויים // שנעשו בעיקר כדי לפשט ולהסיר אנימציה // https://processing.org/learning/topics/buttons.html (2008-09-23) לחצן class {int x, y; int רוחב, גובה; כפתור (int ix, int iy, int iwidth, int iheight) {x = ix; y = iy; רוחב = iwidth; גובה = גובה; } לחצו על בוליאני () {if (overRect ()) {return true; } אחרת {return false;}} overRect boolean () {if (mouseX> = x && mouseX = y && mouseY <= y+height) {return true; } else {return false; }}}

שלב 5: תוכנה - (דף אינטרנט)

תוכנה - (דף אינטרנט)
תוכנה - (דף אינטרנט)
תוכנה - (דף אינטרנט)
תוכנה - (דף אינטרנט)
תוכנה - (דף אינטרנט)
תוכנה - (דף אינטרנט)

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

  • גלה את כתובת ה- ip המקומית של המחשב הנייד. לשם כך עבור אל "התחל / תוכניות / אביזרים / שורת פקודה" וכאשר חלון הטרמינל נפתח הקלד "ipconfig". רשום "כתובת IP" ועבור למחשב אחר ברשת המקומית שלך.
  • פתח דפדפן אינטרנט, הקלד "https:// (מחשב רובוט ip): 12345/ControlPage.html
  • דף האינטרנט של הבקרה אמור לטעון, בתיבה "כתובת IP" הקלד את מחשבי הרובוט ip.
  • התחל לשלוט ברובוט שלך.

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

  • (השלב הקשה ביותר) הגדרת העברת יציאות - המחשב שלך צריך להאזין לאינטרנט ולא רק לרשת המקומית. לשם כך עליך לומר לנתב שלך להעביר בקשות מסוימות למחשב השולט ברובוט. זה קצת מורכב וחורג בהרבה מההיקף של מדריך זה. אולם אם אתה מבקר ב PortForward.com הם יתנו לך כל מה שאתה צריך לדעת על הגדרת הנתב (עליך להעביר את יציאת 12345 למחשב הנייד הרובוט שלך)
  • הבא גלה את כתובת ה- IP שלך באינטרנט (בקר WhatIsMyIP.com)
  • לבסוף, הפעל את סקייפ והגדר שיחת וידיאו וקבל עם מי אתה מדבר לבקר "https:// (אינטרנט IP): 12345/ControlPage.html"
  • הקלד את כתובת ה- IP בתיבה "כתובת IP" בדף האינטרנט של הבקרה והרובוט המחובר לאינטרנט שלך מונע מרחוק.

שלב 6: סיים

גָמוּר
גָמוּר

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

מוּמלָץ: