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

Seguidor de Linha · 4 sensores TCRT5000

👤 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 TB6612FNG
Sensor de linha TCRT5000
Sensor de linha TCRT5000
Motor DC com caixa de redução
Motor DC com caixa de redução
Roda + roda boba (esfera)
Roda + roda boba (esfera)
Bateria 9V (ou pack de pilhas)
Bateria 9V (ou pack de pilhas)
Chassi (impressão 3D)
Chassi (impressão 3D)
🧰
Pista: fita isolante preta sobre fundo branco
Jumpers, parafusos e interruptor (opcional)
Jumpers, parafusos e interruptor (opcional)

🎯 O desafio

Construir e programar um robô que segue uma linha usando 4 sensores TCRT5000 e um driver TB6612, corrigindo a rota em tempo real com um PID proporcional-derivativo — calibração, ajuste de ganhos e depuração.

📶 Intermediario · ⏱ 2 a 3 aulas

🪜 Passo a passo

1) Montar o chassi, fixar motores e rodas. 2) Ligar a TB6612 (motor A: D9/D7/D8 · motor B: D3/D5/D4 · STBY: D6) e a alimentação (bateria→VM, 5V/GND comuns). 3) Conectar os 4 sensores TCRT5000 (A1–A4 · emissor D13 · 5V/GND). 4) Enviar o código e CALIBRAR. 5) Testar na pista. 6) Depurar: se oscila, baixe KP/velocidade; se corta a curva, aumente KD.

🔌 Montagem do robô

Placa: Arduino UNO

⬇ baixar SVG
🧰 Montagem do robôPlaca: Arduino UNO · 8 componentes · 16 ligações detectadas do códigoUSBATMEGA328PLARDUINO UNOAREFGND131211109876543210DIGITAL (PWM ~)IOREFRESET3V35VGNDGNDVINPOWERA0A1A2A3A4A5ANALOG INArduino UNOD9 · PWMA (vel. A)D7 · AIN1D8 · AIN2D3 · PWMB (vel. B)D5 · BIN1D4 · BIN2D6 · STBY (habilita)Driver TB6612FNGAO1·AO2Motor DC esquerdoBO1·BO2Motor DC direitoA4 · leitura da linhaSeguidor de Linha(TCRT5000) esquerdoA3 · leitura da linhaSeguidor de Linha(TCRT5000) central…A2 · leitura da linhaSeguidor de Linha(TCRT5000) central…A1 · leitura da linhaSeguidor de Linha(TCRT5000) direitoD13 · emissor infraverm…LEDLEGENDA DOS FIOSDigitalAnalógico (leitura)PWM (velocidade)Saída de motor
🧰 Montagem do robôArduino UNOplaca controladoraSeguidor de Linha…A4Seguidor de Linha…A3Seguidor de Linha…A2Seguidor de Linha…A1LEDD13Driver TB6612FNGD9D7D8D3D5D4D6Motor DC esquerdoAO1AO2Motor DC direitoBO1BO2
as peças reagem: LED acende, botão é clicável, serial abaixo
🖥️ Monitor serial

📋 Tabela de ligações (fio a fio)
Sensores
LED
fio D13 emissor infravermelho dos sensores
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
fio D6 STBY (habilita)
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
Seguidor de Linha (TCRT5000) esquerdo
fio A4 leitura da linha
Seguidor de Linha (TCRT5000) central esquerdo
fio A3 leitura da linha
Seguidor de Linha (TCRT5000) central direito
fio A2 leitura da linha
Seguidor de Linha (TCRT5000) direito
fio A1 leitura da linha

💻 Código

aula.ino
/*
 * Seguidor de Linha · 4 sensores TCRT5000 — Arduino UNO
 * Driver: TB6612FNG   |   Sensores: 4x TCRT5000 (lidos como régua QTR)
 * PID proporcional-derivativo simples, sempre avançando.
 * (código original adaptado; comentários traduzidos para o português)
 */

// ===== Pinos do driver TB6612FNG =====
#define PWMA 9   // velocidade do motor A
#define AIN2 8   // direção do motor A
#define AIN1 7   // direção do motor A
#define BIN1 5   // direção do motor B
#define BIN2 4   // direção do motor B
#define PWMB 3   // velocidade do motor B
#define STBY 6   // standby: precisa ficar em HIGH para o driver funcionar

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

// ===== Ganhos do PID =====
float KP = 0.2;
float KD = 5;

int erro = 0;
int derivada = 0;
int erroAnterior = 0;
float correcao;

#include <QTRSensors.h>

#define NUM_SENSORES 4
#define TIMEOUT 2500
#define PINO_EMISSOR 13   // liga os LEDs infravermelhos dos sensores

QTRSensorsRC qtr(
  (unsigned char[]){18, 17, 16, 15},   // A4, A3, A2, A1
  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);
  pinMode(STBY, OUTPUT);

  digitalWrite(STBY, HIGH);   // habilita o TB6612

  // Calibração: passe os 4 sensores sobre a linha e o fundo 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() {
  posicao = qtr.readLine(leiturasSensores, QTR_EMITTERS_ON, 0);

  // Centro para 4 sensores: faixa 0..3000, centro = 1500
  erro = posicao - 1500;

  // ===== PID =====
  derivada = erro - erroAnterior;
  correcao = (erro * KP) + (derivada * KD);
  correcao = constrain(correcao, -velocidadeBase, velocidadeBase);

  int motorA = velocidadeBase - correcao;
  int motorB = velocidadeBase + correcao;
  motorA = constrain(motorA, 0, 255);
  motorB = constrain(motorB, 0, 255);

  // ===== Sempre para frente, ajustando só a velocidade de cada lado =====
  digitalWrite(AIN1, HIGH); digitalWrite(AIN2, LOW); analogWrite(PWMA, motorA);
  digitalWrite(BIN1, HIGH); digitalWrite(BIN2, LOW); analogWrite(PWMB, motorB);

  erroAnterior = erro;
  delay(5);
}

🔀 Fluxograma do algoritmo

graph TD INICIO([INÍCIO]) N1["Esperar 0.005 segundos"] INICIO --> N1 N1 --> N1 style INICIO fill:#fbbf24,stroke:#1e3a8a,color:#1e3a8a

🧱 Algoritmo em blocos

when green flag clicked
forever
  set [posicao v] to (qtr.readLine(leiturasSensores, QTR_EMITTERS_ON, 0))
  set [erro v] to (posicao - 1500)
  set [derivada v] to (erro - erroAnterior)
  set [correcao v] to ((erro * KP) + (derivada * KD))
  set [correcao v] to (constrain(correcao, -velocidadeBase, velocidadeBase))
  set [motorA v] to (velocidadeBase - correcao)
  set [motorB v] to (velocidadeBase + correcao)
  set [motorA v] to (constrain(motorA, 0, 255))
  set [motorB v] to (constrain(motorB, 0, 255))
  digitalWrite(AIN1, HIGH); digitalWrite(AIN2, LOW); analogWrite(PWMA, motorA) :: custom
  digitalWrite(BIN1, HIGH); digitalWrite(BIN2, LOW); analogWrite(PWMB, motorB) :: custom
  set [erroAnterior v] to (erro)
  wait (0.005) secs
end

🖨️ Modelo 3D para impressão

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

Chassi do seguidor
📥 Baixar STL 👁️ Tela cheia

🎥 Vídeo de demonstração

🔗 Abrir o vídeo em nova aba

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