|
|
2017 / 2018
|
|||||||||
Autores: |
|||||||||||
|
José Silva (Nº 1110523) |
1110523@isep.ipp.pt |
|||||||||
|
Daniel Vaz (Nº 1140860) |
1140860@isep.ipp.pt
|
|||||||||
|
|||||||||||
![]()
Fig. 1 - Braço Robótico
|
|||||||||||
No âmbito da Unidade Curricular de LABSI desenvolvemos um projeto o qual denominamos Braço Robótico.
Trata-se de um dispositivo que tem a capacidade de actuar automaticamente realizando as funções que lhe forem confinadas.
No caso do nosso projeto, quando se coloca o braço robótico em funcionamente, este procura a posição inicial para depois começar todo o processo. O movimento dos quatro eixos do braço robótico é conseguido através de motores de passo a passo Nema 23 de 2.8 Amperes. Para ser possível controlar este tipo de motores, foram usados drivers com a referência DRV8825 [4] e A4988 [5] que necessitam apenas de dois sinais de comando - um para definir o sentido de rotação e outro para marcar o passo a efetuar. O controlo de todo este sistema foi conseguido através do microcontrolador ATmega2560 [6] que se encontra instalado numa plataforma Arduino Mega. Este tipo de sistema automático pode ser encontrado na Indústria executando funções de pintura, fundição, soldagem, montagem, movimentação de cargas, inspeção de produtos, tudo realizado com uma precisão, velocidade e robustez relativamente elevadas. Outra grande aplicação deste tipo de robot é na área da medicina, aplicado principalmente em cirurgias médicas onde é necessário um grande cuidado e precisão como operações de risco ao coração e intervenções mais delicadas ao nível da visão [7].
|
|||||||||||
![]()
Fig. 2 - Diagrama de Blocos No diagrama de blocos acima é possível observar a arquitetura do nosso projeto.
Começando pelos drivers de potência que controlam os motores de passo, estes necessitam de duas alimentações, uma de 5V para comando e outra de 12V - 48V para potência. Outro motor utilizado é um motor servo que é responsável pela abertura e fecho da garra. Este motor é alimentado a 5V e é controlado por um sinal PWM que controla a abertura da garra conforme o valor da largura de impulso.
Outro periférico utilizado é o sensor HCSR-04 que é um sonar. Este sensor necessita de um sinal de Trigger para iniciar a medição de distância.
Outro sensor utilizado é o TCS-230 que é responsável por reconhecer cores do espetro visível.
Por fim, utilizamos switchs limitadores de fim de curso para permitir colocar o braço robótico na sua posição inicial.
|
|||||||||||
O atuador mais importante deste projeto é o motor de passo. Trata-se de um motor Nema 23 bifásico de 2.8 A. Neste projeto foram utilizados 4 motores deste tipo e um outro motor de passo Nema 17 de 1 A.
![]()
Fig. 3 - Motor de passo Nema 23 Outro motor utilizado foi o motor servo MG995 responsável pela abertura e fecho da garra.
![]()
Fig. 4 - Motor Servo MG995 Para fazer o controlo e acionamento dos motores de passo foram utilizados drivers de potência. O DRV8825 é um driver que permite na sua saída correntes até 2.5 A e por isso são utilizados no controlo dos motores Nema 23.
![]()
Fig. 5 - Driver DRV8825 O driver A4988 permite na sua saída correntes até 1.5 A e por isso é utilizado para controlar o motor Nema 17.
![]()
Fig. 6 - Driver A4988 Quanto aos sensores utilizados no projeto, o HCSR-04 é um sonar responsável por fazer a deteção e medição de um obstáculo durante o scan do braço. Este sensor apresenta um emissor que emite sinais ultra sónicos que são refletidos e detetados pelo receptor.
![]()
Fig.7 - Sensor HCSR-04 (Sonar) O sensor TCS-230 é um sensor capaz de reconhecer cores do espetro visível. É utilizado para detetar a cor da peça que a garra transporta. Este possui no seu centro três fotodíodos sensíveis ás cores vermelho, verde e azul (RGB) e gera um sinal variável em frequência para cada cor detetada.
![]()
Fig. 8 - Sensor TCS-230 Outro componente utilizado e também considerado sensor é o switch limitador de fim de curso. Neste projeto são utilizados quatro limitadores para permitir deslocar o braço robótico para a posição inicial.
![]()
Fig. 9 - Sensor limitador de curso Para permitir o controlo de todo este sistema foi utilizado o Microcontrolador ATmega2560 instalado na plataforma Arduino Mega.
![]()
Fig. 10 - Arduino Mega O esquemático do nosso circuito eletrónico encontra-se na figura abaixo.
![]()
Fig. 11 - Esquemático do projeto As tentativas de PCBs são mostradas agora nas imagens abaixo.
![]()
Fig. 11 - Placa PCB
![]()
Fig. 12 - Placa PCB
![]()
Fig. 13 - Placa PCB
![]()
Fig. 14 - Placa PCB Esta é a nossa placa PCB que comcebemos. ![]()
Fig. 15 - Placa PCB criada
![]()
Fig. 16 - Placa PCB criada
|
|||||||||||
O nosso projeto é programado num modo sequencial sendo que o programa vai avançando efetuando as várias funções sequencialmente. São agora apresentados os vários fluxogramas correspondentes às diferentes funções criadas. O primeiro fluxograma mostra o ciclo principal da função Main.
![]()
Fig. 17 - Fluxograma da função Main A função init() é responsável pela configuração do hardware. Aqui são programados os vários periféricos presentes no microcontrolador que foram utilizados.
No Porto A configurou-se os pinos PA0, PA1, PA2 e PA3 como saídas para controlo do sensor de cores.
Configurou-se o TIMER 1 para efetuar a contagem da largura de impulso detetadas nas interrupções externas INT0 e INT1 associadas ao sinal de echo do sonar e out do sensor de cores respetivamente. Foi habilitada a interrupção por overflow de modo a permitir a contagem de overflows existentes. Configuraram-se as interrupções externas INT0, INT1, INT2, INT3, INT4 e INT5 de modo a gerarem interrupções quando detetado o flanco ascendente. As interrupções INT0 e INT1 são habilitadas quando é necessário obter algum valor medido pelo sonar e pelo sensor de cores respetivamente. As restantes interrupções são utilizadas para detetar as posições iniciais de cada eixo através de limitadores fim de curso. A função roda_eixo_base(int passos) recebe uma variável com o número de passos a serem efetuados pelo motor do eixo da base e faz o motor rodar 1 passo na direção pretendida.
![]()
Fig. 18 - Fluxograma da função roda_eixo_base A função roda_eixo_x(int passos) recebe uma variável com o número de passos a serem efetuados pelo motor do eixo X e faz o motor rodar 1 passo na direção pretendida.
![]()
Fig. 19 - Fluxograma da função roda_eixo_x A função roda_eixo_y(int passos) recebe uma variável com o número de passos a serem efetuados pelo motor do eixo Y e faz o motor rodar 1 passo na direção pretendida.
![]()
Fig. 20 - Fluxograma da função roda_eixo_y A função roda_eixo_z(int passos) recebe uma variável com o número de passos a serem efetuados pelo motor do eixo Z e faz o motor rodar 1 passo na direção pretendida.
![]()
Fig. 21 - Fluxograma da função roda_eixo_z A função reset_base_position() desloca o eixo da base para a posição inicial.
![]()
Fig. 22 - Fluxograma da função reset_base_position A função reset_braco_position() desloca os eixos X Y e Z para a posição inicial.
![]()
Fig. 23 - Fluxograma da função reset_braco_position A função scanner() ativa o sensor sonar e faz movimentar o eixo da base numa resolução de 180 graus até detetar algum obstáculo a menos de 500 mm. Caso o sonar detete algum obstáculo deve parar o movimento do braço. Se nada for detetado o braço irá movimentar-se até completar 180 graus no sentido positivo e iniciará o movimento no sentido negativo até ser detetado um novo obstáculo.
![]()
Fig. 24 - Fluxograma da função scanner A função agarrar_peca() desloca o braço na direção da peça de acordo com a medição efetuada pelo sensor sonar e faz a respetiva captação da peça fechando a garra.
![]()
Fig. 25 - Fluxograma da função agarrar_peca A função color_read() faz a leitura RGB da peça presa na garra.
![]()
Fig. 26 - Fluxograma da função color_read A função color_detect() é responsável por determinar a cor da peça conforme os valores lidos pelo sensor de cores.
![]()
Fig. 27 - Fluxograma da função color_detect A função color_decision() faz o reconhecimento de uma cor das 4 possíveis e desloca o eixo da base para a posição pretendida. Não faz controlo de erro de leitura da cor da peça.
![]()
Fig. 28 - Fluxograma da função color_decision A função transportar_peca() desloca a peça para o recipiente de cor correspondente. Se não tiver determinado uma cor das cores possíveis irá voltar a fazer uma nova leitura até um máximo de 5 leituras. Caso não encontre uma solução a peça é encaminhada para a posição inicial.
![]()
Fig. 29 - Fluxograma da função transportar_peca São agora apresentados os fluxogramas das rotinas de interrupção.
![]()
Fig. 30 - Fluxograma da rotina de interrupção do TIMER 2
![]()
Fig. 31 - Fluxograma da rotina de interrupção externa INT0
![]()
Fig. 32 - Fluxograma da rotina de interrupção externa INT1
![]()
Fig. 33 - Fluxogramas das rotinas de interrupção externas INT2, INT3, INT4 e INT5
|
|||||||||||
Apresentamos abaixo algumas fotografias do braço robótico desenhado no software Solid Works e protótipo real.
![]()
Fig. 34 - Vista lateral do braço (Solid Works)
![]()
Fig. 35 - Vista perfil do braço (Solid Works)
![]()
Fig. 36 - Vista de cima do braço (Solid Works)
![]()
Fig. 37 - Vista lateral do braço
![]()
Fig. 38 - Vista frontal do braço
![]()
Fig. 39 - Vista traseira do braço
![]()
Fig. 40 - Pormenor do eixo da base
![]()
Fig. 41 - Pormenor do eixo X
![]()
Fig. 42 - Pormenor do eixo Z e garra
![]()
Fig. 43 - Primeira tentativa de implementação do circuito eletrónico
|
|||||||||||
Com a realização deste projeto conseguimos principalmente adquirir mais conhecimentos sobre a programação de microcontroladores da família ATmega. Conseguimos também compreender o funcionamento de motores de passo a passo e o funcionamento dos motores servo o qual foi uma novidade para nós. Conseguimos ainda obter mais conhecimentos no que diz respeito ao funcionamento de sensores medidores de distâncias (sonar) e sensores de reconhecimento de cores. Como a construção do braço robótico passou por uma fase de desenho do protótipo, conseguimos também obter mais conhecimentos em relação ao desenho vetorial utilizando o Software SolidWorks. Em virtude de utilizarmos uma quantidade considerável de motores que implicam correntes elevadas, foi necessário criar uma placa PCB que contém todos os drivers de potência utilizados evitando assim danificar as placas de ensaio breadboard que estava inicialmente pensado utilizar. A placa PCB que construimos é uma placa perfurada de cobre com pontos individuais. Foi necessário criar as pistas com solda de estanho e fazer ligações através de fios elétricos pois apenas utilizamos uma superfície para criar pistas. Esta etapa do projeto ajudou-nos a ganhar mais experiência no processo de soldagem com estanho. Ainda outro aspeto, e não menos importante, foi algum conhecimento adquirido na área da mecânica. Infelizmente não tivemos possibilidade de utilizar engrenagens acopladas aos motores para diminuir o esforço destes. Isto levou a aplicar os motores acoplados diretamente aos veios dos vários eixos o que nos limitou muito na movimentação do braço. Apenas o eixo da base consegue realizar toda a resolução pretendida apesar de se fazer sentir alguma dificuldade ao vencer a inércia da estrutura pois esta acabou por ficar com um peso considerável. Queremos também deixar aqui salientado o facto de sermos trabalhadores/estudantes, que nos limitou um pouco no tempo necessário à criação deste projeto.
Apesar de todos os inconvenientes, consideramos que atingimos alguns dos objetivos propostos. No entanto, o protótipo não ficou funcional como tinhamos pensado na ideia inicial.
|
|||||||||||
[1] «Wikipédia - Robô industrial» disponível em https://pt.wikipedia.org/wiki/Robô_industrial
[2] Data Sheet do sensor HCSR-04 disponível em www.micropik.com/PDF/HCSR04.pdf
[3] Data Sheet do sensor TCS-230 disponível em www.w-r-e.de/robotik/data/opt/tcs230.pdf
[4] Informação detalhada sobre o driver DRV8825 disponível em https://www.pololu.com/product/2133
[5] Informação detalhada sobre o driver A4988 disponível em https://www.pololu.com/product/1182
[6] Informação detalhada sobre o microcontrolador ATmega 2560 disponível em https://www.microchip.com/wwwproducts/en/ATmega2560
[7] «Braço robótico é capaz de realizar sozinho cirurgias no coração e outros órgãos» disponível em https://www.uai.com.br/app/noticia/saude/2016/05/06/noticias-saude,190229/braco-robotico-e-capaz-de-realizar-sozinho-cirurgias-no-coracao-e-outr.shtml
|
|||||||||||
|