Mercury V1 handleiding
Ontdek hoe je snel en eenvoudig kunt vliegen, verbind je altimeter om te uploaden naar de Altimeter Cloud website en gebruik ook alle geavanceerde functies. Als je vastloopt of net begint, dan ben je hier op de juiste plek.

Codevoorbeeld: BMP390 & BMP581 druksensor met auto-detect

PDF

De Mercury heeft aan boord ofwel een Bosch BMP390 ofwel een Bosch BMP581 druksensor.
Dit script laat je zien hoe je kunt detecteren welke je hebt en hoe je de temperatuur en druk kunt uitlezen en omzetten naar een hoogte.

De standaard conversie die in dit programma wordt gebruikt, gaat uit van 1013,25 Hpa (gemiddelde) druk en een omgevingstemperatuur van 15 graden Celsius. 

Als je het weerbericht voor je locatie en tijd opzoekt en die druk invoert, zou dit script je ongeveer je hoogte boven zeeniveau moeten tonen.
Als je onze online compiler en uploader gebruikt, vergeet dan niet de seriële monitor aan te sluiten na het resetten (knop indrukken) van je Mercury om de informatie te zien. 

Gebruik je Arduino IDE? Onze online programmeur sluit Mercury_Pins.h standaard in, zodat de pinnamen zonder problemen werken. Als je Arduino IDE of een ander programma gebruikt, kopieer dan de inhoud van het Mercury_Pins.h-tabblad en plak het aan het begin van je programma.
// Drukkrachtsensor testvoorbeeld voor Mercury altimeters (altimetercloud.com)
#include "Wire.h"
#include "Mercury_Pins.h"

// Er zijn veel opties voor bibliotheken, we hebben deze voor ons voorbeeld gekozen
#include "Adafruit_BMP3XX.h"
#include "Adafruit_BMP5xx.h"

Adafruit_BMP3XX bmp3;
Adafruit_BMP5xx bmp5;

bool hasBMP581 = false;
bool hasBMP390 = false;

float seaLevelHpa = 1013.25;   // De verwachte druk op zeeniveau uit het weerbericht voor je locatie. 

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

    // Zet de voeding naar de sensoren op de Mercury altimeter aan
    pinMode(VACC, OUTPUT);
    digitalWrite(VACC, HIGH);
    delay(100);

    // Start I2C op de SDA- en SCL-pinnen van de Mercury
    Wire.begin(SDA, SCL);

    // Detecteer welke druksensor op je Mercury aanwezig is, eerdere versies hadden een Bosch BMP390 en latere versies (3+) hebben de Bosch BMP581
    if (bmp5.begin(0x47, &Wire)) {
        hasBMP581 = true;
        Serial.println("BMP581 gevonden");
    } else if (bmp3.begin_I2C(0x77, &Wire)) {
        hasBMP390 = true;
        Serial.println("BMP390 gevonden");
    } else {
        Serial.println("Geen sensor gevonden!");
    }
}

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

    // Lees de gedetecteerde sensor uit voor de druk en temperatuur
    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;
    }

    // Converteer de druk naar hoogte met behulp van de standaard aanname van 15 graden Celsius omgevingstemperatuur en de eerder gedefinieerde zeeniveaudruk.
    alt = 44330.0 * (1.0 - pow(pressure / seaLevelHpa, 0.1903));
    Serial.printf("Temp: %.1fC  Druk: %.2f hPa  Hoogte: %.1f m\n", temp, pressure, alt);
    delay(500);
}

#pragma once
/*
 * Mercury (ESP32-C6) Pindefinities
 * Bord-specifieke GPIO-toewijzingen
 */

// ââ Statusled (NeoPixel) ââ
#define LEDPOWER      3    // NeoPixel voeding (zet HOOG om in te schakelen)
#define LED           2    // NeoPixel datasignaal

// ââ I2C-bus ââ
#define SDA           21   // I2C-gegevens
#define SCL           22   // I2C-klok

// ââ Sensorvoeding ââ
#define VACC          20   // Sensor voedingsrail (zet HOOG om in te schakelen)

// ââ Algemene doelpoorten ââ
#define GP06          6    // GP06-poort
#define GP07          7    // GP07-poort

// ââ High Current Output ââ
#define OUT1          5    // Hoge stroomuitgang (bijv. pyro / relais)

// ââ Batterij-bars Leds ââ
#define BL1           4    // Batterij-led 1 (laagste)
#define BL2           14   // Batterij-led 2
#define BL3           15   // Batterij-led 3
#define BL4           18   // Batterij-led 4
#define BL5           19   // Batterij-led 5 (hoogste)

// ââ Indicatoren ââ
#define DISK          8    // Schijfactiviteitsled

// ââ Analoog / Detectie ââ
#define BATIN         0    // Batterijtegespanning (1:1-deler)
#define USBDETECT     1    // USB-voedingsdetectie (HOOG = USB aanwezig)
#define BUTTON        9    // KNOP op het bord, startknop maar kan worden gebruikt