salut!
Dans la partie précédente, je me suis arrêté sur le fait que mes roquettes ont décollé et atterri avec succès, et l'une d'elles avait même un altimètre installé. Dans cet article, je vais vous expliquer comment créer un altimètre simple basé sur le STM32 Nucleo L031K6 et un capteur de pression BMP 280 , qui stocke également toutes les données en mémoire Flash.
Sélection de fer
Exigences de base pour un altimètre:
- Vitesse de lecture à haute altitude, car la fusée n'est pas à l'apogée trop longtemps, et je voulais connaître l'altitude maximale;
- Faible consommation d'énergie, pour ne pas mettre une grosse batterie;
- Petites dimensions de toute la structure.
Sur cette base, j'ai pris STM32 Nucleo L031K6 comme microcontrôleur (haute vitesse, faible consommation de courant, petite taille). J'ai décidé de mesurer l' altitude à l'aide du baromètre BMP280 (les mêmes raisons que le MK). Ajout d'un bouton qui, lorsqu'il est pressé, commence à enregistrer la hauteur Eh bien, toute l'électronique était alimentée par une batterie CR2032 connectée via un adaptateur. En conséquence, nous avons obtenu le schéma suivant:
Modules utilisés
Adaptateur STM32 Nucleo L031K6
BMP280
pour CR2032
Adaptateur STM32 Nucleo L031K6
BMP280
pour CR2032
Développement de code
Vous pouvez trouver le code sur mon github . Les broches STM32 ont été configurées dans CubeMX pour IAR. Pour travailler avec BMP280, j'ai utilisé cette librairie , ajouté la fonction de calcul de la hauteur au-dessus du niveau de la mer à l'aide d'une formule barométrique et initialiser le capteur avec les paramètres de la fréquence de lecture, du filtrage, etc. J'avais besoin. Comme je voulais mesurer l'altitude de vol par rapport au sol, je devais d' abord calculer l'altitude au-dessus du niveau de la mer dans ma région , la prendre comme "zéro" et mesurer l'altitude de vol par rapport à elle. La fréquence de mesure était de 10 Hz.
L'écriture dans la mémoire Flash s'est déroulée comme suit:
Organisation de la mémoire dans STM32 L031K6
- Pour toutes les mesures, j'ai alloué 8 Ko d'adresses 0x08006000 à 0x08007FFF
- Alloué 2 octets pour une dimension
- J'ai noté 4 octets en Flash, c'est-à-dire deux mesures à la fois
- Le nombre maximum de mesures était de 4096, ce qui était suffisant pour enregistrer environ 7 minutes de vol
- Hauteur enregistrée en centimètres pour une plus grande précision
Et l'enregistrement s'est déroulé comme suit :
- Si l'itérateur d'écriture est pair, alors nous stockons la hauteur actuelle dans la moitié inférieure du mot dans la variable avec des données pour l'écriture dans Flash;
- Si l'itérateur d'écriture est impair, ajoutez la hauteur actuelle à la moitié supérieure du mot à la variable avec les données d'écriture dans Flash et enregistrez cette variable dans la cellule Flash
En conséquence, l' algorithme du programme est le suivant:
- Après la mise en marche, nous attendons 5 secondes pour appuyer sur le bouton pour démarrer les mesures d'altitude.
- Si le bouton n'a pas été enfoncé, nous allumons la LED intégrée et commençons à transmettre les données d'altitude enregistrées dans la mémoire Flash via UART
- , .
- «» Flash- .
- UART , ;
- .
Lorsque le STM était alimenté par le CR2032 via la broche 3.3V, j'ai trouvé que le code ne fonctionnait pas . Le problème était que lorsque l'alimentation était appliquée via cette jambe, il était nécessaire de dessouder le SB9 (situé à côté des broches RX et TX à l'arrière du MK), sinon la carte redémarrerait constamment.
Il fallait maintenant vérifier la précision de l'altimètre. Prenant un ruban à mesurer, j'ai commencé à élever l'altimètre à différentes hauteurs et à voir ce qu'il mesure. Les résultats du test se trouvent dans le dossier correspondant sur le github . Les fichiers texte contiennent des données brutes de STM et les tableaux Excel contiennent de superbes graphiques de tous les tests. La précision correspondait à l'indication - ± 10 cm. Il faut se rappeler que j'ai mesuré la hauteur en centimètresdonc les nombres dans le tableau sont si grands.
Assemblage de l'altimètre
Étant donné que la fusée peut heurter durement le sol lors de l'atterrissage, il était nécessaire de bien réparer toute l'électronique afin que le câblage ne tombe pas en tremblant, ou, pire encore, les modules eux-mêmes. L'altimètre a été placé dans le carénage de tête (il y avait suffisamment d'espace là-bas et la stabilité a été augmentée en raison du déplacement du centre de gravité vers le carénage de tête) dans un support imprimé en 3D. STM'ka se tenait verticalement, BMP280 avec les contacts vers le haut et collait un adaptateur pour CR2032 sous le support. En raison du fait qu'il ne rentrait pas dans le corps de la fusée, il était nécessaire de broyer un peu les contacts négatifs. À côté des contacts dans la paroi latérale du support imprimé en 3D, j'ai fait une rainure verticale afin d'étirer le moins du CR2032 à travers elle, et sous le plus j'ai percé un trou et mis le fil à travers. J'ai pensé fixer l'altimètre au carénage de tête à l'aide d'une vis autotaraudeuse, il y a donc un trou dans le boîtier,mais ensuite il a abandonné cette idée.
Modèle de montage imprimé en 3D
Bloc altimétrique assemblé
Vue de dessus
Vue de dessous
Vue de dessus
Vue de dessous
J'ai collé le bouton à côté du BMP280, installé le reste des modules à leur place, soudé tous les fils et
L'altimètre était fermement inséré dans le carénage de la fusée. Pour qu'il ne s'envole nulle part après l'impact, j'ai passé un élastique dans le trou de la monture, reliant le corps de la fusée et le carénage.
Altimètre assemblé.
Vue avant Vue arrière. Vous pouvez voir l'élastique reliant l'altimètre à la fusée L'
altimètre était prêt! Maintenant, je devais le tester, ce qui veut dire que je suis retourné sur le terrain d'entraînement!
Lancement de l'altimètre et résultats des mesures
Malheureusement, le premier démarrage s'est fait avec des moteurs défectueux, ce dont j'ai parlé dans le dernier article.
En conséquence, le graphique s'est avéré comme ceci:
Horizontal - numéro de mesure. Toutes les 10 mesures - 1 seconde. Vertical - hauteur en centimètres
La fusée a décollé de 15 m, puis s'est enfoncée dans le sol. Après avoir passé l'apogée, après 1 seconde , une sorte d'anomalie a commencé : après une valeur de 12m, pour une raison quelconque, les lectures sont tombées à -8m. Cela s'est produit au moment du deuxième démarrage du moteur (ce qui n'aurait pas dû être), donc je n'exclus pas que le moteur défectueux ait en quelque sorte affecté l'altimètre. Dans tous les autres tests, cela fonctionnait bien, donc ce n'était clairement pas un problème d'électronique. En général, ces tests de l'altimètre n'ont été qu'à moitié réussis, car une anomalie est survenue dans la seconde moitié du vol. Vous pouvez trouver le graphe lui-même sur github , il s'appelle rocket_flight_fall_test .
Après avoir réparé la fusée, je suis retourné sur le site de test et cette fois les tests ont été réussis. Le vol était excellent, les lectures de l'altimètre étaient stables et cohérentes avec le vol. L'horaire de vol s'est avéré comme ceci:
Horizontal - numéro de mesure. Toutes les 10 mesures - 1 seconde. Vertical - hauteur en centimètres
La fusée a grimpé 150 m et a atterri avec succès.Ainsi, ce test a été totalement réussi. Je me suis assuré que l'altimètre fonctionnait et j'ai commencé à développer de nouveaux équipements à bord.
Conclusion
En fin de compte, j'ai complètement assemblé un altimètre compact qui s'intègre dans un petit modèle de fusée. Les tests ont été réussis, l'électronique a survécu au décollage et à l'atterrissage et a mesuré l'altitude de vol. C'est là que j'ai terminé le projet de développement d'un altimètre, peut-être que dans le futur je l'utiliserai dans l'une des fusées, car connaître l'altitude de vol est parfois très utile (par exemple, si vous lancez des fusées afin d'atteindre un maximum ou une certaine altitude spécifique). Maintenant, comme je l'ai dit, je développe une caméra embarquée avec un émetteur radio, car je n'ai pas l'intention de perdre une fusée avec une électronique aussi sérieuse.
Merci de votre attention!