
Olá!
Na parte anterior , parei no fato de que meus foguetes decolaram e pousaram com sucesso, e um até tinha um altímetro instalado. Neste artigo, vou explicar como fazer um altímetro simples baseado no STM32 Nucleo L031K6 e um sensor de pressão BMP 280 , que também armazena todos os dados na memória Flash.
Seleção de ferro
Requisitos básicos para um altímetro:
- Velocidade de leitura em alta altitude, já que o foguete não está no apogeu por muito tempo, e eu queria saber a altitude máxima;
- Baixo consumo de energia, de modo a não colocar uma bateria grande;
- Dimensões reduzidas de toda a estrutura.
Com base neles, usei o STM32 Nucleo L031K6 como microcontrolador (alta velocidade, baixo consumo de corrente, tamanho pequeno). Decidi medir a altitude usando o barômetro BMP280 (pelos mesmos motivos do MK). Também adicionei um botão que, quando pressionado, começaria a registrar a altura. Bem, todos os eletrônicos eram alimentados por uma bateria CR2032 conectada por meio de um adaptador. Como resultado, obtivemos o seguinte esquema:

Módulos usados
STM32 Nucleo L031K6
BMP280
CR2032

STM32 Nucleo L031K6

BMP280

CR2032
Desenvolvimento de código
Você pode encontrar o código no meu github . Os pinos STM32 foram configurados no CubeMX para IAR. Para trabalhar com o BMP280, usei esta biblioteca , adicionei a função de calcular a altura acima do nível do mar usando uma fórmula barométrica e inicializei o sensor com os parâmetros que eu precisava para ler a frequência, filtragem, etc. Como eu queria medir a altitude de vôo em relação ao solo, tive que primeiro calcular a altitude acima do nível do mar na minha área , considerá-la como "zero" e medir a altitude de vôo em relação a ela. A frequência de medição foi de 10 Hz.
A gravação na memória Flash foi feita da seguinte maneira:
Organização de memória em STM32 L031K6

- Para todas as medições, aloquei 8 KB de endereços 0x08006000 a 0x08007FFF
- Alocados 2 bytes para uma dimensão
- Escrevi 4 bytes em Flash, ou seja, duas medições de uma vez
- O número máximo de medições foi de 4.096, o que foi suficiente para registrar cerca de 7 minutos de vôo
- Altura registrada em centímetros para maior precisão
E a gravação ocorreu da seguinte forma :
- Se o iterador de gravação for par, armazenamos a altura atual na metade inferior da palavra na variável com dados para gravação no Flash;
- Se o iterador de gravação for ímpar, adicionamos a altura atual à metade superior da palavra à variável com os dados para gravar no Flash e salvamos essa variável na célula do Flash
Como resultado, o algoritmo do programa é o seguinte:
- Depois de ligar, esperamos 5 segundos para pressionar o botão para iniciar as medições de altitude
- Se o botão não foi pressionado, acendemos o LED embutido e começamos a transmitir os dados de altitude registrados na memória Flash via UART
- , .
- «» Flash- .
- UART , ;
- .
Quando o STM foi alimentado pelo CR2032 via pino 3.3V, descobri que o código não funciona . O problema era que quando a alimentação era aplicada por esta perna, era necessário dessoldar o SB9 (localizado próximo aos pinos RX e TX na parte traseira do MK), caso contrário a placa reiniciava constantemente.
Agora era necessário verificar a precisão do altímetro. Pegando uma fita métrica, comecei a elevar o altímetro a diferentes alturas e ver o que ele mede. Os resultados do teste estão na pasta correspondente no github . Os arquivos de texto contêm dados brutos do STM e as tabelas do Excel contêm belos gráficos de todos os testes. A precisão correspondeu ao declarado - ± 10 cm. Deve ser lembrado que medi a altura em centímetrosentão os números na tabela são muito grandes.
Montagem do altímetro
Como o foguete pode atingir o solo com força durante o pouso, foi necessário consertar bem toda a eletrônica para que a fiação não caísse ao balançar, ou, pior ainda, os próprios módulos. O altímetro foi colocado na carenagem da cabeça (havia espaço suficiente lá, e a estabilidade foi aumentada devido ao deslocamento do centro de gravidade para a carenagem da cabeça) em uma montagem impressa em 3D. STM'ka ficou verticalmente, BMP280 com contatos para cima e um adaptador para CR2032 colado sob o suporte. Por não caber no corpo do foguete, foi necessário retificar um pouco os contatos negativos. Ao lado dos contatos na parede lateral da montagem impressa em 3D, fiz uma ranhura vertical para puxar o menos do CR2032 por ele e, sob o plus, fiz um orifício e passei o fio por ele. Pensei em prender o altímetro na carenagem da cabeça usando um parafuso auto-roscante, para que haja um orifício na caixa,mas então ele abandonou essa ideia.

Modelo de montagem impressa em 3D
Bloco altímetro montado


Colei o botão ao lado do BMP280, instalei o resto dos módulos em seus lugares, soldei todos os fios e
O altímetro foi firmemente inserido na carenagem do foguete. Para não voar para lugar nenhum após o impacto, passei um elástico pelo orifício do suporte, conectando o corpo do foguete e a carenagem.

Altímetro montado.

Vista frontal Vista traseira. Você pode ver o elástico conectando o altímetro ao foguete. O
altímetro estava pronto! Agora eu tinha que testar, o que significa que voltei para o campo de treinamento!
Lançamento do altímetro e resultados da medição
Infelizmente, a primeira partida foi com motores defeituosos, sobre os quais escrevi no último artigo.
Como resultado, o gráfico ficou assim:

Horizontal - número de medição. A cada 10 medições - 1 segundo. Vertical - altura em centímetros
O foguete decolou 15m e depois atingiu o solo. Depois de passar o apogeu, após 1 segundo , algum tipo de anomalia começou : após um valor de 12m, por algum motivo, as leituras caíram para -8m. Isso aconteceu no momento da segunda partida do motor (o que não deveria ter acontecido), portanto, não excluo que o motor defeituoso de alguma forma afetou o altímetro. Em todos os outros testes, funcionou perfeitamente, então claramente não era um problema eletrônico. Em geral, esses testes do altímetro tiveram sucesso apenas pela metade, pois uma anomalia ocorreu na segunda metade do vôo. Você pode encontrar o próprio gráfico no github , ele é chamado rocket_flight_fall_test .
Depois de consertar o foguete, fui novamente ao local de teste e desta vez os testes foram bem-sucedidos. O vôo foi excelente, as leituras do altímetro foram estáveis e consistentes com o vôo. O cronograma de vôo ficou assim:

Horizontalmente - número de medição. A cada 10 medições - 1 segundo. Vertical - altura em centímetros
O foguete subiu 150m e pousou com sucesso.Portanto, este teste foi totalmente bem-sucedido. Verifiquei se o altímetro estava funcionando e comecei a desenvolver novos equipamentos de bordo.
Conclusão
No final, montei completamente um altímetro compacto que cabe em um pequeno modelo de foguete. Os testes foram bem-sucedidos, a eletrônica sobreviveu à decolagem e pouso e mediu a altitude de vôo. Foi aqui que terminei o projeto de desenvolvimento de um altímetro, talvez no futuro o use em um dos foguetes, pois saber a altitude de vôo às vezes é muito útil (por exemplo, se você lança foguetes para atingir um máximo ou alguma altitude específica). Agora, como falei, estou desenvolvendo uma câmera de bordo com um rádio transmissor, porque não pretendo perder um foguete com uma eletrônica tão séria.
Obrigado pela atenção!