← Sair
Robô Seguidor de Linha com 2 Sensores Infravermelhos
Modo Bancada · Plugada

Robô Seguidor de Linha com 2 Sensores Infravermelhos

Robô autônomo · Sensores IV · Ponte H · Decisão por leitura múltipla

🎯 O que vamos aprender
  • • Construir um robô móvel autônomo capaz de seguir uma linha preta no chão.
  • • Programar a lógica de decisão com base na leitura de 2 sensores simultâneos.
  • • Compreender o princípio do sensor TCRT5000 (reflexão de luz infravermelha).
  • • Controlar motores DC com a ponte H L298N (sentido + velocidade).
🧰 O que vamos usar

• 1× Arduino Uno + cabo USB • 2× Sensores infravermelhos TCRT5000 (módulo) • 1× Módulo Ponte H L298N • 2× Motores DC com caixa de redução + rodas • 1× Roda boba (3ª roda traseira) • 1× Chassi (acrílico, MDF ou papelão duro) • 1× Suporte de 4 pilhas AA (6V) — alimenta a Ponte H • Jumpers macho-macho e macho-fêmea • Fita isolante PRETA (pra fazer a pista) • Cartolina branca grande (base da pista)

🪜 Passo 1 de 5

Introdução / Contextualização

Mostre vídeos curtos de robôs seguidores de linha em competições e fábricas (AGVs). Discuta a diferença entre 'pré-programado' (faz sempre a mesma coisa) e 'autônomo' (decide em tempo real). Apresente os componentes na bancada: sensor IV (mostra a luz vermelha que ele emite quando ligado), Ponte H (explique a expressão 'ponte' — permite inverter o sentido), motores DC. Princípio do sensor IV: emite luz IV e mede o quanto reflete. Superfície preta absorve → pouco retorna → leitura 0. Superfície branca reflete → muito retorna → leitura 1. Mostre o trimpot do sensor pra calibrar o limiar. Explique a Ponte H: 4 pinos de controle (IN1-IN4) decidem o sentido, 2 pinos PWM (ENA, ENB) decidem a velocidade. Mostre como combinações de HIGH/LOW invertem o motor.

🪜 Passo 2 de 5

Montagem do Circuito / Hardware

AULA 1 (sem sensores ainda): 1. Monte o chassi com os 2 motores e a roda boba. 2. Conecte os motores aos terminais OUT1/OUT2 e OUT3/OUT4 da Ponte H. 3. Ligue o suporte de pilhas (6V) na entrada VCC da Ponte H, e a chave de alimentação. 4. Ligue GND da Ponte H ao GND do Arduino. 5. Conecte IN1, IN2, IN3, IN4, ENA, ENB nos pinos do Arduino conforme código. AULA 2 (sensores): 6. Fixe os 2 sensores na FRENTE do chassi, a ~1 cm do chão, separados por ~3 cm. 7. VCC dos sensores → 5V do Arduino. GND → GND. OUT esquerdo → A0. OUT direito → A1.

🪜 Passo 3 de 5

Programação / Codificação

1. Compile o código. 2. Antes de enviar, eleve o robô do chão (rodas no ar) — vai ser teste. 3. Envie pro Arduino. 4. Com o robô no ar, abra o Monitor Serial pra ver as leituras dos sensores. 5. Passe fita preta na frente de um sensor de cada vez — confira se a roda do lado certo para. 6. Ajuste o limiar dos sensores girando o trimpot até funcionar bem.

🪜 Passo 4 de 5

Teste, Depuração e Ajustes

1. Construa a pista: fita isolante PRETA sobre cartolina BRANCA, com curvas suaves. 2. Coloque o robô na pista com os sensores sobre a linha. 3. Espera-se que ele siga a linha — corrigindo quando sai pra um lado. 4. Erros comuns: sensores muito altos (não detectam), motores invertidos (anda pra trás), velocidade muito alta (ele 'pula' a linha). Diminua VELOCIDADE pra 100 pra estabilizar. 5. Variação: faça curvas em zigue-zague e cruzamentos.

🪜 Passo 5 de 5

Encerramento / Socialização

Competição: cada equipe corre seu robô na mesma pista. Cronometre. Discussão final: 'O que faria seu robô melhor?'. Anotem ideias: mais sensores, PWM dinâmico, PID. Conexão com a realidade: AGVs em armazéns Amazon, robôs Mars Rover, Roomba — todos usam o mesmo princípio (sensor → decisão → atuador), só com sensores mais sofisticados.

🔌 Montagem do robô

Placa: Arduino Nano

⬇ baixar SVG
🧰 Montagem do robôPlaca: Arduino Nano · 4 componentes · 4 ligações detectadas do códigoNANO133V3AREFA0A1A2A3A4A5A6A75VRSTGNDVIN12111098765432GNDRST10Arduino NanoA0 · leitura da linhaSeguidor de Linha(TCRT5000) esquerdoA1 · leitura da linhaSeguidor de Linha(TCRT5000) direitoD2, D3, D5 · velocidade e sent…Motor DC esquerdoD4, D7, D6 · velocidade e sent…Motor DC direitoLEGENDA DOS FIOSAnalógico (leitura)Outro / dados
🧰 Montagem do robôArduino Nanoplaca controladoraSeguidor de Linha…A0Seguidor de Linha…A1Motor DC esquerdoD2, D3, D5Motor DC direitoD4, D7, D6
💻 O código
aula.ino
// Robô seguidor de linha
// 2 sensores IV: pinos A0 (esquerdo) e A1 (direito)
// Ponte H L298N: motor esquerdo (IN1=2, IN2=3, ENA=5)
//                motor direito  (IN3=4, IN4=7, ENB=6)

// Sensores: leitura digital — 0 = linha preta, 1 = fora da linha
const int SENSOR_ESQ = A0;
const int SENSOR_DIR = A1;

// Motor esquerdo
const int M_ESQ_IN1 = 2;
const int M_ESQ_IN2 = 3;
const int M_ESQ_PWM = 5;  // ENA

// Motor direito
const int M_DIR_IN3 = 4;
const int M_DIR_IN4 = 7;
const int M_DIR_PWM = 6;  // ENB

const int VELOCIDADE = 150;  // 0–255 (PWM)

void setup() {
  pinMode(SENSOR_ESQ, INPUT);
  pinMode(SENSOR_DIR, INPUT);
  pinMode(M_ESQ_IN1, OUTPUT);
  pinMode(M_ESQ_IN2, OUTPUT);
  pinMode(M_DIR_IN3, OUTPUT);
  pinMode(M_DIR_IN4, OUTPUT);
  Serial.begin(9600);
}

void frente() {
  digitalWrite(M_ESQ_IN1, HIGH); digitalWrite(M_ESQ_IN2, LOW);
  digitalWrite(M_DIR_IN3, HIGH); digitalWrite(M_DIR_IN4, LOW);
  analogWrite(M_ESQ_PWM, VELOCIDADE);
  analogWrite(M_DIR_PWM, VELOCIDADE);
}

void viraEsquerda() {
  digitalWrite(M_ESQ_IN1, LOW);  digitalWrite(M_ESQ_IN2, LOW);  // para esq
  digitalWrite(M_DIR_IN3, HIGH); digitalWrite(M_DIR_IN4, LOW);  // dir frente
  analogWrite(M_DIR_PWM, VELOCIDADE);
}

void viraDireita() {
  digitalWrite(M_ESQ_IN1, HIGH); digitalWrite(M_ESQ_IN2, LOW);  // esq frente
  digitalWrite(M_DIR_IN3, LOW);  digitalWrite(M_DIR_IN4, LOW);  // para dir
  analogWrite(M_ESQ_PWM, VELOCIDADE);
}

void parar() {
  analogWrite(M_ESQ_PWM, 0);
  analogWrite(M_DIR_PWM, 0);
}

void loop() {
  int esq = digitalRead(SENSOR_ESQ);
  int dir = digitalRead(SENSOR_DIR);

  // Lógica:
  // Ambos brancos (1,1) → reta → frente
  // Esq preto, dir branco (0,1) → desviou pra direita → vira esquerda
  // Esq branco, dir preto (1,0) → desviou pra esquerda → vira direita
  // Ambos pretos (0,0) → cruzamento ou fim → para

  if (esq == 1 && dir == 1) frente();
  else if (esq == 0 && dir == 1) viraEsquerda();
  else if (esq == 1 && dir == 0) viraDireita();
  else parar();

  delay(20);
}
🔀 Como o programa pensa
flowchart TD A(["Início"]) --> B{"Sensor esquerdo na linha?"} B -->|Sim| C{"Sensor direito na linha?"} C -->|Sim| D["Seguir em frente"] C -->|Não| E["Virar à direita"] B -->|Não| F{"Sensor direito na linha?"} F -->|Sim| G["Virar à esquerda"] F -->|Não| H["Parar"] D --> A E --> A G --> A H --> A
🧱 Em blocos
quando @greenFlag for clicado
sempre
  se <ambos os sensores livres> então
    seguir em frente
  senão
    se <sensor esquerdo na linha> então
      virar à esquerda
    senão
      se <sensor direito na linha> então
        virar à direita
      senão
        parar
      end
    end
  end
end
Pra fechar

Você chegou ao fim! 🎉

O que foi mais difícil? O que você faria diferente? Conte pra turma!

✓ Sair