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

Robô SCARA | Como construir seu próprio robô baseado em Arduino


Neste tutorial vamos aprender como construir um robô SCARA baseado em Arduino. Mostrarei todo o processo de construção, desde o projeto do robô até o desenvolvimento de nossa própria Interface Gráfica de Usuário para controlá-lo.

Você pode assistir ao vídeo a seguir ou ler o tutorial escrito abaixo.

Visão geral


O robô tem 4 graus de liberdade e é acionado por 4 motores de passo NEMA 17. Além disso, possui um pequeno servo motor para controlar o efetor final ou a garra do robô neste caso. O cérebro deste robô SCARA é uma placa Arduino UNO que está emparelhada com um escudo CNC e quatro drivers de passo A4988 para controlar os motores.

Utilizando o ambiente de desenvolvimento Processing, criei uma Interface Gráfica de Usuário que possui controle de cinemática direta e inversa. Com o Forward Kinematics podemos mover manualmente cada articulação do robô para obter a posição desejada. Usando os controles deslizantes do lado esquerdo, podemos definir o ângulo de cada junta. A posição final do efetuador final, os valores X, Y e Z são calculados e impressos no lado direito da tela.

Por outro lado, usando Inverse Kinematics podemos definir a posição desejada do efetor final, e o programa calculará automaticamente os ângulos de cada junta para que o robô chegue a essa posição desejada.

Na verdade, fiz o programa de uma forma que podemos usar os dois métodos ao mesmo tempo, na mesma tela. Os ângulos das juntas assim como os valores X, Y e Z do efetuador final estão conectados e sempre presentes na tela.

Claro, o robô também pode operar automaticamente. Usando o botão “Salvar” do programa podemos salvar cada movimento ou posição do robô. Então, quando pressionamos o botão “Run”, o robô executará os movimentos armazenados em um loop, do primeiro ao último, repetidamente. Também podemos ajustar a velocidade de movimento e a aceleração da interface do usuário.

Modelo 3D do robô SCARA


Para começar, vamos dar uma olhada no modelo 3D.

Eu projetei este robô SCARA usando o 3DEXPERIENCE SOLIDWORKS que também é o patrocinador deste vídeo.

3 3DEXPERIENCE O SOLIDWORKS é basicamente o SOLIDWORKS com recursos de nuvem que obtemos por meio da plataforma 3DEXPERIENCE. Tudo funciona através da nuvem, para que você ou qualquer pessoa de sua equipe possa ter acesso aos dados ou aos modelos a qualquer momento, de qualquer lugar do mundo. A plataforma 3DEXPERIECE também inclui muitos aplicativos úteis de produtividade e gerenciamento.

Por exemplo, o Planejador de Projetos é uma ótima maneira de organizar suas tarefas, definir prazos e acompanhar seu progresso. Com o aplicativo 3D Markup, você pode visualizar, explorar e fazer anotações dos modelos de qualquer dispositivo, como um notebook, tablet ou até mesmo um smartphone.

Há também um modelador 3D separado baseado em nuvem chamado SOLIDWORKS xDesign, que é executado dentro do seu navegador. Ele pode ser usado em conjunto com o Solidworks ou sozinho e é ótimo para modelagem, em qualquer lugar, a qualquer hora e em qualquer dispositivo.

Então, muito obrigado à Solidworks por patrocinar conteúdo educacional como este. Se você quiser saber se o SOLIDWORKS e a plataforma 3DEXPERIENCE podem funcionar para você, verifique os links abaixo.

Experimente o 3DEXPERIENCE gratuitamente com meu link especial:www.solidworks.com/HTMTryNow

Saiba mais sobre o 3DEXPERIENCE SOLIDWORKS: www.solidworks.com/HTMLearnMore

Ok, então vamos voltar ao modelo e explicar como eu criei esse design. Meu objetivo para o robô era a maioria das peças a serem impressas em 3D. Portanto, tudo o que você vê aqui pode ser impresso em 3D mesmo em uma impressora 3D com mesa de impressão menor. As polias GT2 também são imprimíveis em 3D. Eu usei design paramétrico para fazê-los, então, se necessário, podemos alterar facilmente seus tamanhos. Nós apenas temos que alterar o número de dentes e todas as dimensões serão atualizadas automaticamente para tornar a polia do tamanho adequado.

Para a primeira junta, temos uma relação de redução de 20:1, alcançada em dois estágios com essas polias projetadas sob medida. As duas correias GT2 que uso aqui são de malha fechada com 200mm e 300mm de comprimento. As juntas do robô são compostas por dois rolamentos axiais e um rolamento radial.

Para a segunda junta temos uma relação de redução de 16:1, conseguida da mesma forma, e a terceira junta tem uma relação de redução de 4:1 com apenas um estágio de redução. As juntas são ocas, então podemos usar isso para passar os fios dos motores e dos microinterruptores. Para cada uma das correias, existem ranhuras nas quais podemos fixar polias intermediárias para tensioná-las.

A garra do robô é acionada por um servo motor MG996R e podemos alterar facilmente as extremidades da garra para obter diferentes tamanhos de garra. O eixo Z do robô é acionado por um parafuso de avanço de 8 mm, enquanto todo o conjunto do braço desliza em quatro hastes lisas de 10 mm e rolamentos lineares de esferas. A altura do robô depende simplesmente do comprimento das hastes lisas, que neste caso são 40cm. O parafuso de avanço precisa ser 2 cm mais curto para caber nesta configuração, ou se não, o motor Z pode ser elevado em 2 cm usando porcas espaçadoras.

Você pode encontrar e baixar este modelo 3D, bem como explorá-lo em seu navegador no Thangs:

Baixe o modelo 3D de montagem em Thangs.

Arquivos STL para impressão 3D:

Impressão 3D das peças do robô


Tudo bem, então podemos seguir em frente com a impressão 3D das peças. Eu usei minha impressora 3D Creality CR-10 para imprimir todas as peças, que é realmente uma ótima impressora 3D com um preço acessível. Como mencionei, as peças também são projetadas para caber em uma impressora 3D menor, por exemplo, a Ender3.

Para a maioria das peças usei material PLA+, o azul, assim como PLA normal para as polias e a pinça. Levei cerca de 120 horas para imprimir todas as peças na velocidade de impressão de 60 mm/s. A base foi a maior parte para imprimir, o que levou cerca de 32 horas. No entanto, se aumentarmos a velocidade de impressão, podemos definitivamente imprimir as peças mais rapidamente.

Veja também: Melhores impressoras 3D para iniciantes e criadores [atualização de 2021]

Aqui estão todas as peças impressas em 3D.

Apenas uma nota rápida aqui, que eu imprimi todos eles com a expansão horizontal habilitada de -0,1 mm no software de fatiamento. Isso permite que as peças tenham dimensões mais precisas e se encaixem melhor com as outras peças mecânicas, como os rolamentos, as hastes e os parafusos.

Montando o robô


Aqui está uma lista de componentes necessários para montar este robô SCARA baseado em Arduino. A lista dos componentes eletrônicos pode ser encontrada abaixo na seção de diagrama de circuito do artigo.
  • 4x haste de haste lisa – 10mm 400mm……… AmazonBanggood / AliExpress
  • 1x Parafuso de avanço – 8mm 400mm  ………………… AmazonBanggood / AliExpress
  • 4x rolamentos lineares 10mm ……………………..……. AmazôniaBanggood / AliExpress
  • 1x rolamento de esferas axiais 40x60x13mm   …..… Amazon / AliExpress
  • 2x rolamento de esferas axiais 35x52x12mm   …..… Amazon / AliExpress
  • 5x rolamento de esferas radial 8x22x7mm ……………. AmazôniaBanggood / AliExpress
  • Vários comprimentos de parafusos e porcas M3, M4 e M5

Aqui estão os tamanhos de parafusos necessários para este projeto:

Começamos a montagem com base. Aqui primeiro inserimos um rolamento de esferas radial com diâmetro interno de 35 mm e externo de 47 mm.

Em seguida, vai o primeiro rolamento de encosto que tem 40mm de diâmetro interno e 60mm de diâmetro externo. Este rolamento ficará entre a polia e a base.

Do outro lado da base, utilizamos outro mancal de encosto do mesmo tamanho junto com o acoplador de junta.

Então podemos acoplar a polia e a parte superior usando quatro parafusos M4 com 55mm de comprimento. Precisamos usar porcas autotravantes aqui e apertá-las adequadamente para que a junta seja robusta e possa girar livremente.

Em seguida, precisamos instalar a polia do meio. Esta polia é emparelhada com a polia de articulação com uma correia GT2 de 300 mm. Para a instalação desta polia, estamos utilizando dois rolamentos de esferas 608, um na parte superior e outro na parte inferior da base. Em seguida, usando um parafuso M8 de 45 mm, uma arruela e uma porca autotravante, podemos fixar a polia no lugar.

Em seguida, precisamos instalar o motor de passo para esta junta. O stepper será emparelhado com a polia do meio com uma correia de 200 mm. Para prendê-lo à base, precisamos de quatro parafusos M3.

Antes de apertar os parafusos, precisamos esticar o cinto o máximo que pudermos. Apenas uma nota rápida aqui que eu realmente substituí o parafuso M8 da polia do meio com a cabeça na parte inferior para que ela possa caber na base.

Neste ponto, devemos verificar se os cintos estão apertados o suficiente. Caso contrário, podemos usar algumas polias intermediárias para apertá-las melhor. Aqui estou usando um parafuso M5 de 35 mm e algumas porcas para fazer a polia tensora.

Pode ser fixado nas ranhuras de ambos os lados do cinto e assim podemos apertar o cinto o quanto quisermos. Acabei apertando o cinto dos dois lados. Com isso, a primeira articulação está concluída.

Eu segui em frente com a instalação do micro switch para esta articulação. Antes de fixá-lo no lugar, já soldei os fios nele, pois fica um pouco apertado aqui para fazer isso depois. Precisamos de parafusos M3 de 20 mm e uma porca para fixar o microinterruptor no lugar.

O acoplador da junta passa tão perto do interruptor que acabei usando apenas um parafuso para prender o interruptor. No outro buraco eu apenas inseri um parafuso mais curto e colei na parte de baixo. Dessa forma, o switch é seguro o suficiente e pode funcionar corretamente.

Ok, a seguir podemos começar a montar o eixo Z. Primeiro, na parte superior do acoplador de junta, precisamos prender a parte da placa inferior do eixo Z.

Em cima dele podemos prender os quatro grampos para as hastes lisas. Então podemos inserir as hastes lisas no lugar. Eles devem se encaixar bem e ir até a parte do acoplador da junta. Podemos então apertar as hastes com os grampos com alguns parafusos e porcas M4.

Neste ponto, precisamos inserir o rolamento para o parafuso de avanço. Para terminar esta seção, podemos apenas deslizar uma capa simples que ocultará tudo e dará uma aparência mais limpa ao robô.

Em seguida, podemos prosseguir com a montagem do primeiro braço do robô. O braço será feito de duas partes aparafusadas. A primeira parte é onde precisamos instalar os rolamentos lineares que deslizarão pelas hastes lisas. Inserindo-os no lugar pode ser um pouco difícil, porque eles se encaixam bem apertados.

Na verdade, isso depende da precisão com que sua impressora pode imprimir as peças. Portanto, sugiro utilizar o recurso de Expansão Horizontal na hora de imprimir as peças e ajustá-lo de acordo com sua impressora. No meu caso, não consegui encaixar dois dos rolamentos até o fim, mas não é grande coisa.

Ok, agora podemos emparelhar as duas partes do braço. Para isso, usaremos quatro parafusos M5 de 25 mm.

Em seguida, podemos instalar o segundo motor de passo. Aqui vou usar uma polia GT2 impressa em 3D com 20 dentes. Eu fiz esta polia usando o design paramétrico que mencionei anteriormente e funciona muito bem. Aqui também precisamos fixar a porca do parafuso de avanço no lugar.

Em seguida, podemos instalar as correias e polias para a segunda junta. Aqui precisamos de uma correia com 400mm e outra com 300mm de comprimento. O procedimento para instalá-los é praticamente o mesmo explicado para a primeira junta.

Aqui, para a segunda junta e a terceira, usamos rolamentos menores em comparação com o primeiro. O rolamento de esferas radial tem 30mm de diâmetro interno e 42mm de diâmetro externo, e o rolamento de encosto tem 35mm de diâmetro interno e 52mm de diâmetro externo.

Antes de instalar o segundo acoplador de junta, precisamos inserir seis parafusos M4 de 20 mm nas ranhuras sextavadas.

Eles servirão para prender o segundo braço à articulação. Se necessário, para tensionar as correias, podemos usar o mesmo método explicado anteriormente com as polias intermediárias. Finalmente, fixei o segundo microinterruptor no lugar e a montagem do braço número um foi concluída.

Continuei prendendo o segundo braço ao acoplador de junta. Aqui usamos esses parafusos no acoplador de junta que instalamos anteriormente, para fixar a parte superior do segundo braço.

Neste ponto, eu queria testar quanta folga as articulações tinham. Claro, eu esperava alguma reação devido aos cintos, mas na verdade havia muito mais jogo entre duas partes das articulações. Percebi que o problema era que os furos por onde passam os parafusos são um pouco maiores que os próprios parafusos. Para resolver o problema, precisamos de um ajuste mais apertado entre os parafusos e os furos.

Então, no meu caso, expandi os furos usando uma broca de 4,5 mm e usei parafusos M5, em vez dos parafusos M4, para prender as duas partes da junta. No entanto, atualizei o modelo 3D para que os furos tenham 3,5 mm e você possa usar os parafusos M4 para unir essas duas partes. Eu também voltei para o primeiro conjunto e fiz a mesma coisa. Agora a folga nas articulações está quase acabando, exceto pela pequena folga que recebemos dos cintos.

Tudo bem, agora podemos continuar com a montagem do segundo braço. Aqui primeiro precisamos instalar o motor de passo para a terceira junta.

Estou usando um motor de passo menor neste caso para que o braço seja um pouco mais leve. Ainda assim, é um motor de passo NEMA 17, mas com comprimento menor de 24 cm.

Novamente, temos o mesmo procedimento para instalação das correias e da polia para a terceira junta, exceto que aqui usamos apenas uma redução de estágio único com uma correia de 400mm. Em seguida, antes de prender esta parte inferior do braço à parte superior, precisamos conectar o motor e o microinterruptor e passar seus fios pela segunda junta.

Neste ponto, também precisamos inserir os fios para o efetuador final. No meu caso eu inseri um cabo de 4 fios de um motor de passo que vou usar para acionar o servo motor da minha pinça que requer 3 fios.

Em seguida, precisamos inserir as porcas M4 nas ranhuras do braço superior que servirão para prender a parte inferior a ele.

Logo antes de juntá-los, devemos passar os fios por baixo desses ganchos para que fiquem longe das partes móveis.

Os fios que saem da segunda junta podem ficar presos nas porcas da polia, então fiz um suporte de fio simples para manter os fios longe das porcas.

Devemos dispor os fios para passar de um lado do braço para evitar o contato com as partes móveis. Finalmente, podemos inserir a tampa do primeiro braço.

A tampa é presa ao braço com uma junta de encaixe rápido. Com isso, a montagem dos braços do robô está concluída.

Então, em seguida, podemos inserir todo esse conjunto nas hastes do eixo Z.

Em seguida, precisamos preparar a placa superior do eixo Z que irá segurar as extremidades superiores das hastes. Aqui primeiro podemos instalar o microinterruptor para o eixo Z e anexar os grampos para a placa.

Antes de colocar a placa superior no lugar, primeiro inseri uma tampa simples como a abaixo, para esconder os grampos, os parafusos e o microinterruptor. Em seguida, podemos inserir e apertar a placa superior às hastes usando os grampos.

Em seguida, precisamos inserir o parafuso de avanço no lugar.

O que eu tinha era um pouco mais comprido, então cortei para 38cm usando uma serra manual de metal. Em seguida, podemos anexar o quarto motor de passo no lugar. Aqui precisamos usar um acoplador de eixo de 5mm a 8mm para conectar o motor ao parafuso de avanço.

Finalmente, podemos passar os fios pela tampa e prendê-la à placa superior usando dois parafusos.

Ok, então, em seguida, podemos fazer algum gerenciamento de cabos. Eu usei mangas de cabo para juntar os fios e limpar a bagunça. Eu também usei alguns laços zip para essa finalidade.

Antes de colocar os fios nas mangas dos cabos, é uma boa ideia marcar cada um deles para não conectar nada errado.

O que resta agora é fazer o efetor final do robô. Podemos realmente fazer e anexar qualquer tipo de efetor final ao robô. Eu escolhi fazer uma pinça simples que é acionada por um servo motor MG996R. A garra é baseada em duas hastes de 6 mm nas quais os dois lados deslizam.

Os dois lados deslizantes são conectados ao servo com um chifre de servo, alguns links impressos em 3D e parafusos e porcas M3. Eu usei parafusos e porcas M3 para todo o conjunto da pinça. Você pode encontrar uma lista completa de parafusos e porcas necessários para este projeto no artigo do site. O espaço para prender os parafusos e porcas é bastante apertado, então você precisa de alguns nervos para montar algumas dessas peças.

No entanto, o que é bom nesse design é que podemos alterar facilmente as extremidades da garra. Eles podem ser mais largos ou mais estreitos ou podem ter uma forma específica. Podemos prender a garra ao braço do robô usando alguns parafusos e porcas M4.

Finalmente, podemos conectar o servo motor aos fios que instalamos anteriormente.

E é isso, nosso braço robótico SCARA está completamente montado. O que resta agora é conectar os componentes eletrônicos deste projeto.

Diagrama de circuito do robô SCARA


Assim, usaremos uma placa Arduino UNO em combinação com um escudo CNC e quatro drives de passo A4988.

Embora seja um robô e pareça mais complicado, essa é toda a eletrônica que precisamos para este projeto. Vale ressaltar que, em vez do Arduino UNO, também poderíamos usar um Arduino MEGA em combinação com uma placa controladora de impressora RAMPS 3D.

No entanto, imprimi em 3D um case para o Arduino UNO que pode ser facilmente conectado à base do robô. Vou usar a resolução de um quarto de passo para acionar os steppers, então coloquei alguns jumpers nos pinos apropriados. Agora podemos conectar motores de passo e microinterruptores à blindagem do CNC.

Aqui está o diagrama de circuito deste robô SCARA e como tudo precisa ser conectado.

Você pode obter os componentes necessários para este projeto nos links abaixo:
  • Motor de passo – NEMA 17……………… 
  • Driver de passo A4988…………………..… 
  • Arduino CNC Shield ………………………. AmazôniaBanggood / AliExpress
  • Arduino Uno…………………………………..… 
  • Servomotor MG996R………………….….
  • Interruptor de limite ……………………………………. AmazôniaBanggood / AliExpress
  • Fonte de alimentação CC ……………………………. Amazônia  / Banggood / AliExpress

Para alimentar o robô, precisamos de uma fonte de alimentação de 12V capaz de fornecer no mínimo 4A, mas sugiro uma fonte de alimentação de 12V 6A. Claro, isso depende de como a limitação atual do driver de passo é definida, e eu sugiro defini-lo no nível mais baixo possível.

No final, apertei todos os fios no gabinete, enquanto tentava deixar os dissipadores de calor das unidades livres, e adicionei a tampa a ele.

Finalizando a montagem


O robô SCARA agora está completo, e o que precisamos fazer agora é prender a base a alguma coisa. Para isso, usarei um pedaço de madeira de 20 mm. Na parte inferior da base do robô temos 12 furos disponíveis para prendê-lo. Então, imprimi um desenho da base do robô e usei para fazer os furos na madeira.

Na parte de baixo eu os escareei, pois usarei parafusos de cabeça chata para que eles fiquem piscando com a superfície da madeira. Insirai porcas M4 nas ranhuras da base e, em seguida, prendi a base de madeira à base do robô.

Agora, idealmente, para fixar o robô no lugar, podemos prendê-lo à mesa ou simplesmente usarei grampos para esse fim.

Então é isso, nosso robô SCARA agora está completamente pronto. O que resta neste vídeo, porém, é dar uma olhada em como o robô funciona.

Veja também: Braço robótico DIY Arduino com controle de smartphone

Como funciona o robô SCARA


Existem dois métodos para controlar robôs em termos de posicionamento e orientação, e isso é usar cinemática direta ou inversa.

A cinemática direta é usada quando precisamos encontrar a posição e a orientação do efetuador a partir dos ângulos de articulação fornecidos.

Por outro lado, a cinemática inversa é usada quando precisamos encontrar os ângulos das juntas para uma determinada posição do efetuador. Esse método faz mais sentido em robótica, pois na maioria das vezes queremos que o robô posicione sua ferramenta em um local específico ou em determinadas coordenadas X, Y e Z.

Com a cinemática inversa podemos calcular os ângulos das juntas de acordo com as coordenadas dadas.

As equações que usarei para a cinemática direta e inversa vêm de regras e fórmulas de trigonometria.

Programação do robô SCARA – Arduino e código de processamento


Na parte inferior do artigo, você pode encontrar os códigos Arduino e Processing.

Veja como as equações aparecem em um código, escrito no ambiente de desenvolvimento Processing.
// FORWARD KINEMATICS
void forwardKinematics() {
  float theta1F = theta1 * PI / 180;   // degrees to radians
  float theta2F = theta2 * PI / 180;
  xP = round(L1 * cos(theta1F) + L2 * cos(theta1F + theta2F));
  yP = round(L1 * sin(theta1F) + L2 * sin(theta1F + theta2F));
}Code language: Arduino (arduino)

Assim, com a cinemática direta calculamos o valor X e Y do efetuador, de acordo com os ângulos de articulação definidos dos dois braços do robô, theta1 e theta2, bem como seus comprimentos L1 e L2.

Por outro lado, com a cinemática inversa calculamos os ângulos articulares, theta2 e theta1, de acordo com a posição dada ou as coordenadas X e Y.
/ INVERSE KINEMATICS
void inverseKinematics(float x, float y) {
  theta2 = acos((sq(x) + sq(y) - sq(L1) - sq(L2)) / (2 * L1 * L2));
  if (x < 0 & y < 0) {
    theta2 = (-1) * theta2;
  }
  
  theta1 = atan(x / y) - atan((L2 * sin(theta2)) / (L1 + L2 * cos(theta2)));
  
  theta2 = (-1) * theta2 * 180 / PI;
  theta1 = theta1 * 180 / PI;

 // Angles adjustment depending in which quadrant the final tool coordinate x,y is
  if (x >= 0 & y >= 0) {       // 1st quadrant
    theta1 = 90 - theta1;
  }
  if (x < 0 & y > 0) {       // 2nd quadrant
    theta1 = 90 - theta1;
  }
  if (x < 0 & y < 0) {       // 3d quadrant
    theta1 = 270 - theta1;
    phi = 270 - theta1 - theta2;
    phi = (-1) * phi;
  }
  if (x > 0 & y < 0) {       // 4th quadrant
    theta1 = -90 - theta1;
  }
  if (x < 0 & y == 0) {
    theta1 = 270 + theta1;
  }
  
  // Calculate "phi" angle so gripper is parallel to the X axis
  phi = 90 + theta1 + theta2;
  phi = (-1) * phi;

  // Angle adjustment depending in which quadrant the final tool coordinate x,y is
  if (x < 0 & y < 0) {       // 3d quadrant
    phi = 270 - theta1 - theta2;
  }
  if (abs(phi) > 165) {
    phi = 180 + phi;
  }

  theta1=round(theta1);
  theta2=round(theta2);
  phi=round(phi);
  
  cp5.getController("j1Slider").setValue(theta1);
  cp5.getController("j2Slider").setValue(theta2);
  cp5.getController("j3Slider").setValue(phi);
  cp5.getController("zSlider").setValue(zP);
}Code language: Arduino (arduino)

Dependendo em qual quadrante a posição está definida, fazemos alguns ajustes nos ângulos das juntas com essas declarações “if”. Para esta configuração do robô estamos na verdade calculando a cinemática inversa com apenas dois links. O terceiro ângulo que chamo de “phi” é usado para definir a orientação da garra.

A Interface Gráfica do Usuário é feita usando a biblioteca controlP5 para o Processing IDE. Com esta biblioteca podemos facilmente criar botões, controles deslizantes, campos de texto e assim por diante.

Por exemplo, usamos os controles deslizantes do lado esquerdo para controlar os ângulos das juntas e, usando os campos de texto, podemos inserir a posição onde queremos que nosso robô vá. A cada ação que tomamos aqui com o programa, enviamos dados para a placa Arduino através da porta serial.
if (gripperValuePrevious != gripperValue) {
    if (activeIK == false) {     // Check whether the inverseKinematics mode is active, Executre Forward kinematics only if inverseKinematics mode is off or false
      gripperAdd = round(cp5.getController("gripperValue").getValue());
      gripperValue=gripperAdd+50;
      updateData();
      println(data);
      myPort.write(data);
    }
  }Code language: Arduino (arduino)

Esses dados incluem os ângulos da junta, o valor da garra, valores de velocidade e aceleração e indicadores para saber se clicamos nos botões salvar ou executar.
public void updateData() {
  data = str(saveStatus)
    +","+str(runStatus)
    +","+str(round(cp5.getController("j1Slider").getValue())) 
    +","+str(round(cp5.getController("j2Slider").getValue()))
    +","+str(round(cp5.getController("j3Slider").getValue()))
    +","+str(round(cp5.getController("zSlider").getValue()))
    +","+str(gripperValue)
    +","+str(speedSlider)
    +","+str(accelerationSlider);
}Code language: Arduino (arduino)

Todos esses dados vêm como uma longa String no Arduino. Então aqui, primeiro precisamos extrair os dados dessa string e colocá-los em variáveis ​​separadas.
if (Serial.available()) {
    content = Serial.readString(); // Read the incomding data from Processing
    // Extract the data from the string and put into separate integer variables (data[] array)
    for (int i = 0; i < 10; i++) {
      int index = content.indexOf(","); // locate the first ","
      data[i] = atol(content.substring(0, index).c_str()); //Extract the number from start to the ","
      content = content.substring(index + 1); //Remove the number from the string
    }
    /*
     data[0] - SAVE button status
     data[1] - RUN button status
     data[2] - Joint 1 angle
     data[3] - Joint 2 angle
     data[4] - Joint 3 angle
     data[5] - Z position
     data[6] - Gripper value
     data[7] - Speed value
     data[8] - Acceleration value
    */Code language: Arduino (arduino)

Agora com essas variáveis ​​podemos realizar ações com o robô. Por exemplo, se pressionarmos o botão SAVE, armazenamos os valores atuais dos ângulos da junta em uma matriz separada.
// If SAVE button is pressed, store the data into the appropriate arrays
    if (data[0] == 1) {
      theta1Array[positionsCounter] = data[2] * theta1AngleToSteps; //store the values in steps = angles * angleToSteps variable
      theta2Array[positionsCounter] = data[3] * theta2AngleToSteps;
      phiArray[positionsCounter] = data[4] * phiAngleToSteps;
      zArray[positionsCounter] = data[5] * zDistanceToSteps;
      gripperArray[positionsCounter] = data[6];
      positionsCounter++;
    }Code language: Arduino (arduino)

Se clicarmos no botão RUN, executamos as etapas armazenadas e assim por diante.

Para controlar os motores de passo, usei a biblioteca AccelStepper. Embora esta seja uma ótima biblioteca para controlar vários steppers ao mesmo tempo, ela tem algumas limitações quando se trata de controlar um robô como este. When controlling multiple steppers, the library cannot implement acceleration and deceleration, which are important for smoother operation of the robot.
stepper1.moveTo(stepper1Position);
  stepper2.moveTo(stepper2Position);
  stepper3.moveTo(stepper3Position);
  stepper4.moveTo(stepper4Position);

  while (stepper1.currentPosition() != stepper1Position || stepper2.currentPosition() != stepper2Position || stepper3.currentPosition() != stepper3Position || stepper4.currentPosition() != stepper4Position) {
    stepper1.run();
    stepper2.run();
    stepper3.run();
    stepper4.run();
  }Code language: Arduino (arduino)

I still managed to implement acceleration and deceleration with the library, but they are not as smooth as I wanted to be.

Here are full Arduino and Processing codes for this Arduino SCARA robot project:

Wrap up


So finally, once we upload the code to the Arduino, we can run the processing program, connect the power and the scara robot will start moving to its home position.

From there on, we can do whatever we want the it. We can play around manually or set it to work automatically. Of course, we can attach any kind of end-effector and make cool stuff with it. For example, we can even attach a 3D printer hot end to the robot and so make the robot a 3D printer, or attach a laser head and make it a laser cutter. I do plan try these two ideas, so make sure you subscribe to my channel so you don’t miss them in some of my future videos.

Before this video ends, I would like to give you few more notes about this project. I found the robot to be not as rigid as I expected.

I guess the problem is that almost the entire SCARA robot, the Z-axis and the arms are supported only by the first joint. The whole weight and the inertial forces generated when moving, can make quite a stress to base where the first joint is located, and as it’s just a plastic it tends to bend a little bit. Also, these belts are not backlash free so we reduce the robot rigidity with that too. However, I think the overall project is good enough so you to learn how SCARA robots work, and gives you the courage to build one for yourself.

Sinta-se à vontade para fazer qualquer pergunta na seção de comentários abaixo e confira minha Coleção de projetos do Arduino.

Processo de manufatura

  1. Hackeando o Lego EV3:Construa seus próprios “olhos” de sensor de objeto
  2. Construa seu robô de streaming de vídeo controlado pela Internet com Arduino e Raspberry Pi
  3. Whitepaper:Como Encontrar o Potencial do Seu Robô
  4. Como Construir Sauron, o Senhor dos Robôs
  5. Como construir um monitor de energia Arduino e registrador de dados
  6. Como hackear IR Remotes
  7. Guia definitivo:como escolher um robô SCARA correto
  8. Littlearm 2C:Construir um braço de robô Arduino impresso em 3D
  9. Como fazer a abertura automática de porta baseada no Arduino
  10. Como construir seu roteiro de automação em 7 etapas