Log in op je Altimeter Cloud account
Nog geen account? Maak er een aan
We sturen een bevestigingslink naar je e-mail. Controleer je spammap als je deze niet ontvangt.
Heb je al een account? Inloggen
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.
// 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