Braço Robótico com ESP32

O braço robótico é um dos mecanismos mais desejados para sistemas de automação por conta da sua precisão e agilidade.

Objetivo deste Projeto

Este é um projeto simples e de montagem rápida, a ideia é fornecer a estrutura de funcionamento pronto, para que você apenas modifique de acordo com sua necessidade.

Materiais necessários

Montagem do Braço

Por mais que pareça complicado, o braço basicamente já vem parcialmente montado pelo o Arduino Ômega, a única coisa necessária será inserir as peças de encaixe do motor no braço e encaixar o motor no braço. Caso você queria deixar este braço usual de forma continua, é interessante seguir umas boas práticas.

Boas práticas na Mecânica do Braço

Este braço não foi feito para aplicações em campo, por isso ele é simples, é uma prova de conceito! Por isso, é importante se atentar aos pontos de conexões mecânicas fixas e móveis, pois o parafuso não pode nem está apertado e nem muito folgado. Além disso, é necessário o uso de um trava rosca no parafuso, caso contrário o movimento do braço vai desenroscar a porca.

Fixação mecânica do Braço Robótico

Caso você não saiba o que é trava rosca, é um liquido que se passa em rosca de parafusos para impedir que a porca desenrosque com vibrações ou movimentos e caso você não tenha, use esmalte de unha.

Limitações do Braço

Embora cada servo motor tenha um ângulo de trabalho de até 180°, não poderão exercer todo esse ângulo no braço, caso contrário irá forçar o motor. Por conta das limitações mecânicas, o correto é limitar também o ângulo de trabalho de cada motor.

Braço Robótico do Arduino ômega montado com os servos motores

Diagrama esquemático

Uma observação é que é necessário uma alimentação a parte para os motores, pois se alimentado diretamente com a placa do ESP32, o diodo do conector USB vai superaquecer.

Diagrama esquemático do Braço Robótico do Arduino ômega

Código do Braço Robótico do Arduino Ômega

Basicamente o código a seguir verifica se houve alguma comunicação via serial ou bluetooth e envia o comando cada servo motor, respeitando as limitações de ângulo do braço. No entanto, para que o código funcione corretamente, é necessário baixar a biblioteca <Arduinojson.h> e <Servo.h> para ESP32.

#include <Servo.h>

int servosPins[] = {13, 27, 33, 32};                                  // Pinos do ESP32
int servosLimit[] = {180, 100, 120, 90};                                  // Pinos do ESP32

int nServos = sizeof(servosPins) / sizeof(int);                       /* Obtem o tamanho do array
                                                                         (pega o valor de byte do array e divide pela quantidade de 
                                                                         bytes de uma variável do tipo inteiro (tem que ser o mesmo
                                                                         tipo que a do array a ser obtido o tamanho))
                                                                      */

Servo servos[4];                                                      // Define e indica que servos será um array de 4 slotes


void setServo(int i, int a){                                          // Método de escrita no servos, com as respectiva limitaçõe de ângulo de cada eixo
  if(a <= servosLimit[i])                                             // Limita ângulo do servo para não forçar o motor
    servos[i].write(a);                                               
}

void setup() {
  for(int i = 0; i < nServos; ++i) {
    if(!servos[i].attach(servosPins[i])) {                            // Inicializa PWM para os servos
      Serial.print("Servo ");
      Serial.print(i);
      Serial.println("attach error");
    }
  }
}

void loop() {
  for(int i = 0; i < 180; ++i){
    for(int j = 0; j < 4; ++j){
      setServo(j, i);
    }
    delay(20);
  }
  for(int i = 180; i > 0; --i){
    for(int j = 0; j < 4; ++j){
      setServo(j, i);
    }
    delay(20);
  } 
}

Funcionamento do Braço Robótico

A ideia tinha sido usar o json por meio das duas portas seriais ou Bluetooth mas na pratica apresentou muita latência, então a melhor solução foi deixar o braço rodando realizando movimentos já programados.

Sobre Gustavo Cereza 3 artigos
Meu nome é Gustavo Cereza sou de SA/BA/BR, tenho 22 anos, fiz iniciação cientifica de inovações tecnológicas no SESI, minha formação é tec. Eletromecânica. Sou fundador e dono do site Elcereza, um amante da eletrônica desde a infância e gosto de transformar ideias em realidade usando a tecnologia.

Seja o primeiro a comentar

Deixe uma resposta

O seu endereço de email não será publicado.


*