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 do robô controlado por Ethernet

Componentes e suprimentos

Arduino 101
× 1
WIZnet WIZ750SR
× 1
Dispositivo Android
× 1
Braço do robô
Você pode usar qualquer outro braço de robô, mas pode ser necessário ajustar o código se seu braço de robô for muito diferente
× 1
Metal Gear Micro Servo
× 4

Aplicativos e serviços online

Arduino IDE
Ferramenta de configuração WIZnet S2E
Android Studio

Sobre este projeto





Introdução


Eu amo braços de robô. Eu gosto que você só precise de algumas peças mecânicas simples, alguns servos ou motores, um bom software e você pode obter um dispositivo que não é apenas espetacular e divertido, mas realmente útil também. Queria construir um porque tinha um curso de robótica que adorei.

Você pode aprender muito ao construir um braço de robô, então acho que este é um ótimo projeto de nível intermediário para aprofundar seus conhecimentos em robótica. Vamos começar!





Braço do robô


Você pode comprar braços de robô por cerca de 20 $. Para experimentar, eu queria começar com um mais barato. Mais tarde, vou construir ou comprar um braço robótico mais sério, mas por enquanto vou trabalhar neste braço robótico de US $ 25 da Banggood.

Este é um braço robótico 4DoF (Graus de Liberdade), onde 3 servos são usados ​​para mover e um é para o efetor (eu o chamei de garra no projeto). Isso significa que a garra pode ser movida para qualquer posição em uma área específica, mas seus ângulos não podem ser alterados. Esta é uma limitação significativa, mas está tudo bem por enquanto e ainda é boa para muitas coisas.

O kit DIY veio com 4 servos, então, na verdade, você obtém todos os componentes para construir o braço do robô, além de um controlador. Esses servos não são ruins, mas eu preferia estes:
<>
Esses servos são mais rápidos do que os azuis e usam engrenagens de metal em vez de plástico.

As peças do robô vieram em 4 folhas de plástico. Você tem que remover as peças dessas folhas.

O kit do braço do robô é composto por várias peças. Eu recomendo que você assista ao seguinte vídeo. Neste vídeo, um russo está construindo o mesmo tipo de braço robótico. A parte da construção começa às 7:43.

Recebi um link no pacote sobre como construir o braço do robô, mas a qualidade era muito baixa tanto nas imagens quanto nas instruções. Esse vídeo é muito melhor. Possivelmente você pode descobrir o que é o quê, mas se você fizer isso, você terminará em um loop quase infinito de montagem, desmontagem, remontagem.

Tenha muito cuidado ao inserir os servos. Este desenho com este tipo de plástico tende a quebrar facilmente ao apertar os parafusos. O aperto ideal dos parafusos também é importante em algumas outras partes do robô. Faça-os muito apertados e você não poderá mover os segmentos do braço do robô com os servos.

Depois de alguma construção, você terminará com seu próprio braço de robô.

Os servos de posicionamento têm um cabo longo o suficiente, mas a garra precisa de um muito mais longo. Desmontei aquele servo, desoldei o cabo antigo e usei um cabo pelo menos duas vezes mais comprido.





Cérebro


Tudo bem, o braço do robô está pronto, mas é mais do que provável que você queira controlá-lo de alguma forma. Eu precisava de um microcontrolador para isso e escolhi meu Arduino 101 para esse trabalho.

É a única placa Arduino oficial que usa um microcontrolador Intel (Intel Curie). Possui giroscópio e acelerômetro embutidos. Ele também tem Bluetooth, então me deixa a possibilidade de controlar o robô através do BLE no futuro. Outra característica muito útil desta placa é o funcionamento da comunicação serial. Ao contrário da maioria dos Arduinos, o serial USB e o UART nos pinos 1 e 0 (TX e RX) não são os mesmos. Ele tem seus benefícios, pois não preciso desconectar nenhum outro circuito de comunicação dos pinos 0 e 1 ao reprogramar o Arduino. Também é útil para fins de depuração.

Se você quiser usar o serial da porta USB, então você tem que usar 'Serial' e se você quiser usar os pinos GPIO0 e GPIO1 então você tem 'Serial1'

O Arduino 101 tem 4 GPIOs com capacidade PWM (GPIO3, GPIO5, GPIO6 e GPIO9) e usei todos eles para controlar os servos.





Comunicação


O braço do meu robô pode ser controlado por serial (Serial1 para ser específico). Usei meu mais novo módulo de comunicação, o WIZ750SR, para essa finalidade.

Este é um pequeno módulo Ethernet com um MCU Cortex-M0. Em sua funcionalidade básica, é um módulo Serial para Ethernet, mas você pode reprogramar facilmente o módulo para satisfazer suas necessidades. Você pode transformar esta placa em uma placa I2C para Ethernet se desejar.

Um recurso muito interessante é o servidor (ou cliente) TCP onboard. Usando o servidor TCP, você pode controlar o Arduino remotamente, assim como faria através da serial USB, mas de qualquer lugar do mundo! No lado do Arduino, é completamente transparente. Você não precisa adicionar nenhum código extra ao seu esboço para usar este módulo.





Eu também tenho uma placa de avaliação WIZ750SR-TTL-EVB. Eu poderia ligar o WIZ750SR e tem uma porta USB de depuração, mas não a usei além de alguns experimentos iniciais.

Tanto o Arduino 101 quanto o WIZ750SR estão usando 3,3 V e, portanto, não precisei usar a mudança de nível para os pinos TX e RX. O Arduino também está alimentando o módulo Ethernet com sua fonte de alimentação. O circuito é muito simples e você pode encontrá-lo na seção Esquemas deste projeto. Os servos têm sua própria fonte de alimentação de 5V.





Configurando o Módulo


Para usar esta placa, você deve configurá-la primeiro. Não vou documentar novamente esta parte porque o pessoal da WIZnet já fez isso aqui e você pode ter certeza de que sempre obterá a documentação mais recente lá.

A documentação deles é ótima, mas tenho algumas informações úteis e alguns problemas (resolvidos) que vale a pena compartilhar.

Em primeiro lugar, você pode alimentar a placa a partir da porta USB da placa de avaliação, mas, além disso, esta porta é usada principalmente para depuração e flash. Acredito que você não consiga se comunicar com o servidor TCP do WIZ750SR usando a porta USB, mas receberá informações de depuração se conectar a esta porta COM. Isso me causou alguma confusão no início, pois eu não sabia o que esperar.

Em segundo lugar, se o LED azul acender quando o WIZ750SR estiver se conectando à sua rede, a placa deve estar funcionando corretamente, continue com a ferramenta de configuração, ela deve encontrar a placa.

Meu maior problema aconteceu neste ponto, quando tentei procurar o dispositivo na ferramenta de configuração. Na primeira vez funcionou maravilhosamente bem, mas depois não tive tempo e parei por aí. Depois de duas semanas, tentei fazer de novo, mas não consegui mais encontrar a placa em vários sistemas operacionais e computadores em várias redes.

Fiz um reflash através da porta USB de depuração da placa de avaliação com o firmware mais recente e funcionou. Meu PC com Windows ainda não conseguiu encontrar, mas a versão Python no Ubuntu conseguiu. Não tenho certeza de qual era o problema, mas essas etapas finalmente resolveram meu problema. Depois de configurar o WIZ750SR com sucesso, meu PC com Windows também pode encontrá-lo novamente, então continuei o trabalho.

Pelo que li, as VMs com suas chamadas de adaptadores de rede virtual também atrapalham a pesquisa, portanto, se você tiver algum problema com a pesquisa, deve dar uma olhada nisso.

Uma ótima ferramenta para testar a comunicação TCP é o NetCat. Usando este software, você pode se conectar ao servidor TCP no WIZ750SR. Depois de instalar o NetCat, use este comando para conectar:
  nc [tcp_server_ip] [tcp_server_port]  

Depois disso, você pode enviar e receber dados diretamente do WIZ750SR. Usei muito essa ferramenta.





Movendo de A para B


Para mover um braço de robô, você precisa dizer ao controlador o que você deseja. A maneira mais simples é atualizar diretamente os ângulos de todos os servos. Atualizar os ângulos das juntas pode ser feito com algumas tentativas e erros e pode realmente funcionar bem.

Em meu próximo projeto de braço de robô, usarei cinemática inversa para controlar o braço do robô com coordenadas mundiais, mas por enquanto controlarei o robô usando apenas ângulos de junta.

A velocidade do sistema é um ponto chave aqui. Os servos são muito rápidos, mas ainda precisam de tempo para chegar à posição recebida. Por outro lado, os fios de jumper não gostam de movimentos muito rápidos, então tive que desacelerar as coisas. Tanto na parte de hardware quanto de software.

Eu fiz isso criando um cálculo de caminho para o sistema e inserindo atraso. Ao enviar novos ângulos de articulação para o braço do robô, você deve fornecer um parâmetro extra:velocidade (mDelay). Basicamente, você está informando ao controlador do braço do robô o tempo mínimo da etapa do loop. A calculadora de caminho irá calcular um tamanho de etapa opcional para cada servo de posicionamento. Isso significa que todos os servos alcançarão seus objetivos aproximadamente ao mesmo tempo e a velocidade depende do atraso. O resultado é um movimento linear muito bom e suave o tempo todo.

O efetor funciona de uma maneira diferente. Basicamente, ele só pode ter estado aberto ou fechado (com 3 níveis diferentes de resistência fechada), sem transição suave. Obviamente, você vai querer agarrar o objeto o mais rápido possível, enquanto o movimento deve ser suave e agradável.

Existem 2 tipos de comandos neste sistema atualmente. Aqui está um exemplo para ambos:
  • G 1 -> Fechando a garra, levemente. 0 significa aberto
  • A 10 130 120 110 -> Movendo o braço do robô com tempo de passo de 10ms, ângulo de articulação superior de 130º, ângulo de articulação inferior de 120º e ângulo de rotação de base de 110º.





Aplicativo Android para controle remoto


Tudo bem, então neste ponto eu posso controlar o braço do robô de qualquer lugar do mundo, mas tenho que escrever manualmente cada novo comando. Não é muito divertido assim. Eu precisava de uma maneira muito mais amigável de controlar o braço do robô, então criei um aplicativo Android para fazer exatamente isso.

O aplicativo possui um cliente TCP, para que possa se conectar diretamente ao servidor TCP do WIZ750SR. O braço do robô não armazena o enredo para movimentos antigos e futuros. Ele só conhece a posição atual da meta. Isso significa que o aplicativo não apenas enviará todo o gráfico de movimento para o braço do robô, mas enviará periodicamente novas posições para o braço do robô, com base no feedback da posição. Se você fechar o aplicativo ou se desconectar do WIZ750SR, o braço do robô irá parar de se mover assim que alcançar sua última posição recebida.

Depois de se conectar ao braço do robô, você chegará à tela Configurar. Ele contém 3 páginas. O primeiro é Run (mais sobre isso depois), o segundo é Init e o terceiro é Loop. Init e Loop são basicamente iguais, a única diferença é onde eles salvam a posição.

A tela contém 4 barras de busca e um botão de garra ao lado do botão Salvar. Esses controles deslizantes são usados ​​para definir a posição e a velocidade do movimento, enquanto o botão da garra é usado para abrir ou fechar o gerador de efeitos. Todas as mudanças são instantâneas, então você verá a nova posição no braço do robô imediatamente, porém você deve clicar no botão Salvar para adicioná-la ao gráfico. Aqui está uma breve demonstração sobre isso:

Se você alterar o estado da garra e a posição do braço do robô, ele será salvo como dois comandos diferentes. O comando da garra primeiro e depois o comando de posição.

Como seria de esperar, a execução do gráfico será iniciada com o init. Init e loop estão funcionando exatamente como as funções de configuração e loop do Arduino. Init é bom para movimentos que não serão repetidos mais tarde. Quando os comandos init forem concluídos, os comandos de loop seguirão. Os comandos de loop serão repetidos para sempre, ou pelo menos até você parar o gráfico. Se você não precisa de loop ou init, basta deixar esse campo vazio.

Esses campos são campos EditText, o que significa que você pode editar ou excluir seu conteúdo facilmente. Se você não quiser usar os controles deslizantes, pode escrever os comandos manualmente. Você também pode copiar e colar o gráfico. O aplicativo se lembrará do último gráfico executado para uso posterior.

A primeira linha em "Configurar" é usada como um feedback visual para teste. A parte esquerda mostra a última posição da meta para o braço do robô (S - enviado), enquanto o campo direito é a posição atual dele (R - recebido). O aplicativo enviará uma nova posição de objetivo para o braço do robô assim que o objetivo e as posições atuais forem iguais.



Como você pode ver, quando havia apenas o init, o braço do robô parava assim que terminava os comandos init.

Com meu aplicativo, você pode fazer algumas coisas, mas há muitas possibilidades de melhorias no futuro. Estou pensando em usar funções, controle condicional, loops com argumentos, etc. nos gráficos.

Se você deseja construir um robô semelhante, pode encontrar o código do Arduino e o aplicativo Robot Arm Controller no segmento de código deste projeto.





Resultados


Usei os comandos init e loop e isso me permitiu fazer algumas tarefas moderadamente complexas. Aqui está um vídeo sobre como o braço do meu robô configura alguns patinhos de borracha (init) e começa a movê-los um por um em torno de si mesmo, para sempre (loop).

Como você pode ver se levar em consideração que este é um braço de robô muito barato com sérias limitações relacionadas ao hardware, os movimentos são muito suaves, contínuos e precisos.





Conclusão


Meu software funciona muito bem e no futuro com certeza vou trabalhar para melhorar este braço do robô, ou vou construir um mais avançado. Consegui tudo o que planejei para este projeto e sem problemas graves de bloqueio.

O Arduino 101 é excelente para essa finalidade. A única limitação da placa são os únicos 4 GPIOs com capacidade para PWM. Pode ser um problema no futuro se eu construir um novo braço de robô com mais graus de liberdade, mas o serial USB separado e o serial GPIO são muito úteis durante o desenvolvimento e esta placa também pode fornecer muito poder de computação.

Acho que o aplicativo Android foi uma boa ideia, porém terei que torná-lo mais robusto, amigável e aumentar sua funcionalidade. É uma versão alfa no momento.

O WIZ750SR foi uma surpresa muito boa. Eu temia ter mais problemas com esta placa, mas depois da configuração funcionou perfeitamente. Foi totalmente transparente e não tive problemas com isso. Este é um dispositivo muito fácil de usar e o melhor módulo Ethernet que já usei com qualquer um dos meus microcontroladores.

Trabalhar com braços de robô é extremamente divertido, então com certeza vou aprender mais sobre isso e compartilhar meu conhecimento com você no futuro! Obrigado por ler!


Código

Editor da Web do Arduino
Você pode usar o Arduino Web Editor para acessar e enviar diretamente o código do Arduino do meu projeto
Arduino e código Android
https://github.com/abysmalsb/Robot-Arm-Controller

Esquemas

No momento, o sistema usa duas fontes de alimentação separadas. Um da porta USB do Arduino e outra fonte de 5V que é usada para movimentar os servos.

Processo de manufatura

  1. Robô Raspberry Pi controlado por Bluetooth
  2. Robô controlado por gestos usando Raspberry Pi
  3. Núcleo IoT do Windows 10:robô controlado por fala
  4. Robô controlado por Wi-Fi usando Raspberry Pi
  5. ROObockey:Robô de hóquei de rua com controle remoto e auxílio de mira
  6. Robô SCARA de braço duplo
  7. Braço do robô MeArm - Seu robô - V1.0
  8. LEDs controlados por Alexa através do Raspberry Pi
  9. Braço robótico controlado por Nunchuk (com Arduino)
  10. Robô controlado por fala