فهرست مطالب:

بازی بازوی روباتیک - کنترل کننده تلفن هوشمند: 6 مرحله
بازی بازوی روباتیک - کنترل کننده تلفن هوشمند: 6 مرحله

تصویری: بازی بازوی روباتیک - کنترل کننده تلفن هوشمند: 6 مرحله

تصویری: بازی بازوی روباتیک - کنترل کننده تلفن هوشمند: 6 مرحله
تصویری: 😉 وقتی شوهرش سرکاره، ربات مرد تمام خواسته های زن را برآورده می کند 2024, نوامبر
Anonim
بازی بازوی روباتیک - کنترل کننده تلفن هوشمند
بازی بازوی روباتیک - کنترل کننده تلفن هوشمند

سلام !

در اینجا یک بازی سرگرم کننده تابستانی است: بازوی رباتیک توسط تلفن هوشمند کنترل می شود !!

همانطور که در ویدیو مشاهده می کنید ، می توانید بازو را با چند جوی استیک در تلفن هوشمند خود کنترل کنید.

همچنین می توانید الگویی را که ربات در یک حلقه تکثیر می کند ذخیره کنید تا بعنوان مثال برخی کارهای تکراری را انجام دهد. اما این الگو مطابق میل شما قابل تغییر است !!!!

خلاق بودن !

مرحله 1: مواد

مواد
مواد

در اینجا می توانید مواد مورد نیاز خود را مشاهده کنید.

ساخت این بازوی رباتیک حدود 50 یورو برای شما هزینه خواهد داشت. نرم افزار و ابزارها قابل تعویض هستند ، اما من از آنها برای این پروژه استفاده کردم.

مرحله 2: بازوی رباتیک را به صورت سه بعدی چاپ کنید

چاپ سه بعدی بازوی روباتیک
چاپ سه بعدی بازوی روباتیک
چاپ سه بعدی بازوی روباتیک
چاپ سه بعدی بازوی روباتیک
چاپ سه بعدی بازوی روباتیک
چاپ سه بعدی بازوی روباتیک

بازوی روباتیک به صورت سه بعدی (با prusa i3 ما) چاپ شد.

با تشکر از وب سایت "HowtoMechatronics.com" ، فایلهای STL او برای ساخت بازوی سه بعدی عالی هستند.

حدود 20 ساعت طول می کشد تا تمام قطعات چاپ شوند.

مرحله 3: مونتاژ الکترونیکی

مونتاژ الکترونیکی
مونتاژ الکترونیکی

مونتاژ در 2 قسمت جدا شده است:

یک قسمت الکترونیکی ، که در آن آردوینو توسط پین های دیجیتال و سرویس بلوتوث (Rx ، Tx) به سروو متصل می شود.

بخش قدرت ، جایی که سروها با 2 شارژر تلفن (5 ولت ، حداکثر 2 آمپر) تغذیه می شوند.

مرحله 4: برنامه تلفن هوشمند

برنامه تلفن هوشمند
برنامه تلفن هوشمند

این برنامه بر روی مخترع برنامه ساخته شده است. ما از 2 جوی استیک برای کنترل 4 سروو و 2 دکمه دیگر برای کنترل گریپ نهایی استفاده می کنیم.

ما Arm و Smartphone را با استفاده از ماژول بلوتوث (HC-06) به هم متصل می کنیم.

در نهایت ، یک حالت ذخیره به کاربر اجازه می دهد تا 9 موقعیت برای بازو ذخیره کند.

سپس بازو به حالت خودکار می رود ، جایی که او موقعیت های ذخیره شده را بازتولید می کند.

مرحله 5: کد آردوینو

کد آردوینو
کد آردوینو
کد آردوینو
کد آردوینو

// 08/19 - گوشی هوشمند بازوی رباتیک کنترل می شود

#شامل #تعریف درست واقعی #تعریف نادرست // ************************************************* ************

کلمه تکرار ؛ // mot envoyé du module Arduino au smartphone

int chiffre_final = 0؛ int cmd = 3 ؛ // variable 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 activ_saving = 0؛ سرو موتئور ؛ // در définit notre servomoteur Servo moteur1؛ Servo moteur2؛ Servo moteur3؛ // Servo moteur4؛ Servo moteur5؛ int step_angle_mini = 4؛ int step_angle = 3؛ int angle، angle1، angle3، angle5، angle2؛ // angle int pas؛ int r ، r1 ، r2 ، r3 ؛ int enregistrer؛ باله بولی = FALSE ؛ boolean fin1 = FALSE ؛ boolean fin2 = FALSE ؛ boolean fin3 = FALSE ؛ boolean fin4 = FALSE ؛ کلمه w ؛ // variable envoyé du smartphone au module 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 setup () {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 = گیرنده ()؛ // on va recevoir une information du smartphone، la variable w switch (w) {case 1: TouchDown_Release ()؛ break؛ مورد 2: TouchDown_Grab () ؛ شکستن ؛ مورد 3: Base_Rotation () ؛ break؛ مورد 4: Base_AntiRotation () ؛ break؛ مورد 5: دور کمر () ؛ شکستن ؛ مورد 6: Waist_AntiRotation () ؛ شکستن ؛ مورد 7: Third_Arm_Rotation () ؛ break؛ مورد 8: Third_Arm_AntiRotation () ؛ break؛ مورد 9: چرخش_چهارم () ؛ شکستن ؛ مورد 10: Fourth_Arm_AntiRotation () ؛ break؛ // مورد 11: Fifth_Arm_Rotation () ؛ break؛ // مورد 12: Fifth_Arm_AntiRotation () ؛ break؛ مورد 21: Serial.print ("دکمه مورد 1") ؛ chiffre_final = 1؛ sauvegarde_positions1 [0] = زاویه ؛ sauvegarde_positions1 [1] = angle1؛ sauvegarde_positions1 [2] = angle2؛ sauvegarde_positions1 [3] = angle3_posugegarde_4 = 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") ؛ activ_saving = 1 ؛ chiffre_final = 0 ؛ شکستن ؛ // شروع

مورد 33: Serial.print ("33") ؛ activ_saving = 0 ؛ break؛ // BUTTON SAVE پیش فرض: break؛ } if (w == 32) {Serial.print ("\ n بازتولید / 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 موقعیت Sauvegarde 2: / n")؛ برای (i = 0؛ i <5؛ i ++) {Serial.print (sauvegarde_positions2 )؛ Serial.print ("\ t")؛} Serial.print ("\ n موقعیت Sauvegarde 3: / n")؛ برای (i = 0؛ i <5؛ i ++) {Serial.print (sauvegarde_positions3 )؛ Serial.print ("\ t")؛} برای (i = 1؛ i <= chiffre_final؛ i ++) {سریال چاپ ("\ n / n شروع / n حلقه:")؛ Serial.print (i)؛ Serial.print ("\ n")؛ سوئیچ (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 ********************* تکمیل مجدد ***************** / 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؛ }}

void goto_moteur (int angle_destination)

{while (angle_destination angle+step_angle) {Serial.print ("\ n -------------- * * * * * * -------------- ---- / n ") ؛ Serial.print ("angle_destination = / t")؛ Serial.print (angle_destination)؛ Serial.print ("\ n angle1 = / t") ؛ Serial.print (زاویه) ؛ if (angle_destination angle + step_angle) {angle = angle + step_angle؛ moteur.write (angle)؛} تاخیر (100) ؛ } moteur.write (angle_destination)؛ } void goto_moteur1 (int angle_destination) {while (angle_destination angle1+step_angle) {Serial.print ("\ n -------------- * * * * * * ------- ----------- / n ") ؛ Serial.print ("angle_destination = / t")؛ Serial.print (angle_destination) ؛ Serial.print ("\ n angle2 = / t") ؛ Serial.print (angle1) ؛ if (angle_destination angle1 +step_angle) {angle1 += step_angle؛ moteur1.write (angle1) ؛؛} تاخیر (100)؛ } moteur1.write (angle_destination)؛ } void goto_moteur2 (int angle_destination) {

while (زاویه_قبل زاویه 2+زاویه_قدم)

{Serial.print ("\ n -------------- * * * * * * ------------------ / n") ؛ Serial.print ("angle_destination = / t")؛ Serial.print (angle_destination) ؛ Serial.print ("\ n angle3 = / t") ؛ Serial.print (angle2) ؛ if (angle_destination angle2 +step_angle) {angle2 += step_angle؛ moteur2.write (angle2) ؛} تأخیر (100) ؛ } moteur2.write (angle_destination)؛ } void goto_moteur3 (int angle_destination) {

while (زاویه_قبل زاویه 3+زاویه_قدم)

{Serial.print ("\ n -------------- * * * * * * ------------------ / n") ؛ Serial.print ("angle_destination = / t")؛ Serial.print (angle_destination) ؛ Serial.print ("\ n angle4 = / t") ؛ Serial.print (angle3) ؛ if (angle_destination angle3 +step_angle) {angle3 += step_angle؛ moteur3.write (angle3) ؛} تاخیر (100) ؛ } moteur3.write (angle_destination)؛ } void goto_moteur5 (int angle_destination) {

در حالی که (زاویه_قبل زاویه 5+زاویه_گام)

{Serial.print ("\ n -------------- * * * * * * ------------------ / n") ؛ Serial.print ("angle_destination = / t")؛ Serial.print (angle_destination)؛ Serial.print ("\ n angle5 = / t") ؛ Serial.print (angle5) ؛ if (angle_destination angle55 +step_angle) {angle5 += step_angle؛ moteur5.write (angle5)؛} تأخیر (100)؛ } moteur5.write (angle_destination)؛ }

void TouchDown_Release () // انتشار دکمه TouchDown

{if (angle5 <180) {angle5 = angle5+step_angle_mini؛ } moteur5.write (angle5)؛ }

void TouchDown_Grab () // گرفتن دکمه TouchDown

{if (angle5> 0) {angle5 = angle5-step_angle_mini؛ } moteur5.write (angle5)؛ } void Base_Rotation () {if (angle 0) {angle = angle-step_angle؛ } else else = 0؛ moteur.write (زاویه)؛ } void Waist_Rotation () {if (angle1 20) {angle1 = angle1-step_angle؛ } else angle1 = 20؛ moteur1.write (angle1)؛ } void Third_Arm_Rotation () {if (angle2 0) {angle2 = angle2-step_angle؛ } moteur2.write (angle2)؛ } void Fourth_Arm_Rotation () {if (angle3 = 0) {angle3 = angle3-step_angle_mini؛ } moteur3.write (angle3)؛ }

مرحله ششم: همین

ممنون از تماشا ، امیدوارم مورد توجه شما قرار گرفته باشد!

اگر این دستورالعمل را دوست داشتید ، مطمئناً می توانید برای اطلاعات بیشتر از ما دیدن کنید! =)

توصیه شده: