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

Robô Desviador de Obstáculos com Servo: Construa com Arduino e HC-SR04

Componentes e Materiais

Componente Quantidade
Arduino UNO 1
Motor micro servo SG90 1
Sensor ultrassônico HC-SR04 (SparkFun) 1
Kit de chassi para robô 2WD com motores DC 1
Fios jumper (genéricos) 1 conjunto
Arduino Motor Shield Rev3 1

Ferramentas Necessárias

Aplicativos e Serviços Online

Sobre o Projeto

Sou estudante de Design de Artes Midiáticas na Multimedia University, Cyberjaya, Malásia. Este é meu ano Gamma estudando Media Art; a disciplina de Interaction Design ensina como usar componentes Arduino e seu funcionamento. Para minha tarefa final, escolhi o robô desviador de obstáculos como projeto para aprender como cada componente funciona.

Passo 1: Montagem do Chassi

Prepare e monte o chassi do robô. O pacote inclui: chassi, dois motores, duas rodas, uma roda dianteira, suporte de bateria, parafusos, interruptor e fios jumper.

Robô Desviador de Obstáculos com Servo: Construa com Arduino e HC-SR04

Passo 2: Teste e Soldagem dos Motores

Antes de soldar os fios jumper nos motores, recomendo testar todos os componentes: ambos motores DC, placa Arduino, Motor Shield, servo motor e sensor ultrassônico. Em seguida, solde os fios vermelho e preto em ambos os motores.

Robô Desviador de Obstáculos com Servo: Construa com Arduino e HC-SR04

Passo 3: Bateria e Interruptor

Corte metade do fio preto do suporte de bateria e solde um lado em um orifício, o outro fio preto no outro orifício. O interruptor está pronto!

Passo 4: Empilhamento das Placas

Empilhe a placa Arduino e o Motor Shield; o Motor Shield vai sobre o Arduino.

Robô Desviador de Obstáculos com Servo: Construa com Arduino e HC-SR04

Passo 5: Conexão dos Motores no Motor Shield

O Motor Shield alimenta os motores e o servo, fornecendo até 600 mA por motor. Solde/fixe os fios dos motores DC no Motor Shield. Se os fios não alcançarem, use fios jumper externos (macho/fêmea), retire a isolação para expor o cobre e solde aos fios dos motores.

Robô Desviador de Obstáculos com Servo: Construa com Arduino e HC-SR04

Conecte o motor esquerdo ao conector M1 e o direito ao M3 do Motor Shield.

Robô Desviador de Obstáculos com Servo: Construa com Arduino e HC-SR04

Passo 6: Conexão da Bateria e Fios de Sinal

Conecte os fios vermelho e preto do interruptor da bateria ao Motor Shield.

Robô Desviador de Obstáculos com Servo: Construa com Arduino e HC-SR04

Prepare fios jumper macho e fêmea para soldar nos pinos 5V, GND, Analógico 4 e Analógico 5. Use cores iguais para facilitar identificação: branco para 5V, preto para GND, laranja para A5, marrom para A4.

Robô Desviador de Obstáculos com Servo: Construa com Arduino e HC-SR04

Passo 7: Fixação no Chassi

Use fita dupla-face ou cola quente para fixar as placas no chassi.

Passo 8: Sensor Ultrassônico

Conecte os fios fêmea previamente soldados: branco (5V) ao VCC, preto (GND) ao GND, marrom (A4) ao Echo, laranja (A5) ao TRIG.

Robô Desviador de Obstáculos com Servo: Construa com Arduino e HC-SR04

Passo 9: Motor Servo

Conecte o servo motor ao slot servo_2. (Verifique online o pinout do seu modelo específico).

Robô Desviador de Obstáculos com Servo: Construa com Arduino e HC-SR04

Último Passo: Código

São necessárias 3 bibliotecas: AFMotor (Motor Shield), NewPing (sensor ultrassônico) e Servo (nativa).

Código

#include <AFMotor.h>
#include <Servo.h>
#include <NewPing.h>

#define TRIG_PIN A4
#define ECHO_PIN A5
#define MAX_DISTANCE_POSSIBLE 1000
#define MAX_SPEED 150
#define COLL_DIST 20
#define TURN_DIST COLL_DIST+10

NewPing sonar(TRIG_PIN, ECHO_PIN, MAX_DISTANCE_POSSIBLE);
AF_DCMotor leftMotor(3, MOTOR12_8KHZ);
AF_DCMotor rightMotor(1, MOTOR12_8KHZ);
Servo neckControllerServoMotor;

int pos = 0;
int maxDist = 0;
int maxAngle = 0;
int maxRight = 0;
int maxLeft = 0;
int maxFront = 0;
int course = 0;
int curDist = 0;
String motorSet = "";
int speedSet = 0;

void setup() {
  neckControllerServoMotor.attach(10);
  neckControllerServoMotor.write(90);
  delay(2000);
  checkPath();
  motorSet = "FORWARD";
  neckControllerServoMotor.write(90);
  moveForward();
}

void loop() {
  checkForward();
  checkPath();
}

void checkPath() {
  int curLeft = 0, curFront = 0, curRight = 0, curDist = 0;
  neckControllerServoMotor.write(144);
  delay(120);
  for(pos = 144; pos >= 36; pos-=18) {
    neckControllerServoMotor.write(pos);
    delay(90);
    checkForward();
    curDist = readPing();
    if (curDist < COLL_DIST) { checkCourse(); break; }
    if (curDist < TURN_DIST) { changePath(); }
    if (curDist > curDist) { maxAngle = pos; }
    if (pos > 90 && curDist > curLeft) { curLeft = curDist; }
    if (pos == 90 && curDist > curFront) { curFront = curDist; }
    if (pos < 90 && curDist > curRight) { curRight = curDist; }
  }
  maxLeft = curLeft; maxRight = curRight; maxFront = curFront;
}

void setCourse() {
  if (maxAngle < 90) turnRight();
  if (maxAngle > 90) turnLeft();
  maxLeft = maxRight = maxFront = 0;
}

void checkCourse() {
  moveBackward(); delay(500); moveStop(); setCourse();
}

void changePath() {
  if (pos < 90) lookLeft();
  if (pos > 90) lookRight();
}

int readPing() {
  delay(70);
  unsigned int uS = sonar.ping();
  return uS / US_ROUNDTRIP_CM;
}

void checkForward() {
  if (motorSet == "FORWARD") {
    leftMotor.run(FORWARD); rightMotor.run(FORWARD);
  }
}

void checkBackward() {
  if (motorSet == "BACKWARD") {
    leftMotor.run(BACKWARD); rightMotor.run(BACKWARD);
  }
}

void moveStop() { leftMotor.run(RELEASE); rightMotor.run(RELEASE); }

void moveForward() {
  motorSet = "FORWARD";
  leftMotor.run(FORWARD); rightMotor.run(FORWARD);
  for (speedSet = 0; speedSet < MAX_SPEED; speedSet += 2) {
    leftMotor.setSpeed(speedSet); rightMotor.setSpeed(speedSet);
    delay(5);
  }
}

void moveBackward() {
  motorSet = "BACKWARD";
  leftMotor.run(BACKWARD); rightMotor.run(BACKWARD);
  for (speedSet = 0; speedSet < MAX_SPEED; speedSet += 2) {
    leftMotor.setSpeed(speedSet); rightMotor.setSpeed(speedSet);
    delay(5);
  }
}

void turnRight() {
  motorSet = "RIGHT";
  leftMotor.run(FORWARD); rightMotor.run(BACKWARD);
  delay(400);
  motorSet = "FORWARD";
  leftMotor.run(FORWARD); rightMotor.run(FORWARD);
}

void turnLeft() {
  motorSet = "LEFT";
  leftMotor.run(BACKWARD); rightMotor.run(FORWARD);
  delay(400);
  motorSet = "FORWARD";
  leftMotor.run(FORWARD); rightMotor.run(FORWARD);
}

void lookRight() { rightMotor.run(BACKWARD); delay(400); rightMotor.run(FORWARD); }
void lookLeft()  { leftMotor.run(BACKWARD); delay(400); leftMotor.run(FORWARD); }

Esquemático

Robô Desviador de Obstáculos com Servo: Construa com Arduino e HC-SR04

Processo de manufatura

  1. Simple Pi Robot – Construa Rover Autônomo 2-WD com Raspberry Pi
  2. Criar Robô Seguidor de Linha Autônomo com Arduino UNO
  3. Controlar Roomba Create 2 com Arduino e Android: Guia Passo a Passo
  4. Arduino e MPU6050: Controle Preciso de Servomotores SG90 e MG996R
  5. Robô Assistente Doméstico Autônomo: Lista Completa de Peças e Guia de Configuração
  6. Braço Robótico Arduino Controlado por Gestos Manuais – Construção Passo a Passo
  7. Controle Braço Robótico Arduino via App Android Dedicado
  8. Kit de Robô de Navegação Interna Inteligente para Projetos Arduino
  9. Motores Servo Explicados: Como Funcionam e Por Que Importam
  10. Maximizando Precisão: Combinando Redutores com Servomotores