תוכן עניינים:
- שלב 1: חומרים
- שלב 2: הדפס תלת מימד את הזרוע הרובוטית
- שלב 3: מונטאז 'אלקטרוני
- שלב 4: יישום סמארטפון
- שלב 5: קוד הארדואינו
- שלב 6: זהו
וִידֵאוֹ: משחק זרוע רובוטי - בקר סמארטפון: 6 שלבים
2024 מְחַבֵּר: John Day | [email protected]. שונה לאחרונה: 2024-01-30 09:14
שלום !
הנה משחק קיץ מהנה: הזרוע הרובוטית הנשלטת על ידי סמארטפון !!
כפי שאתה יכול לראות בסרטון, אתה יכול לשלוט בזרוע עם כמה ג'ויסטיקים בסמארטפון שלך.
תוכל גם לשמור דפוס שהרובוט ישחזר בלולאה על מנת לבצע כמה משימות שחוזרות על עצמן כדוגמה. אבל הדפוס הזה ניתן לשינוי כרצונך !!!!
תהיה יצירתי !
שלב 1: חומרים
כאן תוכל לראות את החומר הדרוש לך.
זה יעלה לך בסביבות 50 € לבנות את הזרוע הרובוטית הזו. ניתן להחליף את התוכנה והכלים, אך השתמשתי באלה לפרויקט זה.
שלב 2: הדפס תלת מימד את הזרוע הרובוטית
הזרוע הרובוטית הודפסה בתלת מימד (עם prusa i3 שלנו).
הודות לאתר "HowtoMechatronics.com", קבצי STL שלו מדהימים על מנת לבנות זרוע תלת מימדית.
זה ייקח בערך 20 שעות להדפיס את כל החלקים.
שלב 3: מונטאז 'אלקטרוני
המונטאז 'נפרד לשני חלקים:
חלק אלקטרוני, שבו הארדואינו מחובר לסרוווס על ידי הפינים הדיגיטליים, ועם מכשיר ה- Bluetooth (Rx, Tx).
חלק כוח, שבו המנגנים מופעלים עם 2 מטען טלפון (5V, 2A מקסימום).
שלב 4: יישום סמארטפון
היישום בוצע על ממציא האפליקציות 2. אנו משתמשים בשני ג'ויסטיק לשליטה על 4 סרוו ושני כפתורים נוספים לשליטה באחיזה הסופית.
אנו מחברים את הזרוע והסמארטפון יחד באמצעות מודול בלוטות '(HC-06).
לבסוף, מצב חיסכון מאפשר למשתמש לשמור עד 9 עמדות עבור הזרוע.
לאחר מכן הזרוע תיכנס למצב אוטומטי, שם הוא ישחזר את העמדות השמורות.
שלב 5: קוד הארדואינו
// 08/19 - נשלט סמארטפון נשק רובוטי
#הכלול ***********
נציג מילים; // סמארטפון של מודול Arduino au smartphone
int chiffre_final = 0; int cmd = 3; // משתנה commande du servo moteur (troisième fil (כתום, ג'ון)) int cmd1 = 5; // servo1 int cmd2 = 9; // servo2 int cmd3 = 10; // servo3 // int cmd4 = 10; // servo4 int cmd5 = 11; // pince int active_saving = 0; מנוע סרוו; // on définit notre servomoteur Servo moteur1; סרוו מוטור 2; סרוו מוטור 3; // סרוו מוטור 4; סרוו מוטור 5; int step_angle_mini = 4; int step_angle = 3; זווית int, זווית 1, זווית 3, זווית 5, זווית 2; // זווית int pas; int r, r1, r2, r3; int enregistrer; סנפיר בוליאני = FALSE; boolean fin1 = FALSE; boolean fin2 = FALSE; boolean fin3 = FALSE; boolean fin4 = FALSE; מילה w; // משתנה שליח של סמארטפון או מודול Arduino int sauvegarde_positions1 [5]; int sauvegarde_positions2 [5]; int sauvegarde_positions3 [5]; int sauvegarde_positions4 [5]; int sauvegarde_positions5 [5]; int sauvegarde_positions6 [5]; int sauvegarde_positions7 [5]; int sauvegarde_positions8 [5]; int sauvegarde_positions9 [5];
// זווית int; // זווית סיבוב (0 א 180)
//********************להכין*************************** ******** הגדרת void () {sauvegarde_positions1 [0] = sauvegarde_positions1 [1] = sauvegarde_positions1 [2] = sauvegarde_positions1 [3] = sauvegarde_positions1 [4] = 0; sauvegarde_positions2 [0] = sauvegarde_positions2 [1] = sauvegarde_positions2 [2] = sauvegarde_positions2 [3] = sauvegarde_positions2 [4] = 0; sauvegarde_positions3 [0] = sauvegarde_positions3 [1] = sauvegarde_positions3 [2] = sauvegarde_positions3 [3] = sauvegarde_positions3 [4] = 0; sauvegarde_positions4 [0] = sauvegarde_positions4 [1] = sauvegarde_positions4 [2] = sauvegarde_positions4 [3] = sauvegarde_positions4 [4] = 0; sauvegarde_positions5 [0] = sauvegarde_positions5 [1] = sauvegarde_positions5 [2] = sauvegarde_positions5 [3] = sauvegarde_positions5 [4] = 0; sauvegarde_positions6 [0] = sauvegarde_positions6 [1] = sauvegarde_positions6 [2] = sauvegarde_positions6 [3] = sauvegarde_positions6 [4] = 0; sauvegarde_positions7 [0] = sauvegarde_positions7 [1] = sauvegarde_positions7 [2] = sauvegarde_positions7 [3] = sauvegarde_positions7 [4] = 0; sauvegarde_positions8 [0] = sauvegarde_positions8 [1] = sauvegarde_positions8 [2] = sauvegarde_positions8 [3] = sauvegarde_positions8 [4] = 0; sauvegarde_positions9 [0] = sauvegarde_positions9 [1] = sauvegarde_positions9 [2] = sauvegarde_positions9 [3] = sauvegarde_positions9 [4] = 0; moteur.attach (cmd); // on relie l'objet au pin de commande moteur1.attach (cmd1); moteur2.attach (cmd2); moteur3.attach (cmd3); // moteur4.attach (cmd4); moteur5.attach (cmd5); moteur.write (6); זווית = 6; moteur1.write (100); זווית 1 = 100; moteur2.write (90); moteur3.write (90); //moteur4.write(12); moteur5.write (90); זווית = 6; זווית 1 = 100; זווית 2 = 90; זווית 3 = 90; זווית 5 = 90; Serial.begin (9600); // permettra de communiquer au module Bluetooth} // ******************* BOUCLE ****************** ****************** לולאת ריק () {
// Serial.print ("זווית");
//Serial.print(angle);Serial.print ("\ t"); Serial.print (angle1); Serial.print ("\ t"); Serial.print (angle2); Serial.print ("\ t "); Serial.print (angle3); Serial.print (" / t "); Serial.print (angle5); Serial.print (" / n ");
//Serial.print("angle ");
int i; w = recevoir (); // on a recevoir une information du smartphone, la variable w switch (w) {case 1: TouchDown_Release (); break; מקרה 2: TouchDown_Grab (); הפסקה; מקרה 3: Base_Rotation (); הפסקה; מקרה 4: Base_AntiRotation (); הפסקה; מקרה 5: Waist_Rotation (); הפסקה; מקרה 6: Waist_AntiRotation (); הפסקה; מקרה 7: Third_Arm_Rotation (); הפסקה; מקרה 8: Third_Arm_AntiRotation (); הפסקה; מקרה 9: Fourth_Arm_Rotation (); הפסקה; מקרה 10: Fourth_Arm_AntiRotation (); הפסקה; // מקרה 11: Fifth_Arm_Rotation (); הפסקה; // מקרה 12: Fifth_Arm_AntiRotation (); הפסקה; מקרה 21: Serial.print ("כפתור 1"); chiffre_final = 1; sauvegarde_positions1 [0] = זווית; sauvegarde_positions1 [1] = angle1; sauvegarde_positions1 [2] = angle2; sauvegarde_positions1 [3] = angle3; sauvegarde_ = angle5; Serial.println (sauvegarde_positions1 [1]); Serial.println (sauvegarde_positions1 [2]); Serial.println (sauvegarde_positions1 [3]); Serial.println (sauvegarde_positions1 [4]); לשבור; מקרה 22: chiffre_final = 2; sauvegarde_positions2 [0] = זווית; sauvegarde_positions2 [1] = angle1; sauvegarde_positions2 [2] = angle2; sauvegarde_positions2 [3] = angle3; sauvegarde_positions2 [4] = angle5; לשבור; מקרה 23: chiffre_final = 3; sauvegarde_positions3 [0] = זווית; sauvegarde_positions3 [1] = angle1; sauvegarde_positions3 [2] = angle2; sauvegarde_positions3 [3] = angle3; sauvegarde_positions3 [4] = angle5; מקרה 24: chiffre_final = 4; sauvegarde_positions4 [0] = זווית; sauvegarde_positions4 [1] = angle1; sauvegarde_positions4 [2] = angle2; sauvegarde_positions4 [3] = angle3; sauvegarde_positions4 [4] = angle5; לשבור; מקרה 25: chiffre_final = 5; sauvegarde_positions5 [0] = זווית; sauvegarde_positions5 [1] = angle1; sauvegarde_positions5 [2] = angle2; sauvegarde_positions5 [3] = angle3; sauvegarde_positions5 [4] = angle5; לשבור; מקרה 26: chiffre_final = 6; sauvegarde_positions6 [0] = זווית; sauvegarde_positions6 [1] = angle1; sauvegarde_positions6 [2] = angle2; sauvegarde_positions6 [3] = angle3; sauvegarde_positions6 [4] = angle5; לשבור; מקרה 27: chiffre_final = 7; sauvegarde_positions7 [0] = זווית; sauvegarde_positions7 [1] = angle1; sauvegarde_positions7 [2] = angle2; sauvegarde_positions7 [3] = angle3; sauvegarde_positions7 [4] = angle5; לשבור; מקרה 28: chiffre_final = 8; sauvegarde_positions8 [0] = זווית; sauvegarde_positions8 [1] = angle1; sauvegarde_positions8 [2] = angle2; sauvegarde_positions8 [3] = angle3; sauvegarde_positions8 [4] = angle5; לשבור; מקרה 29: chiffre_final = 9; sauvegarde_positions9 [0] = זווית; sauvegarde_positions9 [1] = angle1; sauvegarde_positions9 [2] = angle2; sauvegarde_positions9 [3] = angle3; sauvegarde_positions9 [4] = angle5; לשבור;
מקרה 31: Serial.print ("31"); active_saving = 1; chiffre_final = 0; הפסקה; // BEGIN
מקרה 33: Serial.print ("33"); active_saving = 0; break; // BUTTON SAVE ברירת מחדל: break; } אם (w == 32) {Serial.print ("\ nReproduce / nChiffre final:"); Serial.print (chiffre_final); Serial.print ("\ n עמדה Sauvegarde 1: / n"); עבור (i = 0; i <5; i ++) {Serial.print (sauvegarde_positions1 ); Serial.print ("\ t");} Serial.print ("\ n עמדה 2 של Sauvegarde: / n"); עבור (i = 0; i <5; i ++) {Serial.print (sauvegarde_positions2 ); Serial.print ("\ t");} Serial.print ("\ n עמדה 3 של Sauvegarde: / n"); עבור (i = 0; i <5; i ++) {Serial.print (sauvegarde_positions3 ); Serial.print ("\ t");} עבור (i = 1; i <= chiffre_final; i ++) {Serial. print ("\ n / n BEGIN / n לולאה:"); Serial.print (i); Serial.print ("\ n"); switch (i) {מקרה 1: goto_moteur (*(sauvegarde_positions1)); עיכוב (200); goto_moteur1 (*(sauvegarde_positions1+1)); עיכוב (200); goto_moteur2 (*(sauvegarde_positions1+2)); עיכוב (200); goto_moteur3 (*(sauvegarde_positions1+3)); עיכוב (200); goto_moteur5 (*(sauvegarde_positions1+4)); עיכוב (200); לשבור; מקרה 2: goto_moteur (*(sauvegarde_positions2)); עיכוב (200); goto_moteur1 (*(sauvegarde_positions2+1)); עיכוב (200); goto_moteur2 (*(sauvegarde_positions2+2)); עיכוב (200); goto_moteur3 (*(sauvegarde_positions2+3)); עיכוב (200); goto_moteur5 (*(sauvegarde_positions2+4)); עיכוב (200); לשבור; מקרה 3: goto_moteur (*(sauvegarde_positions3)); עיכוב (200); goto_moteur1 (*(sauvegarde_positions3+1)); עיכוב (200); goto_moteur2 (*(sauvegarde_positions3+2)); עיכוב (200); goto_moteur3 (*(sauvegarde_positions3+3)); עיכוב (200); goto_moteur5 (*(sauvegarde_positions3+4)); עיכוב (200); לשבור; מקרה 4: goto_moteur (*(sauvegarde_positions4)); עיכוב (200); goto_moteur1 (*(sauvegarde_positions4+1)); עיכוב (200); goto_moteur2 (*(sauvegarde_positions4+2)); עיכוב (200); goto_moteur3 (*(sauvegarde_positions4+3)); עיכוב (200); goto_moteur5 (*(sauvegarde_positions4+4)); עיכוב (200); לשבור; מקרה 5: goto_moteur (*(sauvegarde_positions5)); עיכוב (200); goto_moteur1 (*(sauvegarde_positions5+1)); עיכוב (200); goto_moteur2 (*(sauvegarde_positions5+2)); עיכוב (200); goto_moteur3 (*(sauvegarde_positions5+3)); עיכוב (200); goto_moteur5 (*(sauvegarde_positions5+4)); עיכוב (200); לשבור; מקרה 6: goto_moteur (*(sauvegarde_positions6)); עיכוב (200); goto_moteur1 (*(sauvegarde_positions6+1)); עיכוב (200); goto_moteur2 (*(sauvegarde_positions6+2)); עיכוב (200); goto_moteur3 (*(sauvegarde_positions6+3)); עיכוב (200); goto_moteur5 (*(sauvegarde_positions6+4)); עיכוב (200); לשבור; מקרה 7: goto_moteur (*(sauvegarde_positions7)); עיכוב (200); goto_moteur1 (*(sauvegarde_positions7+1)); עיכוב (200); goto_moteur2 (*(sauvegarde_positions7+2)); עיכוב (200); goto_moteur3 (*(sauvegarde_positions7+3)); עיכוב (200); goto_moteur5 (*(sauvegarde_positions7+4)); עיכוב (200); לשבור; מקרה 8: goto_moteur (*(sauvegarde_positions8)); עיכוב (200); goto_moteur1 (*(sauvegarde_positions8+1)); עיכוב (200); goto_moteur2 (*(sauvegarde_positions8+2)); עיכוב (200); goto_moteur3 (*(sauvegarde_positions8+3)); עיכוב (200); goto_moteur5 (*(sauvegarde_positions8+4)); עיכוב (200); לשבור; מקרה 9: goto_moteur (*(sauvegarde_positions9)); עיכוב (200); goto_moteur1 (*(sauvegarde_positions9+1)); עיכוב (200); goto_moteur2 (*(sauvegarde_positions9+2)); עיכוב (200); goto_moteur3 (*(sauvegarde_positions9+3)); עיכוב (200); goto_moteur5 (*(sauvegarde_positions9+4)); עיכוב (200); לשבור; } Serial.print ("\ n ********************** FIN REPRODUCE ***************** / n "); עיכוב (500); }} /*Serial.print ("בכורה / n"); Serial.print (sauvegarde_positions1 [0]); Serial.print ("\ t"); Serial.print (sauvegarde_positions1 [1]); Serial.print ("\ t"); Serial.print (sauvegarde_positions1 [2]); Serial.print ("\ t"); Serial.print (sauvegarde_positions1 [3]); Serial.print ("\ t"); Serial.print (sauvegarde_positions1 [4]); Serial.print ("\ n"); Serial.print (sauvegarde_positions2 [0]); Serial.print ("\ t"); Serial.print (sauvegarde_positions2 [1]); Serial.print ("\ t"); Serial.print (sauvegarde_positions2 [2]); Serial.print ("\ t"); Serial.print (sauvegarde_positions2 [3]); Serial.print ("\ t"); Serial.print (sauvegarde_positions2 [4]); Serial.print ("\ n"); Serial.print (sauvegarde_positions3 [0]); Serial.print ("\ t"); Serial.print (sauvegarde_positions3 [1]); Serial.print ("\ t"); Serial.print (sauvegarde_positions3 [2]); Serial.print ("\ t"); Serial.print (sauvegarde_positions3 [3]); Serial.print ("\ t"); Serial.print (sauvegarde_positions3 [4]); Serial.print ("\ n"); Serial.print (sauvegarde_positions4 [0]); Serial.print ("\ t"); Serial.print (sauvegarde_positions4 [1]); Serial.print ("\ t"); Serial.print (sauvegarde_positions4 [2]); Serial.print ("\ t"); Serial.print (sauvegarde_positions4 [3]); Serial.print ("\ t"); Serial.print (sauvegarde_positions4 [4]); Serial.print ("\ n");
Serial.print ("\ nfin / n");*/
עיכוב (100); } // *************************** ****************** *******************
word recevoir () {// fonction permettant de recevoir l'information du smartphone
if (Serial.available ()) {w = Serial.read ();
Serial.flush ();
החזר w; }}
goto_moteur (int angle_destination) חלל
{while (זווית_הגדרה_זווית+שלב_אנגלית) {Serial.print ("\ n -------------- * * * * * * -------------- ---- / n "); Serial.print ("angle_destination = / t"); Serial.print (זווית_דיסטנציה); Serial.print ("\ n angle1 = / t"); Serial.print (זווית); אם (זווית ייעוד_זווית + שלב_זווית) {זווית = זווית + צעד_זווית; moteur.write (זווית);} עיכוב (100); } moteur.write (זווית_דיסטנציה); } vooto goto_moteur1 (int angle_destination) {while (angle_destination angle1+step_angle) {Serial.print ("\ n -------------- * * * * * * ------- ----------- / n "); Serial.print ("angle_destination = / t"); Serial.print (זווית_תפקיד); Serial.print ("\ n angle2 = / t"); Serial.print (זווית 1); אם (זווית_הגדרה_זווית 1 +שלב_מסלול) {זווית1 += שלב_זווית; moteur1.write (angle1);;} עיכוב (100); } moteur1.write (זווית_דיסטנציה); } vooto goto_moteur2 (int angle_destination) {
בעוד (זווית_הגדרה_זווית 2+צלע_שלב)
{Serial.print ("\ n -------------- * * * * * * ------------------ / n"); Serial.print ("angle_destination = / t"); Serial.print (זווית_תפקיד); Serial.print ("\ n angle3 = / t"); Serial.print (זווית 2); אם (זווית_הגדרה_זווית 2 +שלב_אנגלית) {זווית2 += שלב_זווית; moteur2.write (angle2);} עיכוב (100); } moteur2.write (זווית_דיסטנציה); } void goto_moteur3 (int angle_destination) {
בעוד (זווית_הגדרה_זווית 3+צלע_שלב)
{Serial.print ("\ n -------------- * * * * * * ------------------ / n"); Serial.print ("angle_destination = / t"); Serial.print (זווית_תפקיד); Serial.print ("\ n angle4 = / t"); Serial.print (angle3); if (angle_destination angle3 +step_angle) {angle3 += step_angle; moteur3.write (angle3);} עיכוב (100); } moteur3.write (זווית_דיסטנציה); } חלל goto_moteur5 (int angle_destination) {
בעוד (זווית_הגדרה זווית 5+צלע_שלב)
{Serial.print ("\ n -------------- * * * * * * ------------------ / n"); Serial.print ("angle_destination = / t"); Serial.print (זווית_תפקיד); Serial.print ("\ n angle5 = / t"); Serial.print (זווית 5); אם (זווית_התאמה_זווית5 +שלב_מסלול) {זווית5 += שלב_מסלול; moteur5.write (angle5);} עיכוב (100); } moteur5.write (זווית_דיסטנציה); }
void TouchDown_Release () // שחרור לחצן TouchDown
{if (angle5 <180) {angle5 = angle5+step_angle_mini; } moteur5.write (זווית 5); }
void TouchDown_Grab () // TouchDown Button Grab
{if (angle5> 0) {angle5 = angle5-step_angle_mini; } moteur5.write (זווית 5); } void Base_Rotation () {if (זווית 0) {angle = angle-step_angle; } זווית אחרת = 0; moteur.write (זווית); } void Waist_Rotation () {if (angle1 20) {angle1 = angle1-step_angle; } זווית אחרת 1 = 20; moteur1.write (זווית 1); } void Third_Arm_Rotation () {if (angle2 0) {angle2 = angle2-step_angle; } moteur2.write (זווית 2); } void Fourth_Arm_Rotation () {if (angle3 = 0) {angle3 = angle3-step_angle_mini; } moteur3.write (זווית 3); }
שלב 6: זהו
תודה שצפיתם, אני מקווה שהערכתם!
אם אהבת את ההנחיה הזו, אתה בהחלט יכול לבקר אותנו לעוד! =)
מוּמלָץ:
מתנפח זרוע מתנפח זרוע מתנפח על ידי שולחן עבודה: 4 שלבים (עם תמונות)
שולחן עבודה Wacky Wave מתנפח זרוע מתנפח Tube Man: תמיד רציתי לבנות מחשב שולחני בגודל "Wacky Wave מתנפח זרוע מתנפח", הידוע גם בשם איש Tube, הידוע גם בשם Skydancer, רקדן אוויר … פרויקט זה התחיל בחזרה בשנת 2013, הצגתי את האב טיפוס הגס הראשון שנעשה
ילד משחק משחק רטרו חיצוני חיצוני: 3 שלבים
רטרו חיצוני משחק כונן משחקים: מאמר זה יכול להציג את עצמך במועדון חיצוני או ייחודי (du moins à ma connaissance). תחילת כריכה עם ממשק USB-SATA דה מונ דיסקה במהלך חיצוניים. לאחר שעות מסוימות מעבר לתפקיד
משחק סיימון - משחק מהנה !: 5 שלבים
משחק סיימון - משחק מהנה !: הפניה: כאן לאחר סוף שבוע ארוך, אתה חייב באמת להשתדל להשלים את כל המשימות והעבודה שאתה אחראי להן. הגיע הזמן שנאמן את המוח שלנו, לא? מלבד אותם משחקים משעממים וחסרי משמעות, ישנו משחק בשם Simon Game
כיצד להרכיב זרוע רובוט מעצימה (חלק 3: זרוע רובוט) - מבוססת על המיקרו: BITN: 8 שלבים
כיצד להרכיב זרוע רובוט מעצימה (חלק 3: זרוע רובוט) - מבוססת על המיקרו: BITN: תהליך ההתקנה הבא מבוסס על השלמת מצב המכשולים הימנעות. תהליך ההתקנה בחלק הקודם זהה לתהליך ההתקנה במצב מעקב אחר קווים. אז בואו נסתכל על הצורה הסופית של A
משחק מבוך לשליטה באמצעות סמארטפון: 5 שלבים (עם תמונות)
משחק מבוך לשליטה באמצעות סמארטפון: משחק מבוך לשליטה באמצעות טלפון חכם. המבוך נע בהתאם לשיפוע הסמארטפון. ראשית כל, עיין בסרטון. תמונת תנועה 1. Raspberry Pi הוא שרת Websocket. הסמארטפון הוא לקוח Websocket. הסמארטפון שולח את