RoboFeed
Pensamento Computacional
PROJETO DE ROBÔ

Robô de Futebol PRO (ESP32 + PS4)

por Equipe RoboFeed Nível Avancado 2 a 3 aulas 8º ano9º ano1º ano (EM)2º ano (EM)3º ano (EM) Plugada 2
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

🧰
ESP32 (placa WROOM-32 DevKit)
🧰
Driver de motor TB6612FNG
🧰
Controle PS4 (DualShock 4) — Bluetooth
Motor DC com caixa de redução
Motor DC com caixa de redução
Rodas (impressão 3D ou compatíveis)
Rodas (impressão 3D ou compatíveis)
🧰
Regulador de tensão 78xx (ex.: 7805) + capacitor
Bateria Li-Po + interruptor
Bateria Li-Po + interruptor
🧰
PCB do projeto (ESP32 + TB6612) ou protoboard (opcional)
Chassi + suporte de motores (impressão 3D)
Chassi + suporte de motores (impressão 3D)
Jumpers, parafusos e cabos (opcional)
Jumpers, parafusos e cabos (opcional)

O desafio

Montar e programar um robô de futebol pilotado por um controle PS4 sem fio (Bluetooth) com um ESP32: parear o controle, ler os joysticks e mover os 2 motores com tração diferencial (frente, trás e giro estilo tanque).

📶 Avancado · ⏱ 2 a 3 aulas

Passo a passo

1) Imprimir e montar o chassi, o suporte de motores e as rodas. 2) Ligar o TB6612 ao ESP32 (PWMA G4, PWMB G5, AIN1 G18, AIN2 G19, BIN1 G21, BIN2 G22; VCC/STBY no 3V3; VM na bateria). 3) Energia: bateria Li-Po → regulador 78xx → 5V → VIN do ESP32; GND comum. 4) Pareamento: pegar a MAC do ESP32, colocar no código (PS4.begin) e parear o controle PS4 com a SixaxisPairTool. 5) Instalar a biblioteca PS4Controller e carregar o código. 6) Testar a pilotagem e jogar em equipe.

Montagem do robô

Placa: ESP32 (WROOM-32)

⬇ baixar SVG
🧰 Montagem do robôPlaca: ESP32 (WROOM-32) · 5 componentes · 13 ligações detectadas do códigoESP32 (WROOM-32)D4 · PWMA (vel. A)D18 · AIN1D19 · AIN2D5 · PWMB (vel. B)D21 · BIN1D22 · BIN2Driver TB6612FNGAO1·AO2Motor DC esquerdoBO1·BO2Motor DC direitobateria + · entradaVIN (ESP32) · 5V regulado para …Regulador 78xx (5V)Bluetooth · sem fio — parear …Controle PS4(DualShock 4)LEGENDA DOS FIOSDigitalPWM (velocidade)Saída de motorOutro / dados
🧰 Montagem do robôESP32 (WROOM-32)placa controladoraRegulador 78xx (5V)bateria +VIN (ESP32)Controle PS4 (DualShock 4)BluetoothDriver TB6612FNGD4D18D19D5D21D22Motor DC esquerdoAO1AO2Motor DC direitoBO1BO2
Energia: a bateria Li-Po alimenta a entrada VM do driver TB6612 (motores) e, por um regulador 78xx (ex.: 7805) + capacitor, fornece 5V ao VIN do ESP32. O VCC e o STBY do TB6612 vão no 3V3 do ESP32. GND comum entre tudo. O controle PS4 conecta por Bluetooth (sem fio).
📋 Tabela de ligações (fio a fio)
Sistema motor
Driver TB6612FNG
fio D4 PWMA (vel. A)
fio D18 AIN1
fio D19 AIN2
fio D5 PWMB (vel. B)
fio D21 BIN1
fio D22 BIN2
Motor DC esquerdo
fio AO1 (Ponte H) tração esq
fio AO2 (Ponte H) tração esq
Motor DC direito
fio BO1 (Ponte H) tração dir
fio BO2 (Ponte H) tração dir
Outros
Regulador 78xx (5V)
VIN bateria + entrada
VOUT VIN (ESP32) 5V regulado para o ESP32
Controle PS4 (DualShock 4)
BT Bluetooth sem fio — parear pela MAC do ESP32
🔧 Passo a passo de ligação
  1. Cérebro: ESP32 WROOM-32. O controle PS4 conecta por Bluetooth — sem fios entre controle e robô.
  2. Motores: AIN1→GPIO18, AIN2→GPIO19, PWMA→GPIO4 (motor A); BIN1→GPIO21, BIN2→GPIO22, PWMB→GPIO5 (motor B).
  3. Driver: VCC e STBY no 3V3 do ESP32; VM na bateria; GND comum. O STBY precisa ficar em nível alto.
  4. Energia: bateria Li-Po → VM (motores) e → regulador 78xx → 5V → VIN do ESP32.
  5. Motores: esquerdo nas saídas AO1/AO2; direito nas BO1/BO2. Se um girar ao contrário, inverta os 2 fios dele.
  6. Pareamento PS4: descubra a MAC do ESP32, coloque-a no código (PS4.begin) e pareie o controle a essa MAC com a SixaxisPairTool.

Código

aula.ino
/*
 * Robô de Futebol PRO — ESP32 + controle PS4 (Bluetooth) + driver TB6612
 * Tração diferencial estilo tanque: joystick direito (frente/trás) e
 * joystick esquerdo (giros). PWM por hardware do ESP32 (LEDC).
 * (código original; comentários em português)
 *
 * Pareamento do controle PS4: o ESP32 anuncia um endereço Bluetooth (MAC).
 * Troque a MAC abaixo pela do seu ESP32 e pareie o controle PS4 a essa MAC
 * com a ferramenta SixaxisPairTool (incluída na pasta do projeto).
 */
#include <PS4Controller.h>   // Biblioteca para usar o controle PS4 com o ESP32

// -------------------------
// Pinos do driver de motores (TB6612)
// -------------------------
#define PWMA 4     // PWM do motor A
#define PWMB 5     // PWM do motor B
#define AIN1 18    // Direção do motor A
#define AIN2 19
#define BIN1 21    // Direção do motor B
#define BIN2 22

void setup() {
  Serial.begin(115200);

  // Pinos de direção como saída
  pinMode(AIN1, OUTPUT);
  pinMode(AIN2, OUTPUT);
  pinMode(BIN1, OUTPUT);
  pinMode(BIN2, OUTPUT);

  // PWM por hardware do ESP32 (LEDC): canal 0 = motor A, canal 1 = motor B
  ledcAttachPin(PWMA, 0);
  ledcAttachPin(PWMB, 1);
  ledcSetup(0, 1000, 8);   // canal 0: 1 kHz, 8 bits
  ledcSetup(1, 1000, 8);   // canal 1: 1 kHz, 8 bits

  // Conexão com o controle PS4 via Bluetooth (troque pela MAC do seu ESP32)
  PS4.begin("CC:DB:A7:3F:97:36");
  Serial.println("Esperando conexao com o controle PS4...");
}

void loop() {
  // Só executa o controle se o controle estiver conectado
  if (PS4.isConnected()) {

    // Joystick direito (RStickY) -> frente / trás
    int ry = PS4.RStickY();
    // Joystick esquerdo (LStickX) -> giros
    int lx = PS4.LStickX();

    // Mapear a sensibilidade dos joysticks para velocidade PWM
    int speed_forward = map(abs(ry), 0, 127, 0, 255);
    int speed_turn    = map(abs(lx), 0, 127, 0, 255);

    // Frente / trás (com zona morta para evitar movimento falso)
    if (abs(ry) > 30) {
      if (ry < 0) { motorA_forward(speed_forward); motorB_forward(speed_forward); }
      else        { motorA_backward(speed_forward); motorB_backward(speed_forward); }
    }
    // Giro estilo tanque (com o joystick esquerdo)
    else if (abs(lx) > 30) {
      if (lx > 0) { motorA_forward(speed_turn); motorB_backward(speed_turn); }   // direita
      else        { motorA_backward(speed_turn); motorB_forward(speed_turn); }   // esquerda
    }
    // Sem movimento: parar
    else {
      motors_stop();
    }
  }
}

// ===== Funções de controle dos motores (TB6612) =====
void motorA_forward(int speed)  { digitalWrite(AIN1, HIGH); digitalWrite(AIN2, LOW);  ledcWrite(0, speed); }
void motorA_backward(int speed) { digitalWrite(AIN1, LOW);  digitalWrite(AIN2, HIGH); ledcWrite(0, speed); }
void motorB_forward(int speed)  { digitalWrite(BIN1, HIGH); digitalWrite(BIN2, LOW);  ledcWrite(1, speed); }
void motorB_backward(int speed) { digitalWrite(BIN1, LOW);  digitalWrite(BIN2, HIGH); ledcWrite(1, speed); }
void motors_stop() {
  ledcWrite(0, 0); ledcWrite(1, 0);
  digitalWrite(AIN1, LOW); digitalWrite(AIN2, LOW);
  digitalWrite(BIN1, LOW); digitalWrite(BIN2, LOW);
}

Modelos 3D para impressão

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

Chassi 📥 Baixar
Suporte dos motores 📥 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.