Manuel Mercury V1
Découvrez comment voler rapidement et facilement, connectez votre altimètre pour télécharger vers le site web Altimeter Cloud et accédez à toutes les fonctionnalités avancées également. Si vous êtes bloqué ou si vous débutez, c'est l'endroit où il faut être.

Exemple de code : capteur de pression BMP390 et BMP581 avec détection automatique

PDF

Le Mercury dispose soit d'un capteur de pression Bosch BMP390, soit d'un Bosch BMP581.
Ce script vous montre comment détecter lequel vous avez et lire sa température et sa pression et les convertir en une altitude.

La conversion standard utilisée dans ce programme suppose une pression de 1013,25 Hpa (moyenne) et une température ambiante de 15 degrés celsius. 

Si vous consultez vos prévisions météorologiques locales pour votre lieu et votre heure et entrez cette pression à la place, vous devriez voir à peu près votre hauteur au-dessus du niveau de la mer avec ce script.
Si vous utilisez notre compilateur et téléchargeur en ligne, n'oubliez pas de connecter le moniteur série après avoir réinitialisé (appuyez sur le bouton d'alimentation) votre Mercury pour voir les informations qui s'affichent. 

Vous utilisez l'IDE Arduino ? Notre programmeur en ligne inclut Mercury_Pins.h par défaut, donc les noms de broches fonctionnent sans problème. Si vous utilisez l'IDE Arduino ou un autre programmeur, copiez le contenu de l'onglet Mercury_Pins.h et collez-le en haut de votre programme.
// Exemple de test de capteur de pression pour les altimètres Mercury (altimetercloud.com)
#include "Wire.h"
#include "Mercury_Pins.h"

// Il existe plusieurs options de bibliothèques, nous avons choisi celles-ci pour notre exemple
#include "Adafruit_BMP3XX.h"
#include "Adafruit_BMP5xx.h"

Adafruit_BMP3XX bmp3;
Adafruit_BMP5xx bmp5;

bool hasBMP581 = false;
bool hasBMP390 = false;

float seaLevelHpa = 1013.25;   // La pression météorologique du niveau de la mer prévue pour votre lieu. 

void setup() {
    Serial.begin(115200);

    // Allumez l'alimentation des capteurs sur l'altimètre Mercury
    pinMode(VACC, OUTPUT);
    digitalWrite(VACC, HIGH);
    delay(100);

    // Démarrez I2C sur les broches SDA et SCL du Mercury
    Wire.begin(SDA, SCL);

    // Détectez quel capteur de pression est présent sur votre Mercury. Les révisions antérieures avaient un Bosch BMP390 et les révisions ultérieures (3+) ont le Bosch BMP581
    if (bmp5.begin(0x47, &Wire)) {
        hasBMP581 = true;
        Serial.println("BMP581 trouvé");
    } else if (bmp3.begin_I2C(0x77, &Wire)) {
        hasBMP390 = true;
        Serial.println("BMP390 trouvé");
    } else {
        Serial.println("Aucun capteur trouvé !");
    }
}

void loop() {
    float temp = 0, pressure = 0, alt = 0;

    // Lisez le capteur détecté pour sa pression et sa température
    if (hasBMP581 && bmp5.performReading()) {
        temp = bmp5.temperature;
        pressure = bmp5.pressure;
    } else if (hasBMP390 && bmp3.performReading()) {
        temp = bmp3.temperature;
        pressure = bmp3.pressure / 100.0;
    } else {
        delay(500);
        return;
    }

    // Convertissez la pression en altitude en utilisant l'hypothèse standard d'une température ambiante de 15 degrés celsius et de la pression au niveau de la mer définie précédemment.
    alt = 44330.0 * (1.0 - pow(pressure / seaLevelHpa, 0.1903));
    Serial.printf("Temp : %.1fC  Pression : %.2f hPa  Alt : %.1f m\n", temp, pressure, alt);
    delay(500);
}

#pragma once
/*
 * Définitions des broches Mercury (ESP32-C6)
 * Assignations des GPIO spécifiques à la carte
 */

// ââ LED d'état (NeoPixel) ââ
#define LEDPOWER      3    // Alimentation NeoPixel (mettre à HIGH pour activer)
#define LED           2    // Signal de données NeoPixel

// ââ Bus I2C ââ
#define SDA           21   // Données I2C
#define SCL           22   // Horloge I2C

// ââ Alimentation des capteurs ââ
#define VACC          20   // Rail d'alimentation des capteurs (mettre à HIGH pour activer)

// ââ Ports à usage général ââ
#define GP06          6    // Port GP06
#define GP07          7    // Port GP07

// ââ Sortie haute intensité ââ
#define OUT1          5    // Sortie haute intensité (p. ex. pyro / relais)

// ââ LED d'autonomie de batterie ââ
#define BL1           4    // LED batterie 1 (plus basse)
#define BL2           14   // LED batterie 2
#define BL3           15   // LED batterie 3
#define BL4           18   // LED batterie 4
#define BL5           19   // LED batterie 5 (plus haute)

// ââ Indicateurs ââ
#define DISK          8    // LED d'activité du disque

// ââ Analogique / Détection ââ
#define BATIN         0    // Tension de batterie (diviseur 1:1)
#define USBDETECT     1    // Détection d'alimentation USB (HIGH = USB présent)
#define BUTTON        9    // BOUTON sur la carte, bouton de démarrage mais peut être utilisé