Índice:
- Etapa 1: Materiais
- Etapa 2: imprimir em 3D o braço robótico
- Etapa 3: Montagem Eletrônica
- Etapa 4: aplicativo para smartphone
- Etapa 5: o código do Arduino
- Etapa 6: é isso
Vídeo: Jogo de braço robótico - controlador de smartphone: 6 etapas
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:36
Olá !
Aqui está um divertido jogo de verão: O braço robótico controlado por Smartphone !!
Como você pode ver no vídeo, você pode controlar o braço com alguns joysticks no seu smartphone.
Você também pode salvar um padrão, que o robô irá reproduzir em loop, para fazer algumas tarefas repetitivas, por exemplo. Mas esse padrão é modulável como você deseja !!!!
Seja criativo !
Etapa 1: Materiais
Aqui você pode ver o material que precisa.
Irá custar-lhe cerca de 50 € para construir este braço robótico. O software e as ferramentas podem ser substituídos, mas eu os usei para este projeto.
Etapa 2: imprimir em 3D o braço robótico
O braço robótico foi impresso em 3D (com nosso prusa i3).
Graças ao site "HowtoMechatronics.com", seus arquivos STL são fantásticos para construir um braço 3D.
A impressão de todas as peças demorará cerca de 20 horas.
Etapa 3: Montagem Eletrônica
A montagem é separada em 2 partes:
Uma parte eletrônica, onde o arduino é conectado aos servos pelos pinos digitais, e com o dispositivo Bluetooth (Rx, Tx).
Uma parte de alimentação, onde os servos são alimentados com 2 carregadores de telefone (5 V, 2 A no máximo).
Etapa 4: aplicativo para smartphone
O Aplicativo foi feito no App inventor 2. Usamos 2 Joystick para controlar 4 Servos e mais 2 Botões para controlar o Grip final.
Conectamos Arm e Smartphone juntos usando um módulo Bluetooth (HC-06).
Finalmente, um modo de economia permite ao usuário salvar até 9 posições para o braço.
O braço entrará em modo automático, onde reproduzirá as posições salvas.
Etapa 5: o código do Arduino
// 19/08 - Braço robótico controlado por smartphone
#include #define TRUE true #define FALSE false // ******************** DECLARAÇÕES ***************** ***********
palavra rep; // mot envoyé du module Arduino au smartphone
int chiffre_final = 0; int cmd = 3; // variável commande du servo moteur (troisième fil (orange, jaune)) int cmd1 = 5; // servo1 int cmd2 = 9; // servo2 int cmd3 = 10; // servo3 // int cmd4 = 10; // servo4 int cmd5 = 11; // pince int activate_saving = 0; Servo motor; // em définit notre servomoteur Servo moteur1; Servo moteur2; Servo moteur3; // Servo moteur4; Servo moteur5; int step_angle_mini = 4; ângulo_do_passo int = 3; ângulo interno, ângulo1, ângulo3, ângulo5, ângulo2; // ângulo int pas; int r, r1, r2, r3; int enregistrer; barbatana booleana = FALSO; boolean fin1 = FALSE; boolean fin2 = FALSE; boolean fin3 = FALSE; boolean fin4 = FALSE; palavra w; // variável 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];
// ângulo interno; // ângulo de rotação (0 a 180)
//********************CONFIGURAR*************************** ******** configuração vazia () {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); ângulo = 6; moteur1.write (100); ângulo1 = 100; moteur2.write (90); moteur3.write (90); //moteur4.write(12); moteur5.write (90); ângulo = 6; ângulo1 = 100; ângulo 2 = 90; ângulo 3 = 90; ângulo 5 = 90; Serial.begin (9600); // permettra de communiquer au module Bluetooth} // ********************* BOUCLE ******************* ****************** void loop () {
// Serial.print ("ângulo");
//Serial.print(angle);Serial.print ("\ t"); Serial.print (angle1); Serial.print ("\ t"); Serial.print (angle2); Serial.print ("\ t "); Serial.print (ângulo3); Serial.print (" / t "); Serial.print (ângulo5); Serial.print (" / n ");
//Serial.print("angle ");
int i; w = receber (); // ao receber uma informação do smartphone, a variável w switch (w) {case 1: TouchDown_Release (); break; caso 2: TouchDown_Grab (); quebrar; caso 3: Base_Rotation (); break; caso 4: Base_AntiRotation (); break; caso 5: Waist_Rotation (); break; caso 6: Waist_AntiRotation (); break; caso 7: Third_Arm_Rotation (); break; caso 8: Third_Arm_AntiRotation (); break; caso 9: Fourth_Arm_Rotation (); break; caso 10: Fourth_Arm_AntiRotation (); quebrar; // caso 11: Fifth_Arm_Rotation (); break; // caso 12: Fifth_Arm_AntiRotation (); break; case 21: Serial.print ("case button 1"); chiffre_final = 1; sauvegarde_positions1 [0] = ângulo; sauvegarde_positions1 [1] = ângulo1; sauvegarde_positions1 [2] = ângulo2; sauvegarde_positions1 [3] = ângulo3; sauvegarde_positions1 [1] = ângulo1; sauvegarde_positions1 [2] = ângulo2; sauvegarde_positions1 [3] = ângulo3; sauvegarde_positions1 [4] = ângulo5; Serial.println (sauvegarde_positions1 [1]); Serial.println (sauvegarde_positions1 [2]); Serial.println (sauvegarde_positions1 [3]); Serial.println (sauvegarde_positions1 [4]); pausa; caso 22: chiffre_final = 2; sauvegarde_positions2 [0] = ângulo; sauvegarde_positions2 [1] = ângulo1; sauvegarde_positions2 [2] = ângulo2; sauvegarde_positions2 [3] = ângulo3; sauvegarde_positions2 [4] = ângulo5; pausa; caso 23: chiffre_final = 3; sauvegarde_positions3 [0] = ângulo; sauvegarde_positions3 [1] = ângulo1; sauvegarde_positions3 [2] = ângulo2; sauvegarde_positions3 [3] = ângulo3; sauvegarde_positions3 [4] = ângulo5; break; caso 24: chiffre_final = 4; sauvegarde_positions4 [0] = ângulo; sauvegarde_positions4 [1] = ângulo1; sauvegarde_positions4 [2] = ângulo2; sauvegarde_positions4 [3] = ângulo3; sauvegarde_positions4 [4] = ângulo5; pausa; caso 25: chiffre_final = 5; sauvegarde_positions5 [0] = ângulo; sauvegarde_positions5 [1] = ângulo1; sauvegarde_positions5 [2] = ângulo2; sauvegarde_positions5 [3] = ângulo3; sauvegarde_positions5 [4] = ângulo5; pausa; caso 26: chiffre_final = 6; sauvegarde_positions6 [0] = ângulo; sauvegarde_positions6 [1] = ângulo1; sauvegarde_positions6 [2] = ângulo2; sauvegarde_positions6 [3] = ângulo3; sauvegarde_positions6 [4] = ângulo5; pausa; caso 27: chiffre_final = 7; sauvegarde_positions7 [0] = ângulo; sauvegarde_positions7 [1] = ângulo1; sauvegarde_positions7 [2] = ângulo2; sauvegarde_positions7 [3] = ângulo3; sauvegarde_positions7 [4] = ângulo5; pausa; caso 28: chiffre_final = 8; sauvegarde_positions8 [0] = ângulo; sauvegarde_positions8 [1] = ângulo1; sauvegarde_positions8 [2] = ângulo2; sauvegarde_positions8 [3] = ângulo3; sauvegarde_positions8 [4] = ângulo5; pausa; caso 29: chiffre_final = 9; sauvegarde_positions9 [0] = ângulo; sauvegarde_positions9 [1] = ângulo1; sauvegarde_positions9 [2] = ângulo2; sauvegarde_positions9 [3] = ângulo3; sauvegarde_positions9 [4] = ângulo5; pausa;
caso 31: Serial.print ("31"); activate_saving = 1; chiffre_final = 0; break; // BEGIN
caso 33: Serial.print ("33"); activate_saving = 0; break; // BOTÃO SALVAR padrão: break; } if (w == 32) {Serial.print ("\ nReproduzir / nChiffre final:"); Serial.print (chiffre_final); Serial.print ("\ n Sauvegarde posição 1: / n"); para (i = 0; i <5; i ++) {Serial.print (sauvegarde_positions1 ); Serial.print ("\ t");} Serial.print ("\ n Sauvegarde posição 2: / n"); para (i = 0; i <5; i ++) {Serial.print (sauvegarde_positions2 ); Serial.print ("\ t");} Serial.print ("\ n Sauvegarde posição 3: / n"); for (i = 0; i <5; i ++) {Serial.print (sauvegarde_positions3 ); Serial.print ("\ t");} for (i = 1; i <= chiffre_final; i ++) {Serial. imprimir ("\ n / n BEGIN / nLoop:"); Serial.print (i); Serial.print ("\ n"); switch (i) {case 1: goto_moteur (* (sauvegarde_positions1)); atraso (200); goto_moteur1 (* (sauvegarde_positions1 + 1)); atraso (200); goto_moteur2 (* (sauvegarde_positions1 + 2)); atraso (200); goto_moteur3 (* (sauvegarde_positions1 + 3)); atraso (200); goto_moteur5 (* (sauvegarde_positions1 + 4)); atraso (200); pausa; caso 2: goto_moteur (* (sauvegarde_positions2)); atraso (200); goto_moteur1 (* (sauvegarde_positions2 + 1)); atraso (200); goto_moteur2 (* (sauvegarde_positions2 + 2)); atraso (200); goto_moteur3 (* (sauvegarde_positions2 + 3)); atraso (200); goto_moteur5 (* (sauvegarde_positions2 + 4)); atraso (200); pausa; caso 3: goto_moteur (* (sauvegarde_positions3)); atraso (200); goto_moteur1 (* (sauvegarde_positions3 + 1)); atraso (200); goto_moteur2 (* (sauvegarde_positions3 + 2)); atraso (200); goto_moteur3 (* (sauvegarde_positions3 + 3)); atraso (200); goto_moteur5 (* (sauvegarde_positions3 + 4)); atraso (200); pausa; caso 4: goto_moteur (* (sauvegarde_positions4)); atraso (200); goto_moteur1 (* (sauvegarde_positions4 + 1)); atraso (200); goto_moteur2 (* (sauvegarde_positions4 + 2)); atraso (200); goto_moteur3 (* (sauvegarde_positions4 + 3)); atraso (200); goto_moteur5 (* (sauvegarde_positions4 + 4)); atraso (200); pausa; caso 5: goto_moteur (* (sauvegarde_positions5)); atraso (200); goto_moteur1 (* (sauvegarde_positions5 + 1)); atraso (200); goto_moteur2 (* (sauvegarde_positions5 + 2)); atraso (200); goto_moteur3 (* (sauvegarde_positions5 + 3)); atraso (200); goto_moteur5 (* (sauvegarde_positions5 + 4)); atraso (200); pausa; caso 6: goto_moteur (* (sauvegarde_positions6)); atraso (200); goto_moteur1 (* (sauvegarde_positions6 + 1)); atraso (200); goto_moteur2 (* (sauvegarde_positions6 + 2)); atraso (200); goto_moteur3 (* (sauvegarde_positions6 + 3)); atraso (200); goto_moteur5 (* (sauvegarde_positions6 + 4)); atraso (200); pausa; caso 7: goto_moteur (* (sauvegarde_positions7)); atraso (200); goto_moteur1 (* (sauvegarde_positions7 + 1)); atraso (200); goto_moteur2 (* (sauvegarde_positions7 + 2)); atraso (200); goto_moteur3 (* (sauvegarde_positions7 + 3)); atraso (200); goto_moteur5 (* (sauvegarde_positions7 + 4)); atraso (200); pausa; caso 8: goto_moteur (* (sauvegarde_positions8)); atraso (200); goto_moteur1 (* (sauvegarde_positions8 + 1)); atraso (200); goto_moteur2 (* (sauvegarde_positions8 + 2)); atraso (200); goto_moteur3 (* (sauvegarde_positions8 + 3)); atraso (200); goto_moteur5 (* (sauvegarde_positions8 + 4)); atraso (200); pausa; caso 9: goto_moteur (* (sauvegarde_positions9)); atraso (200); goto_moteur1 (* (sauvegarde_positions9 + 1)); atraso (200); goto_moteur2 (* (sauvegarde_positions9 + 2)); atraso (200); goto_moteur3 (* (sauvegarde_positions9 + 3)); atraso (200); goto_moteur5 (* (sauvegarde_positions9 + 4)); atraso (200); pausa; } Serial.print ("\ n *********************** FIN REPRODUCE ****************** / n "); atraso (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"); * /
atraso (100); } // **************************** FONÇÕES ****************** ******************
word recevoir () {// fonction permettant de recevoir l'information du smartphone
if (Serial.available ()) {w = Serial.read ();
Serial.flush ();
return w; }}
void goto_moteur (int ângulo_destino)
{while (ângulo_destino ângulo + passo_angulo) {Serial.print ("\ n -------------- * * * * * * -------------- ---- / n "); Serial.print ("ângulo_destino = / t"); Serial.print (ângulo_destino); Serial.print ("\ n ângulo1 = / t"); Serial.print (ângulo); if (ângulo_destino ângulo + passo_ângulo) {ângulo = ângulo + passo_ângulo; moteur.write (ângulo);} delay (100); } moteur.write (ângulo_destino); } void goto_moteur1 (int ângulo_destino) {while (ângulo_destino ângulo1 + passo_ângulo) {Serial.print ("\ n -------------- * * * * * * ------- ----------- / n "); Serial.print ("ângulo_destino = / t"); Serial.print (ângulo_destino); Serial.print ("\ n ângulo2 = / t"); Serial.print (ângulo1); if (ângulo_destino ângulo1 + passo_ângulo) {ângulo1 + = passo_ângulo; moteur1.write (ângulo1);;} atraso (100); } moteur1.write (ângulo_destino); } void goto_moteur2 (int ângulo_destino) {
while (ângulo_destino ângulo2 + passo_ângulo)
{Serial.print ("\ n -------------- * * * * * * ------------------ / n"); Serial.print ("angulo_destino = / t"); Serial.print (ângulo_destino); Serial.print ("\ n ângulo3 = / t"); Serial.print (ângulo2); if (ângulo_destino ângulo2 + passo_ângulo) {ângulo2 + = passo_ângulo; moteur2.write (ângulo2);} atraso (100); } moteur2.write (ângulo_destino); } void goto_moteur3 (int ângulo_destino) {
enquanto (ângulo_destino ângulo3 + passo_ângulo)
{Serial.print ("\ n -------------- * * * * * * ------------------ / n"); Serial.print ("ângulo_destino = / t"); Serial.print (ângulo_destino); Serial.print ("\ n ângulo4 = / t"); Serial.print (ângulo3); if (ângulo_destino ângulo3 + passo_ângulo) {ângulo3 + = passo_ângulo; moteur3.write (ângulo3);} atraso (100); } moteur3.write (ângulo_destino); } void goto_moteur5 (int ângulo_destino) {
while (ângulo_destino ângulo 5 + passo_ângulo)
{Serial.print ("\ n -------------- * * * * * * ------------------ / n"); Serial.print ("ângulo_destino = / t"); Serial.print (ângulo_destino); Serial.print ("\ n ângulo5 = / t"); Serial.print (ângulo5); if (ângulo_destino ângulo5 + passo_ângulo) {ângulo5 + = passo_ângulo; moteur5.write (ângulo5);} atraso (100); } moteur5.write (ângulo_destino); }
void TouchDown_Release () // Liberação do botão TouchDown
{if (ângulo5 <180) {ângulo5 = ângulo5 + passo_ângulo_mini; } moteur5.write (ângulo5); }
void TouchDown_Grab () // Captura do botão TouchDown
{if (angle5> 0) {angle5 = angle5-step_angle_mini; } moteur5.write (ângulo5); } void Base_Rotation () {if (ângulo 0) {ângulo = ângulo-passo_ângulo; } outro ângulo = 0; moteur.write (ângulo); } void Waist_Rotation () {if (ângulo1 20) {ângulo1 = ângulo1-passo_ângulo; } senão ângulo1 = 20; moteur1.write (ângulo1); } void Third_Arm_Rotation () {if (angle2 0) {angle2 = angle2-step_angle; } moteur2.write (ângulo2); } void Fourth_Arm_Rotation () {if (angle3 = 0) {angle3 = angle3-step_angle_mini; } moteur3.write (ângulo3); }
Etapa 6: é isso
Obrigado por assistir, espero que tenha gostado!
Se gostou deste Instructable, pode com certeza nos visitar para mais! =)
Recomendado:
Braço robótico com garra: 9 etapas (com fotos)
Braço Robótico com Garra: A colheita de limoeiros é considerada um trabalho árduo, devido ao grande tamanho das árvores e também pelo clima quente das regiões onde são plantados limoeiros. É por isso que precisamos de algo mais para ajudar os trabalhadores agrícolas a concluir seu trabalho mais e
Braço robótico 3D com motores de passo controlados por Bluetooth: 12 etapas
Braço robótico 3D com motores de passo controlados por Bluetooth: Neste tutorial veremos como fazer um braço robótico 3D, com motores de passo 28byj-48, um servo motor e peças impressas em 3D. Placa de circuito impresso, código-fonte, diagrama elétrico, código-fonte e muitas informações estão incluídos no meu site
A chegada do braço robótico inteligente: 3 etapas
A Chegada do Braço Robótico Inteligente: Apertar a mão de convidados, falar coisas, comer e assim por diante, essas coisas comuns, pois a saúde de nossas vidas está nas coisas comuns, mas para algumas pessoas especiais, é um sonho. Algumas pessoas especiais mencionadas por mim são deficientes físicos que perderam
Como controlar um braço robótico 4dof de alta potência e tamanho grande com o Arduino e o controle remoto PS2 ?: 4 etapas
Como controlar um braço robótico 4dof de alta potência e tamanho grande com Arduino e controle remoto PS2 ?: este kit usa motor de alta potência mg996, ele precisa de alta corrente, testamos muita entrada de energia. Apenas o adaptador 5v 6a funcionará. A placa arduino também funciona no braço do robô 6dof.end: escreva comprar SINONING A store for DIY toy
Braço robótico com bomba de sucção a vácuo: 4 etapas
Braço robótico com bomba de sucção a vácuo: Braço robótico com bomba de sucção a vácuo controlada pelo Arduino. O braço robótico tem um design de aço e é totalmente montado. Existem 4 servo motores no braço robótico. Existem 3 servo motores de alto torque e alta qualidade. Neste projeto, como mover o