|
|
|
2024
|
|||||||||
|
Autores: |
|||||||||||
|
|
Rui Castro Graça (1201202) |
1201202@isep.ipp.pt |
|||||||||
|
|
Maria João da Silva Castro (1211181) |
1211181@isep.ipp.pt
|
|||||||||
|
|
|||||||||||
|
|
|||||||||||
|
Nesta unidade curricular de Laboratório de Sistemnas, do 3 ano no 1 semestre da Licenciatura em Engenharia Eletrotécnica e de Computadores, foi-nos proposto a realização de um projeto implementando um protótipo funcional. O projeto proposto foi o AGV (Automated Guided Vehicle) seguidor de linha. O principal objetivo deste projeto é conceber e implementar um veículo robótico capaz de se locomover de forma autônoma ao longo de trajetos predefinidos por linhas no solo. Utilizando sensores e algoritmos, o veículo será capaz de seguir com precisão as linhas, realizando manobras eficientes e seguras. Neste projeto foi implementado um circuito com microcontrolador (Atmega328p), que controla motores DC através de uma ponte H (L298N), sonar (HC-SR04) uma tensão de 7,6 Volts, sensores de linha (TCRT5000) e um led que pisca a 1 Hz. Deste modo conseguimos que o nosso veículo conseguisse seguir uma linha.
Estado de arteOs AGVs são veículos industriais que operam de forma autônoma para transportar materiais dentro de uma instalação, como uma fábrica, armazém ou centro de distribuição. Esses veículos são equipados com sistemas de navegação e sensores que lhes permitem movimentar de forma autônoma, sem a necessidade de um operador humano. Os AGVs podem ser utilizados para diversas tarefas, como transporte de materiais, distribuição de produtos, e outras atividades. Eles ajudam a otimizar os processos de movimentação de materiais em ambientes industriais, aumentando a eficiência e reduzindo a necessidade de mão de obra para tarefas repetitivas de transporte. AGVs Seguidores de linhaSeguidores de linha com infravermelhos são dispositivos robóticos projetados para seguir uma linha preta ou outra marcação numa superfície. Esses sensores são colocados na parte inferior do robô e detetam a diferença no contraste entre a linha e o fundo, permitindo que o robô ajuste o seu percurso para permanecer na trajetória desejada. O princípio básico envolve a interpretação dos dados dos sensores para fazer ajustes na direção e velocidade do robô, mantendo-o alinhado com a linha pré-determinada. Estes sistemas são utilizados em competições de robótica, atividades educacionais e protótipos para demonstrar princípios de automação e controlo.
Figura 1: AGV seguidor de linha AGVs que se desviam de obstáculosAGVs com capacidade de desvio de obstáculos são veículos autônomos equipados com sensores avançados que detetam a presença de obstáculos no seu percurso. Esses sensores, permitem que o AGV tome decisões em tempo real para contornar obstáculos, garantindo uma navegação segura e eficiente. Esta tecnologia é especialmente valiosa em ambientes industriais dinâmicos, onde as condições do ambiente podem mudar, permitindo que os AGVs operem de forma autônoma e evitem colisões.
Figura 2: AGV que desvia de obstáculos
|
|||||||||||
|
Na arquitetura do nosso projeto temos, como base principal, o microcontrolador Atmega328P, pois todas as medidas e as ações a serem executadas “passam” por ele. O circuito é alimentado através de 2 pilhas, com um valor de tensão de 7,6 Volts, que estão a alimentar diretamente a ponte H, e para a alimentação do resto do circuito, foi utilizada um regulador de tensão l7805, para obter uma tensão de 5 Volts. O programa lê o valor de cada um dos sensores, e a distância medida pelo sonar e, a partir destes valores, vai ajustar o valor de PWM enviado para o L298N. Na figura abaixo está representado o diagrama de blocos do sistema.
Figura 3: Diagrama de blocos
|
|||||||||||
|
Microcontrolador (Atmega328P)No projeto foi utilizado o atmega328p, um microcontrolador da família AVR, pois contém as capacidades necessárias para a elaboração do trabalho, nomeadamente timers/counters, pinos para conversão ADC, vetores de interrupção externa, e pinos com saída de tensão em PWM.
Figura 4: ATmega328P Motores DC e rodasForam utilizados 2 motores DC, um associado a cada roda, para conseguir controlar independentemente a velocidade das rodas através de sinal PWM gerado pelo microcontrolador. Se estiver aplicado uma queda de tensão maior numa das rodas, vai fazer com que esta rode mais depressa em relação à outra roda, e assim o veículo consegue realizar curvas.
Figura 5: Motores DC e rodas Ponte H (L298N)A ponte H utilizada foi a ponte L298N, que é essencial para o movimento dos motores DC, pois conseguimos obter tensões e correntes superiores às que podem ser obtidas diretamente de um pino do atmega, e assim temos potência suficiente para arrancar os motores. Foram utilizadas 4 entradas para o sentido da rotação das rodas, 4 para as ligações dos motores, 2 para o sinal em PWM, 1 para a tensão do microcontrolador, 1 para a tensão nominal de funcionamento dos motores (7,6 V) e 1 entrada ligada à massa.
Figura 6: L298N Pilhas (18650)Para a alimentação do circuito, são utilizadas 2 pilhas 18650 em série, para obter uma tensão de saída de aproximadamente 7,6 Volts. Foram utilizadas estas pilhas devido à sua longa duração.
Figura 7: Pilhas 18650 Regulador de tensão (L7805)O Driver é alimentado a uma tensão de 7,6 Volts, mas os restantes componentes apenas necessitam de 5 Volts de alimentação. Para obter um valor de tensão de 5 Volts sem a necessidade de implementar mais um conjunto de pilhas, foi utilizado o regulador de tensão L7805. Este componente contém 3 pinos, um de entrada (pilhas), um de saída (5 Volts) e um para a massa.
Figura 8: L7805 Sensor seguidor de linha (TCRT5000)Os sensores de linha utilizados foram Tcrt5000, colocados na frente do veículo de modo a verificar se existe linha. Este é um modulo de sensor infravermelho que inclui um emissor infravermelho e um coletor, o emissor vai emitir luz infravermelha, e o coletor deteta a luz refletida, e, em função da quantidade de luz que é recebida, vai fazer variar a queda de tensão no seu pino analógico. Esta queda de tensão é lida pelo microcontrolador, que vai fazer variar a velocidade de rotação das rodas conforme os valores obtidos pelos 5 sensores.
Figura 9: TCRT5000 Sonar (HC-SR04)Para evitar a colisão com obstáculos, foi utilizado o sonar HC-SR04, que é capaz de detetar a distância de um obstáculo à sua frente. Este componente recebe um sinal de 10 microssegundos no pino trigger, que vai fazer imitir um sinal que ativa o estado do pino echo e, ao ser recebido, irá desligar o pino echo. Sabendo o tempo de receção do sinal e a constante da velocidade do som, podemos calcular a distância do obstáculo.
Figura 10: HC-SR04
|
|||||||||||
|
Bibliotecas e variáveis
Figura 11: Código biblioteca e variáveis Aqui são incluidas as bibliotecas necessárias ao funcionamento do programa, e definidas as variáveis a ser utilizadas ao longo do código, tal como valores de medidas de sensores e valores de PWM predefinidos. Inicializacoes()
Figura 12: Função Inicializações
Figura 13: Fluxograma Inicializações Antes do programa entrar no ciclo infinito, é chamada a função inicializações, onde foi configurado o porto C como entradas para as medições dos 5 sensores. Foi utilizado este porto pois tem capacidade de realizar conversões de sinal analógico, em tensão, para digital, valores que podem variar de 0 a 255 (8 bits). Também é configurado o Porto D para saídas dos 4 pinos de controlo do sentido dos motores, e para os 2 pinos com capacidade de gerar PWM (PD5 e PD6). O pino PB2 está ligado ao led que pisca a 1 Hz. De seguida é configurado o timer0 associado ao led para este piscar a 1 Hz, e o timer2, associado aos sinais PWM responsáveis pelas ligações dos motores DC Por fim, é configurado a conversão analógico para digital, e ativada as interrupções globais. ISR(TIMER2_COMPA_vect)
Figura 14: Função Interrupção
Figura 15: Fluxograma Interrupção A Funcão de interrupção está a funcionar “em paralelo” com o programa, e será executada de 5 em 5 milissegundos, incrementando o valor do contador sempre que esta é executada. Quando o valor do contador for igual a 100, terá passado meio segundo, e assim inverte o estado do pino associado ao led, e de seguida é ajustado o valor do contador para 0 para continuar o ciclo infinito. Sensores()
Figura 16: Função Sensores
Figura 17: Fluxogramas Sensores Nesta função é realizada a leitura dos valores obtidos pelos sensores. Começamos pelo valor obtido no pino PC0, em que é colocado a 1 o bit ADSC, inicializando assim a conversão ADC (analógico para digital). Depois de terminada, o valor dos 8 bits mais significativos da conversão é guardado numa variável, e de seguida é ajustado o valor de admux, variando os bits fazendo corresponder à entrada do próximo sensor. Este código é aplicado para cada um dos sensores. Sonar()
Figura 18: Função Sonar
Figura 19: Fluxograma Sonar Quando a função fluxograma é chamada, esta vai emitir um sinal de 10 microssegundos no pino do trigger, e posteriormente irá inicializar a contagem no temporizador até o pino do echo ficar a 0, e assim o programa através do registo TCNT1 e a constante da velocidade do som, irá calcular a distancia medida pelo sonar. Main()
Figura 20: Função Main
Figura 21: Fluxograma Main Main Na função principal, são chamadas as funções leitura e sonar, e, de acordo com os valores obtidos nestas funções, ajusta o tamanho do pulso PWM. No caso da distância medida pelo sonar for inferior a 20 centímetros, o veículo para, se for maior, continua o seu percurso. Depois de obtidos os valores dos sensores convertidos para digital, verificamos o valor de cada um, podendo variar de 0 a 255, em que valores maiores que 120 são considerados preto.
Figura 22: Estados de leitura dos sensores Os 2 sensores das pontas foram implementados para detetar curvas mais acentuadas que poderiam não ser detetáveis apenas com os 3 sensores. Estes sensores só afetam o PWM no caso de os 3 sensores do meio detetarem branco (menor que 120). Nestes casos, se um dos sensores dos extremos detetar linha, é ajustado para retornar à linha. Se for detetado linha em ambos os sensores das extremidades, ele desliga o PWM. Os 3 sensores do meio são os principais, ajustando o PWM dos motores conforme os valores obtidos na função leitura. Por exemplo, no caso 2 da figura x, é aplicado ao motor do lado direito um valor de PWM maior, para assim corrigir a linha suavemente. Se, por exemplo, no caso 3 da figura x, significa que a curva é mais acentuada, e assim é desligado o motor da esquerda e atribuído o valor máximo de PWM ao motor da direita. Esquema elétrico
Figura 23: Esquema elétrico Na figura 23 está representado o esquema elétrico do projeto. Placa PCB
Figura 24: Placa PCB Na figura 24, está representada uma implementação do trabalho numa placa PCB.
|
|||||||||||
|
|
|||||||||||
|
Para concluir, o veículo autónomo implementado é capaz de detetar a linha e de a seguir, conseguindo, através de sensores de linha, ajustar o PWM associado aos motores de modo a realizar curvas ligeiras e acentuadas, com algumas limitações de largura de linha, e possui um led a piscar a uma frequência de 1 Hz. Com esta funcionalidade, o veículo autônomo demonstra um desempenho robusto e versátil em ambientes controlados, representando uma conquista notável no campo da programação embarcada e controle de robôs autônomos. Idealmente, o veículo seria capaz de parar se for detetado um obstáculo a menos de 10 centímetros da frente do veículo. Com a realização deste projeto conseguimos alcançar um avanço notável na compreensão e aplicação de conceitos fundamentais de programação em C. Uma das dificuldades na elaboração do AGV foi a presença de curvas de 90 graus na pista, e para isso foram implementados os dois sensores das pontas.
|
|||||||||||
|
[1] Moodle ISEP [3] L298N Datasheet [5] L7805 Datasheet [7] Led Datasheet |
|||||||||||
|
|
|||||||||||