Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Braço Robótico Programável Local e Remoto

Componentes e suprimentos

Arduino Mega 2560
× 1
SainSmart DIY 3 eixos controle paletizador modelo de braço robótico para Arduino UNO MEGA2560
× 1
MeArm DIY Robot Arm Kit
× 1
Adafruit RGB Backlight LCD - 16x2
× 1
Dispositivo Android
× 1
Potenciômetro rotativo (genérico)
10Kohm
× 4
SparkFun Botão de pressão 12 mm
× 3
LED (genérico)
VERMELHO, AZUL, VERDE, AMARELO
× 4

Aplicativos e serviços online

Arduino IDE
MIT App Inventor 2

Sobre este projeto




O objetivo deste tutorial é desenvolver passo a passo um projeto de controle e programação de um Braço Robótico, simulando as funções básicas de um robô industrial.





Etapa 1:especificações


O robô tem duas funções básicas:
  • Programa :Registre as posições do braço em três dimensões (cada registro é uma "etapa")
  • Executar :Execute em seqüência as posições gravadas no “Programa”. O robô executará o programa até que o comando "ABORT" seja usado.

Características principais:
  • O projeto pode ser usado para controlar robôs com 3 ou 4 DOF ("Graus de liberdade").
  • O robô pode ser controlado nos modos "LOCAL" e "REMOTO" (o último através de um dispositivo Android)
  • Durante a fase do programa, o usuário pode alterar o modo de controle de "LOCAL" para "REMOTO" e vice-versa.
  • As informações para o usuário serão fornecidas através de LEDs coloridos, um display de LED de 2 linhas e som (uma campainha).
  • O alarme sonoro também pode ser acionado remotamente.





Etapa 2:o projeto


O diagrama de blocos da etapa anterior mostra a "Lista de Materiais" que será usada neste projeto.

Optei pelo Arduino MEGA para não me preocupar com a quantidade de portas (I / Os) disponíveis do Arduino. O UNO, por exemplo, funcionaria sem problemas, mas um método de expansão de porta deve ser usado. São várias opções que podem ser facilmente encontradas na internet, como um decodificador 74138 por exemplo.

Aqui, o primeiro protótipo sendo programado em "modo local".

Para a rede Bluetooth, será utilizado o HC-06.

O aplicativo Android usado para " modo remoto ", foi desenvolvido com a ferramenta MIT Appinventor2, que é uma plataforma única e poderosa para este tipo de aplicativo baseada em dispositivos Android. O aplicativo está disponível para download gratuito na Google store:MJRoBot Arduino Robot Arm Control.

O vídeo abaixo pode dar uma ideia de como deve ser o projeto final com programação remota:





Etapa 3:Desenvolvimento do projeto


Os braços robóticos podem ser classificados de acordo com o número de "juntas" ou "Graus de liberdade" (DOF) que possuem.
  • A " Base "ou" Cintura ", normalmente pode girar o braço 180o ou 360o, dependendo do tipo de Servo usado (aqui neste projeto, um Servo 180o foi usado).
  • O " ombro ", é o responsável por" levantar ou abaixar "o braço verticalmente.
  • O " cotovelo "fará com que o braço" vá para a frente ou para trás ".
  • A " garra "ou" Gripper "funciona abrindo ou fechando para" pegar coisas ".





Etapa 4:o circuito


Servo motores serão usados ​​para acionar as juntas, conectadas diretamente ao Arduino. Observe que isso não é incomum, consulte "Motores de passo" usados ​​na base para maior torque e precisão. A escolha adequada dos servos é muito importante (existem servos chineses baratos que são muito mal construídos, como o MG995, que infelizmente são os que vieram com meu SanSmart 3DOF AARM). Mas para a proposta deste projeto funcionou bem.

A alimentação DC para os servos deve ser separada do Arduino e de outros componentes. Uma fonte de alimentação externa de 5 ou 6 V deve funcionar sem problemas (verifique a planilha de dados de seus servidores para verificar a faixa de tensão adequada). Uma prática comum também é usar capacitores de 470uF entre VCC e GND para minimizar o ruído gerado pelos motores CC dentro dos servidores. Certifique-se de conectar todos os "Grounds" (fonte de alimentação externa com o pino GND do Arduino).

Se os servos apresentarem problemas e vibrarem muito, faça ajustes nos "atrasos" do seu código. É importante que os servos tenham tempo para chegar a um determinado ponto antes de receber um novo comando. Também vale a pena conferir se os servos são digitais ou analógicos, como se fossem mecanicamente semelhantes, o digital trabalha com frequência de 300Hz enquanto o analógico, 50Hz. A biblioteca padrão do Arduino " Servo.h "foi desenvolvido para servos analógicos e pode ser modificado se necessário, para um melhor funcionamento com servos digitais.

O desenho acima mostra o circuito completo.





Etapa 5:o código


O projeto não é complicado, mas tem muitas variáveis. O mais prudente é defini-los claramente e deixar as observações em um único arquivo:

ArmDefine.h

Este arquivo também deve definir os ângulos mínimo, máximo e inicial do servo. O código incluído neste tutorial tem dois conjuntos de parâmetros para os braços robóticos que testei em meu projeto (é claro que apenas um grupo de constantes deve ser usado):
  // MeArm 4-DOF # define minGrip 15 #define minBase 0 #define minShou 60 #define minElbw 60 #define maxGrip 45 #define maxBase 170 # define maxShou 180 #define maxElbw 150 #define midGrip 30 # define midBase 87 # define midShou 138 # define midElbw 100 / * SS 3-DOF # define minGrip 75 # define minBase 5 # define minShou 5 # define minElbw 0 # define maxGrip 125 # define maxBase 150 # define maxShou 155 # define maxElbw 0 #define midGrip 100 # define midBase 90 # define midShou 90 # define midElbw 0 * /  

Cada tipo de braço possui um conjunto diferente de parâmetros e é importante que você encontre o certo para o seu. O que eu sugiro é que inicialmente os potenciômetros (potenciômetros) permaneçam em seu ponto médio e o mapeamento das saídas PWM sejam ajustados para os valores padrão: Max =255 , Min =0 e Mid =126 (" #defines "acima). A seguir, comece variando os potes (um a um) e acompanhe no Monitor Serial (ou LCD) quais devem ser os valores mínimo e máximo onde o braço funciona corretamente. Esses serão os valores finais a serem utilizados para o configurações (altere meus valores originais em ArmDefine.h) .

Para "registrar" os conjuntos de coordenadas (ou etapas) que o robô deve jogar, usarei matrizes de dados:
  int gripPosition [100]; int basePosition [100]; int shouPosition [100]; int elbwPosition [100]; int positionIndex =0; // Índice a ser usado na matriz de posição usada para tarefas gravadas  

Observe que não estou mantendo a posição "armazenada" e ao final do programa "robô", o índice volta a zero e o robô vai aguardar o registro de uma nova sequência (o programa é perdido). Como alternativa, você pode manter essas matrizes de dados na EEPROM do Arduino, por exemplo. Fazendo isso, o programa seria executado novamente ou até mesmo você poderia ter mais de um programa armazenado.





Etapa 6:a lógica do programa


O bloco principal ("Loop") é realmente muito simples:

Verifique se foi utilizado um comando para executar o "programa" (sequência de passos).
  • Em caso afirmativo, execute-o.
  • Caso contrário, o "programa" não está completo e ainda deve escrever novas etapas.
  • Se uma “nova posição” for definida, adicione-a ao programa.
  • Primeiro, verifica se há mensagens que chegam no buffer serial, do dispositivo Android.
  • Em seguida, verifique se o modo de controle é "Local" ou "Remoto" (o padrão é Local).
  • Volte ao início e execute a etapa 1 novamente.
  void loop () {checkBTcmd (); defineLocalRemote (); execTaskCmd =digitalRead (execTaskPin); if (execTaskCmd ==|| comando ALTO =="runon") {RunProgram (); } else recArmPosition (); comando ="";}  

A função checkBTcmd () monta uma string usando os caracteres individuais que chegam do módulo BT. Esta string é passada para a variável " comando "

A função defineLocalRemote () considera a variável " comando "verificando se é recebido um comando para mudar o modo para remoto ou vice-versa. O comando de alarme também é analisado aqui. Para a lógica do programa, se o" Alarme "for acionado no dispositivo Android, o braço deve necessariamente ir para o Remoto modo.

A função RunProgram () realiza os preparativos, ligando / desligando LEDs, etc e especialmente chamando a função: ExecuteTask () . Esta última é a função que contém a lógica de execução da sequência de etapas. A função aumenta o " positionIndex "enviando os dados de posição para armar um a um usando a ferramenta: armPosition (grip, base, ombro, cotovelo) .

Finalmente, a função que realmente comanda os servos e escreve as "etapas" é a recArmPosition () . Dependendo do recebimento do comando do Android, esta função irá definir o posicionamento dos servos que podem ser através dos potes, ou através dos “sliders” do aplicativo Android. Com cada mudança de posição, esta função envia as coordenadas para os servos usando a armPosition função (preensão, base, ombro, cotovelo). A leitura da posição real dos potenciômetros ou controles deslizantes e a correspondente ativação dos servos ocorre no momento em que o comando “SALVAR” ou “PROGRAMA” é acionado. Nesse momento, o índice de posição das matrizes é incrementado e a etapa armazenada.

Para simplificar o entendimento, todo o código foi baseado em suas funções específicas. A " Configuração "," Loop "e as funções descritas acima estão praticamente todas no arquivo: MJRoBot_Arm_Robot_Task_Prgm.ino

As funções mais gerais, como ler o comando BT: void checkBTcmd () ; gerador de som: void beep (int pin, int freq, long ms) e debouncing: boolean debounce (int pin) ; estão no arquivo: General_Functions.ino

Um fato importante:como o Arduino executa instruções com base em um clock de 16Mhz, espera-se que os botões de controle sejam lidos centenas ou até milhares de vezes por segundo, por isso é importante fazer um botão "debouncing" que define a etapa de gravação .

O quarto e último arquivo é: Arm_Ctrl_and_Display.ino

Neste arquivo estão as funções de leitura do potenciômetro: bool readPotenciômetros () ; leitura de controles deslizantes do Android: bool readSliders () ; colocação de servos: void armPosition (int gripp, int basee, int ombro, cotovelo int) . As outras funções incluídas no arquivo são para exibição de dados no LCD, monitor serial, alarmes, etc.

O vídeo mostra o braço robótico 4DOF "meArm" sendo programado remotamente através do aplicativo Android .

O código-fonte completo do projeto pode ser encontrado no GITHUB:

https://github.com/Mjrovai/MJRoBot-Programmed-Arm

ou aqui:
F49C85FIL8CVX0P.ino FC4OQJNIL8CVX1C.h FBYPQAMIL8CVX1D.ino F2SBAXVIL8CVX1E.ino





Etapa 7:Conclusão


Como sempre, espero que este projeto possa ajudar outras pessoas a encontrar seu caminho no emocionante mundo da Eletrônica, Robótica e IoT! Para mais projetos, visite meu blog:MJRoBot.org

Saludos do sul do mundo! Vejo vocês no meu próximo tutorial!

Obrigada

Marcelo

Código

  • Snippet de código # 1
  • Snippet de código # 2
  • Snippet de código # 3
Snippet de código # 1 Arduino
 // MeArm 4-DOF # define minGrip 15 #define minBase 0 #define minShou 60 #define minElbw 60 #define maxGrip 45 #define maxBase 170 # define maxShou 180 #define maxElbw 150 #define midGrip 30 # define midBase 87 # define midShou 138 # define midElbw 100 / * SS 3-DOF # define minGrip 75 # define minBase 5 # define minShou 5 # define minElbw 0 # define maxGrip 125 # define maxBase 150 # define maxShou 155 # define maxElbw 0 # define midGrip 100 # define midBase 90 # define midShou 90 # define midElbw 0 * / 
Snippet de código # 2 Arduino
 int gripPosition [100]; int posição base [100]; int shouPosition [100]; int elbwPosition [100]; int positionIndex =0; // Índice a ser usado na matriz de posição usada para tarefas gravadas 
Snippet de código # 3 Arduino
 void loop () {checkBTcmd (); defineLocalRemote (); execTaskCmd =digitalRead (execTaskPin); if (execTaskCmd ==|| comando ALTO =="runon") {RunProgram (); } else recArmPosition (); comando ="";} 
Github
https://github.com/Mjrovai/MJRoBot-Programmed-Armhttps://github.com/Mjrovai/MJRoBot-Programmed-Arm

Esquemas

Braço do robô
https://github.com/Mjrovai/MJRoBot-Programmed-Arm/blob/master/Arm_Robot_Task_Program_Man_BT_16_fev_16/Arm%20Robot%20Diagram.png

Processo de manufatura

  1. Controle remoto universal usando Arduino, 1Sheeld e Android
  2. Braços robóticos na manufatura e seus benefícios
  3. Diferenças entre o Manipulador do Robô e o Braço do Robô
  4. Animação de LCD e jogos
  5. Faça você mesmo voltímetro usando Arduino e Smartphone
  6. Usando IoT para controlar remotamente um braço robótico
  7. Arduino 3D-Printed Robotic Arm
  8. Braço robótico controlado por Nunchuk (com Arduino)
  9. Voltímetro DIY com Arduino e um visor Nokia 5110
  10. Braço robótico simples e inteligente usando Arduino