RoboFeed
Pensamento Computacional
PROJETO DE ROBÔ

Robô Seguidor de Linha (PID)

por Equipe RoboFeed Nível Intermediario 2 a 4 aulas 7º ano8º ano9º ano1º ano (EM)2º ano (EM)3º ano (EM) Plugada 3
▶ Apresentar slide interativo · tela cheia, pra projetar 🔧 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

1×
Arduino Uno
Arduino Uno
1×
Ponte H (L298N)
Ponte H (L298N)
1×
Régua de sensores de linha (QTR / IR, 6 canais)
Régua de sensores de linha (QTR / IR, 6 canais)
2×
Motor DC com caixa de redução
Motor DC com caixa de redução
1×
Roda + roda boba (esfera)
Roda + roda boba (esfera)
1×
Bateria 9V (ou pack de pilhas)
Bateria 9V (ou pack de pilhas)
1×
Chassi (impressão 3D)
Chassi (impressão 3D)
1×
🧰
Pista: fita isolante preta sobre fundo branco
1×
Jumpers, parafusos e interruptor (opcional)
Jumpers, parafusos e interruptor (opcional)

O desafio

Construir e programar um robô que segue uma linha sozinho: ele lê uma régua de sensores de refletância e corrige a trajetória em tempo real com um controle proporcional-derivativo (PID) — desenvolvendo algoritmo, calibração de sensores e depuração.

📶 Intermediario · ⏱ 2 a 4 aulas

Passo a passo

1) Montar o chassi 3D, fixar motores e rodas. 2) Ligar a Ponte H L298N (motor A: D9/D7/D8 · motor B: D3/D5/D4) e a alimentação (bateria→+12V, 5V do L298N→Arduino, GND comum). 3) Conectar a régua de sensores (A0–A3, D12, D11 · emissor D13 · 5V/GND). 4) Enviar o código e CALIBRAR (passar a régua sobre a linha e o fundo). 5) Testar na pista. 6) Depurar: se oscila, baixe a velocidade/ganho; se corta a curva, aumente o derivativo.

Montagem do robô

Placa: Arduino Uno

⬇ baixar SVG
🧰 Montagem do robôPlaca: Arduino Uno · 4 componentes · 19 ligações detectadas do códigoUSBATMEGA328PLARDUINO UNOAREFGND131211109876543210DIGITAL (PWM ~)IOREFRESET3V35VGNDGNDVINPOWERA0A1A2A3A4A5ANALOG INArduino Uno⚡ Barramento de alimentação · 5V (+) / GND (–)D12 · leitura da linhaD11 · leitura da linhaD13 · liga os LEDs IRA0 · leitura da linhaA1 · leitura da linhaA2 · leitura da linhaA3 · leitura da linhaRégua de sensores(QTR, 6 canais)D9 · PWMA (vel. A)D7 · AIN1D8 · AIN2D3 · PWMB (vel. B)D5 · BIN1D4 · BIN2Driver TB6612FNGAO1·AO2Motor DC esquerdoBO1·BO2Motor DC direitoLEGENDA DOS FIOSAlimentação (+5V)Terra (GND)DigitalAnalógico (leitura)PWM (velocidade)Saída de motor
🧰 Montagem do robôArduino Unoplaca controladoraRégua de sensores (QTR, 6…A0A1A2A3D12D11D135VGNDDriver TB6612FNGD9D7D8D3D5D4Motor DC esquerdoAO1AO2Motor DC direitoBO1BO2
as peças reagem: LED acende, botão é clicável, serial abaixo
🖥️ Monitor serial

⚡ Energia: uma bateria de 9V entra no +12V da Ponte H L298N; o regulador de 5V do L298N alimenta o Arduino (5V). Todos os GND precisam ser comuns. A régua de sensores é alimentada pelo 5V e GND do Arduino.
📋 Tabela de ligações (fio a fio)
Sensores
Régua de sensores (QTR, 6 canais)
S1 (sinal) → A0 leitura da linha
S2 (sinal) → A1 leitura da linha
S3 (sinal) → A2 leitura da linha
S4 (sinal) → A3 leitura da linha
S5 (sinal) → D12 leitura da linha
S6 (sinal) → D11 leitura da linha
LEDON (emissor) → D13 liga os LEDs IR
VCC (vermelho) → 5V alimentação
GND (preto) → GND terra
Sistema motor
Driver TB6612FNG
fio → D9 PWMA (vel. A)
fio → D7 AIN1
fio → D8 AIN2
fio → D3 PWMB (vel. B)
fio → D5 BIN1
fio → D4 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
🔧 Passo a passo de ligação
  1. Energia primeiro: ligue a bateria de 9V no +12V e no GND da Ponte H L298N. Depois ligue o +5V (saída regulada do L298N) ao 5V do Arduino e um GND do L298N ao GND do Arduino — o terra PRECISA ser comum.
  2. Régua de sensores: VCC no 5V do Arduino e GND no GND. As 6 saídas de sinal vão em A0, A1, A2, A3, D12 e D11; o pino do emissor (LEDON) vai em D13.
  3. Controle dos motores: ENA→D9, IN1→D7, IN2→D8 (motor A); IN3→D5, IN4→D4, ENB→D3 (motor B).
  4. Motores: o motor esquerdo nas saídas OUT1 e OUT2; o direito nas OUT3 e OUT4. Se algum girar ao contrário, basta inverter os dois fios daquele motor.
  5. Antes de energizar, confira: todos os GND no mesmo ponto? A bateria está só no +12V (nunca no 5V)? Então ligue o Arduino ao computador, envie o código e faça a calibração passando a régua sobre a linha e o fundo.

Código

aula.ino
/*
 * Robô Seguidor de Linha (PID) — Arduino UNO
 * Driver: Ponte H L298N   |   Sensores: régua de refletância (QTR, 6 canais)
 * Lê a posição da linha, calcula o erro e corrige a trajetória em tempo real (PID).
 * (código original adaptado; comentários traduzidos para o português)
 */

// ===== Pinos do driver (Ponte H L298N) =====
#define PWMA 9   // ENA - velocidade do motor A
#define AIN2 8   // IN2 - direção do motor A
#define AIN1 7   // IN1 - direção do motor A
#define BIN1 5   // IN3 - direção do motor B
#define BIN2 4   // IN4 - direção do motor B
#define PWMB 3   // ENB - velocidade do motor B

int velocidadeBase = 250;   // velocidade de cruzeiro (0 a 255)

int erro = 0;               // erro atual (termo proporcional)
int derivada = 0;
int integral = 0;
int erroAnterior = 0;
float correcao;

#include <QTRSensors.h>

#define NUM_SENSORES 6
#define TIMEOUT 2500
#define PINO_EMISSOR 13     // liga os LEDs infravermelhos da régua

QTRSensorsRC qtr(
  (unsigned char[]){17, 16, 15, 14, 12, 11},   // A3, A2, A1, A0, D12, D11
  NUM_SENSORES,
  TIMEOUT,
  PINO_EMISSOR
);

unsigned int leiturasSensores[NUM_SENSORES];
unsigned int posicao = 0;

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

  pinMode(PWMA, OUTPUT);
  pinMode(AIN1, OUTPUT);
  pinMode(AIN2, OUTPUT);
  pinMode(PWMB, OUTPUT);
  pinMode(BIN1, OUTPUT);
  pinMode(BIN2, OUTPUT);

  // Calibração: passe a régua sobre a linha preta e o fundo branco por alguns segundos
  Serial.println("== CALIBRANDO ==");
  digitalWrite(PINO_EMISSOR, HIGH);
  for (int i = 0; i < 400; i++) {
    qtr.calibrate();
    delay(5);
  }
  digitalWrite(PINO_EMISSOR, LOW);
  Serial.println("== PRONTO ==");
}

void loop() {
  qtr.read(leiturasSensores);
  posicao = qtr.readLine(leiturasSensores, QTR_EMITTERS_ON, 0);
  erro = posicao - 3500;    // 3500 = centro (régua de 6 sensores -> faixa 0..7000)

  // ===== Monitor serial (depuração dos sensores) =====
  Serial.print("POS: "); Serial.print(posicao);
  Serial.print("  ERRO: "); Serial.print(erro);
  Serial.print("  CORR: "); Serial.print(correcao);
  Serial.print("  S: ");
  for (int i = 0; i < NUM_SENSORES; i++) {
    Serial.print(leiturasSensores[i]);
    Serial.print(" ");
  }
  Serial.println();

  // Linha bem à esquerda -> gira no lugar para reencontrá-la
  if (erro < -3500) {
    digitalWrite(AIN1, LOW);  digitalWrite(AIN2, HIGH); analogWrite(PWMA, 255);
    digitalWrite(BIN1, LOW);  digitalWrite(BIN2, HIGH); analogWrite(PWMB, 255);
  }
  // Linha bem à direita -> gira no lugar para o outro lado
  else if (erro > 3500) {
    digitalWrite(AIN1, HIGH); digitalWrite(AIN2, LOW);  analogWrite(PWMA, 255);
    digitalWrite(BIN1, HIGH); digitalWrite(BIN2, LOW);  analogWrite(PWMB, 255);
  }
  // Sobre a linha -> o controle PID ajusta as duas velocidades
  else {
    derivada = erro - erroAnterior;
    integral = erro + erroAnterior;

    correcao = (erro * 0.005) + (derivada * 15) + (integral * 0.125);

    if (correcao > velocidadeBase)  correcao = velocidadeBase;
    if (correcao < -velocidadeBase) correcao = -velocidadeBase;

    digitalWrite(AIN1, HIGH); digitalWrite(AIN2, LOW);
    analogWrite(PWMA, velocidadeBase - correcao);

    digitalWrite(BIN1, HIGH); digitalWrite(BIN2, LOW);
    analogWrite(PWMB, velocidadeBase + correcao);

    erroAnterior = erro;
  }

  delay(5); // evita saturar o monitor serial
}

Modelo 3D para impressão

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

⏳
Chassi do seguidor
📥 Baixar STL 👁️ Tela cheia

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