O Braço Robótico com Servo Motores é um projeto de robótica que simula os movimentos de um braço humano e faz parte de uma atividade do projeto “Faça você mesmo: explorando a criatividade no espaço Maker”, coordenado pelo professor Antônio. O projeto contou com a participação voluntária da estudante Grabriela de Oliveira Vieira do Curso Técnico em Informática.
O Braço Robótico utiliza servo motores (Modelo SG90) para articular suas juntas, esse tipo de robô é amplamente utilizado em aplicações educacionais, prototipagem e até em pequenas automações industriais. Sua construção modular e programável o torna ideal para o aprendizado de mecatrônica, controle de movimentos e programação.
O braço desenvolvido por este projeto é baseado no modelo disponível em https://github.com/mearm/mearm que é open source. O braço tem 4 eixos de movimento, cada um controlado por um servo. Todo código desenvolvido para controlar cada motor foi inteiramente desenvolvido pela estudante e está disponibilizado no final da página.
Para confeccionar o braço foi utilizado MDF de 3mm. Todas as peças foram cortadas pela máquina de corte a laser do Espaço Maker.

Arquivo de corte para cada peça do braço. Modelo adaptado de https://github.com/mearm/mearm.
É possível consultar o manual de montagem no seguinte link: https://github.com/MeArm/MeArm/blob/master/v1/MeArmV1.0_r1.4.pdf


Braço montado.
O servo motor SG90 é um pequeno servo motor popular em projetos de robótica, eletrônica e automação devido ao seu baixo custo, tamanho compacto e facilidade de uso. Ele é amplamente utilizado em aplicações como robótica educacional.

Servo Motor (SG90) utilizado no projeto disponível no Espaço Maker
O SG90 é controlado por um sinal PWM (Pulse Width Modulation), onde a largura do pulso determina a posição do eixo do servo, que varia de 0º a 180º.
As movimentações desempenhadas pelos servos são:
- Base (Rotação Horizontal – Servo 1)
- Movimento: Gira o braço inteiro para esquerda/direita.
- Eixo: Servo na base.
- Função: Posicionamento horizontal da garra.
- Ângulo típico: ~0° a 180°.
- Ombro (Movimento Vertical – Servo 2)
- Movimento: Levanta/abaixa o braço principal (parte superior).
- Eixo: Servo na junta do “ombro”.
- Função: Controla a altura do braço.
- Ângulo típico: ~30° a 120°
- Cotovelo (Movimento Vertical – Servo 3)
- Movimento: Dobra/estica o antebraço (parte inferior).
- Eixo: Servo na junta do “cotovelo”.
- Função: Ajusta a extensão do braço.
- Ângulo típico: ~45° a 135°.
- Garra (Abertura/Fechamento – Servo 4)
- Movimento: Abre/fecha a garra (para pegar objetos).
- Eixo: Servo na ponta do braço.
- Função: Segurar ou soltar itens.
- Ângulo típico: ~0° (fechado) a 60° (aberto).
Além dos servos motores foram utilizados:
- 4 Potenciômetros: um para controlar cada motor. Cada potenciômetro permite realizar o movimento físico (rotação do eixo) em um sinal analógico (0V a 5V), permitindo controlar manualmente a posição de cada servo.

- 1 Placa Arduino (Modelo UNO): Que armazena o programa para controlar o braço. O Arduino foi utilizado para ler os sinais dos potenciômetros e controlar os servos motores (SG90) via PWM.
- 1 Capacitor (100 µF): Utilizado para estabilizar a fonte de alimentação, minimizar quedas de tensão e reduzir o ruído elétrico que pode ser induzido pelos motores.
O Arduino Uno fornece em torno 500mA pela porta USB e cerca de 1A quando conectado a fonte dedicada e cada motor pode chegar a consumir cerca de 800 mA para iniciar o movimento (vencer a força de atrito) ou levantar um peso. Portanto, para não sobrecarregar a placa arduino os motores foram conectados a uma fonte de tensão externa.
Código fonte elaborado pela estudante Gabriela:
/* Código Braço Robótico com Servo Motores e Potenciômetro.
Autora: GABRIELA DE OLIVEIRA VIEIRA
*/
#import <Servo.h>
Servo base;
Servo esq;
Servo dir;
Servo garra;
int analog = A1;
int analog2 = A2;
int analog3 = A3;
int analog4 = A4;
int cont;
int ang;
void setup() {
pinMode(analog, INPUT);
Serial.begin(9600);
base.attach(8);
pinMode(analog2, INPUT);
esq.attach(9);
pinMode(analog3, INPUT);
dir.attach(10);
pinMode(analog4, INPUT);
garra.attach(11);
cont = 0;
}
void loop() {
int var = analogRead(analog);
ang = ang+map(var, 0, 1024, 10, 60);
cont++;
if(cont==50){
ang = ang/cont;
base.write(ang);
Serial.println(ang);
cont = 0;
}
int var2 = analogRead(analog2);
int ang2 = map(var2, 0, 1024, 140, 20);
esq.write(ang2);
//Serial.println(ang2);
int var3 = analogRead(analog3);
int ang3 = map(var3, 0, 1024, 30, 120);
dir.write(ang3);
//Serial.println(ang3);
int var4 = analogRead(analog4);
int ang4 = map(var4, 0, 1024, 120, 50);
garra.write(ang4);
//Serial.println(ang4);
}