🤖 RoboFeed
Explorar aulas Entrar Comece grátis
🧠 Pensamento Computacional
🧩 PROJETO DE ROBÔ

Robô de Futebol (controle PS2)

👤 Equipe RoboFeed 📶 Intermediario ⏱ 2 a 3 aulas 7º ano8º ano9º ano1º ano (EM)2º ano (EM)3º ano (EM) ⚡ Plugada ❤️ 1
🔧 Modo Bancada · passo a passo, pro aluno no tablet
🧭 Habilidades BNCC Computação (13)
🧠 Pensamento Computacional
EF67CO01 Aplicar técnicas de decomposição, abstração e reconhecimento de padrões na resolução de problemas computacionais e cotidianos.
EF67CO02 Elaborar e implementar algoritmos com estruturas de controle (sequência, seleção e repetição), utilizando variáveis e operadores lógicos.
EF67CO03 Representar dados e estados de um sistema usando fluxogramas, tabelas-verdade e diagramas de estado.
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
EF67CO04 Construir protótipos eletrônicos usando placas programáveis (Arduino, ESP32, micro:bit), sensores (ultrassônico, LDR, DHT) e atuadores (LED, servo, buzzer).
EF67CO05 Compreender como dados são representados no computador (binário, ASCII, imagem, áudio) e como circulam por redes (LAN, Wi-Fi, internet).
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
EF67CO06 Analisar criticamente o uso das tecnologias digitais e sua influência no comportamento social, no consumo de informação e na privacidade.
EF67CO07 Identificar fontes confiáveis de informação em ambientes digitais, reconhecendo desinformação (fake news), deepfakes e manipulação algorítmica.
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 (7º ano, 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

Arduino Uno
Arduino Uno
🧰
Driver de motor TB6612
🧰
Receptor + controle sem fio PS2
Motor DC com caixa de redução
Motor DC com caixa de redução
Rodas (impressão 3D)
Rodas (impressão 3D)
Bateria (pack de pilhas ou LiPo)
Bateria (pack de pilhas ou LiPo)
Chassi (impressão 3D)
Chassi (impressão 3D)
Jumpers e parafusos (opcional)
Jumpers e parafusos (opcional)

🎯 O desafio

Montar e programar um robô de futebol controlado por um controle sem fio (PS2): ler o controle e traduzir os comandos em movimento dos dois motores — frente, trás e giro (direção diferencial).

📶 Intermediario · ⏱ 2 a 3 aulas

🪜 Passo a passo

1) Montar o chassi, as rodas e os motores. 2) Ligar o driver TB6612 (motor A: AIN1 D4 / AIN2 D3 / PWMA D9 · motor B: BIN1 D8 / BIN2 D7 / PWMB D5 · STBY no 5V) e a alimentação. 3) Ligar o receptor PS2 (CLK A3, CMD A1, ATT A0, DAT A2, VCC 3,3V, GND). 4) Instalar a biblioteca PS2X, parear o controle e carregar o código. 5) Testar a pilotagem. 6) Jogar / competir em equipe.

🔌 Montagem do robô

Placa: Arduino Uno

⬇ baixar SVG
🧰 Montagem do robôPlaca: Arduino Uno · 4 componentes · 20 ligações detectadas do códigoUSBATMEGA328PLARDUINO UNOAREFGND131211109876543210DIGITAL (PWM ~)IOREFRESET3V35VGNDGNDVINPOWERA0A1A2A3A4A5ANALOG INArduino Uno⚡ Barramento de alimentação · 5V (+) / GND (–)D4 · direção AD3 · direção AD9 · PWM velocidade AD8 · direção BD7 · direção BD5 · PWM velocidade B5V (Arduino) · habilita o driver…Driver de motor(TB6612)AO1·AO2Motor DC esquerdoBO1·BO2Motor DC direitoA3 · clockA1 · comandoA0 · seleçãoA2 · dadosReceptor PS2 (sem fio)LEGENDA DOS FIOSAlimentação (+5V)Terra (GND)DigitalAnalógico (leitura)PWM (velocidade)Saída de motorOutro / dados
🧰 Montagem do robôArduino Unoplaca controladoraDriver de motor (TB6612)D4D3D9D8D7D55V (Arduino)bateria +5V (Arduino)GNDReceptor PS2 (sem fio)A3A1A0A23,3VGNDMotor DC esquerdoAO1AO2Motor DC direitoBO1BO2
as peças reagem: LED acende, botão é clicável, serial abaixo
🖥️ Monitor serial

Energia: uma bateria (pack de pilhas ou LiPo) alimenta os motores na entrada VM do driver TB6612; o VCC do TB6612 recebe 5V do Arduino (lógica) e o pino STBY fica ligado no 5V para habilitar o driver. ATENÇÃO: o receptor PS2 trabalha em 3,3V (ligar no 5V pode queimar). Todos os GND precisam ser comuns.
📋 Tabela de ligações (fio a fio)
Sistema motor
Driver de motor (TB6612)
AIN1 D4 direção A
AIN2 D3 direção A
PWMA D9 PWM velocidade A
BIN1 D8 direção B
BIN2 D7 direção B
PWMB D5 PWM velocidade B
STBY 5V (Arduino) habilita o driver (nível alto)
VM bateria + alimentação dos motores
VCC 5V (Arduino) alimentação lógica
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
Receptor PS2 (sem fio)
CLK A3 clock
CMD A1 comando
ATT A0 seleção
DAT A2 dados
VCC 3,3V alimentação (NÃO 5V!)
GND GND terra
🔧 Passo a passo de ligação
  1. Energia: bateria na entrada VM e GND do driver TB6612; o VCC recebe 5V do Arduino e o STBY também vai no 5V (habilita o driver); GND comum entre tudo.
  2. Controle dos motores: AIN1→D4, AIN2→D3, PWMA→D9 (motor A); BIN1→D8, BIN2→D7, PWMB→D5 (motor B).
  3. Receptor PS2: CLK→A3, CMD→A1, ATT→A0, DAT→A2. ⚠️ Alimente o receptor em 3,3V (NUNCA 5V) e GND.
  4. Motores: o esquerdo nas saídas AO1/AO2; o direito nas BO1/BO2. Se um girar ao contrário, inverta os dois fios dele.
  5. Instalar a biblioteca PS2X, parear o controle, conferir o GND comum e o STBY em nível alto, e carregar o código.

💻 Código

aula.ino
/*
 * Robô de Futebol — controle sem fio PS2 + driver TB6612 (Arduino UNO)
 * Lê os joysticks do controle PS2 e move 2 motores com direção diferencial
 * (frente, trás e giro no lugar). (código original; comentários em português)
 *
 * Driver TB6612: os pinos abaixo controlam AIN1/AIN2/PWMA (motor A) e
 * BIN1/BIN2/PWMB (motor B). O pino STBY do TB6612 deve ficar em nível ALTO
 * (ligado no 5V) para o driver funcionar. Os nomes IN/EN abaixo são herdados
 * do código original e mapeiam direto nesses terminais.
 */
#include <PS2X_lib.h>

PS2X ps2x;
int error = 0;
byte vibrate = 0;

// Pinos do driver TB6612  (IN1/IN2->AIN1/AIN2, ENA->PWMA, IN3/IN4->BIN1/BIN2, ENB->PWMB)
const int IN1 = 4;
const int IN2 = 3;
const int IN3 = 8;
const int IN4 = 7;
const int ENA = 9;
const int ENB = 5;

void controlMotores(int velocidadMotorA, int velocidadMotorB);

void setup() {
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  pinMode(IN3, OUTPUT);
  pinMode(IN4, OUTPUT);
  pinMode(ENA, OUTPUT);
  pinMode(ENB, OUTPUT);

  delay(300);
  // config_gamepad(clock A3, command A1, attention A0, data A2)
  error = ps2x.config_gamepad(A3, A1, A0, A2, true, true);
}

void loop() {
  ps2x.read_gamepad(false, vibrate);

  // Ler o joystick direito (frente / trás)
  int joyY = ps2x.Analog(PSS_RY) - 127;
  if (joyY == -128) joyY = -127;

  // Ler o joystick esquerdo (giros)
  int joyX = ps2x.Analog(PSS_LX) - 127;
  if (joyX == -128) joyX = -127;

  // Ler os botões de direção (setas)
  bool flechaIzq = ps2x.Button(PSB_PAD_LEFT);
  bool flechaDer = ps2x.Button(PSB_PAD_RIGHT);

  // Zona morta
  if (abs(joyY) < 15) joyY = 0;
  if (abs(joyX) < 15) joyX = 0;

  // Velocidade base a partir do joystick direito
  int velocidadBase = map(abs(joyY), 0, 127, 0, 255);

  // Giro proporcional a partir do joystick esquerdo
  int giro = map(joyX, -127, 127, -255, 255);

  // Prioridade: se apertar as setas, substitui o giro
  if (flechaIzq) giro = -200;
  else if (flechaDer) giro = 200;

  // Inicializar as velocidades
  int velocidadMotorA = 0;
  int velocidadMotorB = 0;

  if (joyY < 0) {
    // Avançar
    velocidadMotorA = velocidadBase - giro;
    velocidadMotorB = velocidadBase + giro;
  } else if (joyY > 0) {
    // Recuar
    velocidadMotorA = -velocidadBase + giro;
    velocidadMotorB = -velocidadBase - giro;
  } else {
    // Parado: permite girar no lugar
    velocidadMotorA = giro;
    velocidadMotorB = -giro;
  }

  // Limitar os valores
  velocidadMotorA = constrain(velocidadMotorA, -255, 255);
  velocidadMotorB = constrain(velocidadMotorB, -255, 255);

  controlMotores(velocidadMotorA, velocidadMotorB);

  delay(30);
}

void controlMotores(int velocidadMotorA, int velocidadMotorB) {
  // Motor A
  if (velocidadMotorA > 0) {
    digitalWrite(IN1, HIGH);
    digitalWrite(IN2, LOW);
  } else if (velocidadMotorA < 0) {
    digitalWrite(IN1, LOW);
    digitalWrite(IN2, HIGH);
  } else {
    digitalWrite(IN1, LOW);
    digitalWrite(IN2, LOW);
  }

  // Motor B
  if (velocidadMotorB > 0) {
    digitalWrite(IN3, LOW);
    digitalWrite(IN4, HIGH);
  } else if (velocidadMotorB < 0) {
    digitalWrite(IN3, HIGH);
    digitalWrite(IN4, LOW);
  } else {
    digitalWrite(IN3, LOW);
    digitalWrite(IN4, LOW);
  }

  // Velocidade
  analogWrite(ENA, abs(velocidadMotorA));
  analogWrite(ENB, abs(velocidadMotorB));
}

🖨️ Modelos 3D para impressão

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

Chassi do robô 📥 Baixar
Rodas (rines) 📥 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.