Título




LABSIS

2019


Autores:


Diogo Pereira

1140468@isep.ipp.pt


José Fernandes

1170704@isep.ipp.pt


Introdução

Arquitetura

Hardware

Software

Resultados

Conclusões

Referências





  • Introdução

Início

No âmbito da disciplina Laboratório de Sistemas do 3ºano de Licenciatura em Engenharia Eletrotécnica e de Computadores, participamos na elaboração de um projeto de eletrónica (proposto na ficha de unidade curricular) que consiste no mapeamento 360º utilizando sonares.

Atualmente estes tipos de sistemas são usados maioritariamente para mapear o fundo de oceanos e lagos para ver a localização de peixes e/ou estruturas em relação ao barco (ex: Humminbird 360 Imaging). No nosso caso iremos fazer um sistema mais simples para fazer apenas o mapeamento de uma sala, usando um microcontrolador e dois sonares montados numa plataforma giratória alimentado por um sistema de baterias. Os dados que obtivermos serão enviados, usando a tecnologia Bluetooth, para uma aplicação no computador criada por nós onde será possível visualiza-los com o formato de um radar.



  • Estado de Arte:
    Na pesquisa para este trabalho encontramos vários projetos, sendo que a maior parte deles usava arduino com apenas um sonar e 180º, mas um dos projectos que encontramos chamado “Arduino Two Ultrasonic Sensor Radar - 360 degrees Rotation” criado por Team MicroLab Greece [1], não era 360º, como era compacto e portátil, esse projeto tornou-se na inspiração para o projeto que iamos desenvolver: compacto, alimentado a baterias, capaz de rodar continuamente sem necessidade de usar um slip ring (premitiria facilmente criar novas bases de apoio sem ter que mexer com o circuito) e comunicação sem fios para podermos esta numa sala diferente a receber e processar os dados obtidos com o sonar.


  • Arquitetura

Início

  • Diagrama de blocos:


  • Hardware

Início

O seguinte hardware foi escolhido para a elaboração deste projeto:

  • Microcontrolador:
    Optamos por usar um microcontrolador Atmega328p da família de microcontroladores de 8 bits AVR da Atmel. Visto que esta se trata de uma família de microcontroladores bastante popular, encontrar informação sobre como usá-lo não foi difícil. No caso do Atmega328p, como este tem 14 pinos digitais dos quais 6 podem ser usados para PWM, 1 UART, 3 timers, 32kb de memória flash e possibilidade de usar um cristal externo até 20mhz (usámos um cristal de 16MHz), conseguimos usá-lo para o projeto sem grandes dificuldades.


  • Sensores:
    Como o projeto se de
    trata de mapeamento com sonar, escolhemos usar dois sensores HC-SR04 capazes de medir distâncias de 2cm a 4m cada, ou seja, poderemos medir uma área com diâmetro de até 8m.

  • Motor:
    Neste tipo de projetos é normalmente usado um motor do tipo servo ou do tipo passo-a-passo. No nosso caso optamos pelo motor passo-a-passo, mais expecificamente um motor da família nema 17 que já tinhamos disponível, pois este tipo de motor permite-nos estar a rodar constantemente sem ter que inverter o sentido de rotação, e como sabemos o número de passos que o motor precisa para dar uma volta completa, também é fácil de determinar a posição atual dos sonares. Escolhemos usar também a drvier para motores passo-a-passo A4988 da Pololu.

  • Comunicação:
    Como queriamos que fosse possível processar os dados do projeto numa aplicação de computador sem termos que estar na mesma sala que está a ser mapeada, tivemos escolher uma tecnologia de comunicação sem fios. No nosso caso opt
    amos por usar o módulo HC-06 de comunicação Bluetooth devido a ter um alcance máximo maior que os dos nosso sonares (10 metros) e porque comunica atravé de uma porta série com o microcontrolador, tornado a sua implementação relativamente simples.

  • Baterias:
    Opt
    amos por usar baterias de Lítio devido a ter uma densidade de energia superior a outras tecnologias como NiMh e menor peso para a mesma capacidade. No que toca à escolha entre usar Li-Ion ou LiPo optamos por usar Li-ion, pois estas foram bastante populares em portáteis de 4 a 5 anos atrás em células 18650, o que significa que seria fácil de obter baterias Li-ion em bom estado (dependendo da idade e estado do portatil onde foram removidas) e que tiveram a sua vida a ser usádas num circuito com balanceamento.

  • Carregamento, proteção:
    Ao colocarmos as nossas 3 células (balanceadas) em paralelo, podemos usar um único módulo TP4056 para carregamento e proteção das células.

  • Regulação:
    Para este projeto necessitamos de duas tensões diferentes, 5V e 12V, como tal á saída nossa placa do no módulo TP4056 usamos um conversor boost para obter os 12V e de seguida usamos um regulador 7805 para obter 5V para o resto do circuito.

  • Esquema final e PCB:
    O esquema do circuito e PCB foram desenhados no software Kicad.

  • Plataforma:
    Como foi dito anteriormente escolhemos desenhar a nossa plataforma para o projeto, a qual foi depois impressa usando uma impressora 3D em plástico PLA. A plataforma resultante permite-nos usar múltiplas PCB do mesmo formato sem termos que modificá-la.




  • Software

Início

  • Microcontrolador:
    O código que desenvolvemos para o microcontrolador é relativamente simples, sendo que usamos 3 interrupções, a interrupção do Timer1 para o contador do LED que tem que piscar a 1Hz e duas interrupções externas para medir o tempo de echo de cada sonar. A nossa função main() após tratar de todas as inicializações, fica presa num loop em que ela:

    1- Obtem o tempo de echo do sonar 1 e cálcula a distância ao sonar 2;
    2- Obtem o tempo de echo do sonar 2 e cálcula a distância ao sonar 2;
    3- Cria um string com o passo atual do motor;
    4- Envia essa string pela porta série.




    Configuração do Timer0:
    TCCR0A = (1 << WGM01); // modo CTC
    TCCR0B = (1 << CS02) | (1 << CS00); // prescaler = 1024
    OCR0A = 156; // ocr0a = (fclk / 2 * prescaler * foc0a) – 1 = 156
    TIMSK0 = (1 << OCIE0A);

    Configuração do Timer1:
    TCCR1A = 0;
    TCCR1B = 0;

    Interrupções externas:
    EICRA = (1 << ISC10) | (1 << ISC00);
    EIMSK = (1 << INT1) | (1 << INT0);

    Configurações USART:
    UBRR0H = (BRC >> 8); // BAUD = 9600 | BRC = ((F_CPU / 16 / BAUD) - 1)
    UBRR0L = BRC;
    UCSR0C = (1 << UCSZ01) | (1 << UCSZ00); // Assíncrono | sem paridade | 1 stop bit | tamanho de 8-bits
    UCSR0B = (1 << TXEN0); // ligar transmissão de dados


  • Aplicação para Computador:
    Para desenvolver a aplicação para computador escolhemos usar a linguagem de programação Processing, visto que quando estivemos a procurar outros projetos deste tipo pareceu ser a que era mais usada, e realmente permitiu criar uma aplicação para visualizar o projeto melhor do achavamos que conseguiamos no tempo em a tivemos a desenvolver:



    No entanto, o código não é pequeno (mais do dobro do número de linhas do código do microcontrolador), por isso em baixo dividimo-lo em várias partes:


    Estabelece ligação série com o circuito e descodifica a mensagem enviada;



  • Cria os botões Baud e Port;



    Cria retângulos
    com os dados fornecidos pelo Sonar1 e pelo Sonar2;



    Cria pop-up windows para selecionar o baudrate e a porta série;



    Cria o botão Start;



    Cria a linha do radar;



    Cria linhas quando o Sonar1 ou Sonar2 detetam obstáculos;



    Desenha o radar;



    Ativa quando o cursor for clicado numa área especifica, neste caso, nos botões Start, Port e Baud. Quando clicamos no Start estabelece comunicação série, quando clicamos no Port permite nos escolher a porta série e quando clicamos nos Baud permite nos escolher o Baudrate;



    Verifica se o cursor se encontra numa área especifica. Esta função serve para dar highlight aos botões quando passamos o cursor por cima deles;


  • Resultados

Início



  • Conclusões

Início

Os planos propostos foram cumpridos. Esta disciplina não só nos permitiu consolidar conhecimentos adquiridos ao longo do curso como também nos ajudou a adquirir conhecimentos de conceitos e de ferramentas que nunca tínhamos utilizado (ex: placa PCB, soldura de componentes, sonares, etc.).

No que toca a melhoria do projeto, se tivéssemos mais tempo e mais poder económico, faríamos o seguinte:

Poderíamos tornar a nossa aplicação de computador mais complexa, permitindo nos ter melhor controlo de quando é feita uma leitura ou de quando o projeto se mexe, dando-nos assim uma melhor prevenção de erros.

Desenvolver o nosso próprio BMS para este projeto com balanceamento e regulação de tensões necessárias para o funcionamento do projeto.

Visto que o nosso motor passo-a-passo é demasiado potente e pesado para um projeto da nossa dimensão poderíamos, alternativamente, usar um motor mais leve e menos potente para diminuir o peso total do projeto e possivelmente aumentar o tempo total de carga do projeto.

Melhorar o design do projeto de forma a que seja possível substituir as baterias sem ser necessário desmontá-lo.






  • Referências

Início

[1] https://www.hackster.io/microlab-greece/arduino-two-ultrasonic-sensor-radar-360-degrees-rotation-de16ae

[2] https://hackaday.io/project/14871-make-a-radar-station-with-arduino-and-processing

[3] https://circuitdigest.com/microcontroller-projects/distance-measurement-using-hc-sr04-avr

[4] https://forum.arduino.cc/index.php?topic=494594.0

[5] https://exploreembedded.com/wiki/Interfacing_Stepper_Motor_with_Starter_AVR_Using_A4988

[6] https://www.xanthium.in/how-to-avr-atmega328p-microcontroller-usart-uart-embedded-programming-avrgcc

[7] https://processing.org/examples/button.html?fbclid=IwAR09tupqFCgICzovaQf3mCk159gvHDAaKF8-jhJQy_WhTnVmOKoDWI8t6y0

[8] https://processing.org/reference/libraries/serial/Serial.html?fbclid=IwAR3-sQAwwU7DCpi9nA7wSVIKJswBjPQVG9iuKXYtGAEEtkpWYTSCgEn5wNY

[9] https://forum.processing.org/two/discussion/4764/how-to-make-a-popup-window?fbclid=IwAR3gShMyG115LUCK1WQQKwCApcG5iZrY4DGl-fzNDU-riE0nPaoXjn5prWo







Início