🤖 RoboFeed
Explorar aulas Entrar Comece grátis
🤖 Robótica

Robô de Futebol PRO (ESP32 + PS4)

👤 Weslley Barros 🏫 E.M. Abdalla 8º ano9º ano1º ano (EM)2º ano (EM)3º ano (EM) ⚡ Plugada
🔧 Modo Bancada · passo a passo, pro aluno no tablet

🎯 Objetivos de aprendizagem

  • 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).
🧭 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
Chassi + suporte de motores (impressão 3D)
Chassi + suporte de motores (impressão 3D)
Jumpers, parafusos e cabos
Jumpers, parafusos e cabos
🪜 Desenvolvimento da aula
Introdução / Contextualização

Apresente o robô de futebol PRO, pilotado por um controle PS4 SEM FIO (Bluetooth) com um ESP32. Pergunta: como um controle se conecta sem fio e vira movimento? Compare com a versão com fio (PS2): aqui é Bluetooth, e o cérebro é um ESP32.

Montagem do Circuito / Hardware

1) Montar chassi, suporte de motores e rodas. 2) Ligar o driver TB6612 ao ESP32 (motor A: AIN1 G18, AIN2 G19, PWMA G4 · motor B: BIN1 G21, BIN2 G22, PWMB G5). VCC e STBY no 3V3; VM na bateria. 3) Energia: bateria Li-Po → regulador 78xx → 5V → VIN do ESP32; GND comum.

Programação / Codificação

Pareamento PS4 (a parte nova): pegar a MAC do ESP32, colocar no código (PS4.begin) e parear o controle com a SixaxisPairTool. Instalar a biblioteca PS4Controller e carregar o código. Explicar o PWM por hardware (LEDC), a zona morta e a tração diferencial (tanque).

Teste, Depuração e Ajustes

Testar a pilotagem. Depurar em equipe: se não conecta, conferir a MAC e o pareamento; se anda torto, inverter os 2 fios de um motor; ajustar a zona morta (abs > 30).

Encerramento / Socialização

Roda de conversa: o que muda do controle com fio (PS2) para o sem fio (Bluetooth/PS4)? O que é um endereço MAC? Encerrar com uma partida de futebol de robôs.

🔌 Montagem do robô

Placa: ESP32 (WROOM-32)

⬇ baixar SVG
🧰 Montagem do robôPlaca: ESP32 (WROOM-32) · 5 componentes · 17 ligações detectadas do códigoESP32 (WROOM-32)⚡ Barramento de alimentação · 5V (+) / GND (–)GPIO18 · direção AGPIO19 · direção AGPIO4 · PWM velocidade AGPIO21 · direção BGPIO22 · direção BGPIO5 · PWM velocidade BDriver de motor(TB6612)AO1·AO2Motor DC esquerdoBO1·BO2Motor DC direitobateria + · entradaVIN (ESP32) · 5V regulado para …Regulador 78xx (5V)Bluetooth · sem fio — parear …Controle PS4(DualShock 4)LEGENDA DOS FIOSAlimentação (+5V)Terra (GND)PWM (velocidade)Saída de motorOutro / dados
🧰 Montagem do robôESP32 (WROOM-32)placa controladoraDriver de motor (TB6612)GPIO18GPIO19GPIO4GPIO21GPIO22GPIO53V33V3bateria +GNDRegulador 78xx (5V)bateria +VIN (ESP32)Controle PS4 (DualShock 4)BluetoothMotor 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 de motor (TB6612)
AIN1 GPIO18 direção A
AIN2 GPIO19 direção A
PWMA GPIO4 PWM velocidade A
BIN1 GPIO21 direção B
BIN2 GPIO22 direção B
PWMB GPIO5 PWM velocidade B
STBY 3V3 habilita o driver (nível alto)
VCC 3V3 alimentação lógica
VM bateria + alimentação dos motores
GND GND terra comum
Motor DC esquerdo
terminal + AO1 (Ponte H) tração esq
terminal − AO2 (Ponte H) tração esq
Motor DC direito
terminal + BO1 (Ponte H) tração dir
terminal − 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);
}

🔀 Fluxograma do algoritmo

flowchart TD A(["Início"]) --> CFG["Configurar TB6612 + PWM (LEDC)"] CFG --> BT["Conectar ao controle PS4 (Bluetooth)"] BT --> C{"Controle conectado?"} C -->|Não| BT C -->|Sim| L["Ler joystick direito (Y) e esquerdo (X)"] L --> D{"Joystick direito fora da zona morta?"} D -->|Sim| F["Avançar / recuar os 2 motores"] D -->|Não| G{"Joystick esquerdo fora da zona morta?"} G -->|Sim| T["Girar no lugar (tanque)"] G -->|Não| P["Parar os motores"] F --> L T --> L P --> L

🧱 Algoritmo em blocos

quando @greenFlag for clicado
configurar os pinos do TB6612 e o PWM por hardware
conectar ao controle PS4 (Bluetooth)
sempre
  se <controle PS4 conectado?> então
    ler o joystick direito (frente/trás) e o esquerdo (giro)
    se <joystick direito além da zona morta?> então
      avançar ou recuar os dois motores
    senão
      se <joystick esquerdo além da zona morta?> então
        girar no lugar (estilo tanque)
      senão
        parar os motores
      end
    end
  end
end

🖨️ Modelos 3D para impressão

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

Chassi 📥 Baixar
Suporte dos motores 📥 Baixar

🤖 Quer essa aula do SEU jeito?

O Co-professor adapta esta aula pro seu ano e contexto — ou a estica numa sequência didática de 2 a 4 encontros — e gera um PDF pronto pra você. A estrutura da aula é preservada. Cadastre-se grátis pra usar.

✨ Adaptar e gerar PDF

💬 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.