Съдържание:

Robotic Arm Game - Контролер за смартфон: 6 стъпки
Robotic Arm Game - Контролер за смартфон: 6 стъпки

Видео: Robotic Arm Game - Контролер за смартфон: 6 стъпки

Видео: Robotic Arm Game - Контролер за смартфон: 6 стъпки
Видео: She forgot her phone 😂 !!! #gamesir #controller #gertieinar 2024, Юли
Anonim
Robotic Arm Game - Контролер за смартфон
Robotic Arm Game - Контролер за смартфон

Здравейте !

Ето една забавна лятна игра: Роботизираната ръка, контролирана от смартфон !!

Както можете да видите във видеото, можете да контролирате ръката с няколко джойстика на вашия смартфон.

Можете също така да запазите модел, който роботът ще възпроизвежда в цикъл, за да изпълнява някои повтарящи се задачи като пример. Но този модел се модулира както желаете !!!!

Бъди креативен !

Стъпка 1: Материали

Материали
Материали

Тук можете да видите необходимия материал.

Изграждането на тази роботизирана ръка ще ви струва около 50 евро. Софтуерът и инструментите могат да бъдат заменени, но аз използвах тези за този проект.

Стъпка 2: 3D печат на роботизираната ръка

3D печат на роботизираната ръка
3D печат на роботизираната ръка
3D печат на роботизираната ръка
3D печат на роботизираната ръка
3D печат на роботизираната ръка
3D печат на роботизираната ръка

Роботизираната ръка беше 3D отпечатана (с нашия prusa i3).

Благодарение на уебсайта "HowtoMechatronics.com", неговите STL файлове са страхотни, за да създадат 3D ръка.

Отпечатването на всички парчета ще отнеме около 20 часа.

Стъпка 3: Електронен монтаж

Електронен монтаж
Електронен монтаж

Монтажът е разделен на 2 части:

Електронна част, където arduino е свързан към сервомоторите чрез цифровите щифтове и с Bluetooth устройството (Rx, Tx).

Захранваща част, където сервомоторите се захранват с 2 зарядни за телефона (5V, 2A max).

Стъпка 4: Приложение за смартфон

Приложение за смартфон
Приложение за смартфон

Приложението е направено на App inventor 2. Използваме 2 джойстика за управление на 4 сервоустройства и още 2 бутона за контрол на крайния захват.

Свързваме Arm и Smartphone заедно с помощта на Bluetooth модул (HC-06).

И накрая, режимът на запазване позволява на потребителя да запази до 9 позиции за ръката.

След това ръката ще премине в автоматичен режим, където ще възпроизведе запазените позиции.

Стъпка 5: Кодът на Arduino

Кодът на Ардуино
Кодът на Ардуино
Кодът на Ардуино
Кодът на Ардуино

// 08/19 - Управляван смартфон с роботизирана ръка

#include #define TRUE true #define FALSE false // ******************** ДЕКЛАРАЦИИ ***************** ***********

дума представител; // мот пратеник на модула Arduino или смартфон

int chiffre_final = 0; int cmd = 3; // променлива команда 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 enable_saving = 0; Серво мотор; // на définit notre сервомотор Servo moteur1; Серво мотор2; Сервомотор3; // Servo moteur4; Серво мотор5; int step_angle_mini = 4; int step_angle = 3; int ъгъл, ъгъл1, ъгъл3, ъгъл5, ъгъл2; // ъгъл int pas; int r, r1, r2, r3; int регистратор; булева перка = FALSE; булева fin1 = FALSE; булева fin2 = FALSE; булева fin3 = FALSE; логически 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 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); // на релеф l'objet au pin de commandnde 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 ****************** ***************** void loop () {

// Serial.print ("ъгъл");

//Serial.print(angle);Serial.print ("\ t"); Serial.print (angle1); Serial.print ("\ t"); Serial.print (ъгъл2); Serial.print ("\ t "); Serial.print (angle3); Serial.print (" / t "); Serial.print (angle5); Serial.print (" / n ");

//Serial.print(" ъгъл ");

int i; w = приемник (); // на вашия приемник с информация за смартфона, с променлива w switch (w) {случай 1: TouchDown_Release (); break; случай 2: TouchDown_Grab (); break; случай 3: Base_Rotation (); break; случай 4: Base_AntiRotation (); break; случай 5: Waist_Rotation (); break; случай 6: Waist_AntiRotation (); break; случай 7: Трета_Arm_Rotation (); прекъсване; случай 8: Third_Arm_AntiRotation (); break; случай 9: Четвърта_Arm_Rotation (); break; случай 10: Четвърта_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] = ъгъл1; sauvegarde_positions1 [2] = ъгъл2; sauvegarde_positions1 [3] = ъгъл3; sauvegarde_positions1 [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] = ъгъл1; sauvegarde_positions2 [2] = ъгъл2; sauvegarde_positions2 [3] = ъгъл3; sauvegarde_positions2 [4] = ъгъл5; прекъсване; случай 23: chiffre_final = 3; sauvegarde_positions3 [0] = ъгъл; sauvegarde_positions3 [1] = ъгъл1; sauvegarde_positions3 [2] = ъгъл2; sauvegarde_positions3 [3] = ъгъл3; sauvegarde_positions3 [4] = ъгъл5; почивка; случай 24: chiffre_final = 4; sauvegarde_positions4 [0] = ъгъл; sauvegarde_positions4 [1] = ъгъл1; sauvegarde_positions4 [2] = ъгъл2; sauvegarde_positions4 [3] = ъгъл3; sauvegarde_positions4 [4] = ъгъл5; прекъсване; случай 25: chiffre_final = 5; sauvegarde_positions5 [0] = ъгъл; sauvegarde_positions5 [1] = ъгъл1; sauvegarde_positions5 [2] = ъгъл2; sauvegarde_positions5 [3] = ъгъл3; sauvegarde_positions5 [4] = ъгъл5; прекъсване; случай 26: chiffre_final = 6; sauvegarde_positions6 [0] = ъгъл; sauvegarde_positions6 [1] = ъгъл1; sauvegarde_positions6 [2] = ъгъл2; sauvegarde_positions6 [3] = ъгъл3; sauvegarde_positions6 [4] = ъгъл5; прекъсване; случай 27: chiffre_final = 7; sauvegarde_positions7 [0] = ъгъл; sauvegarde_positions7 [1] = ъгъл1; sauvegarde_positions7 [2] = ъгъл2; sauvegarde_positions7 [3] = ъгъл3; sauvegarde_positions7 [4] = ъгъл5; прекъсване; случай 28: chiffre_final = 8; sauvegarde_positions8 [0] = ъгъл; sauvegarde_positions8 [1] = ъгъл1; sauvegarde_positions8 [2] = ъгъл2; sauvegarde_positions8 [3] = ъгъл3; sauvegarde_positions8 [4] = ъгъл5; прекъсване; случай 29: chiffre_final = 9; sauvegarde_positions9 [0] = ъгъл; sauvegarde_positions9 [1] = ъгъл1; sauvegarde_positions9 [2] = ъгъл2; sauvegarde_positions9 [3] = ъгъл3; sauvegarde_positions9 [4] = ъгъл5; прекъсване;

случай 31: Serial.print ("31"); enable_saving = 1; chiffre_final = 0; break; // НАЧАЛО

случай 33: Serial.print ("33"); enable_saving = 0; break; // BUTTON SAVE по подразбиране: break; } if (w == 32) {Serial.print ("\ nПроизвеждане / nChiffre окончателно:"); Serial.print (chiffre_final); Serial.print ("\ n Sauvegarde позиция 1: / n"); for (i = 0; i <5; i ++) {Serial.print (sauvegarde_positions1 ); Serial.print ("\ t");} Serial.print ("\ n Sauvegarde позиция 2: / n"); for (i = 0; i <5; i ++) {Serial.print (sauvegarde_positions2 ); Serial.print ("\ t");} Serial.print ("\ n Sauvegarde позиция 3: / n"); for (i = 0; i <5; i ++) {Serial.print (sauvegarde_positions3 ); Serial.print ("\ t");} for (i = 1; i <= chiffre_final; i ++) {Serial. print ("\ n / n BEGIN / 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 ("дебют / 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 -------------- * * * * * * * -------------- ----\н"); Serial.print ("angle_destination = / t"); Serial.print (angle_destination); Serial.print ("\ n angle1 = / t"); Serial.print (ъгъл); if (ъгъл на дестинация ъгъл + ъгъл на стъпка) {ъгъл = ъгъл + ъгъл на стъпка; moteur.write (ъгъл);} забавяне (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 ъгъл2 = / t"); Serial.print (ъгъл1); if (ъгъл_назначение ъгъл1 +стъпка_ъгъл) {ъгъл1 += стъпка_ъгъл; moteur1.write (ъгъл1);;} забавяне (100); } moteur1.write (ъгъл_дестинация); } 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 (ъгъл2); if (ъгъл на дестинация ъгъл2 +ъгъл на стъпка) {ъгъл2 += ъгъл на стъпка; moteur2.write (ъгъл2);} забавяне (100); } moteur2.write (ъгъл_дестинация); } void goto_moteur3 (int angle_destination) {

while (ъгъл_ дестинация ъгъл3+стъпка_ъгъл)

{Serial.print ("\ n -------------- * * * * * * * ------------------ / n"); Serial.print ("angle_destination = / t"); Serial.print (angle_destination); Serial.print ("\ n ъгъл4 = / t"); Serial.print (ъгъл3); if (ъгъл_назначение ъгъл3 +стъпка_ъгъл) {ъгъл3 += стъпка_ъгъл; moteur3.write (ъгъл3);} забавяне (100); } moteur3.write (ъгъл_дестинация); } void goto_moteur5 (int angle_destination) {

while (ъгъл_ дестинация ъгъл5+стъпка_ъгъл)

{Serial.print ("\ n -------------- * * * * * * * ------------------ / n"); Serial.print ("angle_destination = / t"); Serial.print (angle_destination); Serial.print ("\ n angle5 = / t"); Serial.print (angle5); if (ъгъл_дестинация ъгъл5 +ъгъл на стъпка) {ъгъл5 += ъгъл на стъпка; moteur5.write (angle5);} забавяне (100); } moteur5.write (ъгъл_дестинация); }

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 (ъгъл 0) {ъгъл = angle-step_angle; } else ъгъл = 0; moteur.write (ъгъл); } void Waist_Rotation () {if (angle1 20) {angle1 = angle1-step_angle; } else ъгъл1 = 20; moteur1.write (ъгъл1); } void Third_Arm_Rotation () {if (angle2 0) {angle2 = angle2-step_angle; } moteur2.write (ъгъл2); } void Четвърта_Arm_Rotation () {if (angle3 = 0) {angle3 = angle3-step_angle_mini; } moteur3.write (ъгъл3); }

Стъпка 6: Това е

Благодаря за гледането, надявам се да сте оценили!

Ако ви е харесал този Instructable, със сигурност можете да ни посетите за повече! =)

Препоръчано: