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
- Ferro de solda (genérico)
Aplicativos e Serviços Online
- Arduino IDE
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.

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.

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.

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.

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

Passo 6: Conexão da Bateria e Fios de Sinal
Conecte os fios vermelho e preto do interruptor da bateria ao Motor Shield.

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.

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.

Passo 9: Motor Servo
Conecte o servo motor ao slot servo_2. (Verifique online o pinout do seu modelo específico).

Ú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

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