Inicia sesión en tu cuenta de Altimeter Cloud
¿No tienes cuenta? Crear una
Te enviaremos un enlace de confirmación por correo. Revisa tu carpeta de spam si no lo recibes.
¿Ya tienes cuenta? Iniciar sesión
El Mercury tiene a bordo un sensor de presión Bosch BMP390 o Bosch BMP581.
Este script te muestra cómo detectar cuál tienes y leer su temperatura y presión y convertirla a una altitud.
La conversión estándar utilizada en este programa asume una presión de 1013.25 Hpa (promedio) y una temperatura ambiente de 15 grados centígrados.
Si buscas el pronóstico meteorológico local para tu ubicación y hora e introduces esa presión en su lugar, este script debería mostrarte aproximadamente tu altura sobre el nivel del mar.
Si utilizas nuestro compilador y cargador en línea, no olvides conectar el monitor Serie después de reiniciar (presionar el botón de encendido) tu Mercury para ver la información que viene.
// Ejemplo de prueba del sensor de presión para altímetros Mercury (altimetercloud.com) #include "Wire.h" #include "Mercury_Pins.h" // Hay bastantes opciones de bibliotecas, hemos elegido estas para nuestro ejemplo #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 presión meteorológica del nivel del mar pronosticada para tu ubicación. void setup() { Serial.begin(115200); // Enciende la alimentación de los sensores en el altímetro Mercury pinMode(VACC, OUTPUT); digitalWrite(VACC, HIGH); delay(100); // Inicia I2C en los pines SDA y SCL del Mercury Wire.begin(SDA, SCL); // Detecta qué sensor de presión está presente en tu Mercury, las revisiones anteriores tenían un Bosch BMP390 y las revisiones posteriores (3+) tienen el Bosch BMP581 if (bmp5.begin(0x47, &Wire)) { hasBMP581 = true; Serial.println("BMP581 encontrado"); } else if (bmp3.begin_I2C(0x77, &Wire)) { hasBMP390 = true; Serial.println("BMP390 encontrado"); } else { Serial.println("¡No se encontró sensor!"); } } void loop() { float temp = 0, pressure = 0, alt = 0; // Lee el sensor detectado para obtener su presión y temperatura 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; } // Convierte la presión a altitud utilizando la suposición estándar de 15 grados centígrados de temperatura ambiente y la presión del nivel del mar definida anteriormente. alt = 44330.0 * (1.0 - pow(pressure / seaLevelHpa, 0.1903)); Serial.printf("Temp: %.1fC Presión: %.2f hPa Alt: %.1f m\n", temp, pressure, alt); delay(500); }#pragma once /* * Definiciones de pines de Mercury (ESP32-C6) * Asignaciones GPIO específicas de la placa */ // ââ LED de estado (NeoPixel) ââ #define LEDPOWER 3 // Alimentación de NeoPixel (usar HIGH para habilitar) #define LED 2 // Señal de datos de NeoPixel // ââ Bus I2C ââ #define SDA 21 // Datos I2C #define SCL 22 // Reloj I2C // ââ Alimentación del sensor ââ #define VACC 20 // Carril de alimentación del sensor (usar HIGH para habilitar) // ââ Puertos de uso general ââ #define GP06 6 // Puerto GP06 #define GP07 7 // Puerto GP07 // ââ Salida de corriente alta ââ #define OUT1 5 // Salida de corriente alta (p. ej. pirotecnia / relé) // ââ LEDs de indicador de batería ââ #define BL1 4 // LED de batería 1 (más bajo) #define BL2 14 // LED de batería 2 #define BL3 15 // LED de batería 3 #define BL4 18 // LED de batería 4 #define BL5 19 // LED de batería 5 (más alto) // ââ Indicadores ââ #define DISK 8 // LED de actividad de disco // ââ Analógico / Detección ââ #define BATIN 0 // Voltaje de batería (divisor 1:1) #define USBDETECT 1 // Detección de alimentación USB (HIGH = USB presente) #define BUTTON 9 // BOTÓN en la placa, botón de arranque pero se puede usar