Essays.club - TCC, Modelos de monografias, Trabalhos de universidades, Ensaios, Bibliografias
Pesquisar

O ROBÔ RESOLVEDOR DE LABIRINTO

Por:   •  12/12/2018  •  1.161 Palavras (5 Páginas)  •  389 Visualizações

Página 1 de 5

...

Durante o desenvolvimento da lógica, foi determinada a seguinte estratégia, seguir em frente, até encontrar uma parede a uma distância mínima, e esta seria sua referência até encontrar outra parede a frente, seguindo a parede da seguinte forma: virar à direita, e parar assim que o sensor frontal estivesse com uma leitura superior a distância mínima pré-determinada, após esta ação este iria seguir a parede com o sensor esquerdo, se distanciando da parede acionando apenas o motor esquerdo até atingir a distância máxima, e posteriormente se aproximando da parede até atingir a distância mínima, e desta forma seguiria a parede, até que o sensor frontal obtivesse uma leitura menor que a distância mínima indicando o fim desta parede, então o processo se repete.

---------------------------------------------------------------

3 Resultados e Discussão

Realizando testes e aperfeiçoando o código em uso no robô, os resultados foram variados requerendo diversas alterações na montagem do robô e alterações no código, e um fator que dificultou a execução do trabalho, foi a imprecisão dos sensores ultrassom, que em vários casos falham em realizar leituras precisas, e com a utilização da biblioteca NewPing, em ambientes abertos se torna inviável a utilização da uma distância máxima de leitura.

Com a criação do ambiente controlado, no qual foi utilizado um labirinto e método anteriormente planejado foi perfeitamente viável e não houve problemas no funcionamento do robô.

O código foi aprimorado para um sistema de estados, fazendo uso do switch() foi possível organizar e otimizar o código com maior facilidade, todas as ações que envolvem leitura de sensores e acionamento dos motores foram transferidas para funções.

Software do robô

void loop()

{

leitura();

switch (estado)

{

case 1: //perdido

if (sfrente > dist_min)

{

va_frente();

}

else

{

estado = 2; //estado vai para obstrução em caso de codigo completo, ou parede a esquerda

}

break;

/*

case 2: //obstrução

if (sdireita > sesquerda && sdireita > dist_max)

{ //se caminho a direita maior que caminho a esquerda ir para a direita

estado = 3; //vai para parede a esquerda

}

else if (sesquerda > sdireita && sesquerda > dist_max)

{ //se caminho a esquerda maior que caminho a direita ir para a equerda

estado = 4;

}else{

vira_direita();

}

*/

break;

case 2: //parede a esquerda

vira_direita();

segue_esquerda();

if (sfrente

{

estado = 2;// estado vai para obstrução, caso desejar ambos os meios de acompanhar a parede baseado na maior distância disponível.

}

break;

/* nao em uso, faz o robô seguir por um sentido contrario.

case 4: //parede a direita

vira_esquerda();

segue_direita();

if (sfrente

{

estado = 2;// estado vai para obstrução

}

break;

*/

default:

estado = 1; //estado padrão será perdido.

break;

}

/* primeiro código utilizado.

if (sfrente > dist_min)

{

va_frente();

} else

{

vira_direita();

segue_esquerda();

}

*/

}

As funções e o setup não estão presentes, apenas o loop principal.

---------------------------------------------------------------

4 Conclusão

O desenvolvimento de um robô capaz de se locomover de forma autônoma é um processo simples dentro de um ambiente controlado, quando este ambiente não é controlado, diversos objetos até mesmo a perna de uma cadeira, se torna um grande problema para ser detectado pelos sensores, que se demonstraram a maior limitação imposta a locomoção do robô, através da elaboração de uma estratégia viável e a criação de uma máquina de estados, o processo é bem simples e não requer muita tentativa e erro.

...

Baixar como  txt (8.4 Kb)   pdf (56.1 Kb)   docx (16.8 Kb)  
Continuar por mais 4 páginas »
Disponível apenas no Essays.club