Arduino — Braço Robótico

Nicolas de Souza
Editorial 20 21
Published in
7 min readSep 21, 2020

Todo jovem cientista tem em sua memória o momento onde se apaixonou pela sua área, uma situação que viveu, um livro que leu, alguma visita feita na época de escola… No meu caso foi a cultura pop, em especial o Homem de Ferro. No auge dos meus 11 anos nada me impressionava, mas Tony Stark conseguiu.

Assim que acabei de ver o filme, decidi que iria construir robôs e máquinas tão incríveis quanto as do cinema, até hoje não consegui, mas continuarei tentando! Enquanto não consigo criar uma Mark, vamos construir um braço robótico e falar um pouco sobre os desafios envolvidos no projeto.

Projeto — Componentes

Vamos criar um braço robótico usando servos, botões e joystick, além do nosso querido Arduino. O objetivo é entender as peculiaridades e dificuldades encontradas neste processo de construção e ao decorrer disso aprender sobre a utilização destes componentes.

Servo Motor

Eles, os astros do nosso projeto, darão movimento ao nosso braço. O servo motor é um equipamento de controle posicional, ou seja, é possível garantir precisão em seus movimentos. São amplamente utilizados na robótica, máquinas CNC e tantas outras aplicações.

O servo motor é constituído de um motor, que pode ser de corrente contínua ou alternada. No nosso projeto utilizaremos servo motores de corrente contínua, a esse motor soma-se um potenciômetro e um chip de controle. Este chip realiza leituras do potenciômetro e assim controla a posição com precisão.

Esses equipamentos possuem a capacidade de travarem em uma determinada posição e mesmo usando força é quase impossível mudar a posição sem danificar. Isso significa que se bem projetado os servos são capazes de realizar movimentos e levantar cargas.

Para controlar os servos, vamos utilizar a biblioteca que já vem por padrão com o arduino. Esta biblioteca prevê a criação de um objeto que nos dá acesso a funções para acionamento do servo, facilitando a implementação e uso dos componentes.

Vamos utilizar o código abaixo para falar um pouco mais sobre essas funções.

Código exemplo — Servo Motor

Na linha sete temos a instanciação do objeto servo_motor que pertence a classe Servo. Orientação a objetos é um assunto que pode dar nó na cabeça, mas não se preocupe muito com isso agora. Usando esse objeto faremos uso do método — ou função — attach(), para dizer ao microcontrolador em qual pino estará ligado o servo, como é visto na linha 7.

Já o método write()é utilizado para dizer ao servo em qual posição ele deve estar. Os seus valores são passados em graus e variam de 0–180, completando meia-volta. Lembra que eu disse que o servo motor usava um potenciômetro para controlar a posição?! Se você já mexeu com um potenciômetro sabe que ele também só faz apenas meia-volta.

Neste código o servo irá girar para um lado, até os 180° e depois retornar aos 0° e assim quantas vezes ficar ligado. Existem ainda outras funções que podem ser utilizadas, neste projeto vamos utilizar apenas estas.

Joystick

O controle do nosso braço será feito com o uso do nosso querido e velho amigo joystick e botões, quase um manete de videogame.

O joystick possui 2 direções e um botão. A leitura das direções é feita através das portas analógicas, uma para cada direção. O valor lido indica para onde o analógico está apontando, simples assim. Pode ser que seja necessário realizar alguns ajustes nos valores de leitura, falaremos disso mais para a frente quando detalharmos o desenvolvimento. Abaixo um código que mostra como essas leituras ocorrem e são usadas.

Código exemplo — Joystick

Botões

Os botões serão usados para o ajuste fino da posição e acionamento da garra. Esses botões podem ser configurados de duas formas, PULL UP ou PULL DOWN. Nesse GIF é possível ver a diferença entre as duas possibilidades.

No código é feito a leitura do estado do botão e o resultado disso é escrito no LED. O conjunto da esquerda, com fios verdes, está configurado de modo PULL UP, isso significa que o botão está conectado diretamente no terra. Quando é pressionado a corrente vai direto para o terra, resultando numa leitura de nível baixo (LOW). Já o conjunto da direita, fios laranjas, está configurado de modo PULL DOWN, o botão está conectado diretamente ao positivo, por essa razão quando pressionado, o retorno é nível alto (HIGH).

Exemplificando o uso dos botões

O Arduino provê um resistor interno, para economia de componentes, mas esse resistor está configurado de modo PULL UP. Eu prefiro usar desta forma, é menos um componente para conectar e se preocupar, mas para isso é necessário lembrar que quando acionado retorna nível baixo (LOW).

Projeto — Discussões

Agora que já vimos como os componentes se comportam e como usá-los, vamos falar sobre o projeto em si. Quando comecei a desenvolver essa ideia encontrei alguns obstáculos interessantes e queria falar deles aqui.

O primeiro obstáculo foi a carga necessária para ligar os servos. A recomendação do próprio fabricante é que o equipamento opere entre 4.8 e 6 volts, como vamos utilizar 4 servos a corrente disponível para cada um deles seria relativamente baixa. Isso é um problemão. O servo tem um pico de consumo quando se movimenta, principalmente quando está sujeito a carga.

Sobre a força do servo, ele possui um torque de 2.5 Kg.cm, segundo o datasheet do fabricante. Na internet vi alguns testes e usuários dizendo que ele aguenta algo em torno de 1.6 Kg.cm. Isso quer dizer que o servo pode sustentar um peso de 1.6 Kg no máximo com um suporte de um centímetro. Quanto maior for esse suporte, menos peso o servo aguenta.

No nosso caso, não iremos expor nosso servo a uma carga tão alta, será no máximo o peso de outros servos e mesmo assim estará bem distribuído. Então não vamos ter problemas com a alimentação do braço, se você for fazer esse projeto e puder utilizar uma fonte externa e até mesmo o módulo PWM, ótimo, se não, poderemos usar o arduino mesmo.

O segundo ponto é o mais importante, como ajustar os valores para que nosso braço funcione corretamente. O joystick controlará o servo base e o servo amplitude, cada direção controlará um dos servos. Os botões serão usados da seguinte forma, o botão azul, fará subir a base da garra, e o botão amarelo, o descerá. Já o botão vermelho, acionará e desacionará a garra.

Braço Robótico

Isso é fácil né?! Então é só criar uma variável para cada servo, ir somando ou subtraindo… Ah, temos que colocar um limite para que os valores fiquem entre 0° e 180° — para respeitar o limite do servo. Seria lindo se fosse só isso, mas nem tudo são flores. Brincadeira, é simples assim mesmo. Só que temos que garantir também que nosso braço não se choque com a base ou que a garra quebre. Além disso precisamos regular a sensibilidade do joystick!

Todos esses ajustes são feitos no código. Eu criei uma função chamada controle(), que recebe três valores: o valor a ser verificado, o valor mínimo e o valor máximo. Dessa forma eu garanto que minhas variáveis vão estar sempre dentro dos limites corretos de funcionamento.

Função responsável pelo controle

Um outro ajuste que foi necessário foram os valores de leitura do joystick. Para melhorar a sensibilidade e fluidez do movimento eu não utilizei 0 e 1023 como valores base de seleção. Eu optei por dividir em maior que 600 e menor que 200, dessa forma a manete ficou mais sensível, mas fica a gosto do freguês.

Ajustes feitos nos valores do Joystick

Uma outra coisa que foi necessária foi usar uma trava para usar a garra. Eu não queria que ela se mexesse quando eu estive abrindo/fechando então usei uma lógica de travamento. Só esse trecho de código já resolveu meu problema. Sobre a garra, ainda é importante dizer que defini sua operação em apenas dois valores, também frutos de teste.

Solução para funcionamento da garra

Código e Esquema Elétrico

Após nossa longa jornada, é chegado o momento de exibir o código final e o esquema elétrico. Como já dito, os valores são frutos de testes, recomendo que façam os seus para que o braço funcione exatamente como você espera.

Esquema elétrico

Conclusão

Chegamos ao fim da nossa jornada, espero que possa ter sido um caminho tranquilo até aqui. Neste link é possível acompanhar a montagem dos palitos, caso precisem. Recomendo, se você for fazer este projeto, a testar o máximo de situações e aprender com as prováveis falhas que irão acontecer.

“Sucesso é um péssimo professor. Ele seduz as pessoas inteligentes a acharem que não podem perder” Bill Gates

Qualquer dúvida, questionamento, é só entrar em contato. Até a próxima!

A quem possa interessar, vou deixar um repositório no GitHub com todos os códigos de exemplo, bem como o código usado e esquema elétrico.

--

--

Nicolas de Souza
Editorial 20 21

Um engenheiro por formação se aventurando no mundo do desenvolvimento de software!