CanSat - Satélite-lata




LABSI

2023


Autores:


Gabriel Araújo (Nº1211101)

1211101@isep.ipp.pt


Antonio Matos (Nº1211177)

1211177@isep.ipp.pt


Introdução

Arquitetura

Hardware

Software

Resultados

Conclusões

Referências




  • Introdução

Início


No âmbito da Unidade Curricular de Laboratório de Sistemas (LABSI), do 1º semestre de 3º ano da Licenciatura em Engenharia Eletrotécnica e de Computadores do Instituto Superior de Engenharia do Porto (ISEP), os alunos foram desafiados a desenvolver um projeto e um prótotipo funcional. Assim, nós optamos pelo projeto Cansat.

O CanSat é uma iniciativa da Agencia Espacial Europeia, que suporta concursos nacionais e internacionais. O CanSat é uma simulação realistica de um satélite, tendo como objetivo, contruir um satélite com o volume de uma lata. A missão do CanSat é fazer medições e transmissão dos valores medidos segundo a segundo. A receço dos valores é feita através de uma estação base e os valores são armazenados e tratados num PC. Nos concurso existentes todos os anos, o CanSat tem missão primária, a telemetria de valores de pressão, temperatura e humidade, e necessita de uma missão secundáia, como o controlo da queda, ou do local da queda, bem como a telemetria de mais sensores. O funcionamento de todas as missões e a recuperação do prótotipo são contabilizados para a classificação final no concurso. Esta classificação é também suportada por uma apresentação oral.

figura 1 - ESA
  • Arquitetura

Início

O nosso projeto consiste na contrução de um protótipo funcional de um CanSat com um mecanismo de recuperação e control de queda. O "satélite" irá transmitir segundo a segundo informa¸ões dos sensores que possui. A estação-base irá receber as informações vindas do "satélite" enviando-as para o PC que por sua vez guarda os valores para uma análise futura.

figura 2 - Arquitetura

As comunicações CanSat-Estação-PC são feitas utilizando um protocolo escrito por nós. O protocolo tem 3 campos na mensagem, sendo o primeiro campo a flag de inicio(0xFF), o segundo campo contem os dois primeiros bits a 01, identificando o tipo de mensagem, e os restantes bits identificam o tamanho dos dados em bytes, neste tipo de mensagem. O ultimo campo contêm os dados em bytes utilizando fixed point values. A ordem dos dados tem de ser conhecida pelo emissor e pelo recetor.

  • Hardware

Início

  • Cansat
  • Microcontrolador

    O Microcontrolador do CanSat é um STM32L412KBU6U da STMicroelectronics, montado numa placa NUCLEO-L412KB. Este microcontrolador foi escolhido devido a sua rápida velocidade de processamento, conseguida pelo seu clock interno de 32MHz e pela vasta quantidade periféricos, sendo estes timers de 16 e 32 bits; interfaces I2C, SPI e USART e ADC de 12 bits.

    Figura 3 - NUCLEO-L412KB

    BME280

    O BME 280 é um sensor de Temperatura, Humidade e Pressão desenvolvido para aplicações portateis pela Bosch. Tem como principais vantagens o seu tamanho e o baixo consumo de corrente. Este sensor combina precisão com linearidade nas suas medidas. Este sensor conta com interfaces I2C e SPI

    figura 4 - BME280

    LSM9DS1

    O LSM9DS1 é um sensor que contêm um acelerometro e giroscópio e magnetómetro com medições em 3 dimensões, apesar deste último não ser utilizado neste trabalho. O LSM9DS1 contém barramentos I2C e SPI. As principais vantagens deste sensor são a sua linearidade e rapidez.

    figura 5 - LSM9DS1

    Servo Motores

    A escolha dos servo m otores recaiu sobre os TowerPro SG90. Motores leves e eficazes com uma rotação de 180 graus, 90 em cada direção. Embora não testados quanto a sua resistência na queda com paraquedas no CanSat. De modo a mostrar que é possivel controlar a queda estes motores são suficientes.

    figura 6 - TowerPro SG90
  • Estação-Base
  • Microprocessador

    Para a estação-base foi escolhido um microprocessador com duas usarts de modo a comunicar tanto com o Cansat como com o PC. Utilizamos o Atmega324, um AVR semelhante ao usado no sistema mínimo possuindo assim as vantagens de ter um barramento I2C bem como as duas Usarts.

    figura 7 - Atmega324

    LCD

    De modo a monitorizar o tempo de uso do cansat, implementamos um lcd na estação-base. Para não gastar um port inteiro do Atmega324A com o LCD, utilizamos um modulo I2C. O modulo PCF8574A é um modulo I2C para LCD. Este permite controlar o LCD usando um bus I2C utilizando uma biblioteca adequada.

    figura 7 - LCD e modulo I2C

    APC220

    O APC220 é modulo de rádio de baixo custo, uma excelente solução para a comunicação sem fios até 1000m em linha de vista, criando uma interface Usart/TTl sem fios e trabalha com modulação GFSK. Estes modulos são facilmente programados com um software externo RF-magic ou através de código, como explica o seu datasheet.

    figura 8 - APC220
    • Software

    Início

  • Cansat
  • Microcontrolador

    O Microcontrolador do CanSat executa um programa cujos objetivos são:

    • Leitura de valores de temperatura, pressão e humidade
    • Transmissã dos valores lidos por radio frequência
    • Controlo da orientação do CanSat durante a queda, recorrendo aos valores obtidos pelo LSM9DS1 e filtro de Madgwick
    Desta forma, a função main é caracterizada pelo seguinte fluxograma
    Figura 9 - Fluxograma da função main

    A função main começa por executar as função de inicialização necessárias para o seu funcionamento, sendo estas as funções setup_micro(), setup_timers(), setup_bme280() e setup_lsm9ds1(). A função setup_micro inicializa os periféricos necessários ao funcionamento do sistema. A função setup_timers inicializa os timers recorrendo à biblioteca HAL. As funções setup_bme280 e setup_lsm9ds1 inicializam os sensores com as configurações definidas para um funcionamento ideal do sistema. Entrando no ciclo infinito while(1), o programa ir verificar a ativação das flags flag_250ms e flag_1s. Estas flags são ativadas com recurso a uma função de interrupção do Timer 6, sendo a base de contagem deste timer 250ms. Caso a flag_250ms esteja definida como 1, o microcontrolador executa as funções medicoes_LSM9DS1(), madgwickFilterUpdate() e controlo() A função medicoes_LSM9DS1() obtêm os valores do giroscópio e acelerómetro nos 3 eixos através da leitura dos respetivos registos e processamento dos dados de acordo com o datasheet do sensor. A implementação desta função é a seguinte:
    Figura 10 - medicoes_LSM9DS1()

    A função ler_sensor() observada na imagem recebe os registos de 8 bits do LSM9DS1 e junta-os numa variável de 16 bits. Após a leitura dos valores do LSM9DS1, é executada a função madgwickFilterUpdate(). Esta função é uma implementação do filtro desenvolvido por Madgwick com o objetivo de fazer uma fusão entre o giroscópio e acelerómetro. Com os valores obtidos com a função, obtemos um quaternião que representa a orientação do cansat no mundo Com base na orienta¸ã, convertemos o quaternião para ângulos de pitch e roll, onde o pitch representa a inclinação no eixo dos yy e o roll no eixo dos xx. Estes ângulos são muito importantes são importantes pois são a variável de controlo para o controlador PID implementado em controlo().

    A função controlo()é uma implementação de dois controladores PID, um para o ângulo de pitch e outro para o ângulo de roll. Após o cálculo da saída dos controladores, os valores obtidos serão usados para o controlo dos motores em ajuste_motores(). A função ajuste motores irá atualizar o sinal PWM enviado aos servomotores, de acordo com a saída do controlo PID, com o objetivo de manter a orientação do CanSat na vertical. Caso a flag_1s esteja definida como 1, o microcontrolador executa as funções medicoes_BME280() e envio_mensagem(). Este conjunto de funções foi estabelecido de forma a cumprir com o regulamento da prova no que toca à telemetria entre o CanSat e a estação base. A função medicoes_BME280(). Esta função lê os valores de Temperatura, Pressão e Humidade obtidos pelo sensor BME280 e realiza operações de compensação de valores. Após a leitura dos valores do BME280, segue-se o envio dos dados para a estação base através da função envio_mensagem()
    Figura 11 - controlo()

    A função enviar_mensagem() transforma os valores do tipo float lidos dos sensores em fixed point values. Fixed point values são valores float expressos como inteiros com uma quantidade de bits a escolha. Assim os valores em float, por exemplo, ficam com 8 bits a definir a parte inteira e 8 bits a definir a parte decimal. Com este processo de transformação, um valor float, que regra geral ocupa 4 bytes, passa a ocupar apenas 16 bits sendo definido e transmitido facilmente como dois inteiros de 8 bits. Este processo de transformção ocorre dentro da função build_message1() onde se constrói também um vetor a enviar de acordo com o protocolo já referido.
    Figura 12 - controlo()

  • Estação-Base
  • Microprocessador

    O microprocessador está programado com código em c, através de platformio. O código executado no Atmega324A recebe os dados vindos do CanSat através do modulo APC220 ligado á Usart1, assim recebe um byte de informação e através das interrupções de receção das Usarts, as informações são imediatamente enviadas para o PC através da Usart0.

    Figura 13 - Fluxograma do programa da estação base

    PC

    No PC escrevemos um código em Python, de modo a comunicar através de Usart com o microprocessador. O script em Python recebe as informações conhecendo o protocolo anteriormente falado, e escreve os valores medidos no CanSat num ficheiro csv e mostrando os gráficos em tempo real das variávies transmitidas pelo Cansat. No fim da utilização do CanSat os valores ficam disponíveis no formato csv. Temos ainda outro programa para analisar o ficheiro csv resultante.

    Figura 14 - Fluxograma do programa em python

    • Resultados

    Início

    Com o protótipo funcional fizemos alguns testes de transmissão com alguns metros de distância. Os testes feitos foram bem sucedidos, resultando o funcionamento normal do projeto com o cansat a transmitir os valores e a estação base a recebe-los sem problemas e a construir os gráficos em tempo real.

    Figura 15 - Testes da Comunicação

    • Conclusões

    Início

    Com a execução deste projeto desenvolvemos as nossas capacidades de resolução de problemas, bem como as nossas aptidões em Hardware e Software. O projeto cumpre com os objetivos iniciais, faltando apenas a capacidade do PC controlar o LCD.

    Na nossa opinião o projeto foi um sucesso, do ponto de vista da Unidade Curricular, não estando preparado para participar no concurso oficial do CanSat. A nossa ideia no desenvolvimento deste projeto foi conseguir executar a telemetria utilizando dois micros e um PC e o Cansat ser capaz de controlar a sua queda através de um paraquedas e servomotores. O projeto tem espaço para melhorias, como o controlo do movimento do cansat atraves da estação base, controlando assim o local de queda ou ,por exemplo, o próprio cansat saber e controlar o seu local de queda sozinho.

    • Referências

    Início

    [1] S. Madgwick, An efficient orientation filter for inertial and inertial/magnetic sensor arrays, 2010

    [2] https://www.esa.int/Education/CanSat/What_is_a_CanSat

    [3] https://www.bosch-sensortec.com/products/environmental-sensors/humidity-sensors-bme280/

    [3] https://www.st.com/en/mems-and-sensors/lsm9ds1.html

    [3] https://wiki.dfrobot.com/APC220_Radio_Data_Module_SKU_TEL0005_


    Início