RoboFeed
Pensamento Computacional
PROJETO DE ROBÔ

Robô de Sumô Autônomo

por Equipe RoboFeed Nível Avancado 4 a 6 aulas 8º ano9º ano1º ano (EM)2º ano (EM)3º ano (EM) Plugada 1
▶ Apresentar slide interativo · tela cheia, pra projetar 🔧 Modo Bancada · passo a passo, pro aluno no tablet
Habilidades BNCC Computação (6)
Pensamento Computacional
EF89CO01 Desenvolver projetos computacionais que integrem decomposição, abstração, generalização e avaliação crítica da solução proposta.
EF89CO02 Implementar algoritmos com funções/sub-rotinas, listas/arrays e leitura de sensores, em linguagens de blocos ou textuais (C++, Python).
Mundo Digital
EF89CO03 Projetar e construir sistemas integrados que combinem hardware (placa, sensores, atuadores) e software (algoritmo) para resolver problemas reais.
EF89CO04 Avaliar arquiteturas de hardware (processador, memória, periféricos) e modelos de comunicação (cliente-servidor, IoT) em soluções tecnológicas.
Cultura Digital
EF89CO05 Discutir aspectos éticos do uso de inteligência artificial (viés algorítmico, automação, direitos autorais, deepfakes) e propor princípios de uso responsável.
EF89CO06 Compreender legislações de proteção de dados (LGPD) e aplicar boas práticas de segurança digital, autoria e propriedade intelectual em produções escolares.

Habilidades dos anos selecionados (8º ano, 9º ano, 1º ano (EM), 2º ano (EM), 3º ano (EM)) — Resolução CNE/CP nº 1/2022. Em turmas de Ensino Médio, mapear para EM13CO.

Materiais e componentes

1×
Arduino Uno
Arduino Uno
1×
Ponte H (L293D)
Ponte H (L293D)
2×
Motor DC com caixa de redução
Motor DC com caixa de redução
4×
Sensor de distância Sharp
Sensor de distância Sharp
2×
Sensor infravermelho de borda
Sensor infravermelho de borda
1×
Bateria/fonte (LiPo)
Bateria/fonte (LiPo)
1×
Chassi + cobertura + rodas (impressão 3D)
Chassi + cobertura + rodas (impressão 3D)
1×
Jumpers e parafusos (opcional)
Jumpers e parafusos (opcional)

O desafio

Construir e programar um robô autônomo que detecta o oponente com sensores de distância e evita sair do ringue usando sensores de borda — desenvolvendo algoritmo, depuração e trabalho em equipe.

📶 Avancado · ⏱ 4 a 6 aulas

Passo a passo

1) Montar o chassi 3D, fixar motores e rodas. 2) Ligar a ponte H L293D ao Arduino (motor A: D3/D4/D5 · motor B: D7/D8/D9). 3) Conectar os 4 sensores Sharp (A2–A5) e os 2 sensores de borda (A0/A1). 4) Carregar o código e ajustar o limiar de detecção e as velocidades. 5) Testar no ringue: evitar a borda branca e atacar o oponente. 6) Depurar a estratégia em equipe.

Montagem do robô

Placa: Arduino Uno

⬇ baixar SVG
🔧 Montagem do robôPlaca: Arduino Uno · 9 componentes · 30 ligações detectadas do códigoLEGENDAAnalógico (leitura)PWM (velocidade)DigitalSaída de motor5VGND ON L TX RX   DIGITAL (PWM ~) AREF GND 13 12 ~11 ~10 ~9 8 7 ~6 ~5 4 ~3 2 TX→1 RX←0   POWER ANALOG IN IOREF RESET 3.3V 5V GND GND Vin A0 A1 A2 A3 A4 A5 ARDUINO UNO SHARP GP2Y0A21SHARP GP2Y0A21SHARP GP2Y0A21SHARP GP2Y0A21TCRT5000LM393PWROUTSENSIB.VCCGNDOUTTCRT5000LM393PWROUTSENSIB.VCCGNDOUTL293DPONTE H DUPLASAÍDA ASAÍDA B+12VGND+5VENAIN1IN2IN3IN4ENBMOTOR TTMOTOR TTLi-ion 186503.7V 2600mAh+Li-ion 186503.7V 2600mAh−2×18650 · 7.4VOUT1OUT2OUT3OUT4Sensor Sharp (lateral esq)Sensor Sharp (frontal esq)Sensor Sharp (frontal dir)Sensor Sharp (lateral dir)Sensor de borda (dir)Sensor de borda (esq)Ponte H (L293D)Motor DC esquerdoMotor DC direitoBateria 2×18650 (7,4 V)
🧰 Montagem do robôArduino Unoplaca controladoraSensor Sharp (lateral esq)A25VGNDSensor Sharp (frontal esq)A35VGNDSensor Sharp (frontal dir)A45VGNDSensor Sharp (lateral dir)A55VGNDSensor de borda (dir)A05VGNDSensor de borda (esq)A15VGNDPonte H (L293D)D3D4D5D7D8D95VGNDMotor DC esquerdoOUT1OUT2Motor DC direitoOUT3OUT4
as peças reagem: LED acende, botão é clicável, serial abaixo
🖥️ Monitor serial

⚡ Energia: o Arduino alimenta os sensores (5V e GND). Os motores são movidos por uma bateria de 6 a 9V ligada à Ponte H — e o GND da bateria precisa ser comum com o GND do Arduino.
📋 Tabela de ligações (fio a fio)
Sensores
Sensor Sharp (lateral esq)
Sinal (amarelo) → A2 distância
VCC (vermelho) → 5V alimentação
GND (preto) → GND terra
Sensor Sharp (frontal esq)
Sinal (amarelo) → A3 distância
VCC (vermelho) → 5V alimentação
GND (preto) → GND terra
Sensor Sharp (frontal dir)
Sinal (amarelo) → A4 distância
VCC (vermelho) → 5V alimentação
GND (preto) → GND terra
Sensor Sharp (lateral dir)
Sinal (amarelo) → A5 distância
VCC (vermelho) → 5V alimentação
GND (preto) → GND terra
Sensor de borda (dir)
Sinal (amarelo) → A0 borda do ringue
VCC (vermelho) → 5V alimentação
GND (preto) → GND terra
Sensor de borda (esq)
Sinal (amarelo) → A1 borda do ringue
VCC (vermelho) → 5V alimentação
GND (preto) → GND terra
Sistema motor
Ponte H (L293D)
IN1 → D3 IN1 (motor A)
IN2 → D4 IN2 (motor A)
ENA → D5 PWM velocidade A
IN3 → D7 IN3 (motor B)
IN4 → D8 IN4 (motor B)
ENB → D9 PWM velocidade B
+5V → 5V alimentação lógica
GND → GND terra
Motor DC esquerdo
terminal + → OUT1 (Ponte H) tração esq
terminal − → OUT2 (Ponte H) tração esq
Motor DC direito
terminal + → OUT3 (Ponte H) tração dir
terminal − → OUT4 (Ponte H) tração dir
🔧 Passo a passo de ligação
  1. Comece pela energia: leve o 5V do Arduino ao trilho vermelho (+) da protoboard e o GND ao trilho azul (−). Todo mundo vai buscar 5V e GND nesses trilhos.
  2. Sensores Sharp (os 4): em cada um, o fio vermelho (VCC) vai no trilho +, o preto (GND) no trilho −, e o amarelo (sinal) no pino do Arduino — A2, A3, A4 e A5, um por sensor.
  3. Sensores de borda (os 2): a mesma coisa — vermelho no +, preto no −, e o sinal em A0 (direito) e A1 (esquerdo).
  4. Ponte H L293D: ligue +5V no trilho + e GND no trilho − (o terra PRECISA ser comum com o Arduino!). Depois os controles: IN1→D3, IN2→D4, IN3→D7, IN4→D8; e a velocidade ENA→D5, ENB→D9.
  5. Motores: o motor esquerdo nas saídas OUT1 e OUT2 da Ponte H; o direito nas OUT3 e OUT4. Se algum girar ao contrário, é só inverter os dois fios daquele motor.
  6. Bateria (6 a 9V): o + na entrada de potência dos motores da Ponte H (VS/Vmotor) e o − no trilho − (o mesmo GND de tudo). ⚠️ Conecte a bateria só no final, com tudo já conferido.
  7. Antes de energizar, confira: todos os GND no mesmo trilho? A bateria está só nos motores (nunca no 5V do Arduino)? Se sim, ligue o Arduino ao computador e envie o código.

Código

aula.ino
// === Pines del L293D ===
// Motor A (izquierdo)
const int motorA1 = 3;
const int motorA2 = 4;
const int enableA = 5;  // Control de velocidad PWM

// Motor B (derecho)
const int motorB1 = 7;
const int motorB2 = 8;
const int enableB = 9;  // Control de velocidad PWM

// === Pines sensores Sharp ===
const int sharpIzq = A2;     // Sensor lateral izquierdo
const int sharpFront1 = A3;  // Sensor frontal izquierdo
const int sharpFront2 = A4;  // Sensor frontal derecho
const int sharpDer = A5;     // Sensor lateral derecho

// === Sensores de piso digitales ===
const int pisoDer = A0; // Sensor de piso derecho
const int pisoIzq = A1; // Sensor de piso izquierdo

// === Parámetros de movimiento ===
int velocidadMax = 200;       // Velocidad máxima del robot
int velocidadCurva = 160;     // Velocidad al girar
int umbralOponente = 400;     // Valor analógico que indica proximidad (menor = más cerca)

void setup() {
  // Configurar pines de motores como salida
  pinMode(motorA1, OUTPUT);
  pinMode(motorA2, OUTPUT);
  pinMode(enableA, OUTPUT);

  pinMode(motorB1, OUTPUT);
  pinMode(motorB2, OUTPUT);
  pinMode(enableB, OUTPUT);

  // Configurar sensores de piso como entrada
  pinMode(pisoDer, INPUT);
  pinMode(pisoIzq, INPUT);

  // No es necesario configurar los pines analógicos de los sensores Sharp
  // Puedes habilitar Serial.begin(9600); si deseas monitorear sensores
}

void loop() {
  // Leer sensores de piso (devuelven HIGH o LOW)
  int sueloDer = digitalRead(pisoDer);
  int sueloIzq = digitalRead(pisoIzq);

  // Leer sensores Sharp (valores entre 0 y 1023)
  int valIzq = analogRead(sharpIzq);
  int valFront1 = analogRead(sharpFront1);
  int valFront2 = analogRead(sharpFront2);
  int valDer = analogRead(sharpDer);

  // === 1. Evitar salirse del ring ===
  // Si algún sensor detecta el borde (LOW = borde blanco o sin línea)
  if (sueloIzq == LOW || sueloDer == LOW) {
    retroceder();         // Retrocede rápidamente
    delay(300);           // Espera un poco
    girarDerecha();       // Gira para cambiar de dirección
    delay(300);           
    detener();            // Pausa antes de seguir
    return;               // Finaliza esta iteración del loop
  }

  // === 2. Estrategia de ataque ===
  if (valFront1 < umbralOponente || valFront2 < umbralOponente) {
    avanzar();            // Oponente detectado al frente
  } else if (valIzq < umbralOponente) {
    girarIzquierda();     // Oponente a la izquierda
  } else if (valDer < umbralOponente) {
    girarDerecha();       // Oponente a la derecha
  } else {
    buscar();             // No se detecta nada, buscar girando
  }
}

// === Funciones de movimiento ===

// Avanza recto
void avanzar() {
  digitalWrite(motorA1, HIGH);
  digitalWrite(motorA2, LOW);
  analogWrite(enableA, velocidadMax);

  digitalWrite(motorB1, HIGH);
  digitalWrite(motorB2, LOW);
  analogWrite(enableB, velocidadMax);
}

// Retrocede
void retroceder() {
  digitalWrite(motorA1, LOW);
  digitalWrite(motorA2, HIGH);
  analogWrite(enableA, velocidadMax);

  digitalWrite(motorB1, LOW);
  digitalWrite(motorB2, HIGH);
  analogWrite(enableB, velocidadMax);
}

// Gira hacia la izquierda
void girarIzquierda() {
  digitalWrite(motorA1, LOW);
  digitalWrite(motorA2, HIGH);
  analogWrite(enableA, velocidadCurva);

  digitalWrite(motorB1, HIGH);
  digitalWrite(motorB2, LOW);
  analogWrite(enableB, velocidadCurva);
}

// Gira hacia la derecha
void girarDerecha() {
  digitalWrite(motorA1, HIGH);
  digitalWrite(motorA2, LOW);
  analogWrite(enableA, velocidadCurva);

  digitalWrite(motorB1, LOW);
  digitalWrite(motorB2, HIGH);
  analogWrite(enableB, velocidadCurva);
}

// Detiene los motores
void detener() {
  analogWrite(enableA, 0);
  analogWrite(enableB, 0);
}

// Búsqueda: gira hacia la izquierda buscando oponente
void buscar() {
  girarIzquierda();
  delay(400);
  detener();
}

Modelos 3D para impressão

Toque para ver em 3D · gire com o dedo.

⏳
Chassi 📥 Baixar
⏳
Cobertura 📥 Baixar
⏳
Rodas 📥 Baixar

🤖 Transforme este projeto em aula

O Co-professor gera um plano de aula completo — ou uma sequência didática de 2 a 4 encontros — adaptado à sua turma. Cadastre-se grátis pra usar.

✨ Gerar aula ou sequência com IA

💬 Comentários

Entre na sua conta ou crie uma grátis pra comentar.

Seja o primeiro a comentar.

Gostou desta aula?

Monte aulas como esta em minutos, com ajuda da IA — e compartilhe com professores do Brasil todo. É grátis.

Criar minha conta grátis
Compartilhar no WhatsApp

Explorar mais aulas · RoboFeed — robótica e computação na escola, alinhado à BNCC.