Capteur de pression atmosphérique BMP085 et Arduino. L'altimètre barométrique le plus simple basé sur Arduino

Un baromètre est un appareil qui mesure la pression atmosphérique. C’est-à-dire la pression atmosphérique qui nous presse de tous côtés. Depuis l’école, nous savons que le premier baromètre était une plaque contenant du mercure et un tube à essai inversé. L'auteur de cet appareil était Evangelista Torricelli, physicien et mathématicien italien. Les lectures d'un baromètre à mercure peuvent être effectuées aussi simplement que les lectures d'un thermomètre à alcool : plus la pression à l'extérieur du flacon est élevée, plus la colonne de mercure à l'intérieur de celui-ci est élevée. Les vapeurs de mercure sont connues pour être hautement toxiques.

Plus tard, un appareil plus sûr est apparu : un baromètre anéroïde. Dans ce baromètre, le mercure était remplacé par une boîte en carton ondulé en étain fin, dans laquelle un vide était créé. Sous l’influence de l’atmosphère, la boîte se contracte et, grâce à un système de leviers, fait tourner la flèche du cadran. Voilà à quoi ressemblent ces deux baromètres. A gauche se trouve un anéroïde, à droite le baromètre de Torricelli.

Pourquoi pourrions-nous avoir besoin d’un baromètre ? Le plus souvent, cet appareil est utilisé sur les avions pour déterminer l'altitude de vol. Plus l’engin s’élève au-dessus du niveau de la mer, moins le baromètre de bord subit de pression. Connaissant cette dépendance, il est facile de déterminer la hauteur.

Un autre cas d’utilisation courant est une station météo faite maison. Dans ce cas, nous pouvons utiliser les dépendances connues des conditions météorologiques futures à la pression atmosphérique. En plus du baromètre, ces stations sont équipées de capteurs d'humidité et de température.

1. Baromètre électronique

Nous ne pouvons pas utiliser des baromètres aussi volumineux en robotique. Nous avons besoin d'un appareil miniature et économe en énergie qui puisse facilement être connecté au même Arduino Uno. La plupart des baromètres modernes sont fabriqués à l'aide de la technologie MEMS, tout comme les gyrotachomètres et les accéléromètres. Les baromètres MEMS sont basés sur une méthode piézorésistive ou à jauge de contrainte, qui utilise l'effet de modification de la résistance d'un matériau sous l'influence de forces de déformation.

Si vous ouvrez le boîtier du baromètre MEMS, vous pouvez voir l'élément de détection (à droite), qui est situé directement sous le trou dans le boîtier de protection de l'appareil, et la carte de commande (à gauche), qui effectue le filtrage primaire et la conversion des mesures. .

2. Capteurs BMP085 et BMP180

Les capteurs de pression les plus abordables, souvent utilisés dans les contrôleurs de vol et dans divers appareils électroniques faits maison, comprennent les capteurs de BOSH : BMP085 et BMP180. Le deuxième baromètre est plus récent, mais entièrement compatible avec l'ancienne version.

Quelques caractéristiques importantes du BMP180 :

  • plage de valeurs mesurées : de 300 hPa à 1100 hPa (de -500m à +9000m d'altitude) ;
  • tension d'alimentation : de 3,3 à 5 Volts ;
    courant : 5 µA à vitesse d'interrogation - 1 Hertz ;
  • niveau de bruit : 0,06 hPa (0,5 m) en mode ultra faible consommation et 0,02 hPa (0,17 m) en mode résolution avancée.

Connectons maintenant ce capteur au contrôleur et essayons d'estimer la pression atmosphérique.

3. Connexion BMP180

Les deux capteurs disposent d'une interface I2C, ils peuvent donc être facilement connectés à n'importe quelle plateforme de la famille Arduino. Voici à quoi ressemble la table de connexion Arduino Uno.

BMP180 GND VCC S.D.A. SCL
Arduino Uno GND +5V A4 A5

Diagramme schématique

Apparence de la mise en page

4. Programme

Pour travailler avec le capteur, nous avons besoin d'une bibliothèque : BMP180_Breakout_Arduino_Library

Téléchargez-le depuis le référentiel et installez-le dans l'IDE Arduino. Tout est maintenant prêt pour écrire votre premier programme. Essayons d'obtenir des données brutes du capteur et de les envoyer au moniteur du port COM.

#inclure #inclure Pression SFE_BMP180 ; void setup())( Serial.begin(9600); pressure.begin(); ) void loop())( double P; P = getPressure(); Serial.println(P, 4); delay(100); ) double getPressure ()( char status; double T,P,p0,a; status = pression.startTemperature(); if (status != 0)( // attente du délai de mesure de la température (statut); status = pression.getTemperature( T); if (status != 0)( status = pressure.startPressure(3); if (status != 0)( // en attente du délai de mesure de pression (statut); status = pressure.getPressure(P,T); si (statut ! = 0)( return(P); ) ) ) ) )

La procédure pour obtenir la pression souhaitée du capteur n'est pas si triviale et comprend plusieurs étapes. Sous une forme simplifiée, l'algorithme ressemble à ceci :

  1. nous demandons au baromètre les lectures du capteur de température intégré ;
  2. temps d'attente A pendant que le capteur évalue la température ;
  3. nous obtenons la température ;
  4. on demande la pression au baromètre ;
  5. temps d'attente B pendant que le capteur évalue la pression ;
  6. obtenir la valeur de pression ;
  7. renvoie la valeur de pression de la fonction.

Le temps B dépend de la précision de la mesure, qui est spécifiée dans la fonction startPression. Le seul argument de cette fonction peut prendre des valeurs de 0 à 3, où 0 est l'estimation la plus grossière et la plus rapide, 3 est l'estimation de pression la plus précise.

Nous chargeons le programme sur l'Arduino Uno et observons le flux de mesures de pression atmosphérique. Essayons d'élever le capteur au-dessus de votre tête et de l'abaisser au niveau du sol. Les lectures varieront légèrement. Il ne reste plus qu’à trouver comment convertir ces nombres étranges en altitude au-dessus du niveau de la mer.

5. Convertissez la pression en altitude

Le capteur BMP180 renvoie la valeur de pression en hectopascals (hPa). C'est dans ces unités que la pression atmosphérique est habituellement mesurée. 1 hPa = 100 Pascal. On sait qu'au niveau de la mer la pression est en moyenne de 1013 hPa, et chaque mètre supplémentaire au-dessus du niveau de la mer réduira cette pression de seulement 0,11 hPa (environ).

Ainsi, si l’on soustrait du résultat de la fonction obtenirPression le nombre est 1013 et divisez la différence restante par 0,11, nous obtenons alors la hauteur au-dessus du niveau de la mer en mètres. Voici comment notre programme va changer :

Boucle vide())( double P, Alt; P = getPressure(); Alt = (P - 1013)/0.11; Serial.println(Alt, 2); delay(100); )

En réalité, la pression dépend de manière non linéaire de l’altitude au-dessus du niveau de la mer, et notre formule ne convient qu’aux altitudes auxquelles nous vivons habituellement. Heureusement, l’humanité connaît une dépendance plus précise de la pression à la hauteur, que nous pouvons appliquer pour obtenir des résultats plus précis.

Ici p est la pression mesurée en un point donné, p0 est la pression par rapport à laquelle la hauteur est mesurée.

La bibliothèque SFE_BMP180 possède déjà une fonction qui utilise celle spécifiée. formule pour obtenir la hauteur exacte. Nous l'utilisons dans notre programme.

#inclure #inclure Pression SFE_BMP180 ; double P0 = 0 ; void setup())( Serial.begin(9600); pression.begin(); P0 = pression.getPressure(); ) void loop())( double P, Alt; P = getPressure(); Alt = pression.altitude (P ,P0) Serial.println(Alt, 2); délai(100); double getPressure() ( ... )

Je n'ai pas complètement copié la fonction getPressure pour garder le texte lisible.

Une autre variable P0 est apparue dans le programme : c'est la pression que nous mesurerons au début du programme. Dans le cas d'un avion, P0 sera la pression au site de décollage par rapport à laquelle on va commencer à monter.

6. Visualisation

Essayons maintenant d'afficher les lectures de pression dans le programme SFMoniteur, et voyons comment la pression change lorsque le capteur se déplace à une hauteur de 2 mètres.

Octet const statique PACKET_SIZE = 1 ; octet const statique VALUE_SIZE = 2 ; static const booléen SEPARATE_VALUES = true ; #inclure #inclure #inclure Pression SFE_BMP180 ; SerialFlow rd(&Série); double P0 = 0 ; void setup())( rd.setPacketFormat(VALUE_SIZE, PACKET_SIZE, SEPARATE_VALUES); rd.begin(9600); pressure.begin(); P0 = getPressure(); ) void loop())( double P; P = getPressure( rd.setPacketValue(100+int((P - P0)*100)); rd.sendPacket(100) double getPressure( ... );

Grâce au programme, nous obtenons un graphique de pression en Pascals :

7. Conclusion

Comme nous l’avons appris dans cette leçon, déterminer l’altitude au-dessus du niveau de la mer n’est pas une tâche si triviale. Non seulement la pression dépend de l’altitude de manière non linéaire, mais le tableau est également gâché par divers facteurs externes. Par exemple, la pression dans notre maison change constamment au fil du temps. Même en quelques minutes, la hauteur mesurée par notre appareil peut varier de 0,5 à 1 mètre. La température affecte également grandement la qualité des mesures, nous devons donc en tenir compte lors du calcul de la pression.

Pour les avions, il est recommandé d'utiliser des capteurs de haute précision comme le MS5611. La précision de mesure de ce baromètre peut atteindre 0,012 hPa, soit 5 fois meilleure que celle du BMP180. De plus, les coordonnées GPS sont utilisées pour clarifier l'altitude barométrique du vol.

Bonne chance pour observer l'atmosphère ! 🙂

Salutations collègues!
Parce que En hiver, le temps n'est généralement pas propice au vol, ce qui signifie qu'il y a beaucoup de temps libre, qu'il serait bien d'occuper avec quelque chose pour que le cerveau ne se dessèche pas à cause de l'oisiveté. J'ai récemment décidé de maîtriser un sujet de holivars féroces et de débats houleux, à savoir : le microcontrôleur Atmega328 dans l'implémentation Arduino.
Je vous demande fortement de ne pas lancer un débat sur Arduina lui-même ; il existe une tonne d'informations sur tous ses avantages et inconvénients sur Internet.
Donc, compte tenu des spécificités du site, je pense que ce n'est pas tout à fait le sujet de parler de "maison intelligente", nous allons donc construire un altimètre barométrique avec un affichage LED à trois chiffres et sept segments basé sur Arduino.

Plus de détails ?


Je dirai tout de suite que je ne prétends pas être original ou innovant ; il existe de nombreux projets similaires sur Internet. Mais je n'ai rien trouvé de similaire sur cette ressource en cherchant, j'ai donc décidé de le publier, au cas où cela pourrait être utile à quelqu'un.
Encore une fois, j'ai écrit le code moi-même, donc si ce sont uniquement des trucs indiens, ne le jugez pas trop sévèrement =) J'apprends encore. La dernière fois que j'ai programmé des contrôleurs, c'était au cours de ma 4ème année à l'institut, il y a plus de 10 ans =) Les critiques compétentes et constructives sont les bienvenues !
Je vais essayer d'expliquer clairement et en détail comment assembler un tel appareil ; une personne avec presque n'importe quel niveau de formation peut le gérer, je pense.

Le principal avantage de cet appareil est son prix. Même dans la vie et les taux de change d’aujourd’hui, vous pouvez dépenser 350 roubles, ce qui en général n’est pas de l’argent. Vous aurez également besoin de mains droites et de la capacité de manipuler un fer à souder.

Fonctions de l'appareil :
-Mesurer la hauteur actuelle et l'afficher sur l'écran LED.
- Mémorisation de la valeur d'altitude maximale survenue depuis la mise sous tension.
- Affichage de la hauteur maximale en appuyant sur un bouton.
-Enregistrement de la valeur de hauteur maximale dans la mémoire non volatile (EEPROM) du contrôleur (enregistrée après la mise hors tension).
- Lire la hauteur maximale stockée dans l'EEPROM et l'afficher sur l'écran.

Le point de référence zéro est l’altitude à laquelle l’appareil a été mis sous tension.

Ce dont vous aurez besoin (entre parenthèses se trouvent des mots-clés pour rechercher sur toutes sortes d'ebays, etc.)
- Microcontrôleur Arduino, en principe, presque tout le monde fera l'affaire si le code est adapté, mais tout a été assemblé et testé sur la base (Arduino Nano).

- capteur d'altitude barométrique avec bus I2C (BMP085).

- affichage LED à trois chiffres et sept segments avec une anode commune (7-Segment LED Display).
- des fils pour relier le tout en un seul tout, j'en ai utilisé des tout faits avec des connecteurs, mais ce n'est pas du tout nécessaire (Dupont Wire).

- bouton, n'importe lequel sans fixer la position fera l'affaire (bouton poussoir du commutateur tactile). Par exemple ceci :
- résistance de 1KOhm à 10KOhm.
- trois résistances de 100 Ohm.
- un fer à souder avec tous les gobelets et la possibilité de s'en servir.
-Logiciel Arduino.

Facultatif:
- carte de développement pour le câblage de l'affichage.

Pour ceux qui sont complètement hors sujet. Avant d'essayer d'assembler l'appareil et d'approfondir le code, je vous recommande fortement de visiter et de lire plusieurs ressources :
Introduction au sujet, exemples simples.
À propos de la connexion d'un écran à sept segments avec des exemples.
Description du capteur, exemples, bibliothèques.
Cela ne prendra pas beaucoup de temps, cela améliorera grandement votre compréhension =)

Tout d’abord, un peu sur l’affichage.
Un afficheur LED à sept segments avec une anode commune est un assemblage de LED comme celui-ci (encerclé en rouge sur l'image) :
Si vous regardez de plus près le schéma, vous verrez qu'une seule des décharges peut s'allumer à la fois, c'est-à-dire Pour afficher un numéro à trois chiffres, vous devez allumer et éteindre chaque chiffre tour à tour, et cela très rapidement. Par conséquent, les chiffres clignoteront quoi qu'il arrive, l'essentiel est que ce scintillement soit suffisamment fréquent et ne soit pas perçu par l'œil comme un scintillement. Cela signifie que l'Arduino fonctionnera également comme un contrôleur pour cet affichage, dessinant essentiellement tour à tour les nombres qui composent le nombre égal à la hauteur actuelle.
Permettez-moi de faire une réservation tout de suite : vous pouvez acheter une solution toute faite avec un contrôleur intégré, mais cela coûte 5 fois plus cher, et je n'ai pas trouvé d'implémentation adaptée lors de la recherche, car... J'en voulais vraiment un 3 bits, mais de plus en plus de 4 bits sont en vente.
D'ailleurs, étant donné que l'affichage est à trois chiffres, la hauteur maximale qu'il peut afficher = 999 m. En principe, l'appareil peut être facilement adapté pour un affichage à 4 chiffres, mais le programme devra être légèrement modifié. Quiconque comprend le code à 3 chiffres peut facilement l'adapter à 4 chiffres.
En conséquence, malgré les problèmes apparus avec ce scintillement, nous avons réussi à obtenir des résultats plus ou moins acceptables, nous y reviendrons plus loin, car Les problèmes sont dus au capteur de hauteur.
Plus de détails sur le capteur.
Le capteur est barométrique, c'est-à-dire détermine les changements d'altitude en fonction des changements de pression atmosphérique. En fait, le capteur ne mesure que la pression atmosphérique ; le code de la bibliothèque du capteur se charge de calculer l'altitude en fonction de la pression. Dans ce cas, le capteur dispose d'un ADC intégré et d'une interface I2C, c'est-à-dire Il donne la valeur mesurée sous forme numérique, ce qui est sans aucun doute un plus. Il existe une bibliothèque prête à l'emploi pour travailler avec le capteur. J'ai utilisé la première version, elle est moins gourmande en ressources et plus facile à intégrer dans le code. La fonctionnalité de la bibliothèque vous permet d'ajuster la précision des mesures sur une échelle de 0 - la plus petite précision, à 3 - la plus grande précision (voir code). Même si, pour être honnête, je n’ai pas remarqué beaucoup de différence entre les niveaux supérieurs à 0. L’erreur de mesure est d’environ 1 mètre, ce qui est généralement tout à fait acceptable. Le résultat de la mesure est l'altitude absolue au-dessus du niveau de la mer à pression atmosphérique normale. Mais c'est tout simplement complètement inintéressant. D'un autre côté, en utilisant Arduino et des opérations mathématiques simples, vous pouvez facilement calculer la hauteur relative, ce qui a été fait.
Mais il y avait un problème : l'interrogation du capteur à l'aide de la fonction standard prend beaucoup de temps, et étant donné que l'Arduino est également un contrôleur d'affichage à sept segments, des effets spéciaux assez amusants ont été obtenus, c'est-à-dire lors de l'interrogation du capteur, la sortie d'affichage s'est arrêtée d'elle-même et donc le numéro affiché à ce moment-là était allumé un peu plus longtemps que les autres. Le résultat fut ce type de guirlande de trois éléments.
En fin de compte, après avoir joué avec les retards et sélectionné la période d’interrogation optimale du capteur, nous avons réussi à obtenir une absence presque totale de scintillement. De plus, il n'est pas nécessaire d'interroger le capteur à chaque cycle de programme ; la hauteur change toujours à une vitesse limitée. Mais le scintillement du premier chiffre dû à une erreur et à des interrogations trop fréquentes du capteur n'est pas beau.
En principe, si j’avais de meilleures compétences, je pourrais réécrire la bibliothèque de capteurs, mais je ne suis pas encore prêt. Et dans cette mise en œuvre, il remplit pleinement ses fonctions, le reste n'est que paroles.
La sortie des nombres a été commutée sur interruption, le scintillement a été éliminé et le croquis a été mis à jour.
C’est ici que je terminerai probablement ma brève excursion dans les éléments de l’appareil et passerai à l’assemblage.

Schéma de connexion des éléments de l'appareil (cliquable) :


Anticipant les questions de la série « quoi, je ne pouvais pas dessiner un diagramme normal ?! » Je dirai que je pourrais, mais pour les non-initiés, je pense que cette option serait plus facile à comprendre, mais pour les initiés, cela n'a pas d'importance, et donc le schéma se lit normalement. J'ai trouvé le brochage à sept segments uniquement pour la version à quatre bits ; la version à trois bits diffère simplement par l'absence de la 6ème patte.

Quant à l'alimentation de l'appareil : l'Arduino dans sa forme originale peut normalement survivre de 7V à 16V, dans les cas extrêmes de 6V à 20V. Mais, étant donné que j'avais un clone chinois, je n'ai pas tenté de viles expériences, mais la batterie LiPo 3S fonctionne sans problème.
Il est conseillé d'emballer le capteur de manière à ce que l'accès à l'air soit libre, tout en excluant en même temps le flux d'air direct dans le trou du capteur, par exemple en le recouvrant de caoutchouc mousse.
Je recommande de retirer les LED RX et TX de la carte Arduino, car... ils sont connectés en parallèle aux broches numériques 0 et 1, c'est pourquoi les segments connectés à ces broches brilleront avec moins de luminosité.

L'ampleur de la pression atmosphérique, la vitesse et la nature de ses changements jouent un rôle important dans la prévision du temps et influencent également grandement le bien-être des personnes sensibles à la dépendance météorologique - maladies associées à divers phénomènes météorologiques. Les baromètres sont utilisés pour mesurer la pression atmosphérique. Un baromètre anéroïde mécanique a deux aiguilles. L'un montre la pression actuelle. Une autre flèche, qui peut être réglée manuellement sur n'importe quelle position, vous permet de marquer la valeur mesurée afin de déterminer la tendance des changements de pression atmosphérique au fil du temps. Il est hautement souhaitable que le baromètre électronique indique également non seulement la valeur de la pression atmosphérique, mais permette également de déterminer s'il y a une augmentation ou une diminution et à quelle vitesse le paramètre mesuré change.

Les stations météo domestiques bon marché n'affichent que des pictogrammes de gouttes de pluie, de nuages ​​ou de soleil. Il est difficile de dire comment ces icônes sont liées à la pression atmosphérique et si cette station météo dispose d'un capteur barométrique ou utilise d'autres méthodes créatives pour prédire la météo. Les stations météorologiques plus avancées affichent la valeur actuelle de la pression sous la forme d'un nombre et l'évolution de la pression au cours des heures précédentes sous la forme d'un graphique à barres approximatif, qui a une fonction principalement décorative. De telles stations météorologiques sont nettement plus chères. Il existe également sur le marché des appareils très avancés conçus pour les marins, les plaisanciers, etc., qui affichent à la fois les changements de pression et la valeur actuelle avec une grande précision, mais ces appareils sont très coûteux.

Cette publication présente un simple baromètre fait maison qui montre l'ampleur et le taux de changement de la pression atmosphérique, ainsi que la température de l'air.

L'apparence de l'appareil est montrée sur la photographie.

Les résultats de mesure sont affichés sur un écran de synthèse de caractères à deux lignes. La première ligne affiche le résultat de la mesure de la pression atmosphérique actuelle en mmHg, l'écart de la valeur de pression actuelle par rapport à la valeur moyenne pour un emplacement donné (l'excédent de la valeur de pression actuelle au-dessus de la moyenne est considéré comme positif), ainsi que le température de l'air en degrés Celsius. Les données affichées sur la ligne supérieure sont mises à jour toutes les 6 secondes. La sortie de nouvelles données s'accompagne d'un clignotement de la LED située au dessus de l'indicateur.

La deuxième ligne de l'indicateur affiche les incréments de pression pour la dernière heure, trois heures et dix heures. Si la pression a augmenté au cours de la période de temps spécifiée, l'incrément correspondant est affiché avec un plus, sinon avec un moins. Les données de la deuxième ligne sont mises à jour toutes les 10 minutes. Immédiatement après avoir allumé le baromètre, la deuxième ligne sera vide. Des valeurs numériques y apparaîtront respectivement après 1 heure, 3 heures et 10 heures.

Le baromètre est conçu pour fonctionner dans une pièce sèche et chauffée à une température de 0...40 °C et une pression atmosphérique de 600...825 mm Hg. Art.

La précision de la mesure de la pression et de la température est entièrement déterminée par la précision du capteur de pression Bosch BMP180 utilisé. L'erreur typique de mesure de pression est de -1hPa, ce qui correspond approximativement à 0,75 mmHg. La composante sonore lors de la mesure de la pression est de 0,02 hPa (0,015 mmHg). L'erreur typique de mesure de température autour de 25°C est de +/- 0,5°C. Des caractéristiques techniques plus détaillées du capteur BMP180 sont disponibles dans les spécifications techniques. description dans la demande.

Les intervalles de temps dans cet appareil sont comptés par programme. L'erreur dans la formation de ces intervalles, mesurée par l'auteur, n'excède pas une minute toutes les 10 heures.

Le schéma du baromètre est présenté sur la figure.

L'élément principal de l'appareil est le module Arduino Nano. L'auteur a utilisé la version 3 avec le microcontrôleur ATmega 328. Dans ce cas, la mémoire du module n'est occupée que par un tiers, il est donc possible d'utiliser le module Arduino Nano avec le microcontrôleur ATmega 168.

L'écran Winstar WH1602L est à deux lignes avec 16 caractères dans chaque ligne. Sa base est le contrôleur HD44780. La résistance R2 vous permet d'ajuster le contraste de l'image. Si la tension à la broche 3 (Vo) s'écarte considérablement de la tension optimale, aucune image ne sera visible sur l'écran. Cette circonstance doit être prise en compte lors de la première mise sous tension de l'appareil. Pour l'instance d'affichage utilisée par l'auteur, la tension optimale à la broche 3 était d'environ 1 V. La résistance R3 détermine la valeur actuelle des LED de rétroéclairage.

Le capteur de pression BMP180 possède un boîtier métallique mesurant 3,6x3,6x1 mm. Ses conclusions sont des plages de contact situées au bas du boîtier. De plus, le capteur nécessite une alimentation de 1,8 à 3,6 V. Les niveaux de signal que le capteur échange avec un appareil externe diffèrent également de ceux requis. Ces circonstances rendent difficile l’utilisation directe du BMP180. Heureusement, ce problème est facilement résolu. Des modules basés sur les capteurs BMP180 sont disponibles à la vente, qui incluent les capteurs eux-mêmes et tous les éléments correspondants. Ces modules sont une carte de 10x13 mm. Leur coût est d'environ 1,4 USD. L'apparence du module est montrée sur la photo suivante.

La LED HL1 clignote toutes les 6 secondes, signalant que de nouveaux résultats ont été affichés sur l'écran du baromètre. L'auteur a utilisé une LED verte d'un diamètre de 3 mm L-1154GT de Kingbright.
Le condensateur C1 a une capacité assez importante, ce qui rend l'appareil insensible aux coupures de courant de courte durée. Si cela n'est pas requis, C1 peut être réduit à 500 microfarads.
La diode D1 éteint le rétroéclairage de l'indicateur en cas de panne de courant. Cela augmente la durée de vie de la batterie du baromètre grâce à l'énergie stockée dans le condensateur C1.

L'appareil peut être alimenté à partir de n'importe quelle source CC (chargeur de téléphone portable, alimentation de n'importe quel gadget, etc.) avec une tension de sortie de 8...12 V. À une tension de 9 V, le baromètre consomme environ 80 mA.

L'appareil est assemblé sur une maquette de 85 x 55 mm, qui est fixée à l'écran à l'aide d'une plaque en plexiglas.

Le capteur BMP180 est situé en bas, le plus loin possible des principaux éléments générateurs de chaleur, que sont la résistance R3 et l'écran rétroéclairé par LED. Le corps de l'appareil est une boîte en plastique mesurant 160x160x25. Une série de trous de ventilation doivent être percés dans les parois inférieure et supérieure de la boîte.

Le croquis qui doit être flashé dans la mémoire du module Arduino Nano est présenté dans l'application. L'auteur a utilisé l'IDE Arduino 1.8.1. Pour prendre en charge le capteur de pression, la bibliothèque Adafruit-BMP085 doit être installée. Le fichier correspondant est inclus en pièce jointe.

Avant de charger le croquis, à la ligne 17, au lieu du chiffre 740.0, qui correspond à la pression moyenne au lieu d'installation du baromètre de l'auteur, inscrivez la pression moyenne en mm. art. Art. , correspondant à l'emplacement où sera installé votre baromètre. En première approximation, ce paramètre peut être déterminé par la formule Рср = 760 - 0,091h, où h est la hauteur au-dessus du niveau de la mer en mètres. Le moyen le plus simple de déterminer la hauteur consiste à utiliser un navigateur GPS.

Cette formule ne prend pas en compte de nombreux facteurs affectant la pression atmosphérique et n'est applicable que pour des altitudes allant jusqu'à 500 m. Une description des moyens de déterminer plus précisément la pression moyenne dépasse le cadre de cette publication. On les trouve dans de nombreux documents sur la météorologie disponibles sur Internet.

Liste des radioéléments

Désignation Taper Dénomination Quantité NoteBoutiqueMon bloc-notes
A1 Module avec capteur BMP180 1 Vers le bloc-notes
A2 Carte Arduino

Arduino-Nano 3.0

1 Vers le bloc-notes
VD1 Diode redresseur

1N4007

1 Vers le bloc-notes
HG1 Écran LCDWH1602L1 Winstar Vers le bloc-notes
HL1 DIRIGÉL-1154GT1 Roi brillant Vers le bloc-notes
C1 Condensateur électrolytique4 700 uF x 16 V1

Le BMP085 est un capteur permettant de surveiller la pression barométrique (il surveille également la température).

Le capteur est utilisé dans de nombreux projets, y compris ceux utilisant Arduino, car il n'a pratiquement pas d'analogue. De plus, il est également peu coûteux. La première question qui se pose est la suivante : pourquoi mesurerait-on la pression atmosphérique ? Il y a deux raisons à cela. La première consiste à contrôler l’altitude au-dessus du niveau de la mer. À mesure que l’altitude augmente, la pression diminue. Très pratique en randonnée, comme alternative aux navigateurs GPS. De plus, la pression atmosphérique est utilisée pour prévoir la météo.

Le BMP085 a été remplacé par le capteur BMP180, qui se connecte à Arduino et à d'autres microcontrôleurs de la même manière que son prédécesseur, mais est plus petit et coûte moins cher.

Caractéristiques techniques du BMP085

  • Plage de sensibilité : 300-1 100 hPa (9 000 m - 500 m au-dessus du niveau de la mer) ;
  • Résolution : 0,03 hPa / 0,25 m ;
  • Température de fonctionnement -40 à +85°C, précision de la mesure de la température +-2°C ;
  • Connexion via i2c ;
  • V1 sur le module utilise une alimentation de 3,3 V et une alimentation logique ;
  • V2 sur le module utilise une alimentation de 3,3 à 5 V et une alimentation logique ;

Après avoir redémarré l'IDE Arduino, vous pouvez exécuter le premier exemple de croquis, dont le code est donné ci-dessous :

#inclure <Wire.h>

#include <Adafruit_Sensor.h>

#include <Adafruit_BMP085_U.h>

Adafruit_BMP085_Unified bmp = Adafruit_BMP085_Unified(10085);

annuler la configuration (vide)

Série.begin(9600);

Serial.println("Test du capteur de pression"); Série.println("");

/* Initialiser le capteur */

si(!bmp.begin())

/* Si le message apparaît : "Un problème est survenu lors de la détection du BMP085...",

Vérifiez que le capteur est correctement connecté */

Serial.print("Oups, aucun BMP085 détecté... Vérifiez votre câblage ou votre ADDR I2C !");

événement capteurs_event_t ;

bmp.getEvent(&event);

/* afficher les résultats (la pression barométrique est mesurée en hPa) */

si (événement.pression)

/* Afficher la pression atmosphérique en hPa */

Serial.print("Pression : "); Serial.print(event.pression); Serial.println("hPa");

Ouvrez la fenêtre du moniteur série (débit en bauds - 9600). Notre croquis devrait produire des données de pression en hPa (hectopascals). Vous pouvez vérifier la fonctionnalité du capteur en appuyant votre doigt sur le capteur. La figure montre les valeurs de pression après avoir appuyé avec le doigt.


Mesurer l'altitude au-dessus du niveau de la mer

Vous savez probablement que la pression diminue avec l’altitude. Autrement dit, nous pouvons calculer la hauteur en connaissant la pression et la température. Encore une fois, nous laisserons les mathématiques dans les coulisses. Si les calculs vous intéressent, vous pouvez les consulter sur cette page Wikipédia.

Dans l'exemple ci-dessous, la bibliothèque Arduino supplémentaire sera utilisée. Pour calculer la hauteur à l'aide du capteur BMP085, mettez à jour la fonction "void loop()". Les modifications nécessaires au croquis sont indiquées dans le croquis ci-dessous. En conséquence, vous obtiendrez la valeur de température en fonction du niveau de pression et de la valeur de température.

/* crée un nouvel événement pour le capteur */

événement capteurs_event_t ;

bmp.getEvent(&event);

/* affichage des résultats (pression barométrique en hPa) */

si (événement.pression)

/* affiche la pression atmosphérique en hPa */

Serial.print("Pression : ");

Serial.print(event.pression);

Serial.println("hPa");

/* pour calculer la hauteur avec une certaine précision, il faut savoir *

* pression moyenne et température ambiante

*en degrés Celsius au moment où les mesures ont été prises*

* si vous ne disposez pas de ces données, vous pouvez utiliser la "valeur par défaut"

* qui est égal à 1013,25 hPa (cette valeur est définie comme

*SENSORS_PRESSURE_SEALEVELHPA*

* dans le fichier capteurs.h). Mais les résultats ne seront pas précis*

*les valeurs requises peuvent être trouvées sur les sites Web proposant des prévisions de température*

*ou sur les ressources des centres d'information des grands aéroports*

*par exemple, pour Paris, France, vous pouvez trouver la valeur de pression moyenne actuelle*

*via le site internet : http://bit.ly/16Au8ol*/

/* récupère la valeur de température actuelle du capteur BMP085 */

température du flotteur ;

bmp.getTemperature(&température);

Serial.print("Température : ");

Serial.print (température);

Série.println("C");

/* convertit les données reçues en hauteur */

/* met à jour la ligne suivante avec les valeurs actuelles */

flotteur seaLevelPressure = SENSORS_PRESSURE_SEALEVELHPA ;

Serial.print("Altitude : ");

Serial.print(bmp.pressionToAltitude(seaLevelPressure,

Série.println("m");

Série.println("");

Serial.println("Erreur du capteur");

Nous exécutons le croquis et voyons l'altitude calculée au-dessus du niveau de la mer.

La précision des lectures du BMP085 peut être considérablement augmentée en spécifiant la valeur de pression moyenne, qui varie en fonction de la météo. Chaque hPa de pression que nous n'avons pas pris en compte entraîne une erreur de 8,5 mètres !

La figure ci-dessous montre les valeurs de pression provenant de l'une des ressources d'information d'un aéroport européen. La valeur de pression est surlignée en jaune, ce qui nous permet de clarifier les résultats.


Modifions la ligne suivante dans notre croquis, en y écrivant la valeur actuelle (1009 hPa) :

flotteur seaLevelPressure = 1009 ;

En conséquence, nous obtiendrons des résultats légèrement différents :

Astuce : lorsque vous précisez la pression, n'oubliez pas de convertir les données utilisées en hPa.

Utilisation de BMP085 (API v1)

Répétons-le encore une fois : pour connaître la pression et l'altitude au-dessus du niveau de la mer, nous devons effectuer quelques calculs. Mais tous sont déjà inclus dans la bibliothèque Arduino Adafruit_BMP085 (API v1), qui peut être téléchargée à partir du lien.

Après avoir installé les bibliothèques, vous devez redémarrer l'IDE Arduino

Après le redémarrage, vous pouvez exécuter le premier exemple de croquis :

#inclure <Wire.h>

Adafruit_BMP085 bmp;

Série.begin(9600);

Serial.println(" *C");

Serial.print("Pression = ");

Serial.println("Pa");

Serial.println();

Après avoir flashé votre Arduino, ouvrez le moniteur série. Réglez le débit en bauds sur 9600. Le croquis affichera la température en degrés Celsius et la pression en pascals. Si vous placez votre doigt sur l'élément sensible du capteur, la température et la pression augmenteront :


Mesure d'altitude (API v1)

Pour contrôler l'altitude, exécutez simplement le croquis ci-dessous :

#inclure <Wire.h>

#inclure <Adafruit_BMP085.h>

Adafruit_BMP085 bmp;

Série.begin(9600);

Serial.print("Température = ");

Serial.print(bmp.readTemperature());

Serial.println(" *C");

Serial.print("Pression = ");

Serial.print(bmp.readPressure());

Serial.println("Pa");

// calcule l'altitude au dessus du niveau de la mer en fonction des valeurs

//Pression barométrique "standard" égale à 1013,25 millibars = 101325 Pascal

Serial.print("Altitude = ");

Serial.print(bmp.readAltitude());

Serial.println("mètres");

Serial.println();

Exécutez l'esquisse pour afficher les résultats :


A en juger par les relevés ci-dessus, nous sommes à une altitude de -21,5 mètres par rapport au niveau de la mer. Mais nous savons que nous sommes au-dessus de la mer ! On se souvient du même problème que lors de l'utilisation de l'API V2. Il faut tenir compte de la météo ! D'ACCORD. Disons que nous trouvons un site Web météo et que la pression est de 101,964 Pa. Ouvrez l'exemple Exemples->BMP085test dans l'IDE Arduino et modifiez la ligne mise en surbrillance dans la figure ci-dessous :


Dans cette ligne, vous devez saisir les données de pression actuelles. Après un nouveau lancement, vous constaterez que les données ont radicalement changé et nous avons obtenu 29,58 mètres avec un signe plus, ce qui est beaucoup plus proche de la vérité.


Laissez vos commentaires, questions et partagez vos expériences personnelles ci-dessous. Les nouvelles idées et projets naissent souvent des discussions !

Les capteurs de pression atmosphérique bmp180, bmp280, bme280 sont des invités fréquents dans les projets d'ingénierie. Ils peuvent être utilisés pour prédire la météo ou mesurer l’altitude au-dessus du niveau de la mer. Aujourd'hui, cette gamme particulière peut être considérée comme le capteur Arduino le plus populaire et le moins cher. Dans cet article nous décrirons le principe de fonctionnement des capteurs, le schéma de connexion aux différentes cartes Arduino et donnerons des exemples de croquis de programmation.

Un baromètre est un appareil qui mesure la pression atmosphérique. Les baromètres électroniques sont utilisés en robotique et dans divers appareils électroniques. Les capteurs de pression les plus courants et les plus abordables proviennent de BOSH : BMP085, BMP180, BMP280 et autres. Les deux premiers sont très similaires, le BMP280 est un capteur plus récent et plus amélioré.

Les capteurs de pression fonctionnent en convertissant la pression en mouvement d'une pièce mécanique. Le capteur de pression se compose d'un transducteur avec un élément sensible, un boîtier, des éléments mécaniques (diaphragmes, ressorts) et un circuit électronique.

Le capteur BMP280 est conçu spécifiquement pour les applications où une petite taille et une consommation d'énergie réduite sont requises. Ces applications incluent les systèmes de navigation, les prévisions météorologiques, l'indication de la vitesse verticale, etc. Le capteur a une grande précision, une bonne stabilité et linéarité. Caractéristiques techniques du capteur BMP280 :

  • Dimensions 2 x 2,5 x 0,95 mm.
  • Pression 300-1 100 hPa ;
  • Températures de 0C à 65C;
  • Prise en charge des interfaces I2C et SPI ;
  • Tension d'alimentation 1,7 V – 3,6 V ;
  • Courant moyen 2,7 µA ;
  • 3 modes de fonctionnement - mode veille, mode FORCÉ (prise de mesures, lecture de la valeur, passage en mode veille), mode NORMAL (passage du capteur en fonctionnement cyclique - c'est-à-dire que l'appareil sort automatiquement du mode veille après un temps défini, prend des mesures, lit les lectures, enregistre les valeurs mesurées et revient en mode veille).

Le capteur BMP180 est un capteur tactile peu coûteux et facile à utiliser qui mesure la pression barométrique et la température. Généralement utilisé pour déterminer l’altitude et dans les stations météorologiques. L'appareil se compose d'un capteur piézorésistif, d'un capteur de température, d'un CAN, d'une mémoire non volatile, d'une RAM et d'un microcontrôleur.

Caractéristiques techniques du capteur BMP180 :

  • Les limites de pression mesurée sont de 225 à 825 mm Hg. Art.
  • Tension d'alimentation 3,3 – 5 V ;
  • Courant 0,5 mA ;
  • Prise en charge des interfaces I2C ;
  • Temps de réponse 4,5 ms ;
  • Dimensions 15 x 14 mm.

Le capteur bme280 contient 3 appareils - pour mesurer la pression, l'humidité et la température. Conçu pour une faible consommation de courant, une fiabilité élevée et un fonctionnement stable à long terme.

Caractéristiques techniques du capteur bme280 :

  • Dimensions 2,5 x 2,5 x 0,93 mm ;
  • Boitier LGA métal équipé de 8 sorties ;
  • Tension d'alimentation 1,7 – 3,6 V ;
  • Disponibilité des interfaces I2C et SPI ;
  • Consommation de courant en veille 0,1 µA.

Si l’on compare tous les appareils entre eux, les capteurs sont très similaires. Comparé à son prédécesseur, le BMP180, le nouveau capteur BMP280 est nettement plus petit. Son boîtier miniature à huit broches nécessite des précautions lors de l'installation. L'appareil prend également en charge les interfaces I2C et SPI, contrairement à ses prédécesseurs, qui ne prenaient en charge que I2C. Il n'y a pratiquement aucun changement dans la logique de fonctionnement du capteur ; seule la stabilité de la température a été améliorée et la résolution de l'ADC a été augmentée. Le capteur BME280, qui mesure la température, l'humidité et la pression, est également similaire au BMP280. La différence entre eux réside dans la taille du boîtier, puisque le BME280 dispose d'un capteur d'humidité, ce qui augmente légèrement les dimensions. Le nombre de contacts et leur emplacement sur le corps sont les mêmes.

Options de connexion pour Arduino

Connexion du capteur BMP180 à Arduino. Pour vous connecter, vous aurez besoin du capteur BMP180 lui-même, de la carte Arduino UNO et des fils de connexion. Le schéma de connexion est présenté dans la figure ci-dessous.

La masse de l'Arduino doit être connectée à la masse du capteur, la tension est de 3,3 V, SDA est à la broche A4, SCL est à la broche A5. Les broches A4 et A5 sont sélectionnées en fonction de leur prise en charge de l'interface I2C. Le capteur lui-même fonctionne sur une tension de 3,3 V et l'Arduino fonctionne sur 5 V, un stabilisateur de tension est donc installé sur le module avec le capteur.

Connexion du BMP 280 à Arduino. Le brochage et la vue de dessus de la carte sont illustrés sur la figure.

Le module capteur de pression lui-même ressemble à ceci :

Pour vous connecter à Arduino, vous devez connecter les sorties comme suit : connecter la masse à Arduino et sur le capteur, VCC - à 3,3V, SCL/SCK - à la broche analogique A5, SDA/SDI - à A4.

Connexion du capteur BME280. L'emplacement des contacts et le brochage du capteur BME280 sont les mêmes que ceux du BMP280.

Étant donné que le capteur peut fonctionner via I2C et SPI, la connexion peut être mise en œuvre de deux manières.

Lors de la connexion via I2C, vous devez connecter les broches SDA et SCL.

Lors de la connexion via SPI, vous devez connecter SCL du module et SCK (13ème broche sur Arduino), SDO du module à la broche 12 de l'Arduino, SDA à la broche 11, CSB (CS) à n'importe quelle broche numérique, dans ce cas pour broche 10 sur Arduino. Dans les deux cas, la tension est connectée à 3,3V sur l'Arduino.

Description de la bibliothèque pour travailler avec le capteur. Exemple d'esquisse

Pour travailler avec le capteur BMP180, il existe différentes bibliothèques qui simplifient le travail. Il s'agit notamment de SFE_BMP180, Adafruit_BMP085. Les mêmes bibliothèques conviennent pour travailler avec le capteur BMP080. Le capteur bmp280 utilise une bibliothèque similaire, Adafruit_BMP280.

Le premier croquis de test permettra au capteur de lire la pression et la température. Le code convient aussi bien aux capteurs BMP180 qu'à BMP280, il vous suffit de connecter la bonne bibliothèque et de spécifier les bons contacts auxquels le module est connecté. Tout d'abord, vous devez connecter toutes les bibliothèques dans le code et initialiser le fonctionnement du capteur. Pour déterminer la pression, vous devez d’abord connaître la température. L'élément de code suivant est utilisé pour cela.

Status = pression.startTemperature();// Lecture des données de température du capteur if(status!=0)( delay(status); // État d'attente = pression.getTemperature(T); // Sauvegarde des données de température reçues if( status !=0)( Serial.print("Temperature: "); // Affiche le mot "Température" Serial.print(T,2); // Affiche la valeur de la température. Serial.println("deg C, "); //Imprime le symbole Celsius.

Ensuite, vous devez obtenir des informations sur la pression atmosphérique.

Statut = pression.startPressure(3); // la pression est lue if(status!=0)( delay(status); // État d'attente = pression.getPressure(P,T); // la pression est reçue, enregistrée if(status!=0)( Serial.print ( "Pression absolue : "); // Affiche les mots "Pression atmosphérique" Serial.print(P,2); // Affiche la valeur de la variable mBar Serial.print(" mbar, "); print(P*0.7500637554192,2); // affiche la valeur en mmHg (mmHg) Serial.println(" mmHg");) // affiche l'unité de pression "mmHg" " (mm.Hg).

Après avoir chargé le croquis, les données sur la température et la pression atmosphérique apparaîtront dans la fenêtre de surveillance du port.

Le capteur BME280 affiche également la pression et la température. Il peut en outre lire les valeurs d'humidité, qui sont désactivées par défaut. Si nécessaire, vous pouvez régler le capteur et commencer à lire les lectures d'humidité. Plage de mesure de 0 à 100 %. La bibliothèque nécessaire pour travailler avec le capteur s'appelle Adafruit_BME280.

Le code est similaire à celui décrit ci-dessus, seules les lignes de détermination de l'humidité y sont ajoutées.

Void printValues() ( Serial.print("Temperature = "); Serial.print(bme.readTemperature()); Serial.println(" C"); //détermination de la température, affichage à l'écran en degrés Celsius. Serial. print("Pressure = "); Serial.print(bme.readPressure() / 100.0F); Serial.println(" hPa"); //détermine la pression, affiche-la Serial.print("Humidity = ") ; Serial.print(bme.readHumidity()); Serial.println(" %"); //détermination de l'humidité en pourcentage, affichage de la valeur mesurée Serial.println();

Erreurs de connexion possibles et leur élimination

L'erreur la plus courante concerne les données incorrectes sur la pression et la température, qui diffèrent de plusieurs ordres de grandeur de la valeur réelle. La raison en est le plus souvent une connexion incorrecte - par exemple, la bibliothèque indique qu'elle doit être connectée via I2C, mais le capteur est connecté via SPI.

De plus, lorsque vous utilisez des capteurs « chinois », vous pouvez rencontrer des adresses I2C ou SPI non standard. Dans ce cas, il est recommandé de scanner tous les appareils connectés à l'aide de l'un des croquis populaires et de découvrir à quelle adresse répond votre capteur de pression.

Un autre problème peut être une différence entre la tension de fonctionnement du module et la tension de base du contrôleur utilisé. Ainsi, pour travailler avec un capteur de 3,3 V, vous devrez créer un diviseur de tension ou utiliser l'un des modules d'adaptation de niveau prêts à l'emploi existants. À propos, ces modules sont assez bon marché et il est recommandé aux débutants de les utiliser.

De petits écarts par rapport à la valeur réelle peuvent être dus à l'étalonnage du capteur. Par exemple, pour le capteur BMP180, toutes les données sont calculées et spécifiées dans un croquis. Pour obtenir une valeur d'altitude plus précise, vous devez connaître la pression actuelle au-dessus du niveau de la mer pour ces coordonnées.

Conclusion

Les capteurs de pression atmosphérique bmp180, bmp280 ne sont pas les types de capteurs les moins chers, mais dans de nombreux cas, il n'existe pratiquement aucune alternative à de tels capteurs. Dans un projet de station météorologique, le capteur enregistre un paramètre important : la pression atmosphérique, qui permet de prédire la météo. Dans les projets liés à la création de véhicules volants, le baromètre est utilisé comme capteur d'altitude réelle au-dessus du niveau de la mer.

La connexion des capteurs ne présente aucune difficulté, car une connexion i2C ou SPI standard est utilisée. Pour la programmation, vous pouvez utiliser l'un des modèles prêts à l'emploi.



Des questions ?

Envoyer

Signaler une faute de frappe