Оглавление:

Игра с роботизированной рукой - контроллер смартфона: 6 шагов
Игра с роботизированной рукой - контроллер смартфона: 6 шагов

Видео: Игра с роботизированной рукой - контроллер смартфона: 6 шагов

Видео: Игра с роботизированной рукой - контроллер смартфона: 6 шагов
Видео: Проверка китайца на безопасность #blondinkadrive 2024, Ноябрь
Anonim
Игра с роботизированной рукой - контроллер смартфона
Игра с роботизированной рукой - контроллер смартфона

Привет !

Вот веселая летняя игра: Роботизированная рука, управляемая смартфоном !!

Как вы можете видеть на видео, вы можете управлять рычагом с помощью некоторых джойстиков на своем смартфоне.

Вы также можете сохранить шаблон, который робот будет воспроизводить в цикле, чтобы выполнять некоторые повторяющиеся задачи в качестве примера. Но эту выкройку можно модулировать по вашему желанию !!!!

Будь креативным !

Шаг 1: материалы

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

Здесь вы можете увидеть необходимый вам материал.

Сборка робота-руки обойдется вам примерно в 50 евро. Программное обеспечение и инструменты можно заменить, но я использовал их для этого проекта.

Шаг 2: 3D-печать робота-манипулятора

3D-печать робота-манипулятора
3D-печать робота-манипулятора
3D-печать робота-манипулятора
3D-печать робота-манипулятора
3D-печать робота-манипулятора
3D-печать робота-манипулятора

Роботизированная рука была напечатана на 3D-принтере (с нашей prusa i3).

Благодаря веб-сайту "HowtoMechatronics.com" его файлы STL великолепны для создания трехмерной руки.

На печать всех деталей уйдет около 20 часов.

Шаг 3: электронный монтаж

Электронный монтаж
Электронный монтаж

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

Электронная часть, в которой Arduino подключается к сервоприводам с помощью цифровых контактов и с устройством Bluetooth (Rx, Tx).

Блок питания, где сервоприводы питаются от двух зарядных устройств для телефонов (5 В, 2 А макс.).

Шаг 4. Приложение для смартфона

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

Приложение было создано на App Inventor 2. Мы используем 2 джойстика для управления 4 сервоприводами и еще 2 кнопки для управления окончательным захватом.

Мы соединяем руку и смартфон вместе с помощью модуля Bluetooth (HC-06).

Наконец, режим сохранения позволяет пользователю сохранять до 9 позиций для руки.

Затем рука перейдет в автоматический режим, в котором он воспроизведет сохраненные положения.

Шаг 5: Код Arduino

Код Arduino
Код Arduino
Код Arduino
Код Arduino

// 19.08 - Смартфон с роботизированной рукой

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

слово rep; // mot envoyé du module Arduino au смартфон

int chiffre_final = 0; int cmd = 3; // переменная command 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 activate_saving = 0; Сервомотор; // задан notre servomoteur Servo moteur1; Servo moteur2; Servo moteur3; // Сервомотор4; Servo moteur5; int step_angle_mini = 4; int step_angle = 3; int angle, angle1, angle3, angle5, angle2; // угол int pas; int r, r1, r2, r3; int enregistrer; логическое fin = FALSE; логическое fin1 = FALSE; логическое fin2 = FALSE; логическое fin3 = FALSE; логическое fin4 = ЛОЖЬ; слово 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 angle; // угол поворота (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); // при использовании объекта управления moteur1.attach (cmd1); moteur2.attach (cmd2); moteur3.attach (cmd3); // moteur4.attach (cmd4); moteur5.attach (cmd5); moteur.write (6); угол = 6; moteur1.write (100); angle1 = 100; moteur2.write (90); moteur3.write (90); //moteur4.write(12); moteur5.write (90); угол = 6; angle1 = 100; angle2 = 90; angle3 = 90; angle5 = 90; Serial.begin (9600); // разрешение сообщения в модуле Bluetooth} // ******************** BOUCLE ****************** ***************** void loop () {

// Serial.print ("угол");

//Serial.print(angle);Serial.print ("\ t"); Serial.print (angle1); Serial.print ("\ t"); Serial.print (angle2); Serial.print ("\ t "); Серийный.принт (угол3); Серийный.принт (" / t "); Серийный.принт (угол5); Серийный.принт (" / n ");

//Serial.print("angle ");

int i; w = Recevoir (); // Получена информация со смартфона, переменная w switch (w) {case 1: TouchDown_Release (); break; случай 2: TouchDown_Grab (); перерыв; случай 3: Base_Rotation (); перерыв; случай 4: Base_AntiRotation (); перерыв; случай 5: Waist_Rotation (); перерыв; случай 6: Waist_AntiRotation (); перерыв; case 7: Third_Arm_Rotation (); перерыв; case 8: Third_Arm_AntiRotation (); перерыв; case 9: Fourth_Arm_Rotation (); перерыв; case 10: Fourth_Arm_AntiRotation (); перерыв; // случай 11: Fifth_Arm_Rotation (); break; // случай 12: Fifth_Arm_AntiRotation (); break; case 21: Serial.print ("кнопка корпуса 1"); chiffre_final = 1; sauvegarde_positions1 [0] = angle; sauvegarde_positions1 [1] = angle1; sauvegarde_positions1 [2] = angle2; sauvegarde_positions1 [3] = angle3; sauvegarde_positions1 [3] = angle3; sauvegarde_positions1 = angle5; Serial.println (sauvegarde_positions1 [1]); Serial.println (sauvegarde_positions1 [2]); Serial.println (sauvegarde_positions1 [3]); Serial.println (sauvegarde_positions1 [4]); перерыв; case 22: chiffre_final = 2; sauvegarde_positions2 [0] = угол; sauvegarde_positions2 [1] = angle1; sauvegarde_positions2 [2] = angle2; sauvegarde_positions2 [3] = angle3; sauvegarde_positions2 [4] = angle5; перерыв; case 23: chiffre_final = 3; sauvegarde_positions3 [0] = угол; sauvegarde_positions3 [1] = angle1; sauvegarde_positions3 [2] = angle2; sauvegarde_positions3 [3] = angle3; sauvegarde_positions3 [4] = angle5; break; case 24: chiffre_final = 4; sauvegarde_positions4 [0] = угол; sauvegarde_positions4 [1] = angle1; sauvegarde_positions4 [2] = angle2; sauvegarde_positions4 [3] = angle3; sauvegarde_positions4 [4] = angle5; перерыв; case 25: chiffre_final = 5; sauvegarde_positions5 [0] = угол; sauvegarde_positions5 [1] = angle1; sauvegarde_positions5 [2] = angle2; sauvegarde_positions5 [3] = angle3; sauvegarde_positions5 [4] = angle5; перерыв; case 26: chiffre_final = 6; sauvegarde_positions6 [0] = угол; sauvegarde_positions6 [1] = angle1; sauvegarde_positions6 [2] = angle2; sauvegarde_positions6 [3] = angle3; sauvegarde_positions6 [4] = angle5; перерыв; case 27: chiffre_final = 7; sauvegarde_positions7 [0] = угол; sauvegarde_positions7 [1] = angle1; sauvegarde_positions7 [2] = angle2; sauvegarde_positions7 [3] = angle3; sauvegarde_positions7 [4] = angle5; перерыв; case 28: chiffre_final = 8; sauvegarde_positions8 [0] = угол; sauvegarde_positions8 [1] = angle1; sauvegarde_positions8 [2] = angle2; sauvegarde_positions8 [3] = angle3; sauvegarde_positions8 [4] = angle5; перерыв; case 29: chiffre_final = 9; sauvegarde_positions9 [0] = угол; sauvegarde_positions9 [1] = angle1; sauvegarde_positions9 [2] = angle2; sauvegarde_positions9 [3] = angle3; sauvegarde_positions9 [4] = angle5; перерыв;

case 31: Serial.print ("31"); activate_saving = 1; chiffre_final = 0; break; // НАЧАТЬ

case 33: Serial.print ("33"); activate_saving = 0; break; // КНОПКА СОХРАНИТЬ default: break; } if (w == 32) {Serial.print ("\ nReproduce / nChiffre final:"); Серийный принт (chiffre_final); Serial.print ("\ n Позиция 1 Совегарда: / n"); for (i = 0; i <5; i ++) {Serial.print (sauvegarde_positions1 ); Serial.print ("\ t");} Serial.print ("\ n Sauvegarde position 2: / n"); for (i = 0; i <5; i ++) {Serial.print (sauvegarde_positions2 ); Serial.print ("\ t");} Serial.print ("\ n Sauvegarde position 3: / n"); for (i = 0; i <5; i ++) {Serial.print (sauvegarde_positions3 ); Serial.print ("\ t");} for (i = 1; i <= chiffre_final; i ++) {Последовательный. print ("\ n / n НАЧАТЬ / nЦикл:"); Serial.print (я); Serial.print ("\ n"); переключатель (я) {случай 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); перерыв; case 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); перерыв; case 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); перерыв; case 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 ("дебют / п"); 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 () {// функция для получения информации о смартфоне

если (Serial.available ()) {w = Serial.read ();

Serial.flush ();

return w; }}

void goto_moteur (int angle_destination)

{while (angle_destination angle + step_angle) {Serial.print ("\ n -------------- * * * * * * -------------- ---- / n "); Serial.print ("angle_destination = / t"); Серийный.принт (угол_передачи); Serial.print ("\ n angle1 = / t"); Serial.print (угол); if (angle_destination angle + step_angle) {angle = angle + step_angle; moteur.write (angle);} delay (100); } moteur.write (угол_передачи); } void goto_moteur1 (int angle_destination) {while (angle_destination angle1 + step_angle) {Serial.print ("\ n -------------- * * * * * * ------- ----------- / n "); Serial.print ("angle_destination = / t"); Серийный.принт (угол_передачи); Serial.print ("\ n angle2 = / t"); Serial.print (angle1); if (angle_destination angle1 + step_angle) {angle1 + = step_angle; moteur1.write (angle1);;} задержка (100); } moteur1.write (угол_передачи); } void goto_moteur2 (int angle_destination) {

в то время как (угол_назначения, угол2 + шаг_угол)

{Serial.print ("\ n -------------- * * * * * * ------------------ / n"); Serial.print ("angle_destination = / t"); Серийный.принт (угол_передачи); Serial.print ("\ n angle3 = / t"); Serial.print (angle2); if (angle_destination angle2 + step_angle) {angle2 + = step_angle; moteur2.write (angle2);} задержка (100); } moteur2.write (угол_передачи); } void goto_moteur3 (int angle_destination) {

в то время как (угол_назначения, угол3 + шаг_угол)

{Serial.print ("\ n -------------- * * * * * * ------------------ / n"); Serial.print ("angle_destination = / t"); Серийный.принт (угол_передачи); Serial.print ("\ n angle4 = / t"); Serial.print (angle3); if (angle_destination angle3 + step_angle) {angle3 + = step_angle; moteur3.write (angle3);} delay (100); } moteur3.write (угол_передачи); } void goto_moteur5 (int angle_destination) {

в то время как (угол_назначения, угол5 + шаг_угол)

{Serial.print ("\ n -------------- * * * * * * ------------------ / n"); Serial.print ("angle_destination = / t"); Серийный.принт (угол_передачи); Serial.print ("\ n angle5 = / t"); Serial.print (angle5); if (angle_destination angle5 + step_angle) {angle5 + = step_angle; 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

{если (angle5> 0) {angle5 = angle5-step_angle_mini; } moteur5.write (angle5); } void Base_Rotation () {если (угол 0) {угол = угол-шаг_угол; } иначе угол = 0; moteur.write (угол); } void Waist_Rotation () {if (angle1 20) {angle1 = angle1-step_angle; } иначе угол1 = 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); }

Шаг 6: Вот и все

Спасибо за просмотр, надеюсь, вы оценили!

Если вам понравилась эта инструкция, посетите нас, чтобы узнать больше! знак равно

Рекомендуемые: