Per aspera ad astra, o cómo construí un cohete. Parte 2. Montaje del altímetro en STM32 y BMP280





¡Hola! 



En la parte anterior me detuve en el hecho de que mis cohetes despegaron y aterrizaron con éxito, y uno incluso tenía un altímetro instalado. En este artículo te contaré cómo hacer un altímetro simple basado en el STM32 Nucleo L031K6 y un sensor de presión BMP 280 , que también almacena todos los datos en la memoria Flash.



Selección de hierro 



Requisitos básicos para un altímetro:



  1. Velocidad de lectura de gran altitud, ya que el cohete no está en su apogeo por mucho tiempo, y quería saber la altitud máxima;

  2. Bajo consumo de energía, para no poner una gran batería;

  3. Pequeñas dimensiones de toda la estructura.



Basado en ellos, tomé STM32 Nucleo L031K6 como microcontrolador (alta velocidad, bajo consumo de corriente, tamaño pequeño). Decidí medir la altitud usando el barómetro BMP280 (las mismas razones que el MK). También agregué un botón que, al presionarlo, comenzaría a registrar la altura. Bueno, toda la electrónica funcionaba con una batería CR2032 conectada mediante un adaptador. Como resultado, obtuvimos el siguiente esquema:







Módulos utilizados


STM32 Nucleo L031K6





BMP280





CR2032



Desarrollo de código



Puedes encontrar el código en mi github . Los pines STM32 se han configurado en CubeMX para IAR. Para trabajar con BMP280 utilicé esta librería , le agregué la función de calcular la altura sobre el nivel del mar usando una fórmula barométrica e inicializando el sensor con los parámetros que necesitaba para leer la frecuencia, filtrar, etc. Como quería medir la altitud de vuelo en relación con el suelo, primero tenía que calcular la altitud sobre el nivel del mar en mi área , tomarla como "cero" y medir la altitud de vuelo en relación con ella. La frecuencia de medición fue de 10 Hz.



La escritura en la memoria Flash se realizó de la siguiente manera:



Organización de la memoria en STM32 L031K6




  • Para todas las medidas, asigné 8 KB de direcciones 0x08006000 a 0x08007FFF

  • Asignados 2 bytes para una dimensión

  • Escribí 4 bytes en Flash, es decir, dos medidas a la vez

  • El número máximo de mediciones fue 4096, lo que fue suficiente para registrar unos 7 minutos de vuelo.

  • Altura registrada en centímetros para mayor precisión



Y la grabación se llevó a cabo de la siguiente manera :

  1. Si el iterador de escritura es par, almacenamos la altura actual en la mitad inferior de la palabra en la variable con datos para escribir en Flash;

  2. Si el iterador de escritura es impar, agregue la altura actual a la mitad superior de la palabra a la variable con datos para escribir en Flash y guarde esta variable en la celda de Flash.



Como resultado, el algoritmo del programa es el siguiente:



  1. Después de encender, esperamos 5 segundos para presionar el botón para iniciar las mediciones de altitud.

  2. Si no se presionó el botón, encendemos el LED incorporado y comenzamos a transmitir los datos de altitud registrados en la memoria Flash a través de UART

  3. , .

  4. «» Flash- .

  5. UART , ;

  6. .



Cuando el STM se alimentó desde el CR2032 a través del pin 3.3V, descubrí que el código no funciona . El problema era que cuando se aplicaba energía a través de esta pata, era necesario desoldar el SB9 (ubicado junto a los pines RX y TX en la parte posterior del MK), de lo   contrario , la placa se reiniciaría constantemente.



Ahora era necesario comprobar la precisión del altímetro. Tomando una cinta métrica, comencé a subir el altímetro a diferentes alturas y ver qué mide. Los resultados de la prueba están en la carpeta correspondiente en el github . Los archivos de texto contienen datos sin procesar de STM y las tablas de Excel contienen hermosos gráficos de todas las pruebas. La precisión correspondió al indicado - ± 10 cm. Cabe recordar que medí la altura en centímetrosentonces los números en la tabla son tan grandes. 



Montaje del altímetro



Dado que el cohete puede golpear el suelo con fuerza durante el aterrizaje, fue necesario arreglar bien toda la electrónica para que el cableado no se caiga al temblar o, peor aún, los propios módulos. El altímetro se colocó en el carenado del cabezal (había suficiente espacio allí y la estabilidad se incrementó debido al desplazamiento del centro de gravedad al carenado del cabezal) en un soporte impreso en 3D. STM'ka se colocó verticalmente, BMP280 con los contactos hacia arriba y pegó un adaptador para CR2032 debajo del soporte. Debido al hecho de que no encajaba en el cuerpo del cohete, fue necesario pulir un poco los contactos negativos. Junto a los contactos en la pared lateral del soporte impreso en 3D, hice una ranura vertical para pasar el negativo del CR2032 a través de él, y debajo del positivo perforé un agujero y pasé el cable a través de él. Pensé en unir el altímetro al carenado de la cabeza con un tornillo autorroscante, para que haya un agujero en la caja,pero luego abandonó esta idea.





Modelo de montaje impreso en 3D



Bloque altímetro ensamblado












Pegué el botón junto al BMP280, instalé el resto de los módulos en sus lugares, soldé todos los cables y envolví todo con cinta aislante azul, lo llené con pegamento caliente para mayor confiabilidad. 



El altímetro estaba firmemente insertado en el carenado del cohete. Para que no saliera volando a ningún lado después del impacto, pasé una banda elástica por el orificio del soporte, conectando el cuerpo del cohete y el carenado. 





Altímetro montado.





Vista frontal   Vista posterior. Puedes ver la banda elástica que conecta el altímetro al cohete. ¡El



altímetro estaba listo! Ahora tenía que probarlo, lo que significa que volví al campo de entrenamiento.



Resultados de medición y lanzamiento del altímetro



Desafortunadamente, el primer arranque fue con motores defectuosos, sobre lo que escribí en el último artículo.



Como resultado, el gráfico resultó así:





Horizontal - número de medición. Cada 10 mediciones - 1 segundo. Vertical - altura en centímetros



El cohete despegó 15 metros y luego se precipitó hacia el suelo. Después de pasar el apogeo, después de 1 segundo , comenzó algún tipo de anomalía : después de un valor de 12 m, por alguna razón, las lecturas bajaron a -8 m. Esto sucedió en el momento del segundo arranque del motor (que no debería haber sido), por lo que no excluyo que el motor defectuoso haya afectado de alguna manera al altímetro. En todas las demás pruebas, funcionó perfectamente, por lo que claramente no fue un problema de electrónica. En general, esas pruebas del altímetro tuvieron solo la mitad de éxito, ya que se produjo una anomalía en la segunda mitad del vuelo. Puede encontrar el gráfico en sí mismo en github , se llama rocket_flight_fall_test .



Después de reparar el cohete, fui nuevamente al sitio de prueba y esta vez las pruebas fueron exitosas. El vuelo fue excelente, las lecturas del altímetro fueron estables y acordes con el vuelo. El horario de vuelo resultó así:





Horizontal - número de medición. Cada 10 mediciones - 1 segundo. Vertical - altura en centímetros



El cohete trepó 150 my aterrizó con éxito.Por lo tanto, esta prueba fue completamente exitosa. Me aseguré de que el altímetro funcionara y comencé a desarrollar nuevos equipos a bordo.



Conclusión



Al final, armé por completo un altímetro compacto que cabe en un modelo de cohete pequeño. Las pruebas fueron exitosas, la electrónica sobrevivió al despegue y aterrizaje y midió la altitud de vuelo. Aquí es donde terminé el proyecto para el desarrollo de un altímetro, quizás en el futuro lo usaré en uno de los cohetes, porque conocer la altitud de vuelo a veces es muy útil (por ejemplo, si lanzas cohetes para llegar a un máximo o una altitud específica) Ahora, como dije, estoy desarrollando una cámara de a bordo con un transmisor de radio, porque no pretendo perder un cohete con una electrónica tan seria. 



¡Gracias por su atención!



All Articles