Componente · Sensor

Matriz de sensores IR

Uma matriz de sensores de refletância infravermelha permite que um robô seguidor de linha veja a linha. Veja como funciona, como calibrar e onde falha.

O que é

Uma matriz de sensores de refletância infravermelha é uma fileira de pequenos sensores montados em linha e voltados para o piso. Cada sensor combina um LED infravermelho que projeta luz para baixo com um fototransistor que mede quanto dessa luz retorna. Aponte-a para uma linha escura sobre um piso claro e a linha refletirá menos—portanto, o sensor sobre a linha produz uma leitura diferente dos que estão sobre o piso. Ao ler a matriz inteira, você descobre não apenas se está sobre a linha, mas onde a linha está sob o robô.

É o olho de quase todo robô seguidor de linha e o motivo pelo qual o seguidor de linha é um ótimo primeiro projeto: a detecção é barata, intuitiva e imediatamente visível.

Corte transversal de uma matriz de refletância infravermelha sobre um piso com uma linha preta. Cada canal emite infravermelho para baixo; o piso branco reflete-o fortemente, enquanto a linha preta o absorve, de modo que o canal sobre a linha lê um valor baixo e os demais leem valores altos.
Cada canal emite infravermelho e mede o que retorna. O piso reflete; a linha absorve—portanto, a leitura baixa indica onde a linha está sob a matriz. Baixar SVG

Como funciona

Cada canal é um par emissor-detector. O LED infravermelho emite luz invisível de ~940 nm; o fototransistor conduz mais à medida que mais luz retorna. Uma superfície branca ou clara reflete muita luz (retorno alto); uma linha preta absorve infravermelho (retorno baixo). Existem dois estilos de saída:

  • Analógica — cada canal informa um valor contínuo proporcional à refletância. É mais informativo: você pode calcular onde a linha fica entre dois sensores e obter um sinal de erro suave para um controlador PID.
  • Digital — um comparador integrado informa apenas linha/sem linha por canal. É mais fácil de ler, mas menos preciso.

Para transformar a matriz em um sinal de direção, calcule uma média ponderada dos sensores que detectam a linha. Se a linha se deslocar para sob os sensores da esquerda, a média muda para a esquerda e esse desvio se torna o erro corrigido pela sua malha de controle.

Quando usar

Use uma matriz de refletância sempre que um robô precisar acompanhar um caminho de alto contraste—uma linha preta sobre branco ou fita branca sobre um piso escuro. Mais canais oferecem resolução de posição mais fina e permitem que o robô trate curvas e lacunas com mais facilidade; cinco bastam para aprender, enquanto oito são confortáveis para trajetórias mais rápidas ou sinuosas.

Não é a ferramenta certa para detectar objetos, medir distância ou detectar algo fora do plano do solo—essa é a função de um sensor ultrassônico ou de tempo de voo.

Calibração e armadilhas

  • Calibre sempre. Luz ambiente, superfície e altura de montagem alteram as leituras. Antes de uma execução, passe a matriz sobre a linha e o piso, registre os valores mínimo e máximo de cada canal e normalize as leituras entre eles. Não fazer isso é o principal motivo para um seguidor de linha funcionar em uma mesa e falhar em outra.
  • A altura importa. Sensores de refletância têm uma faixa ideal estreita (alguns milímetros). Se a matriz ficar alta demais, o contraste cai.
  • Infravermelho ambiente é ruído. A luz do sol e algumas iluminações saturam os detectores com infravermelho. Proteja os sensores ou use o robô em ambientes internos para obter comportamento consistente e filtre o sinal—veja como reduzir o ruído dos sensores.
  • O acabamento da superfície engana. Preto brilhante pode refletir como branco no ângulo errado; fita fosca sobre piso fosco é a combinação confiável.

Conexão com um Arduino

Uma matriz analógica precisa de um pino ADC por canal. Por isso, uma matriz de 8 canais e um Uno (com seis pinos analógicos) formam uma combinação inadequada — os oito pinos de um Nano (A0–A7) encaixam exatamente.

Pino da matriz Arduino Observação
VCC 5 V Os emissores, não os detectores, consomem corrente
GND GND
OUT1–OUT8 A0–A7 Canais analógicos, um por sensor
LEDON / CTRL Qualquer pino digital Opcional: liga e desliga os emissores

Vale conectar esse pino LEDON, embora a maioria dos projetos o ignore. Os emissores de uma matriz de 8 canais podem consumir 100–200 mA juntos, continuamente, o que consome uma parcela significativa do orçamento de uma bateria pequena — e permite fazer a subtração da luz ambiente, como veremos.

Calibração: o código que decide se ela funciona

Isso não é opcional nem um refinamento. Uma matriz sem calibração é o motivo mais comum para um seguidor de linha funcionar na mesa da cozinha e falhar em uma competição.

const int N = 8;
const int PIN[N] = {A0, A1, A2, A3, A4, A5, A6, A7};
int lo[N], hi[N];

void calibrate() {
  for (int i = 0; i < N; i++) { lo[i] = 1023; hi[i] = 0; }

  // Sweep the array across the line and the floor for ~3 seconds.
  unsigned long start = millis();
  while (millis() - start < 3000) {
    for (int i = 0; i < N; i++) {
      int v = analogRead(PIN[i]);
      if (v < lo[i]) lo[i] = v;
      if (v > hi[i]) hi[i] = v;
    }
  }
}

// 0 = floor, 1000 = line, per channel, normalised against this run's own extremes.
int normalised(int i) {
  int span = hi[i] - lo[i];
  if (span < 50) return 0;                       // this channel never saw contrast
  return constrain(map(analogRead(PIN[i]), lo[i], hi[i], 0, 1000), 0, 1000);
}

Observe a proteção span < 50. Um canal que não tenha visto contraste durante a calibração — porque a passagem não o encontrou ou porque o emissor está queimado — produziria, sem essa proteção, valores normalizados enormes a partir de um ruído minuscule, e o robô faria um desvio brusco na direção de um sensor que não está dizendo nada.

De oito leituras a um único valor de direção

A média ponderada é toda a técnica, e produz uma posição contínua, em vez de um valor discreto do tipo “o sensor 3 a vê”:

// Returns position in the same units as the weights: 0..7000 for an 8-channel array,
// or -1 if the line is not visible at all.
long linePosition() {
  long weighted = 0, total = 0;
  for (int i = 0; i < N; i++) {
    int v = normalised(i);
    if (v > 100) {                    // ignore channels that are clearly on floor
      weighted += (long)v * i * 1000;
      total    += v;
    }
  }
  if (total == 0) return -1;          // line lost
  return weighted / total;
}

// Error for the control loop: 0 when centred.
long error() {
  long pos = linePosition();
  if (pos < 0) return LAST_ERROR;     // hold the last known direction, do not zero it
  return pos - 3500;                  // centre of an 8-channel array
}

Duas decisões de projeto importam mais que a aritmética:

Ignorar canais abaixo de um limite impede que o ruído do piso puxe a média. Sem isso, oito canais que registram pequenos valores diferentes de zero puxam a estimativa para o meio, independentemente de onde a linha esteja.

Retornar o último erro quando a linha é perdida — em vez de zero — é o que permite que um robô se recupere de uma curva fechada. Zero significa “perfeitamente centralizado”, portanto um robô que zera a leitura ao perder a linha segue em frente à velocidade máxima, afastando-se da linha que acabou de perder. Manter o último erro faz o robô continuar na direção em que já estava virando, que é a direção para onde a linha foi.

Altura de montagem e por que ela decide tudo

Sensores de refletância têm uma faixa ideal estreita. O sinal cai rapidamente nas duas direções: muito alto, o retorno é fraco; muito baixo, o cone do emissor ainda não se espalhou o suficiente para iluminar o que o detector vê.

Altura sobre o solo Comportamento típico
1–3 mm Melhor contraste, mas raspa em qualquer irregularidade da superfície
3–8 mm A faixa utilizável — a maioria das matrizes indica cerca de 3 mm
8–15 mm Contraste diminuindo; a faixa de calibração diminui
> 15 mm Praticamente cega na maioria das superfícies

Há duas consequências práticas. Monte-a rigidamente — uma matriz em um suporte flexível muda de altura quando o robô acelera, o que altera as leituras, e a malha de controle interpreta isso como movimento da linha. E monte-a nivelada, porque uma matriz inclinada dá a cada canal uma altura efetiva diferente e, portanto, uma calibração diferente. Isso aparece como um robô que acompanha bem em uma direção e mal na outra.

Montá-la à frente das rodas também importa: quanto mais à frente, mais cedo o robô vê uma curva e mais tempo de reação o controlador tem. Se ficar longe demais à frente, a geometria amplifica o erro e provoca oscilação.

Como vencer a luz ambiente

A luz do sol contém muito infravermelho de 940 nm, e ele chega ao detector com aparência idêntica à de uma reflexão. Um robô que funciona em ambientes internos e falha perto de uma janela quase sempre está vendo esse problema.

Se os emissores da matriz puderem ser desligados, a solução é completa e custa apenas duas leituras:

int ambientSubtracted(int i) {
  digitalWrite(LEDON, LOW);   delayMicroseconds(200);
  int dark = analogRead(PIN[i]);      // ambient only
  digitalWrite(LEDON, HIGH);  delayMicroseconds(200);
  int lit  = analogRead(PIN[i]);      // ambient + our own emitter
  return lit - dark;                  // just our emitter
}

Tudo o que for constante no ambiente é cancelado exatamente. O tempo de amostragem dobra, o que representa um custo real em um robô seguidor de linha rápido — mas transforma um sensor não confiável em um sensor confiável. É a técnica usada por matrizes comerciais.

Se isso não for possível: proteja a matriz com uma saia para que ela veja somente o piso diretamente abaixo.

Solução de problemas

Sintoma Causa provável Solução
Funciona em uma superfície, mas não em outra Sem calibração ou calibração desatualizada Recalibre no início de cada execução, na superfície real
O robô curva para um lado A faixa de calibração de um canal está errada Verifique o hi/lo de todos os canais; um emissor queimado produz uma faixa minúscula
Perde a linha em curvas fechadas Matriz muito perto das rodas ou zerando a leitura ao perdê-la Mova-a para a frente; mantenha o último erro em vez de zerar
Oscila em trechos retos Matriz longe demais à frente ou ganho alto demais Reduza o avanço; reajuste o controlador
Falha perto de uma janela Infravermelho ambiente Faça a subtração com o emissor desligado ou proteja a matriz
Comportamento irregular em fita preta brilhante Reflexão especular na fita Fita fosca sobre piso fosco é a combinação confiável
As leituras derivam durante a execução Queda de tensão da bateria, que enfraquece os emissores Emissores consumem bastante corrente; verifique a trilha sob carga
Todos os canais leem o mesmo valor Matriz alta demais Leve-a para 3–8 mm e recalibre

Escolhendo uma matriz

Canais Resolução de posição Boa para
3 Grossa — essencialmente esquerda/centro/direita Apenas aprender o conceito
5 Adequada Um primeiro robô seguidor de linha em uma trajetória suave
8 Confortável Trajetórias rápidas, curvas fechadas e detecção de cruzamentos em labirintos de linha
12–16 Fina Robôs de competição em alta velocidade

A saída analógica é superior à digital em qualquer sistema que use uma malha de controle. O comparador de uma matriz digital fornece apenas linha/sem linha por canal, quantizando a posição em poucos valores discretos e tornando impossível a direção proporcional suave. A saída analógica fornece um sinal de erro contínuo, que é o que um controlador PID precisa.

O espaçamento entre canais importa tanto quanto a quantidade: a matriz deve ser mais larga que a linha o suficiente para que pelo menos um sensor esteja sempre sobre o piso em cada borda, mas não tão larga que a linha possa ficar invisível entre dois sensores. Para fita elétrica padrão de 19 mm, um espaçamento de 8 mm funciona bem.

Para um solucionador de labirinto de linhas, há uma exigência adicional: a matriz deve ser larga o suficiente para ver um cruzamento. O robô detecta uma curva à esquerda quando percebe que os sensores mais externos da esquerda ficaram escuros enquanto o centro ainda está sobre a linha — algo impossível se a matriz for apenas um pouco mais larga que a fita.

Explore o grafo

Usado nestas montagens

Projetos, caminhos de aprendizagem e simuladores que incluem Matriz de sensores IR.

Perguntas

Perguntas frequentes sobre Matriz de sensores IR

O que é um sensor para robô seguidor de linha?

Um sensor para robô seguidor de linha é um sensor infravermelho de refletância que o robô aponta para o piso a fim de detectar uma linha marcada. Cada canal projeta luz infravermelha para baixo e mede quanto retorna; por isso, uma linha escura, que reflete menos, produz uma leitura diferente da do piso ao redor.

Como funciona um sensor para robô seguidor de linha?

Cada canal combina um LED infravermelho com um fototransistor. Superfícies claras refletem muita luz e linhas escuras absorvem infravermelho, portanto o sensor sobre a linha lê um valor baixo enquanto os demais leem valores altos. Ler a matriz inteira informa ao robô onde a linha está sob ele.

Como calibrar um sensor IR para um robô seguidor de linha?

Antes de uma execução, passe a matriz sobre a linha e sobre o piso sem marcação, registre a leitura mínima e máxima de cada canal e normalize as leituras em tempo real entre esses limites. Não calibrar é o principal motivo para um robô seguidor de linha funcionar em uma superfície e falhar em outra.

O que é PID em um seguidor de linha?

PID é o método de controle que transforma o erro de posição do sensor em direção suave. O termo proporcional reage a quanto o robô está fora da linha, o termo derivativo amortece a ultrapassagem e o termo integral elimina desvios persistentes—fazendo o robô acompanhar a linha sem oscilar. Você pode ajustá-lo em tempo real em nosso simulador de PID.

Quais são os principais componentes de um robô seguidor de linha?

Um robô seguidor de linha básico precisa de quatro coisas: uma matriz de sensores de refletância infravermelha para ver a linha, um microcontrolador como o Arduino Uno para executar a malha de controle, um driver de motor como o L298N e dois motores CC com rodas. Uma bateria e um chassi completam o projeto.

Para que serve uma matriz de sensores para robô seguidor de linha?

Além de robôs seguidores de linha, matrizes de refletância são usadas para detectar bordas (parar na borda de uma mesa), medir posição de forma semelhante a um encoder e detectar superfícies ou contrastes simples em automação. Em qualquer lugar onde um robô deva reagir a uma marca de alto contraste sobre uma superfície, uma matriz de refletância é uma opção barata e confiável."

Leitura complementar

Referências