جدول المحتويات:
2025 مؤلف: John Day | [email protected]. آخر تعديل: 2025-01-13 06:56
أهلا !
إليك لعبة صيفية ممتعة: الذراع الآلية التي يتحكم فيها الهاتف الذكي !!
كما ترى في الفيديو ، يمكنك التحكم في الذراع ببعض أذرع التحكم على هاتفك الذكي.
يمكنك أيضًا حفظ نمط ، يقوم الروبوت بإعادة إنتاجه في حلقة ، من أجل القيام ببعض المهام المتكررة كمثال. لكن هذا النمط قابل للتعديل كما يحلو لك !!!!
كن مبدعا !
الخطوة 1: المواد
هنا يمكنك رؤية المواد التي تحتاجها.
سيكلفك بناء هذا الذراع الآلية حوالي 50 يورو. يمكن استبدال البرامج والأدوات ، لكنني استخدمتها لهذا المشروع.
الخطوة الثانية: طباعة ثلاثية الأبعاد للذراع الآلي
تمت طباعة الذراع الآلية ثلاثية الأبعاد (باستخدام برنامج prusa i3 الخاص بنا).
بفضل موقع الويب "HowtoMechatronics.com" ، فإن ملفات STL الخاصة به رائعة من أجل بناء ذراع ثلاثي الأبعاد.
سوف يستغرق الأمر حوالي 20 ساعة لطباعة جميع القطع.
الخطوة 3: المونتاج الإلكتروني
المونتاج منفصل إلى جزئين:
جزء إلكتروني ، حيث يتم توصيل اردوينو بالمضاعفات عن طريق الدبابيس الرقمية ، وبجهاز البلوتوث (Rx ، Tx).
جزء الطاقة ، حيث يتم تشغيل الماكينات بشاحن هاتف (5 فولت ، 2 أمبير كحد أقصى).
الخطوة 4: تطبيق الهاتف الذكي
تم إنشاء التطبيق على مخترع التطبيق 2. نستخدم 2 جويستيك للتحكم في 4 أجهزة و 2 أزرار أخرى للتحكم في القبضة النهائية.
نقوم بتوصيل Arm و Smartphone معًا باستخدام وحدة Bluetooth (HC-06).
أخيرًا ، يتيح وضع الحفظ للمستخدم حفظ ما يصل إلى 9 وظائف للذراع.
سوف ينتقل الذراع بعد ذلك إلى الوضع التلقائي ، حيث يقوم بإعادة إنتاج المواضع المحفوظة.
الخطوة 5: كود اردوينو
// 08/19 - يتم التحكم في الهاتف الذكي ذو الذراع الآلية
# تضمين # تعريف صحيح صحيح # تعريف خطأ خطأ // ********************** الإعلانات ***************** ***********
مندوب كلمة // mot envoyé du module اردوينو au الذكي
int chiffre_final = 0 ؛ int cmd = 3 ؛ // متغير commande du servo moteur (troisième fil (البرتقالي ، jaune)) 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 ؛ مؤازر مؤازر 2 ؛ مؤازر مؤازر 3 ؛ // مؤازر moteur4 ؛ مؤازر مؤازر 5 ؛ كثافة العمليات step_angle_mini = 4 ؛ كثافة العمليات step_angle = 3 ؛ زاوية int ، زاوية 1 ، زاوية 3 ، زاوية 5 ، زاوية 2 ؛ // زاوية int pas ؛ int r ، r1 ، r2 ، r3 ؛ مسجل int زعنفة منطقية = خطأ ؛ زعنفة منطقية 1 = خطأ ؛ زعنفة منطقية 2 = خطأ ؛ زعنفة منطقية 3 = خطأ ؛ زعنفة منطقية 4 = خطأ ؛ كلمة w ؛ // متغير envoyé du للهواتف الذكية 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] ؛
// زاوية كثافة العمليات ؛ // زاوية الدوران (0 أ 180)
//********************اقامة*************************** ******** إعداد باطل () {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) ؛ // على 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 (زاوية 1)؛ Serial.print ("\ t")؛ Serial.print (زاوية 2)؛ Serial.print ("\ t") ") ؛ Serial.print (زاوية 3) ؛ Serial.print (" / t ") ؛ Serial.print (زاوية 5) ؛ Serial.print (" / n ") ؛
//Serial.print("angle ") ؛
إنت أنا w = recevoir () ؛ // on recevoir une information du smart، la متغير 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: 4th_Arm_Rotation () ؛ كسر ؛ الحالة 10: 4th_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_positions1 [4] = زاوية 5 ؛ 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] = angle؛ sauvegarde_positions2 [1] = angle1؛ sauvegarde_positions2 [2] = angle2؛ sauvegarde_positions2 [3] = angle3؛ sauvegarde_positions2 [4] = angle5؛ استراحة؛ الحالة 23: chiffre_final = 3؛ sauvegarde_positions3 [0] = angle؛ sauvegarde_positions3 [1] = angle1؛ sauvegarde_positions3 [2] = angle2؛ sauvegarde_positions3 [3] = angle3؛ sauvegarde_positions3 [4] = angle5؛ break الحالة 24: chiffre_final = 4؛ sauvegarde_positions4 [0] = angle؛ sauvegarde_positions4 [1] = angle1؛ sauvegarde_positions4 [2] = angle2؛ sauvegarde_positions4 [3] = angle3؛ sauvegarde_positions4 [4] = angle5؛ استراحة؛ الحالة 25: chiffre_final = 5؛ sauvegarde_positions5 [0] = angle؛ sauvegarde_positions5 [1] = angle1؛ sauvegarde_positions5 [2] = angle2؛ sauvegarde_positions5 [3] = angle3؛ sauvegarde_positions5 [4] = angle5؛ استراحة؛ الحالة 26: chiffre_final = 6؛ sauvegarde_positions6 [0] = angle؛ sauvegarde_positions6 [1] = angle1؛ sauvegarde_positions6 [2] = angle2؛ sauvegarde_positions6 [3] = angle3؛ sauvegarde_positions6 [4] = angle5؛ استراحة؛ الحالة 27: chiffre_final = 7؛ sauvegarde_positions7 [0] = angle؛ sauvegarde_positions7 [1] = angle1؛ sauvegarde_positions7 [2] = angle2؛ sauvegarde_positions7 [3] = angle3؛ sauvegarde_positions7 [4] = angle5؛ استراحة؛ الحالة 28: chiffre_final = 8؛ sauvegarde_positions8 [0] = angle؛ sauvegarde_positions8 [1] = angle1؛ sauvegarde_positions8 [2] = angle2؛ sauvegarde_positions8 [3] = angle3؛ sauvegarde_positions8 [4] = angle5؛ استراحة؛ الحالة 29: chiffre_final = 9؛ sauvegarde_positions9 [0] = angle؛ 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 ؛ استراحة ؛ // BUTTON SAVE الافتراضي: استراحة ؛ } إذا (w == 32) {Serial.print ("\ nReproduce / nChiffre final:")؛ Serial.print (chiffre_final) ؛ Serial.print ("\ n Sauvegarde position 1: / n")؛ لـ (i = 0؛ i <5؛ i ++) {Serial.print (sauvegarde_positions1 )؛ Serial.print ("\ t")؛} Serial.print ("\ n Sauvegarde position 2: / n")؛ لـ (i = 0؛ i <5؛ i ++) {Serial.print (sauvegarde_positions2 )؛ Serial.print ("\ t")؛} Serial.print ("\ n Sauvegarde position 3: / n")؛ لـ (i = 0؛ i <5؛ i ++) {Serial.print (sauvegarde_positions3 )؛ Serial.print ("\ t")؛} لـ (i = 1؛ i <= chiffre_final؛ i ++) {Serial. طباعة ("\ 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 *********************** FIN REPRODUCE ***************** \ن ")؛ تأخير (500) ؛ } /*Serial.print ("debut / 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) ؛ } // **************************** الوظائف ******************** ********************
كلمة recevoir () {// fonction permettant de recevoir l'information du phone
إذا (Serial.available ()) {w = Serial.read () ،
Serial.flush () ،
عودة ث ؛ }}
goto_moteur باطلة (int angle_destination)
{while (angle_destination angle + step_angle) {Serial.print ("\ 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)؛} delay (100)؛ } moteur.write (angle_destination) ؛ } void goto_moteur1 (int angle_destination) {while (angle_destination angle1 + step_angle) {Serial.print ("\ n -------------- * * * * * * ------- -----------\ن")؛ Serial.print ("angle_destination = / t") ؛ Serial.print (angle_destination) ؛ Serial.print ("\ n angle2 = / t") ؛ Serial.print (زاوية 1) ؛ if (angle_destination angle1 + step_angle) {angle1 + = step_angle ؛ moteur1.write (زاوية 1) ؛؛} تأخير (100) ؛ } moteur1.write (angle_destination) ؛ } void goto_moteur2 (int angle_destination) {
بينما (زاوية الوجهة 2 + الخطوة_انجل)
{Serial.print ("\ n -------------- * * * * * * ------------------ / n") ؛ Serial.print ("angle_destination = / t") ؛ Serial.print (angle_destination) ؛ Serial.print ("\ n angle3 = / t") ؛ Serial.print (زاوية 2) ؛ if (angle_destination angle2 + step_angle) {angle2 + = step_angle ؛ moteur2.write (angle2) ؛} تأخير (100) ؛ } moteur2.write (angle_destination) ؛ } void goto_moteur3 (int angle_destination) {
بينما (زاوية الوجهة 3 + مثلث الخطوة)
{Serial.print ("\ n -------------- * * * * * * ------------------ / n") ؛ Serial.print ("angle_destination = / t") ؛ Serial.print (angle_destination) ؛ Serial.print ("\ n angle4 = / t") ؛ Serial.print (زاوية 3) ؛ if (angle_destination angle3 + step_angle) {angle3 + = step_angle ؛ moteur3.write (زاوية 3) ؛} تأخير (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 (زاوية 5) ؛ if (angle_destination angle5 + step_angle) {angle5 + = step_angle ؛ moteur5.write (زاوية 5) ؛} تأخير (100) ؛ } moteur5.write (angle_destination) ؛ }
باطل TouchDown_Release () // TouchDown Button Release
{if (angle5 <180) {angle5 = angle5 + step_angle_mini ؛ } moteur5.write (زاوية 5) ؛ }
باطل TouchDown_Grab () // انتزاع زر TouchDown
{if (angle5> 0) {angle5 = angle5-step_angle_mini ؛ } moteur5.write (زاوية 5) ؛ } void Base_Rotation () {if (angle 0) {angle = angle-step_angle؛ } زاوية أخرى = 0 ؛ moteur.write (زاوية) ؛ } void Waist_Rotation () {if (angle1 20) {angle1 = angle1-step_angle؛ } else angle1 = 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: هذا كل شيء
شكرا للمشاهدة ، اتمنى ان تكون مقدرا!
إذا أعجبك هذا Instructable ، يمكنك بالتأكيد زيارتنا للمزيد! =)