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

Construa Sauron: O Robô Semi-Humanoide – Guia Completo com Arduino Mega 2560

Componentes e Materiais

Arduino Mega 2560 1
1Sheeld 1
Dispositivo Android 1

Ferramentas Necessárias

Aplicativos e Serviços Online

Sobre o Projeto

Fã de O Senhor dos Anéis? Então conhece Sauron! Neste projeto, construímos um robô semi-humanoide do tamanho humano com a aparência de Sauron.

O robô possui dois braços com 3 GDL (graus de liberdade) e uma cabeça com 3 GDL, sobre uma base fixa. Opera em três modos, alternados por dois botões em pinos digitais:

  1. Modo Standby: Sequência de movimentos para atrair atenção em eventos.
  2. Modo Gamepad: Controle manual via shield Gamepad do app 1Sheeld.
  3. Modo Imitação: O robô imita movimentos do usuário (como o garoto em Real Steel). Use uma luva com smartphone fixo; o Arduino lê sensores (orientação, giroscópio) e controla os braços.

Projeto feito para a New York Maker Faire, para inspirar crianças a usar Arduino e 1Sheeld para construir personagens de filmes. Inclui todos os arquivos: desenhos CAD, esquemáticos, códigos Arduino e arquivos DXF para corte a laser.

Passo 1: Construindo a Cabeça do Robô

Usei a cabeça robótica open-source "Fritz" do xyzbot. Baixei os arquivos de corte a laser e cortei as peças em uma makerspace próxima. Usei compensado de 3mm. Pulei a impressão 3D das partes dos olhos, sobrancelhas e lábios para reduzir tempo e custo.

Siga o vídeo de montagem do kit original, mas:

  1. Pule a montagem da base.
  2. Pule passos relacionados às partes 3D dos olhos.
  3. Pule passos de sobrancelhas e lábios.

Arquivos: Open_Source_Files.zip, FFRDB2LIKJ8MS1G.dxf

Passo 2: Construindo o Corpo do Robô

Corpo portátil para fácil montagem em eventos. Usei hastes Artelon e chapas de compensado 3mm. Junções lingueta-e-ranhura fixam peito, ombros, pescoço e costas. Parafusos 4mm x 20mm fixam a estrutura de madeira ao esqueleto Artelon; parafusos 12mm x 30mm fixam o esqueleto à base; parafusos 4mm x 10mm fixam servomotores à estrutura.

O esqueleto Artelon tem 5 partes: haste básica (50mm), esqueleto (25mm), hastes de largura (15mm, 3 peças). Ver desenhos anexos.

Arquivos PDF e ZIP anexos.

Passo 3: Criando a Base do Robô

Base projetada no Solidworks para fixar o robô à mesa (3 parafusos ou 2 grampo C de 4"). Chapa de metal 6mm com aberturas para reduzir peso. Parafusos 12mm x 30mm fixam base ao esqueleto. Arquivo DXF: FMZODFWIKMXHHIV.dxf

Passo 4: Construindo os Braços do Robô

Maior desafio: braços modulares, fáceis de montar/desmontar para viagem. Projetados para serem genéricos: podem ter espada/gancho (pirata), punhos (boxeador como Atom), ou garras (uso geral).

Estrutura do braço em compensado 3mm, juntas pan-tilt de alumínio nos ombros, armas (espada/gancho) em folhas de balsa. Juntas do antebraço fatiadas via Autodesk 123D Make e cortadas a laser. Modelo Solidworks anexo para modificações e cálculo de torque (precisa servos 3kg/cm, usei maiores).

Passo 5: Capacete e Armadura Cosplay do Sauron

Meu amigo Kareem ajudou no cosplay, baseado nestes tutoriais (adaptados às dimensões do robô):

Passo 6: Eletrônica do Robô

  1. Arduino Mega + 1Sheeld controlam servomotores dos braços e cabeça.
  2. Fonte 5V/5A alimenta motores e Arduino.
  3. Protoboard pequena conecta VCC/GND de todos os motores à fonte.
  4. 1Sheeld: plataforma de prototipagem rápida que acessa sensores do smartphone via Bluetooth. App 1Sheeld tem muitos shields; selecione: Gamepad, Orientation, Music Player, Toggle Button, Terminal.

Detalhes dos shields:

Passo 7: Código do Arduino

  1. Coloque o 1Sheeld no Arduino e conecte ao PC.
  2. Baixe o app 1Sheeld no Android (Google Play: 1sheeld.com/app).
  3. Baixe a biblioteca 1Sheeld e instale na pasta libraries do Arduino.
  4. Abra meu sketch Arduino (arquivo anexo F5KJZGXIKMXG3DG.ino).
  5. IMPORTANTE: Coloque o 1Sheeld em Uploading-mode (chave UART afastada do logo) ANTES de fazer upload no IDE. Após upload, volte para Operating-mode (chave próxima ao logo). Sem isso, não há comunicação.
  6. Use o app 1Sheeld: escaneia Bluetooth, pareie (código padrão 1234).
  7. Selecione os shields (Gamepad, Orientation, Music Player, Toggle Button, Terminal) e pressione o ícone de múltiplos shields.
  8. Ao ligar, o robô inicia no modo Standby. Para Gamepad: no Toggle Button, escolha pino 2 e ligue. Para voltar ao Standby, desligue.
  9. Para Imitação: no Toggle Button, escolha pino 3 e ligue (pino 2 deve estar LOW).

Passo 8: Sauron na Maker Faire New York

Fotos do robô em ação no evento.

Passo 9: Trabalhos Futuros

Código do Arduino (Sauron Arduino Code)

#define CUSTOM_SETTINGS
#define INCLUDE_GAMEPAD_SHIELD
#define INCLUDE_MUSIC_PLAYER_SHIELD
#define INCLUDE_TERMINAL_SHIELD
#define INCLUDE_ORIENTATION_SENSOR_SHIELD

#include <OneSheeld.h>
#include <Servo.h>

Servo rightArm_Motor1, rightArm_Motor2, rightArm_Motor3;
Servo leftArm_Motor1, leftArm_Motor2, leftArm_Motor3;
Servo neckHorizontal, neckVertical, mouth;

const int modePin1 = 2;
const int modePin2 = 3;
volatile int modeState1 = LOW;
volatile int modeState2 = LOW;
volatile boolean gamepadMode_Enabled = false;
volatile boolean imitationMode_Enabled = false;
const int ledPin1 = A0;
const int ledPin2 = A1;

void setup() {
  OneSheeld.begin();
  pinMode(modePin1, INPUT);
  pinMode(modePin2, INPUT);
  pinMode(ledPin1, OUTPUT);
  pinMode(ledPin2, OUTPUT);
  digitalWrite(ledPin1, HIGH);
  digitalWrite(ledPin2, HIGH);
  
  attachInterrupt(digitalPinToInterrupt(modePin1), gampadMode_ChangeISR, CHANGE);
  attachInterrupt(digitalPinToInterrupt(modePin2), imitationMode_ChangeISR, CHANGE);
  
  rightArm_Motor1.attach(4);
  rightArm_Motor2.attach(5);
  rightArm_Motor3.attach(6);
  leftArm_Motor1.attach(7);
  leftArm_Motor2.attach(8);
  leftArm_Motor3.attach(9);
  neckHorizontal.attach(10);
  neckVertical.attach(11);
  mouth.attach(12);
  
  // Posição inicial (home)
  rightArm_Motor1.write(95);
  rightArm_Motor2.write(150);
  rightArm_Motor3.write(20);
  leftArm_Motor1.write(90);
  leftArm_Motor2.write(45);
  leftArm_Motor3.write(180);
  neckHorizontal.write(105);
  neckVertical.write(30);
  mouth.write(100);
}

void loop() {
  modeState1 = digitalRead(modePin1);
  modeState2 = digitalRead(modePin2);
  
  if (modeState1 == HIGH) {
    Terminal.println("GamePad Mode was selected");
    gamePadMode();
  } else if (modeState2 == HIGH) {
    Terminal.println("Imitation Mode was selected");
    imitationMode();
  } else {
    Terminal.println("Standby Mode was selected");
    standbyMode();
  }
}

void standbyMode() {
  Terminal.println("Standby mode activated");
  // Posição home
  rightArm_Motor1.write(95); rightArm_Motor2.write(150); rightArm_Motor3.write(20);
  leftArm_Motor1.write(90); leftArm_Motor2.write(45); leftArm_Motor3.write(180);
  neckHorizontal.write(105); neckVertical.write(30);
  
  MusicPlayer.play();
  for (int i = 0; i <= 19; i++) {
    mouth.write(100); OneSheeld.delay(150);
    mouth.write(75); OneSheeld.delay(150);
  }
  MusicPlayer.pause();
  mouth.write(100);
  OneSheeld.delay(3000);
  
  // Verifica interrupção para outros modos
  if (gamepadMode_Enabled) { gamePadMode(); return; }
  if (imitationMode_Enabled) { imitationMode(); return; }
  
  // Sequência de movimentos: 9 posições com música e movimento de boca
  // (código abreviado - sequência completa no original)
  // 1. Move cabeça 90->0->180->90
  // 2. Move mãos e cabeça a 45°
  // 3. Move mão direita e cabeça a 135°
  // 4. Move cabeça ao centro
  // 5. Move mãos para cima
  // 6. Move mãos para lados
  // 7. Golpeia mão direita
  // 8. Golpeia mão esquerda
  // 9. Retorna à posição home com música longa
}

void gamePadMode() {
  Terminal.println("Gamepad mode activated");
  if (GamePad.isUpPressed()) {
    // Move ambas mãos para cima
    rightArm_Motor1.write(110); rightArm_Motor2.write(0); rightArm_Motor3.write(45);
    leftArm_Motor1.write(90); leftArm_Motor2.write(180); leftArm_Motor3.write(145);
    neckHorizontal.write(105); neckVertical.write(30); mouth.write(100);
  }
  if (GamePad.isDownPressed()) {
    // Move ambas mãos para baixo
    rightArm_Motor1.write(110); rightArm_Motor2.write(170); rightArm_Motor3.write(45);
    leftArm_Motor1.write(90); leftArm_Motor2.write(20); leftArm_Motor3.write(145);
    neckHorizontal.write(105); neckVertical.write(30); mouth.write(100);
  }
  if (GamePad.isRightPressed()) {
    // Move mão direita para lado
    rightArm_Motor1.write(110); rightArm_Motor2.write(80); rightArm_Motor3.write(60);
    leftArm_Motor1.write(90); leftArm_Motor2.write(20); leftArm_Motor3.write(145);
    neckHorizontal.write(105); neckVertical.write(30); mouth.write(100);
  }
  if (GamePad.isLeftPressed()) {
    // Move mão esquerda para lado
    rightArm_Motor1.write(110); rightArm_Motor2.write(170); rightArm_Motor3.write(45);
    leftArm_Motor1.write(90); leftArm_Motor2.write(115); leftArm_Motor3.write(140);
    neckHorizontal.write(105); neckVertical.write(30); mouth.write(100);
  }
  if (GamePad.isRedPressed()) {
    // Combo 1
    rightArm_Motor1.write(180); rightArm_Motor2.write(45); rightArm_Motor3.write(100);
    leftArm_Motor1.write(90); leftArm_Motor2.write(180); leftArm_Motor3.write(110);
    neckHorizontal.write(105); neckVertical.write(30); mouth.write(100);
  }
  if (GamePad.isOrangePressed()) {
    // Combo 2
    rightArm_Motor1.write(15); rightArm_Motor2.write(100); rightArm_Motor3.write(0);
    leftArm_Motor1.write(180); leftArm_Motor2.write(100); leftArm_Motor3.write(180);
    neckHorizontal.write(105); neckVertical.write(30); mouth.write(100);
  }
  if (GamePad.isGreenPressed()) {
    // Combo 3
    rightArm_Motor1.write(95); rightArm_Motor2.write(45); rightArm_Motor3.write(120);
    leftArm_Motor1.write(90); leftArm_Motor2.write(135); leftArm_Motor3.write(60);
    neckHorizontal.write(105); neckVertical.write(10); mouth.write(100);
  }
  if (GamePad.isBluePressed()) {
    // Combo 4
    rightArm_Motor1.write(90); rightArm_Motor2.write(0); rightArm_Motor3.write(90);
    leftArm_Motor1.write(180); leftArm_Motor2.write(45); leftArm_Motor3.write(180);
    neckHorizontal.write(105); neckVertical.write(30); mouth.write(100);
  }
}

void imitationMode() {
  Terminal.println("Imitation mode activated");
  if (OrientationSensor.getY() > -90 && OrientationSensor.getY() <= 90) {
    leftArm_Motor1.write(map(OrientationSensor.getY(), -90, 90, 0, 180));
  }
  if (OrientationSensor.getZ() > -70 && abs(OrientationSensor.getZ()) <= 70) {
    leftArm_Motor2.write(map(OrientationSensor.getZ(), 0, 60, 100, 160));
    leftArm_Motor3.write(map(OrientationSensor.getZ(), 0, 60, 160, 100));
  }
}

void gampadMode_ChangeISR() {
  if (gamepadMode_Enabled && !imitationMode_Enabled) {
    gamepadMode_Enabled = false;
    imitationMode_Enabled = false;
  } else {
    gamepadMode_Enabled = true;
    imitationMode_Enabled = false;
  }
}

void imitationMode_ChangeISR() {
  if (imitationMode_Enabled && !gamepadMode_Enabled) {
    gamepadMode_Enabled = false;
    imitationMode_Enabled = false;
  } else {
    gamepadMode_Enabled = false;
    imitationMode_Enabled = true;
  }
}

Esquemático

Diagrama de conexões dos servomotores ao Arduino Mega via 1Sheeld.

Processo de manufatura

  1. Aprimorando a Consistência com Robôs de Pulverização Autônomos
  2. Como Robôs de Pintura Reduzem Retrabalho, Aumentam Consistência e Economizam Custos
  3. Reduzindo Custos de Retrabalho na Manufatura: Estratégias para Eficiência e Qualidade
  4. Visão Robótica na Indústria: Da Visão à Auto-Programação
  5. O Que é um Robô de Auto-Programação e Por Que Importa
  6. Robôs Industriais: Design, Fabricação e Tendências Futuras
  7. Maximizando Eficiência: Célula de Injeção Multi-Robô Produz Copo Shaker Completo em Um Ciclo
  8. Construa a Equipe Ideal de Implementação de ERP: Estratégias Comprovadas para Sucesso
  9. Construa um Robô SCARA DIY com Arduino – Guia Passo a Passo
  10. O Futuro da Automação: Robôs Auto-Replicantes Remodelando a Indústria 4.0