|
|
|
2023
|
|||||||||
|
Autores: |
|||||||||||
|
|
Alexandre Gonçalves Canas (Nº1211392) |
1211392@isep.ipp.pt |
|||||||||
|
|
Diogo Moreira Ferreira (Nº1211002) |
1211002@isep.ipp.pt
|
|||||||||
|
|
|||||||||||
|
|
|||||||||||
O grupo escolheu como tema a construção de um circuito capaz de ler um objeto de pequenas/médias dimensões e representá-lo num grafíco de 3 dimensões. Foi escolhido este tema, porque se enquadra com tecnologia relativamente recente, por apresentar uma certa dificuldade na sua pesquisa, para aprofundar os conhecimentos a nivel do movimento de motores e sensores e para consolidar matérias aprendidas do curso em questão. Atualmente, a procura por impressoras 3D com multiplas funções tem crescido em larga escala, esta causa deve se ao facto de os consumidores cada vez mais quererem uma maior autonomina na criação de peças perfeitas e precisas para implementar em trabahos cada vez mais minuciosos. Isto leva a uma grande demanda pelo produto, o que influencia nos preços de mercado. Ou seja, devido à grande procura os preços do mercado são muito elevados. Por este motivo, o grupo em questão desenvolveu a ideia de que teria que implementar um projeto para tais preocupações e mesmo pela pouca experiência, decidiu pesquisar, entender e criar um Scanner 3D, para compreender o mundo das impressões e analises em 3 dimensões, feitas por uma máquina.
Figura 1 - Nesta imagem está representado uma exemplo ilustrativo de um Scanner 3D [1] |
|||||||||||
|
|
|||||||||||
O Scanner 3D desenvolvido neste projeto tem como objetivos, que o sensor leia uma distância precisa, um motor passo a passo rode em torno de si em sentido anti-horário completando uma volta de 360 graus, esperando em cada volta um comando, outro motor passo a passo que rode 1 passo de cada vez sempre que recebe um comando ou que dê um número exato de passos de forma a ficar na possição original. Esta máquina tem como função ler e transmitir os dados obtidos automaticamente para um computador. Na seguinte figura é apresentado o funcionamento do sistema do projeto num diagrama de blocos. ![]() Figura 2 - Nesta imagem está representado o diagrama de blocos da arquitetura toda do projeto
Figura 3 - Nesta imagem está representado o esquema eletrico do projeto Altura maxima do objeto: 24cm Raio maximo do objeto: 5cm
Nota: Nas seguintes imagens temos as primeiras representações teorizadas do projeto, através de cálculos e medições. Nestas últimas imagens é possivel visualizar todas as dimensões e cálculos utilizadas ao longo do projeto (estes podem ter sofrido alterações). |
|||||||||||
|
|
|||||||||||
Alimentação: No que diz respeito à alimentação, é usado um adaptador DC para 12 volts, o grupo decidiu escolher este tipo de alimentação pois o projeto é estático garantindo uma vantagem em termos monetários.
Figura 4 - Nesta imagem está representado um adaptador Arduino: Em termos de controlador optamos por um arduino para a totalidade do trabalho o fator mais importante por trás desta escolha é a parte de comunicação serie, o grupo já tinha conhecimento desde o início desta componente para facilitar trabalho, espaço e confusão de fios optamos pelo arduino para fazer a totalidade do trabalho.
Figura 5 - Nesta imagem está representado um arduino Ponte H: Para efeitos de controlo de motores é usado 2 pontes H l298n, decidimos usar esta ponte H porque suporta o valor de tensão requerido pelo motor, não é preciso usar breadbord para utilizar este driver. No restante o driver suporta tensões entre os 5 volts ate 35 volts.
Figura 6 - Nesta imagem está representado um driver l293n Sensor: No caso do sensor a escolha foi um TOF Luna 8m, apesar de não ser a melhor escolha para este trabalho devido a este ser um sensor mais adaptado a medias e longas distâncias, este sensor tem uma boa resolução e precisão, tornando-se bom para objeto de medio porte.
Figura 7 - Nesta imagem está representado um sensor LIDAR Led é um diodo semicondutor, que quando é energizado, emite luz visível
Figura 8 - Nesta imagem está representado um led/diodo Motores: A escolha dos motores passou por 2 steppers Nema17 bipolar pelo facto de ser mais preciso e fácil de controlar, com um angulo de 1.8 graus permite uma grande precisão o que é muito vantajoso para scanners e impressoras 3d. A tensão de funcionamento dos motores é de 12 volts
Figura 9 - Nesta imagem está representado um motor passo a passo A principal função de um resistor ou resistência dentro de um circuito eléctrico ou electrónico é de "resistir", este regula ou define o fluxo de electrões (corrente) que o atravessam.
Figura 10 - Nesta imagem está representado uma resistência O botão Switch permite a escolha de apenas uma entre duas opções (Ativado ou Desativado).
Figura 11 - Nesta imagem está representado um botão ou switch |
|||||||||||
|
|
|||||||||||
|
Neste tópico será apresentado o Software utilizado no projeto e será explicado como o mesmo foi construido, através de imagens e explicações fáceis de entender.
Figura 2 - Nesta imagem está representado o diagrama de blocos da arquitetura toda do projeto Introdução ao código O código está divido em duas partes, uma parte em C e outra parte em Python. Para iniciar introduzimos uma imagem do fluxograma. Em relação as bibliotecas utilizadas, estas são as bibliotecas padrão de c, mais a biblioteca twi usada nos diapositivos de MICMIC para definir os pinos SDA e SCL.Agora com as bibliotecas Python, começando com a biblioteca serial como o nome indica é uma biblioteca que faz comunicação serie no caso deste trabalho há uma necessidade de comunicar com o Arduíno para obter valores de x,y,z, é uma biblioteca com fácil instalação basta inserir no terminal power shell Python “pip install pyserial” de seguida será necessário estabelecer comunicação iniciando a mesma no Arduíno e completando no Python com o seguinte código “serial.Serial(“port USB”,”Baud Rate”,”timeout=1”)“, em relação a esta ultima linha de código, “timeout=1” é um parâmetro bloqueante por um tempo especifico, neste caso 1 segundo, é forçada uma espera para dar tempo do envio de dados, após este 1 segundos o código prossegue mesmo que não tenha informação para ler. Continuado para a biblioteca que desenha o plot3d, esta biblioteca é mais complexa em termos de uso e internamente muito completa, para instalar a biblioteca é preciso inserir na power Shell os seguintes comandos “pip install numpy”, seguido de “pip install vtk”, seguido de ”pip install pyqt5” por fim “pip install mayavi”. Estas duas inicializações antes de instalar a biblioteca principal mayavi necessitam de ser declaradas mas não são usadas no código, a biblioteca numpy é uma biblioteca matemática do python que ajuda a processar arrays e outras operações, a biblioteca vtk é um sistema que processa imagens, imagens 3d, gráficos por entre outros é uma biblioteca dedicada a modelagem. Por fim a biblioteca pyqt5 é um conjunto de bibliotecas c++ que implementam aplicações de alto nível e tem uma vertente alta de plot3d. Para a biblioteca principal mayavi é necessário instalar todas estas bibliotecas acima, avançando o software usado tem uma interface muito boa e limpa, permite varias formas para construir gráficos tanto em 2D como 3D, esta aplicação permite construir gráficos com linhas, plot3d, mesh entre outros. Esteticamente é mais bonito criar uma figura de fundo branco iniciando com o seguinte código “mlab.figure=(bgcolor(1,1,1))” de seguida é preciso dar plot3d a figura com o seguinte código “ mlab.plot3d(x,y,z,tube_radius=0.01,figure=’figura’)” desconstruindo esta linha o programa irá fazer um plot dos itens guardados em x,y,z usando uma linha de raio indicado no 4 ponto, mais a figura com fundo branco. Inicializações e Setup Nesta parte do topico é demonstrado as variáveis utilizadas no código através do seguinte esquema:
Tabela 1 - Nesta tabela está representado as variaveis usadas no codigo Após estas inicializações, construímos funções para iniciar comunicação i2c, como referência usamos estes barramentos disponíveis nos diapositivos de Micmic. Consiste em uma função de inicio da comunicação i2c, uma função de paragem i2c, uma função de write para escrever no barramento ou receber dados no barramento, por fim temos as funções ack e nack de i2c que são os bits de acknowlegment, ou seja, se o sensor tem de continuar a enviar informação ou não, se a informação chegou bem ao destino.
Figura 12 - Nesta imagem estão representados os bits para iniciar comunicação i2c Iniciar comunicação Serie e inicializar comunicação i2c de acordo com TWBR (TWI bit rate register) ou seja frequência I2c com a seguinte formula:
Tabela 2 - Nesta tabela está representado a formula da frequencia do protocolo i2c Loop No código principal, como podemos analisar pelo fluxograma, inicia o movimento do motor1 (motor que faz girar a plataforma) com a função step1 e um ciclo for é possível girar a plataforma 360 graus (fullstep com 2 fases), após isso iniciamos a leitura do sensor e guardamos os valores, verificamos se o sensor lê mais de 35 centímetros por questão de controlo, construímos fórmulas para calcular x e y. Depois disso subimos o sensor aproximadamente 1 centímetro e incrementamos z.
Step1()->Função controlada por mexer no PORTB.
Step2()->Função controlada por mexer no PORTD.
Delay_ms->Função de delay criada através de 2 ciclos for.
Código Python Inicialmente declaramos as bibliotecas que já expliquei na introdução, iniciamos a comunicação serial, que já expliquei na introdução, após isso declaramos os 3 vetores necessários para guardar os valores de x,y,z. Depois iniciamos um ciclo loop com objetivo de ler a porta serie dos valores separados por vírgulas, apos isso separamos os valores recebidos, guardar os mesmos e dar print aos dados recebidos. De seguida ocorre o armazenamento dos valores x,y,z para xn,yn,zn, guardando tudo em vetores. Quando a porta serial fecha, o código entra na sua parte final significa que ele irá dar plot3d aos valores de array xn,yn,zn.
|
|||||||||||
|
|
|||||||||||
|
Neste tópico é apresentado o vídeo elaborado pelo grupo. No vídeo é possível visualizar que o mesmo é dividido por duas partes. A primeira parte deve se à demonstração do funcionamento fisico do prototipo. Na segunda parte visualiza-se os valores obtidos atraves do sensor pelo serial monitor do arduino, que são introduzidos no meshlab, obtendo se uma imagem em 3 dimensões. |
|||||||||||
|
|
|||||||||||
O principal objetivo foi compreender e aprofundar conhecimentos sobre motores, sensores e microcontroladores. Não foram cumpridos todos os objetivos. Este não cumprimento deve-se ao facto da limitação encontrada no sensor Lidar, escolhido pelo grupo, da dificil manipulação do motor atribuido ao eixo Oz e da não receção dos dados obtidos pelo arduino ao programa PyCharm que trabalha com Python. Estes objetivos não alcançados tiveram como consequência a baixa precisão de leitura das dimensões do objeto, mais a nivel da sua altura (eixo Oz) e da obtenção do grafico 3D de uma forma não tão automatica como esperado. O maior desafio na realização do projeto foi a existência reduzida de informação, porque trata-se de uma tecnologia recente e complexa a nível mundial o facto de ser em grupo e os elementos viverem longe. Com este trabalho, os alunos envolvidos aprenderam a trabalhar em grupo, fortaleceram o domínio da cooperação em equipa e aumentaram o seu conhecimento ao nível dos microcontroladores e microprocessadores, tal como os vários tipos de motores e sensores. |
|||||||||||
|
|
|||||||||||
|
|
|||||||||||
|
[1] Instructables, Pinterest, https://www.pinterest.pt/pin/474285404508767257/ [2] LABSI, ISEP, https://moodle.isep.ipp.pt/course/view.php?id=4345 [3] MICMIC, Comunicação Síncrona I2C/TWI, ISEP, https://github.com/budryerson/TFLuna-I2C/blob/master/README.md [4] VTK developers, pypi.org, https://pypi.org/project/vtk/ [5] Prabhu Ramachandran, et al., pypi.org, https://pypi.org/project/mayavi/ [6] Riverbank Computing Limited, pypi.org, https://pypi.org/project/PyQt5/ [7] Fábio Souza, embarcados.com.br, https://embarcados.com.br/comunicacao-i2c/ [8] MICMIC, Motores PP, ISEP, https://github.com/budryerson/TFLuna-I2C/blob/master/README.md
|
|||||||||||
|
|
|||||||||||