Ferramentas do usuário

Ferramentas do site


cursos:introrobotica:2019-1:grupo08:tp3:sensor_segue_linha

Sensor Segue Linha (LDR)

Peças

  • 2x LEDs WS2812B
  • 2X LDRs
  • 2x Resistor 10K Ohms

Conexão

Os LEDs foram ligados seguindo a conexão da sua placa (VCC → 5V, GND → GND e Din → porta 25 do arduino). Os LDRs foram conectados com um resistor pull_up de 10k e conectados às portas A10 e A11 do Arduino.

Aplicação

Os sensores LDR nos davam duas leituras: eles detectavam preto ou branco. Como os sensores estavam localizados do lado de fora da faixa preta, o estado normal dele é detectar dois brancos, o que indicaria que a linha preta estava entre os sensores e, portanto, o robô poderia andar reto. Quando um dos sensores detectava preto, era sinal de uma curva, bifurcação ou simplesmente ele se distanciou das linhas pretas, e precisava se corrigir. Neste caso, quando há apenas uma detecção da cor preta, ele simplesmente vira para o lado que foi detectado preto até que esse estado mude. Caso ambos os sensores detectassem preto, escolhemos um lado e ele tentaria virar para este lado. Preto em ambos indica duas possíveis curvas, e optamos por fazê-lo sempre tomar a mesma decisão nesse caso.

Problema no Projeto

Durante a construção do nosso robô, optamos por colocar o sensor atrás do eixo das rodas. Isso se mostrou uma decisão equivocada durante a etapa de experimentos, pois o eixo de rotação dos sensores, ao invés de estar diretamente entre eles, ou pelo menos depois dele, na verdade estava na frente dele. As consequências disso foram desastrosas. Como ele sempre tomava decisões atrasadas, ele não conseguia manter o sensor entre as linhas. Como o robô já estava montado, não haveria tempo para mudar seu projeto. Analisando estes fatos, tivemos a ideia para resolver esse problema: simplesmente fizemos o robô andar de ré. Assumimos que a frente dele era o que até então consideramos a traseira, e invertemos a rotação dos motores, tornando a rotação padrão a BACKWARD. Portanto, os códigos a seguir se utilizam desse recurso implementado por nós para que funcionasse.

Controle

O código abaixo é o controle dos motores, bem simples e direto.

Nós optamos por velocidades diferentes de rotação dependendo do lado que era preciso virar para que a curva fosse suavizada, porém essa decisão acabou fazendo com que curvas que aconteciam próximas, ou que o robô precisasse se ajustar rápido acabassem sendo não bem sucedidas. Sua implementação também poderia ter sido melhorada: essa é uma máquina de estados bem simples, com transições decididas basicamente pela leitura do sensor, independente do estado atual. Uma máquina de estados mais robusta poderia fazer com que o robô tomasse decisões mais sofisticadas e que considerasse o estado corrente dele para, por exemplo, decidir o que fazer quando detectasse dois pretos.

Resultados

No final, consideramos a execução satisfatória. Com certeza vários aspectos ainda podem ser melhorados e aperfeiçoados, porém os sensores e o robô em grande parte cumpriram o que era esperado deles.

cursos/introrobotica/2019-1/grupo08/tp3/sensor_segue_linha.txt · Última modificação: por 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki