¿Quieres medir la presión atmosférica con precisión utilizando un altímetro? En este tutorial te enseñaremos cómo conectar el sensor de presión de aire BMP388 a Arduino para que puedas realizar mediciones con exactitud. Sigue leyendo para descubrir todos los pasos necesarios para lograr una conexión exitosa y empezar a obtener datos importantes en tus proyectos de electrónica. ¡No te lo pierdas!
Mucha gente vuela drones hoy en día y es bueno saber cuál es la altitud del dron. Un sensor de presión barométrica ultrarrápido, estable en temperatura y preciso como el BMP388 de Bosch podría ser la elección perfecta para el seguimiento de la altitud en su próxima construcción de drones.
Descripción general del hardware
El corazón del módulo es el sensor digital de presión y temperatura de próxima generación de Bosch. BMP388.
El sensor de presión BMP388
El BMP388 es un sensor de presión barométrica absoluta muy pequeño, increíblemente rápido, preciso, de baja potencia y bajo ruido. Permite un seguimiento preciso de la elevación y es perfecto para aplicaciones de drones o cualquier proyecto que quiera realizar un seguimiento de la elevación sobre el nivel del mar.
El BMP388 puede medir la presión del aire desde 300 hPa hasta 1250 hPa y tiene una precisión relativa de 8 Pascal, que corresponde a aproximadamente ± 0,5 metros de altura.
El BMP388 cuenta con un sensor de temperatura en chip que se puede utilizar para compensar cambios ambientales y calibrar mediciones. Este es un sensor de temperatura razonablemente preciso que mide la “temperatura del chip” en el rango de -40°C a +85°C con una precisión de ±1°C.
Requisitos de energía
El módulo está equipado con un regulador de voltaje MIC5219 de precisión de 3,3 V y un traductor de nivel de voltaje, por lo que puede usarlo fácilmente con su microcontrolador favorito de 3,3 V o 5 V.
El BMP388 consume menos de 0,7 mA durante las mediciones y sólo 2 µA en modo de suspensión. Este bajo consumo energético permite su implementación en dispositivos que funcionan con baterías como teléfonos móviles, wearables o relojes inteligentes.
Interfaces digitales
El sensor se comunica a través de I2C o SPI.
interfaz I2C
El sensor utiliza la interfaz I2C para comunicarse con Arduino. Admite dos direcciones I2C separadas: 0x77Maleficio y 0x76Maleficio. Esto permite utilizar dos módulos BMP388 en el mismo bus o evitar conflictos de direcciones con otro dispositivo en el bus.
El pin SDO determina la dirección I2C del módulo. Este pin tiene una resistencia pull-up incorporada. Por lo tanto, si deja el pin SDO desconectado, la dirección I2C predeterminada es 0x77Maleficio y cuando lo conectas a GND, la línea pasa a BAJA y la dirección I2C se convierte en 0x76Maleficio.
interfaz SPI
El sensor también puede comunicarse a través de la interfaz SPI.
Para tu información:
Si tiene que elegir entre los dos, SPI generalmente es la mejor herramienta si necesita velocidades de transferencia más rápidas (hasta 10MHz). I2C, por otro lado, es mejor cuando solo hay unos pocos pines disponibles en su microcontrolador.
Modos de funcionamiento
El BMP388 tiene tres modos de funcionamiento:
- MODO DE SUEÑO: Pone el dispositivo en un estado de espera inactivo (no se toman medidas).
- MODO NORMAL: Realiza conversiones continuas separadas por tiempo de espera.
- FORCED_MODE: Realiza una única conversión y vuelve a SLEEP_MODE cuando se completa.
Búfer FIFO
El BMP388 cuenta con un búfer FIFO (primero en entrar, primero en salir) de 512 bytes para almacenar hasta 72 resultados de mediciones de presión y/o temperatura. El búfer FIFO puede liberar al microcontrolador de la lectura de cada nuevo patrón de datos del sensor, ahorrando energía al sistema.
Interrumpe
El BMP388 tiene un pin de salida de interrupción (INT) que permite tomar medidas a través de interrupciones en lugar de sondeos, lo que permite que el microcontrolador host realice otras tareas mientras se recopilan los datos del sensor. La interrupción se puede activar por 3 fuentes diferentes:
- Datos listos: Se activa después de que se completa una medición de presión y temperatura y los resultados de la conversión se almacenan en los registros de datos y FIFO.
- marca de agua FIFO: Se activa cuando el nivel FIFO alcanza un límite preestablecido.
- FIFO lleno: Se activa cuando el FIFO está lleno y se pierden datos futuros.
El controlador de salida del pin INT puede ser: PUSH_PULL u OPEN_COLLECTOR, el nivel del pin INT puede ser: ACTIVE_LOW o ACTIVE_HIGH y la interrupción en sí puede ser: UNLATCHED o LATCHED. En el modo UNLATCHED, la señal de interrupción se borra automáticamente después de 2,5 ms, mientras que en el modo LATCHED, la señal de interrupción permanece activa hasta que se leen los datos.
Especificaciones técnicas
Aquí están las especificaciones completas:
Fuente de alimentación | 3,3 V a 5,5 V |
Consumo de corriente | ~0,7 mA (durante las mediciones) |
~2 µA (en modo de espera) | |
Rango de medición de presión | 300Pa a 1250hPa |
Precisión de impresión absoluta | ±0,5 hPa |
Rango de temperatura | -40 ˚C a +85 ˚C |
Precisión de temperatura | ±1˚C |
Consulte la siguiente hoja de datos para obtener más detalles.
Distribución de pines del módulo BMP388
Ahora veamos el pinout.
Pines de alimentación:
VCC es el pin de alimentación. Puedes conectarlo a la salida de 5V de tu Arduino.
3vo es la salida de 3,3 V del regulador de voltaje. Si es necesario, puede obtener hasta 100 mA.
Tierra es la base común del poder y la lógica.
Pines lógicos SPI:
SCK es el pin del reloj SPI, es una entrada al chip.
SDO es el pin MISO (Serial Data Out) para los datos enviados desde el BMP388 a su microcontrolador.
IDE es el pin Serial Data In (MOSI) para los datos enviados desde su microcontrolador al BMP388.
C.S. Si el chip selecciona el pin, tírelo a BAJO para habilitar la comunicación SPI. Si desea conectar varios BMP388 a un microcontrolador, déjelos compartir los pines SDI, SDO y SCK y asigne un pin CS único a cada uno.
Pines lógicos I2C:
SCK También es el pin del reloj I2C, conéctelo a la línea de reloj I2C de su microcontrolador.
IDE También es el pin de datos I2C, conéctelo a la línea de datos I2C de su microcontrolador.
SDO El pin determina la dirección I2C del módulo. Si deja el pin SDO desconectado, la dirección I2C predeterminada es 0x77Maleficio y cuando lo conectas a GND, la línea pasa a BAJA y la dirección I2C se convierte en 0x76Maleficio.
Pin de interrupción:
EN T es el pin de interrupción. El BMP388 se puede programar para generar interrupciones en ciertos eventos. Consulte Interrumpe Sección.
Cableado de un módulo BMP388 a un Arduino
Ahora que sabemos todo sobre el módulo, ¡podemos empezar a conectarlo a nuestro Arduino!
cableado I2C
Utilice este cableado si desea conectarse a través de la interfaz I2C.
Comience conectando el pin VCC a la fuente de alimentación. 3V-5V está bien. Utilice el mismo voltaje en el que se basa la lógica de su microcontrolador. Para la mayoría de los Arduinos, esto es 5V. Para dispositivos lógicos de 3,3 V, utilice 3,3 V. Ahora conecte GND a tierra común.
Conecte el pin SCK al pin de reloj I2C y el pin SDI al pin de datos I2C de su Arduino. Tenga en cuenta que cada placa Arduino tiene diferentes pines I2C que deben conectarse en consecuencia. En las placas Arduino con diseño R3, SDA (línea de datos) y SCL (línea de reloj) se encuentran en los encabezados cerca del pin AREF. También se les conoce como A5 (SCL) y A4 (SDA).
La siguiente figura muestra el cableado.
cableado SPI
Dado que es un sensor habilitado para SPI, puede utilizar hardware o software SPI. Sin embargo, se recomienda utilizar pines SPI de hardware, ya que son mucho más rápidos que modificar el código de la interfaz con un conjunto diferente de pines.
Nuevamente, cada placa Arduino tiene diferentes pines SPI que deben conectarse en consecuencia. En placas Arduino como UNO/Nano V3.0, estos pines son digitales 13 (SCK), 12 (MISO), 11 (MOSI) y 10 (SS).
Si está utilizando otra placa Arduino, se recomienda leer la documentación oficial correspondiente. Posiciones de los pines SPI Antes de continuar.
La siguiente figura muestra el cableado.
Una vez que su módulo esté conectado al Arduino, ¡es hora de escribir código!
Instalación de biblioteca
Para comenzar a leer los datos del sensor, debe instalar lo siguiente Biblioteca Adafruit BMP3XX. Está disponible en el administrador de la biblioteca Arduino.
Para instalar la biblioteca, navegue hasta Bosquejo > Incluir biblioteca > Administrar bibliotecas… Espere a que el administrador de la biblioteca descargue el índice de la biblioteca y actualice la lista de bibliotecas instaladas.
Filtra tu búsqueda escribiendo “adafruta bmp3xx' e instalar la biblioteca.
La biblioteca de sensores BMP3XX utiliza el Backend de soporte del sensor de Adafruit. Así que consulte con el administrador de la biblioteca. Sensor unificado de Adafruit e instálalo también (es posible que tengas que desplazarte un poco)
Código Arduino: lectura de presión, altitud y temperatura
A continuación se muestra un boceto básico de Arduino. Continúe y cárguelo en su Arduino. Deberías ver la presión, la temperatura y aprox. Altura en el monitor serie.
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include "Adafruit_BMP3XX.h"
//Uncomment if you want to use SPI
//#define BMP_SCK 13
//#define BMP_MISO 12
//#define BMP_MOSI 11
//#define BMP_CS 10
#define SEALEVELPRESSURE_HPA (1013.25)
Adafruit_BMP3XX bmp;
void setup() {
Serial.begin(115200);
while (!Serial);
if (!bmp.begin_I2C()) { // hardware I2C mode, can pass in address & alt Wire
//if (! bmp.begin_SPI(BMP_CS)) { // hardware SPI mode
//if (! bmp.begin_SPI(BMP_CS, BMP_SCK, BMP_MISO, BMP_MOSI)) { // software SPI mode
Serial.println("Could not find a valid BMP3 sensor, check wiring!");
while (1);
}
// Set up oversampling and filter initialization
bmp.setTemperatureOversampling(BMP3_OVERSAMPLING_8X);
bmp.setPressureOversampling(BMP3_OVERSAMPLING_4X);
bmp.setIIRFilterCoeff(BMP3_IIR_FILTER_COEFF_3);
bmp.setOutputDataRate(BMP3_ODR_50_HZ);
}
void loop() {
if (! bmp.performReading()) {
Serial.println("Failed to perform reading :(");
return;
}
Serial.print("Temperature = ");
Serial.print(bmp.temperature);
Serial.println(" *C");
Serial.print("Pressure = ");
Serial.print(bmp.pressure / 100.0);
Serial.println(" hPa");
Serial.print("Approx. Altitude = ");
Serial.print(bmp.readAltitude(SEALEVELPRESSURE_HPA));
Serial.println(" m");
Serial.println();
delay(2000);
}
Tenga en cuenta que deberá configurar su monitor serie a una velocidad de 115200 baudios para probar el boceto.
Verá muchos datos que muestran presión, temperatura y aprox. Valores de elevación. Mueva su sensor y observe cómo cambian los datos.
Explicación del código:
El boceto comienza con la inclusión de cuatro bibliotecas necesarias, a saber. Wire.h
(para I2C), SPI.h
(para SPI), Adafruit_Sensor.h
Y Adafruit_BMP3XX.h
.
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include "Adafruit_BMP3XX.h"
Este boceto utiliza el protocolo de comunicación I2C para comunicarse con el sensor. Sin embargo, el boceto está preparado si desea utilizar SPI. Todo lo que necesitas hacer es comentar las siguientes líneas de código que definen los pines SPI.
//#define BMP_SCK 13
//#define BMP_MISO 12
//#define BMP_MOSI 11
//#define BMP_CS 10
A continuación se llama una variable SEALEVELPRESSURE_HPA
se define. Esta variable almacena la presión a nivel del mar en milibares y se utiliza para estimar la altitud para una presión determinada comparándola con la presión a nivel del mar. El valor predeterminado se utiliza en este boceto. Sin embargo, para obtener resultados precisos, reemplace el valor con la presión actual al nivel del mar en su ubicación.
#define SEALEVELPRESSURE_HPA (1013.25)
La siguiente línea crea un objeto llamado Adafruit_BMP3XX bmp
.
Adafruit_BMP3XX bmp;
En la configuración inicializamos la comunicación serie con el PC y la llamamos. begin()
Función.
El bmp.begin_I2C()
La función inicializa la interfaz I2C y verifica si la ID del chip es correcta. Luego, el chip se reinicia mediante un reinicio por software y, después de despertarse, espera a que se calibre el sensor. Asimismo aquellos bmp.begin_SPI()
La función inicializa la interfaz SPI. Si desea utilizar SPI, debe eliminar los comentarios correspondientes. if
.
Serial.begin(115200);
while (!Serial);
Serial.println("Adafruit BMP388 / BMP390 test");
if (!bmp.begin_I2C()) { // hardware I2C mode, can pass in address & alt Wire
//if (! bmp.begin_SPI(BMP_CS)) { // hardware SPI mode
//if (! bmp.begin_SPI(BMP_CS, BMP_SCK, BMP_MISO, BMP_MOSI)) { // software SPI mode
Serial.println("Could not find a valid BMP3 sensor, check wiring!");
while (1);
}
A continuación configuramos algunos parámetros para el sensor.
bmp.setTemperatureOversampling(BMP3_OVERSAMPLING_8X);
bmp.setPressureOversampling(BMP3_OVERSAMPLING_4X);
bmp.setIIRFilterCoeff(BMP3_IIR_FILTER_COEFF_3);
bmp.setOutputDataRate(BMP3_ODR_50_HZ);
Veamos cada característica individualmente.
setTemperatureSobremuestreo(sistema operativo uint8_t)
establecerPresiónSobremuestreo(sistema operativo uint8_t)
Para aumentar la resolución efectiva de las mediciones y reducir el ruido, el BMP388 admite sobremuestreo (adquirir múltiples muestras y promediarlas). Se llaman dos funciones setTemperatureOversampling()
Y setPressureOversampling()
para configurar el sobremuestreo para mediciones de temperatura o presión. Estas funciones pueden aceptar uno de los siguientes parámetros:
- BMP3_NO_OVERSAMPLING (desactiva la lectura)
- BMP3_OVERSAMPLING_2X
- BMP3_OVERSAMPLING_4X
- BMP3_OVERSAMPLING_8X
- BMP3_OVERSAMPLING_16X
- BMP3_OVERSAMPLING_32X
setIIRFiltroCoeff(uint8_tfs)
El BMP388 también cuenta con un filtro IIR interno para reducir los cambios de presión a corto plazo en los valores de salida del sensor causados por perturbaciones externas (por ejemplo, un portazo de una puerta o ventana o el ingreso de aire al sensor). El setIIRFilterSize()
La función configura el filtro IIR. El filtro IIR se puede configurar con diferentes coeficientes de filtrado seleccionando uno de los siguientes parámetros:
- BMP3_IIR_FILTER_DISABLE (sin filtrado)
- BMP3_IIR_FILTER_COEFF_1
- BMP3_IIR_FILTER_COEFF_3
- BMP3_IIR_FILTER_COEFF_7
- BMP3_IIR_FILTER_COEFF_15
- BMP3_IIR_FILTER_COEFF_31
- BMP3_IIR_FILTER_COEFF_63
- BMP3_IIR_FILTER_COEFF_127
Tenga en cuenta que los coeficientes de filtro IIR más altos proporcionan mediciones estables a expensas de un tiempo de respuesta lento.
establecer tasa de datos de salida(uint8_t o)
El setOutputDataRate()
La función establece la velocidad de datos de salida, es decir, el máximo que puede leer desde el dispositivo para la configuración dada. Esta función acepta uno de los siguientes parámetros:
- BMP3_ODR_200_HZ
- BMP3_ODR_100_HZ
- BMP3_ODR_50_HZ
- BMP3_ODR_25_HZ
- BMP3_ODR_12_5_HZ
- BMP3_ODR_6_25_HZ
- BMP3_ODR_3_1_HZ
- BMP3_ODR_1_5_HZ
- BMP3_ODR_0_78_HZ
- BMP3_ODR_0_39_HZ
- BMP3_ODR_0_2_HZ
- BMP3_ODR_0_1_HZ
- BMP3_ODR_0_05_HZ
- BMP3_ODR_0_02_HZ
- BMP3_ODR_0_01_HZ
- BMP3_ODR_0_006_HZ
- BMP3_ODR_0_003_HZ
- BMP3_ODR_0_001_HZ
Lo llamamos en el bucle bmp.performReading()
Función para realizar una lectura. Una vez hecho esto, podemos acceder a las variables de instancia del objeto (bmp) usando el operador de punto.
bmp.temperatura devuelve el valor de temperatura.
bmp.presión devuelve el valor de la presión del aire.
bmp.readAltitud(SEALEVELPRESSURE_HPA) La función calcula la altitud (en metros) a partir de la presión atmosférica especificada (en hPa) y la presión al nivel del mar (en hPa).
void loop() {
if (! bmp.performReading()) {
Serial.println("Failed to perform reading :(");
return;
}
Serial.print("Temperature = ");
Serial.print(bmp.temperature);
Serial.println(" *C");
Serial.print("Pressure = ");
Serial.print(bmp.pressure / 100.0);
Serial.println(" hPa");
Serial.print("Approx. Altitude = ");
Serial.print(bmp.readAltitude(SEALEVELPRESSURE_HPA));
Serial.println(" m");
Serial.println();
delay(2000);
}
Conexión del sensor de presión de aire (altímetro) BMP388 a Arduino
En la actualidad, muchas personas están volando drones, y conocer la altitud que alcanza tu dron es algo interesante. Un sensor de presión barométrica preciso, estable en la temperatura y de alta velocidad, como el BMP388 de Bosch, podría ser la elección perfecta para el seguimiento de altitud en tu próximo proyecto de dron.
Visión General del Hardware
En el corazón del módulo se encuentra el sensor de presión y temperatura digital de próxima generación de Bosch, el BMP388.
El Sensor de Presión BMP388
El BMP388 es un sensor de presión barométrica absoluta muy pequeño, extremadamente rápido, preciso, de bajo consumo, con bajo ruido. Permite un seguimiento preciso de la altitud y es perfectamente adecuado para aplicaciones de drones o cualquier proyecto que desee rastrear la altitud sobre el nivel del mar.
El BMP388 puede medir la presión barométrica desde 300 hPa hasta 1250 hPa y tiene una precisión relativa de 8 pascales, lo que se traduce en aproximadamente ± 0.5 metros de altitud.
El BMP388 tiene un sensor de temperatura incorporado que se puede usar para compensar los cambios en el entorno y calibrar las mediciones. Se trata de un sensor de temperatura bastante preciso que mide la ‘temperatura de la pastilla’ en el rango de -40˚C a +85˚C con una precisión de ±1˚C.
Requerimiento de Energía
El módulo viene con un regulador de voltaje preciso de 3.3V MIC5219 y un traductor de nivel de voltaje, por lo que puedes usarlo con tu microcontrolador favorito de 3.3V o 5V sin preocupaciones.
El BMP388 consume menos de 0.7mA durante las mediciones y solo 2µA en modo de espera. Este bajo consumo de energía permite la implementación en dispositivos alimentados por batería como teléfonos móviles, dispositivos portátiles o relojes inteligentes.
Interfaces Digitales
El sensor se comunica a través de la interfaz I2C o SPI.
Interfaz I2C
El sensor utiliza la interfaz I2C para la comunicación con Arduino. Admite dos direcciones I2C separadas: 0x77Hex y 0x76Hex. Esto permite usar dos módulos BMP388 en el mismo bus o evitar conflictos de direcciones con otro dispositivo en el bus.
El pin SDO determina la dirección I2C del módulo. Este pin tiene una resistencia de pull-up incorporada. Por lo tanto, cuando dejas el pin SDO sin conectar, la dirección I2C predeterminada es 0x77Hex y cuando lo conectas a GND, la línea se baja y la dirección I2C se convierte en 0x76Hex.
Interfaz SPI
El sensor también puede comunicarse a través de la interfaz SPI.
Modos de Operación
El BMP388 tiene 3 modos de operación:
- Modo de Suspensión (SLEEP_MODE): pone el dispositivo en un estado de suspensión inactivo (no se realizan mediciones).
- Modo Normal (NORMAL_MODE): realiza conversiones continuas, separadas por el tiempo de suspensión.
- Modo Forzado (FORCED_MODE): realiza una sola conversión, volviendo al modo de suspensión al completarse.
Buffer FIFO
El BMP388 incorpora un buffer FIFO de 512 bytes (primero en entrar, primero en salir) para almacenar hasta 72 resultados de medición de presión y/o temperatura. El buffer FIFO puede liberar al microcontrolador de leer cada nueva muestra de datos del sensor, ahorrando así energía del sistema.
Interrupciones
El BMP388 tiene un pin de salida de interrupción(INT) que permite que las mediciones se realicen mediante interrupciones en lugar de usar la encuesta, lo que permite que el microcontrolador principal realice otras tareas mientras los datos son recopilados por el sensor. La interrupción se puede habilitar para 3 fuentes diferentes:
- Datos Listos: se activa después de que una medición de presión y temperatura finaliza y los resultados de la conversión se almacenan en los registros de datos y en el FIFO.
- Marca de Agua del FIFO: se activa cuando el nivel de llenado del FIFO alcanza un límite preestablecido.
- FIFO Lleno: se activa cuando el FIFO se llena y los datos futuros están a punto de perderse.
El impulso de salida de nivel del pin INT puede ser de tipo PUSH_PULL u OPEN_COLLECTOR, el nivel del pin INT puede ser de tipo ACTIVE_LOW o ACTIVE_HIGH y la interrupción en sí puede ser de tipo UNLATCHED o LATCHED. En el modo UNLATCHED, la señal de interrupción se borra automáticamente después de 2.5 ms, mientras que en el modo LATCHED, la señal de interrupción permanece activa hasta que se leen los datos.
Especificaciones Técnicas
Aquí se encuentran las especificaciones completas:
- Alimentación: 3.3V a 5.5V
- Consumo de corriente: ~0.7mA (durante mediciones) ~2µA (durante modo de espera)
- Rango de medición de presión: 300Pa a 1250 hPa
- Precisión absoluta de presión: ±0.5 hPa
- Rango de temperatura: -40˚C a +85˚C
- Precisión de temperatura: ±1˚C
Para más detalles, consulta la hoja de datos del BMP388.
Conexión del Módulo BMP388 a Arduino
Ahora que conocemos todo sobre el módulo, podemos comenzar a conectarlo a nuestro Arduino.
Cableado I2C
Utiliza este cableado si deseas conectar a través de la interfaz I2C.
Empieza conectando el pin VCC a la fuente de alimentación, 3V-5V está bien. Usa el mismo voltaje en el que se basa la lógica de tu microcontrolador. Para la mayoría de los Arduinos, ese es 5V. Para dispositivos de lógica de 3.3V, usa 3.3V. Ahora conecta GND a tierra común.
Conecta el pin SCK al pin de reloj I2C y el pin SDI al pin de datos I2C en tu Arduino. Ten en cuenta que cada placa de Arduino tiene pines I2C diferentes que deben conectarse en consecuencia.
El siguiente diagrama muestra el cableado.
Cableado SPI
Dado que es un sensor compatible con SPI, puedes usar pines de SPI de hardware o software. Sin embargo, se recomienda usar pines de SPI de hardware ya que son mucho más rápidos que ‘bit-banging’ el código de la interfaz utilizando otro conjunto de pines.
Nuevamente, cada placa de Arduino tiene pines SPI diferentes que deben conectarse en consecuencia. Para placas de Arduino como UNO/Nano V3.0, esos pines son digitales 13 (SCK), 12 (MISO), 11 (MOSI) y 10 (SS).
Si estás usando una placa de Arduino diferente, es recomendable verificar la documentación oficial sobre las ubicaciones de los pines SPI antes de continuar.
El siguiente diagrama muestra el cableado.
Una vez que el módulo está conectado al Arduino, ¡es hora de escribir algo de código!
Instalación de la Biblioteca
Para comenzar a leer datos del sensor, deberás instalar la biblioteca Adafruit BMP3XX. Está disponible en el gestor de bibliotecas de Arduino.
Para instalar la biblioteca, navega a Sketch> Incluir Biblioteca> Administrar Bibliotecas … Espera a que el Administrador de Bibliotecas descargue el índice de las bibliotecas y actualice la lista de bibliotecas instaladas.
Filtra tu búsqueda escribiendo ‘adafruit bmp3xx’ e instala la biblioteca.
La biblioteca del sensor BMP3XX utiliza el backend de soporte de sensor de Adafruit. Por lo tanto, busca la biblioteca en el administrador de bibliotecas de Adafruit Unified Sensor e instala también esa (es posible que tengas que desplazarte un poco).
Código de Arduino – Lectura de Presión, Altitud y Temperatura
A continuación se muestra un sketch básico de Arduino. Cárgalo en tu Arduino. Deberías ver los valores de presión, temperatura y altitud aproximados en el monitor serie.
#include <Wire.h> #include <SPI.h> #include <Adafruit_Sensor.h> #include "Adafruit_BMP3XX.h" #define BMP_SCK 13 #define BMP_MISO 12 #define BMP_MOSI 11 #define BMP_CS 10 #define SEALEVELPRESSURE_HPA (1013.25) Adafruit_BMP3XX bmp; void setup() { Serial.begin(115200); while (!Serial); if (!bmp.begin_I2C()) { Serial.println("Could not find a valid BMP3 sensor, check wiring!"); while (1); } bmp.setTemperatureOversampling(BMP3_OVERSAMPLING_8X); bmp.setPressureOversampling(BMP3_OVERSAMPLING_4X); bmp.setIIRFilterCoeff(BMP3_IIR_FILTER_COEFF_3); bmp.setOutputDataRate(BMP3_ODR_50_HZ); } void loop() { if (! bmp.performReading()) { Serial.println("Failed to perform reading :("); return; } Serial.print("Temperature = "); Serial.print(bmp.temperature); Serial.println(" *C"); Serial.print("Pressure = "); Serial.print(bmp.pressure / 100.0); Serial.println(" hPa"); Serial.print("Approx. Altitude = "); Serial.print(bmp.readAltitude(SEALEVELPRESSURE_HPA)); Serial.println(" m"); Serial.println(); delay(2000); }
Ten en cuenta que debes configurar tu monitor serie a una velocidad de baudios de 115200 para probar el sketch.
Verás muchos datos que muestran los valores de presión, temperatura y altitud aproximada. Intenta mover tu sensor y observa cómo cambian los datos.
Explicación del Código:
El sketch comienza incluyendo cuatro bibliotecas necesarias: Wire.h (para I2C), SPI.h (para SPI), Adafruit_Sensor.h y Adafruit_BMP3XX.h.
Este sketch utiliza el protocolo de comunicación I2C para comunicarse con el sensor. Sin embargo, el sketch está preparado si deseas usar SPI. Solo necesitas descomentar las siguientes líneas de código que definen los pines SPI.
A continuación, se define una variable llamada SEALEVELPRESSURE_HPA. Esta variable guarda la presión al nivel del mar en milibares y se utiliza para estimar la altitud para una presión dada comparándola con la presión al nivel del mar. Este sketch utiliza el valor predeterminado, pero para resultados precisos, reemplaza el valor con la presión al nivel del mar actual en tu ubicación.
La siguiente línea crea un objeto Adafruit_BMP3XX llamado bmp.
En la configuración, inicializamos la comunicación serial con la PC y llamamos a la función begin().
La función bmp.begin_I2C() inicializa la interfaz I2C y comprueba si el ID del chip es correcto. Luego restablece el chip utilizando un reinicio suave y espera que el sensor se calibre después del despertar. De manera similar, la función bmp.begin_SPI() inicializa la interfaz SPI. Si deseas usar SPI, debes descomentar el correspondiente if.
A continuación, configuramos algunos parámetros para el sensor.
El setTemperatureOversampling() y setPressureOversampling() aumentan la resolución efectiva de las mediciones y reducen el ruido. setIIRFilterCoeff() establece el filtro IIR y setOutputDataRate() establece la tasa de datos de salida.
En el loop, llamamos a la función bmp.performReading() para realizar una lectura. Una vez hecho esto, podemos acceder a las variables de instancia del objeto (bmp) utilizando el operador de punto.
Al finalizar este proceso, obtienes la temperatura, la presión y la altitud aproximada en el monitor serie.
¡Ahora estás listo para utilizar el sensor BMP388 con tu Arduino para rastrear la altitud con precisión!
¡Muy útil la info! Ya quiero probarlo en mi proyecto de altitud. ¡Gracias por compartir!
¡Qué genial que hayas compartido cómo conectar el sensor BMP388 al Arduino! ¡Estoy emocionado por probarlo en mi propio proyecto! ¡Gracias por los consejos!
¡Se agradece la explicación detallada! Me será de mucha ayuda para conectar el sensor BMP388 a mi Arduino. ¡Gracias!
Interesante, voy a intentarlo en mi próximo proyecto. Gracias por los consejos.