Projeto AGV - Seguidor de Linha




LABSIS

2024


Autores:


Paulo Alexandre Guimarães Moutinho (Nº 1171536)

1171536@isep.ipp.pt


Tiago Manuel Guimarães Moutinho (Nº 1191372)

1191372@isep.ipp.pt


Introdução

Arquitetura

Hardware

Software

Resultados

Conclusões

Referências






  • Introdução

Início

Objetivo


Como projeto, para a cadeira de Laboratório de Sistemas disponível no curso de Licenciatura em Engenharia Eletrotécnica e de Computadores fornecido pelo ISEP – Instituto Superior de Engenharia do Porto, propusemos o desenvolvimento de um de um veículo autónomo ou AVG (Automatic Guided Vehicle). Atualmente este tipo de veículos tem usos e aplicações diversificadas tanto no mercado de trabalho como também para meios educativos. Um exemplo de uso de um AVG no mercado de trabalho, por exemplo o seguidor de linha, seria o transporte consecutivo e automático do transporte de equipamentos e materiais dentro de ambientes industriais, outro exemplo seria o transporte de pessoas com capacidades motoras limitadas dentro de instituições medicas. Tal veículo é possível através do uso de diversos equipamentos elétricos, como o uso de diversos sensores, os quais convertem valores obtidos fisicamente em valores digitais, a serem processados pelo microcontrolador escolhido. Através do uso de sensores Infravermelho, um Módulo Sonar e um módulo Bluetooth, pretende-se desenvolver o AVG seguidor de linha, que tem capacidade de detetar objetos no seu campo de visão frontal, como também permitindo a um utilizador trocar o AVG para um modo manual através do uso de uma app desenvolvida para interagir com o veículo.

Estado de arte

Sensores óticos – Infravermelho


Dispositivos capazes de converter a reflexão de um sinal infravermelho, numa superfície, num valor digital ou analógico, dependido do sensor escolhido. Através de tal reflexão o sensor irá fornecer diferentes valores numéricos variados entre 0 e 1023, no caso de uso da versão analógica, no caso de uma versão digital, o mesmo irá fornecer valores de 0 e 1. Através deste meio de deteção é possível desenvolver um código para um seguidor linha, sendo, através de qualquer um dos métodos escolhido, os sensores irão fornecer diferentes valores para diferentes meios. No entanto informação externa pode afetar o resultado dos valores fornecidos, sendo um exemplo do mesmo a reflexão de luzes externas presentes no ambiente.




Módulo. Sonar


Equipamentos capazes de enviar e receber ondas ultrassónicas, as quais são refletidas por qualquer tipo de superfície. Este modulo, através do uso de um microcontrolador, consegues enviar uma onda ultrassónica e receber tal onda, quando a mesma e refletida num objeto, permitindo assim obter uma distância através do cálculo do tempo em que o sinal foi enviado e o tempo em que o sinal foi recebido. No entanto os seus valores podem ser inconsistentes devido ao ambiente em que o mesmo se localiza e a direção a que o sensor envia as ondas, sendo a melhor situação neste caso o objeto localizar-se diretamente em frente ao objeto que é pretendido detetar.



  • Arquitetura

Início

É se pretendido que o carro seja controlado através do uso da aplicação mencionada, usando o modulo Bluetooth para receber os dados e processa-los, podendo ele trabalhar em três modos de funcionamento, desligado, automático e manual. No modo automático pretende-se que o veículo seja capaz de seguir uma linha preta num relevo branco, através do uso de 3 sensores IR sendo que, quando o mesmo deteta um objeto a uma certa distancia o mesmo irá imitir um sinal sonoro através de um buzzer, sinalizando que existe uma obstrução no caminho a percorrer, parando imediatamente e retornando ao seu funcionamento normal quando a mesma e removida. No modo manual, o utilizador é apresentado na aplicação o controlo de direções do mesmo, sendo possível ao carro utilizar as 4 possíveis direções, no entanto, como no modo anterior, quando este deteta uma obstrução na sua frente, apenas a possibilidade de efetuar uma marcha reversa é possível até que a distancia da obstrução seja maior do que a entendida. Na seguinte figura é apresentado o funcionamento do sistema do projeto num diagrama de blocos.



  • Hardware

Início

Microcontrolador


Para este projeto decidiu-se utilizar o Atmega328P, o qual foi recomendado pelos professores no início do semestre. Este mesmo controlador, um microcontrolador de 8 bits, o qual decidimos utilizar a uma frequência de 16MHz, tem como funcionalidade correr o código desenvolvido para este projeto, processando os dados recebidos pelos diversos módulos e sensores.


Motores DC


Para movimentação do carro utilizou-se dois motores DC com tensão variável de 3V-6V, e uma roda libre, permitindo assim a utilização de apenas dois motores.


Driver de Motor L293D


Escolheu-se este driver com o intuito de controlar bidireccionalmente ambos motores DC, e verificou-se que este driver tinha as capacidades necessárias para tal, podendo fornecer aos motores uma tensão variável de 4.5V a 36V e também como ser capaz de fornecer 600mA a ambos, tendo um pico de 1.2ª, por canal. Para se poder controlar a velocidade de ambos os motores, usando os pinos de enable deste driver, utilizou-se, o timer0 em modo fast PWM.


Fonte de Alimentação


Para alimentar o circuito e os motores, escolheu-se uma pilha recarregável de 9V e 650mA de lito-ion, a qual fornece uma fixa de tensão de entre 6V e 8.4V dependendo da sua carga no momento de utilização.


Regulador de Tensão


No entanto verificou-se necessário a implementação de um limitador de tensão para se poder alimentar o circuito inteiro, expecto os motores, os quais necessitam de um nível de tensão superior para um bom funcionamento, tendo sido escolhido um LM7805, o qual ira limitar a tensão fornecida pela bateria para uns 5V e 1A estáveis, enquanto a pilha fornecer uma tensão >= a 7V. Seguindo as indicações do fabricante, para um bom funcionamento do regulador é necessário a implementação de dois condensadores, um na entrada de tensão e outro na saída de tensão.


Modulo Bluetooth HC-05


Para poder existir comunicação entre o microcontrolador e a aplicação desenvolvida, decidiu-se implementar o modulo Bluetooth, o qual ira permitir uma ligação entre o micro e a aplicação a uma distância, com um máximo, de 10m.


Sensor IR (TCRT5000)


Quando alimentado, a uma tensão de 5V, este sensor, em modo analógico, consegue enviar valores de 0 a 1023 ao microcontrolador, dependendo do relevo em que esta a efetuar a leitura, mas neste caso os valores desmontados serão baixos quando o mesmo se verifica a ler a cor preta e altos quando verifica a cor branca, sendo esta leitura efetuada através da receção de sinais infravermelhos emitidos pelo próprio sensor e a refletividade da superfície a ler, assim através desta logica pode-se desenvolver o código necessário para efetuar a alteração de direção de ambos os motores, tendo sido utilizado neste projeto três destes sensores.


Modulo. Ultrassónico (HY-SRF05)


Este modulo, através do pino trigger, quando este recebe um sinal de nível logico alto do microcontrolador, consegue emitir uma onda ultrassónica, a qual, quando refletida por uma superfície, é detetada pelo recetor, efetuando um envio sinal de nível logico alto no pino do echo, no início de deteção da onda, ate a mesma acabar, envio assim o sinal de nível baixo. Este modulo consegue efetuar leituras num intervalo de 2 a 450cm.


Diversos LED’s


Para este projeto decidiu-se implementar diversos leds para o utilizador conseguir verificar diversos estados do projeto durante o seu funcionamento, sendo eles a seguinte lista:

• 1.Led vermelho para indicação de que a alimentação está a percorrer o circuito;
• 2 Led’s transparentes, um para indicação de funcionamento do projeto, o qual irá estar constantemente a piscar a 1 segundo para demonstrar o seu trabalho e um led extra para futuras aplicações.
• 1 Led verde para verificação de transmissão do código para o microcontrolador, através do usbasp
• 1 Led RGB, o qual demonstra diversas cores, dependendo do seu modo de funcionamento, podendo, através da mistura de inputs, gerar mais cores do que as 3 básicas se necessário, tomando em conta que ao somar mais que um inputs, irá também aumentar a corrente a passar pelo led, podendo assim danifica-lo.


Esquema Elétrico


O seguinte esquema corresponde a todas as ligações presentes no circuito, tendo em atenção que quando se pretende programar o microcontrolador, é necessário remover as ligações do led RGB, e o contrário também se verifica necessário quando não se estiver a programar o micro.


Placa PCB


O seguinte esquema demonstra a criação de uma placa PCB para implementação do nosso AVG, no entanto não são necessárias todas as ligações presentes no esquema elétrico, como por exemplo o usbasp é desnecessário la no PCB, como também o led verde de demonstração de programação.


  • Software

Início

App Bluetooth


Para controlo do veículo desenvolveu-se a seguinte aplicação usando o MIT APP inventor, dentro do qual pode-se verificar os botões para trocar de modo o veículo, como também as setas de direção.

Defines e variáveis Globais


Para facilitar a escrita e perceção do funcionamento do código decidiu-se definir os pinos utilizados através do respetivo nome do objeto real ao qual o mesmo estará conectado, como também diversas variáveis em que o objetivo são alterar valores em diversas partes do código ou funcionamento do mesmo, como por exemplo a flag do modo de funcionamento.

Inicializações


Nesta parte do código são definidos os pinos a considerar entrada ou saída de dados, os estados iniciais de diversas variáveis e pinos definidos como saídas e também as diversas inicializações utilizadas para implementação dos respetivos timers e utilização em modo ADC de certos pinos.

Estados Inicias e Inicializações

Timers


Como é possível identificar na imagem anterior, o TIMER0 foi desenvolvido para controlar a velocidade dos ambos os motores dc, alterando o valor dentro do respetivo OCR para cada um, o TIMER2 foi desenvolvido com o intuito de identificar possíveis paragens no software, devido a qualquer possível erro no código, logo verificando se está tudo a funcionar corretamente, caso o respetivo led associado a porta para de piscar é necessário efetuar um reset ao carro. Também é possível identificar uma variável com o nome de Fator_Escala, a qual tem como função prolongar o tempo de contagem do timer para o mesmo conseguir efetuar a forma de onda de 1Hz certos.

ADMUX


Para uma leitura superior dos sensores IR decidiu-se utiliza-los como modo analógico podendo oferecer leituras numa gama de 0-1023, e para efetuar tais leituras verificou-se necessário a implementação de leituras através do ADMUX, como tal efetuaram-se as seguintes inicializações para o ADMUX, e definindo um prescaler de 8 reduzir a frequência para 2MHz.

USART


Para se poder efetuar comunicações entre a aplicação androide e modulo Bluetooth associado ao microcontrolador, foi necessário criar as inicializações para uso da USART, como tal decidimos seguir os exemplos presentes no datasheet, desenvolvendo a seguinte inicialização.

Interrupções


Utilizando as seguintes interrupções, é possível controlar o carro em momentos diferentes do seu trabalho, como mencionado anteriormente, a demonstração de funcionamento do carro através do led que pisca.


A seguinte interrupção permite ao utilizador utilizar a app previamente mencionada, para controlar o carro, através da receção de diversos caracteres, os quais irão modificar o valor da flag associada ao mesmo, alterando o modo de funcionamento do veículo.

Função ler_sensor_linha()


Este trecho de código tem como funcionalidade, ligar o respetivo sensor IR a ler e processar os seus dados, de maneira a transformar uma gama de valores para 0 ou 1, e guardando tal valor numa respetiva posição dentro do array ‘valores_sensores', permitindo a sua fácil distinção entre o preto e branco para permitir ao carro seguir a linha e acionar os respetivos motores, através da logica desenvolvida.

Função Distancia_Ultrasonico()


Esta função tem como finalidade ativar o pino do trigger, no modulo ultrassónico, para enviar a onda ultrassónica, a qual será recebida pelo recetor presente no modulo, fornecendo assim na receção um estado de alto no pino, e no fim da receção da onda uma transição de alto para baixo, podendo através de código usar essa logica para calcular o valor da distância percorrida pela onda e consequentemente a distância entre o sensor e um objeto. Numa fase inicial pretendeu-se utilizar a interrupção de input capture do atmega328p, mas devido a diversas tentativas falhadas de implementação do mesmo, decidiu-se tomar uma abordagem similar ao input capture usando o estado dos pinos sem essa interrupção usando ciclos de while usando o estado do pino do echo. Também se viu necessário ligar, recetar e desligar, o timer1 dentro deste trecho devido a várias tentativas falhadas de implementação do mesmo, sempre ativo. Mesmo com estes problemas achamos que chegamos a solução satisfatória.

Função main()


Finalmente neste trecho de código, o qual terá o controlo total sobre o modo de funcionamento de AVG, pode-se verificar a implementação de todas as flags previamente criadas, e o código de controlo dos motores, correspondente a cada flag/logica.





  • Resultados

Início


No video abaixo pode-se identificar que carro sofreu duas paragens, sendo elas defeito da pista. E o problema na terceira curva de 90º graus efeitua-se devido problema de codigo devido a fato a lógica ser no momento em que os três sensores estão no branco ela ajusta o carro a direita nesta situação ele devia ajustar a esquerda.



Neste video pode-se verificar o mesmo carro a funcionar de forma manual utilizando a aplicações desenvolvida no mit app inventor.



  • Conclusões

Início

Como reflexão final, pode-se afirmar que os objetivos propostos no início do projeto foram, pela maior parte cumpridos, e sentimo-nos satisfeitos com o resultado, no entanto, sabemos que existem ainda melhorias que podem ser implementadas e que trariam maior valor ao trabalho.

Ao logo do seu desenvolvimento tivemos algumas dificuldades com o sensor ultrassónico, no entanto achamos que a solução que arranjamos satisfatória, apesar de ser possível melhorá-la.

Um problema, que não conseguimos resolver no entanto foi o da roda direita, ter um rpm maior que o da esquerda, como é possível identificar pelo vídeo, tentamos diversas maneira de resolver este problema, como usar diferentes motores, mudar o driver ponte H para o L298, no entanto verificou-se o mesmo resultado, voltando assim ao driver inicial, alteração do valor do OCR respetivo ao motor direito como também a alteração da fonte de alimentação para uma de 3A, no entanto sem solução decidiu-se voltar a fonte de alimentação anterior, mas como o nosso objetivo inicial era criar um seguidor, este problema no rpm, não era muito significativo, devido ao facto do carro ajeitar a sua trajetória automaticamente, tendo em conta, que devido ao facto do veiculo ter uma roda traseira livre esta também afeta a trajetória no momento do impulso do mesmo.

A nível de software, tentou-se criar um código limpo e de fácil perceção, dividindo as tarefas, de cada modulo/sensor, a serem executadas por funções, e comentando o código. Decidiu-se também trabalhar a 16MHz com o microcontrolador no sentido de agilizar e tornar as leituras mais rápidas, permitindo uma maior fluidez de ações.

  • Referências

Início

[1] Atmega328P Datasheethttps://ww1.microchip.com/downloads/aemDocuments/documents/MCU08/ProductDocuments/DataSheets/ATmega48A-PA-88A-PA-168A-PA-328-P-DS-DS40002061B.pdf

[2] HY-SRF05 Datasheethttps://www.micros.com.pl/mediaserver/M_HY-SRF05_0003.pdf

[3] Modulo TCRT5000https://www.ptrobotics.com/sensores-opticos/7209-tcrt5000-infrared-reflective-sensor-module.html

[4] HC-05 Modulo Bluetoothhttps://www.electronica60norte.com/mwfls/pdf/newBluetooth.pdf

[5] LM7805 Datasheethttps://www.sparkfun.com/datasheets/Components/LM7805.pdf

[6] Bateria Recarregávelhttps://enegonelectronics.com/products/enegon-9v-direct-usb-rechargeable-lithium-ion-650mah-batteries-with-2-in-1-micro-usb-cable-for-wireless-microphone

[7] L293D Datasheethttps://www.ti.com/lit/ds/symlink/l293.pdf?HQS=TI-null-null-alldatasheets-df-pf-SEP-wwe&ts=1704530274167&ref_url=https%253A%252F%252Fwww.alldatasheet.com%252F

[8] DC Motor 3-6Vhttps://www.ptrobotics.com/motor-dc-com-engrenagens/6277-right-angle-geared-hobby-motor.html


Início