Construa um Braço Robótico Preciso Controlado por PC com Arduino Nano e Servos Tower Pro MG996R
Componentes e Materiais
- Arduino Nano R3 × 1
- Servos Tower Pro MG996R × 4
Aplicativos e Serviços Online
- Microsoft Visual Studio 2015 (para aplicação C# Windows)
- Arduino IDE
Sobre o Projeto
Sempre admirei tecnologias de manufatura moderna e o papel crucial de robôs em áreas como movimentação de materiais, montagem, soldagem, corte e armazéns. Construir este braço robótico foi um desafio. Comecei com um design simples de 2016 (fortzeroas), mas decidi não controlá-lo manualmente. Criei uma aplicação de automação em C# Windows Application com interface semelhante a softwares industriais.
Passo 1: Materiais
Material principal: MDF (2mm para estrutura, 4mm para base). Plantas disponíveis para download no último passo; imprima, cole no MDF, recorte e fure. Usei ferramenta rotativa para cortar e furar. Para a base, improvise.
Passo 2: Pintura e Estilo
Usei as mesmas plantas para criar decalques e formas geométricas no Photoshop, imprimir e colar com cola branca para aparência realista.
Passo 3: Montagem da Estrutura
Montagem simples: fixe os servos com parafusos. Usei palitos de madeira grossos e cola instantânea para unir lados direito e esquerdo, reduzindo peso.
Passo 4: Garra (Mecanismo de Pinça)
Dobrei duas hastes metálicas com alicate, furei peça de madeira de 3mm e fixei com cola instantânea.
Passo 5: Fabricação da Base
Base em MDF 4mm (17cm x 10cm), furo para servo de base 9g. Para reduzir atrito, usei tubo de papelão forte (2.5cm altura, 10cm diâmetro) com furo para eixo do servo.
Passo 6: Eletrônica
Com mais de dois servos, use fonte externa. Usei três micro servos 9g e um servo grande. Testei virtualmente no Tinkercad. Alimentação: 4 pilhas AA (6V). Fiz protoboard e depois dock de expansão simples para Arduino Nano.
Passo 7: Código Arduino
- Baixe e instale Arduino IDE mais recente: arduino.cc
- Conecte Arduino via USB.
- Tools > Board > selecione sua placa.
- Copie e cole o código na IDE.
- Verifique (✔) e faça upload (➤).
Passo 8: Aplicação de Automação
Minha parte favorita: automatizar projeto Arduino via PC. Inicialmente usei Processing 3 para simular servos e encontrar ângulos fixos. Gravei arrays de ângulos (Base, Ombro, Cotovelo, Garra) e usei na aplicação Windows.
Funcionalidades:
- Controle de Movimento: Modo manual via trackbars/teclado:
- Garra: botões abrir/fechar.
- Base: trackbar ou setas ←/→.
- Ombro: trackbar ou setas ↑/↓.
- Cotovelo: trackbar ou teclas W/S.
- Gravação de Movimento: Clique "Rec. Position" (ou tecla R) para salvar posição atual. Aplicação detecta qual motor moveu e salva em lista. Botão "Start Auto mode" reproduz sequência.
- Monitoramento: Interface gráfica desenha gráfico de cada passo + tabela com ângulo e tempo exato.
Passo 9: Atualizações (Ago 2018)
Refiz o design em corte a laser (MDF 3mm) com modificações, incluindo joystick personalizado.
Código
Task.ino (Arduino)
int delayT = 350;
void Home() {
MyServo0.write(valGripper); delay(15);
MyServo.write(valBase); delay(30);
MyServo2.write(valShoulder); delay(30);
MyServo3.write(valElbow); delay(delayT);
}
void Pick() {
MyServo.write(4); delay(delayT);
MyServo3.write(125); MyServo2.write(95); delay(delayT);
MyServo0.write(50); delay(delayT);
MyServo0.write(2); delay(delayT);
MyServo2.write(60); MyServo3.write(80); delay(delayT);
Serial.println("Object Picked");
}
void Drop() {
MyServo.write(145); delay(delayT);
MyServo2.write(80); delay(15);
MyServo3.write(115); delay(delayT);
MyServo0.write(40); delay(delayT);
MyServo3.write(90); delay(delayT);
Serial.println("Object Dropped");
}
void Playback() {
char* command = strtok(ByteReceived, "&");
while (command != 0) {
char* separator = strchr(command, ':');
if (separator != 0) {
*separator = 0;
int servoId = atoi(command);
++separator;
int angle = atoi(separator);
if (servoId = 1) { MyServo.write(angle); delay(delayT); }
else if (servoId = 2) { MyServo2.write(angle); delay(delayT); }
else if (servoId = 3) { MyServo3.write(angle); delay(delayT); }
}
command = strtok(0, "&");
}
}
RobotArm.ino (Arduino)
// written by AhmedAzouz
#include <Servo.h>
Servo MyServo, MyServo2, MyServo3, MyServo0;
char ByteReceived;
int MyPosition, MyPosition2, MyPosition3, MyPositionG;
int runCounter = 0;
int ledPin = A5;
int valGripper = 30, valBase = 70, valShoulder = 25, valElbow = 150;
void setup() {
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
digitalWrite(13, LOW);
MyServo0.attach(12); MyServo.attach(11); MyServo2.attach(13); MyServo3.attach(10);
MyServo0.write(valGripper); delay(15);
MyServo.write(valBase); delay(30);
MyServo2.write(valShoulder); delay(30);
MyServo3.write(valElbow); delay(300);
}
void loop() {
Serial.print("Base: "); Serial.print(valBase); Serial.print("\t");
Serial.print("Shou: "); Serial.print(valShoulder); Serial.print("\t");
Serial.print("Elbow: "); Serial.print(valElbow); Serial.print("\t");
Serial.print("Grip: "); Serial.println(valGripper);
while (Serial.available() > 0) {
ByteReceived = Serial.read();
switch (ByteReceived) {
case 'n': digitalWrite(ledPin, HIGH); Serial.println("LED is on"); break;
case 'f': digitalWrite(ledPin, LOW); Serial.println("LED is off"); break;
case 'l': MyPosition = MyServo.read() + 2; MyServo.write(MyPosition); Serial.print("Base\t"); Serial.println(MyServo.read()); delay(15); break;
case 'r': MyPosition = MyServo.read() - 2; MyServo.write(MyPosition); Serial.print("Base\t"); Serial.println(MyServo.read()); delay(15); break;
case 'u': MyPosition2 = MyServo2.read() + 2; MyServo2.write(MyPosition2); Serial.print("Elbow\t"); Serial.println(MyServo2.read()); delay(15); break;
case 'd': MyPosition2 = MyServo2.read() - 2; MyServo2.write(MyPosition2); Serial.print("Elbow\t"); Serial.println(MyServo2.read()); delay(15); break;
case 'w': MyPosition3 = MyServo3.read() + 2; MyServo3.write(MyPosition3); Serial.print("Shoulder\t"); Serial.println(MyServo3.read()); delay(15); break;
case 's': MyPosition3 = MyServo3.read() - 2; MyServo3.write(MyPosition3); Serial.print("Shoulder\t"); Serial.println(MyServo3.read()); delay(15); break;
case 'o': MyServo0.write(30); Serial.print("Gripper Open\t"); Serial.println(MyServo0.read()); delay(15); break;
case 'c': MyServo0.write(1); Serial.print("Gripper Close\t"); Serial.println(MyServo0.read()); delay(15); break;
case 'q': digitalWrite(ledPin, HIGH); Serial.println("Default Dropped activated!"); Pick(); Drop(); Home(); digitalWrite(ledPin, LOW); break;
case 'h': Home(); digitalWrite(ledPin, LOW); break;
default: digitalWrite(ledPin, HIGH); Serial.println("Automatic mood activated!"); Pick(); Playback(); Home(); digitalWrite(ledPin, LOW); break;
}
}
}
Peças Personalizadas e Gabinetes
f98t2axin238k2n_khGWAEIqdl.skp (SketchUp)
Esquemáticos
Processo de manufatura
- Makerarm: O Braço Robótico Desktop All‑in‑One para Makers
- Como Braços Robóticos São Construídos: Design e Função
- Como Braços Robóticos Industriais Transformam a Manufatura: Principais Benefícios
- Braços Robóticos Industriais: Impulsionando Eficiência de Produção e Valor da Força de Trabalho
- Braços Robóticos Hidráulicos na Manufatura: Guia de Especialista
- Controle IoT Remoto de Braço Robótico Personalizado
- Construa um Braço Robótico 3D Impresso Funcional com Arduino – Guia Passo a Passo
- Braço Robótico 6 GDL Controlado por Nunchuk com Arduino Mega
- Mercado de Robôs SCARA Alcançará US$14,78 Bi até 2026, Impulsionando Crescimento da Automação
- Braços Robóticos Industriais: Impulsionando a Revolução na Manufatura