MUSIC STAGE | Som • Iluminação • Eletrónica • Comércio • Aluguer • Instalação

Módulo de sensor de barómetro - BMP180

Descripción

Esta placa incluye un sensor de presión atmosférica de alta precisión -BMP180- con un rango de medida de 300 y 1100hPa (Hecto Pascal) con un margen de error de 0,03hPa. Basado en tecnología piezorresistiva de alta eficiencia y larga duración. El sensor tiene un rango de alimentación de 1,8 V y 3,6 V CC. Diseñado para conectarse directamente a un microcontrolador a través de una interfaz I2C. Tiene 2 resistencias pull-up de 4.7Kohm. Este tipo de sensores se pueden utilizar para calcular la altitud, por lo que son muy útiles en los UAV.


Especificaciones:
- Dimensiones: 21 x 18 mm
- Potencia: 1.8V a 6V
-Velocidad máxima I2C: 3,5 MHz
- Bajo consumo de energía - 0.5uA a 1 Hz
- Interfaz I2C
- Bajo nivel de ruido - hasta 0,02 hPa (17 cm)
- Rango de Presión: 300hpa a 1100hPa (+ -500m a 9000m)


#incluir
#define BMP085_ADDRESS 0x77 // Dirección I2C de BMP085
const char sin signo OSS = 0; // Configuración de sobremuestreo
// valores de calibración
intac1;
intac2;
intac3;
int sin firmar ac4;
int sin firmar ac5;
int sin firmar ac6;
intb1;
intb2;
int mb;
intmc;
int md;
// b5 se calcula en bmp085GetTemperature(...), esta variable también se usa en bmp085GetPressure(...)
// entonces ...Temperature(...) debe llamarse antes que ...Pressure(...).
largo b5;
configuración vacía(){
Serial.begin(9600);
Alambre.begin();
bmp085Calibración();
}
bucle vacío ()
{
temperatura flotante = bmp085GetTemperature(bmp085ReadUT()); //DEBE ser llamado primero
presión de flotación = bmp085GetPressure(bmp085ReadUP());
flotador atm = presión / 101325; // "atmósfera estándar"
altitud de flotación = calcAltitude(presión); //Cálculo no compensado - en Metros
Serial.print("Temperatura: ");
Serial.print(temperatura, 2); //muestra 2 decimales
Serial.println("grados C");
Serial.print("Presión: ");
Serial.print(presión, 0); //solo numero entero.
Serial.println("Pa");
Serial.print("Atmósfera estándar: ");
Serial.println(atm, 4); //mostrar 4 decimales
Serial.print("Altitud: ");
Serial.print(altitud, 2); //muestra 2 decimales
Serial.println("M");
Serial.println();//salto de línea
retraso (1000); //espera un segundo y vuelve a obtener valores.
}
// Almacena todos los valores de calibración del bmp085 en variables globales
// Se requieren valores de calibración para calcular la temperatura y la presión
// Esta función debe llamarse al principio del programa
void bmp085Calibración()
{
ac1 = bmp085ReadInt(0xAA);
ac2 = bmp085ReadInt(0xAC);
ac3 = bmp085ReadInt(0xAE);
ac4 = bmp085ReadInt(0xB0);
ac5 = bmp085ReadInt(0xB2);
ac6 = bmp085ReadInt(0xB4);
b1 = bmp085ReadInt(0xB6);
b2 = bmp085ReadInt(0xB8);
mb = bmp085ReadInt(0xBA);
mc = bmp085ReadInt(0xBC);
md = bmp085ReadInt(0xBE);
}
// Calcular la temperatura en grados C
float bmp085GetTemperature(sin firmar int ut){
largo x1, x2;
x1 = (((largo)ut - (largo)ac6)*(largo)ac5) >> 15;
x2 = ((largo)mc b5 = x1 + x2;
temperatura flotante = ((b5 + 8)>>4);
temperatura = temperatura /10;
temperatura de retorno;
}
// Calcular la presión cedida
// los valores de calibración deben ser conocidos
// También se requiere b5, por lo que se debe llamar primero a bmp085GetTemperature(...).
// El valor devuelto será la presión en unidades de Pa.
bmp085GetPressure largo (largo sin firmar){
largo x1, x2, x3, b3, b6, p;
sin signo largo b4, b7;
b6 = b5 - 4000;
// Calcular B3
x1 = (b2 * (b6 * b6)>>12)>>11;
x2 = (ac2 * b6)>>11;
x3 = x1 + x2;
b3 = (((((largo)ac1)*4 + x3)>2;
// Calcular B4
x1 = (ac3 * b6)>>13;
x2 = (b1 * ((b6 * b6)>>12))>>16;
x3 = ((x1 + x2) + 2)>>2;
b4 = (ac4 * (largo sin signo)(x3 + 32768))>>15;
b7 = ((largo sin signo)(arriba - b3) * (50000>>OSS));
si (b7 p = (b7 si no
p = (b7/b4) x1 = (p>>8) * (p>>8);
x1 = (x1 * 3038)>>16;
x2 = (-7357 * p)>>16;
p += (x1 + x2 + 3791)>>4;
temperatura larga = p;
temperatura de retorno;
}
// Leer 1 byte del BMP085 en 'dirección'
char bmp085Read (dirección de caracteres sin firmar)
{
datos de caracteres sin firmar;
Wire.beginTransmission(BMP085_ADDRESS);
Wire.write(dirección);
Cable.endTransmission();
Wire.requestFrom(BMP085_ADDRESS, 1);
while(!Cable.disponible())
;
volver Alambre.read();
}
// Leer 2 bytes del BMP085
// El primer byte será de 'dirección'
// El segundo byte será de 'dirección'+1
int bmp085ReadInt (dirección de caracteres sin firmar)
{
char sin firmar msb, lsb;
Wire.beginTransmission(BMP085_ADDRESS);
Wire.write(dirección);
Cable.endTransmission();
Wire.requestFrom(BMP085_ADDRESS, 2);
while(Cable.disponible() ;
msb = Cable.read();
lsb = Cable.read();
devolver (int) msb}
// Leer el valor de temperatura no compensado
int sin firmar bmp085ReadUT(){
sin firmar int ut;
// Escribe 0x2E en el Registro 0xF4
// Esto solicita una lectura de temperatura
Wire.beginTransmission(BMP085_ADDRESS);
Alambre.escribir(0xF4);
Alambre.escribir(0x2E);
Cable.endTransmission();
// Espere al menos 4,5 ms
retraso (5);
// Lee dos bytes de los registros 0xF6 y 0xF7
ut = bmp085ReadInt(0xF6);
volver a salir;
}
// Leer el valor de presión no compensado
largo sin firmar bmp085ReadUP(){
caracteres sin firmar msb, lsb, xlsb;
unsigned long up = 0;
// Escriba 0x34+(OSS // Solicite una lectura de presión con configuración de sobremuestreo
Wire.beginTransmission(BMP085_ADDRESS);
Alambre.escribir(0xF4);
Wire.write(0x34 + (OSS Wire.endTransmission();
// Espere la conversión, el tiempo de demora depende del OSS
delay(2 + (3 // Leer registro 0xF6 (MSB), 0xF7 (LSB) y 0xF8 (XLSB)
msb = bmp085Read(0xF6);
lsb = bmp085Read(0xF7);
xlsb = bmp085Read(0xF8);
arriba = (((largo sin firmar) msb > (8-OSS);
volver arriba;
}
void writeRegister(int deviceAddress, byte address, byte val) {
Wire.beginTransmission(dirección del dispositivo); // inicia la transmisión al dispositivo
Wire.write(dirección); // enviar dirección de registro
Alambre.escribir(val); //enviar valor a escribir
Cable.endTransmission(); // finaliza la transmisión
}
int readRegister(int deviceAddress, byte address){
En televisión;
Wire.beginTransmission(dirección del dispositivo);
Wire.write(dirección); // registrarse para leer
Cable.endTransmission();
Wire.requestFrom(dirección del dispositivo, 1); // lee un byte
while(!Cable.disponible()) {
// espera
}
v = Alambre.read();
volver v;
}
float calcAltitude(presión de flotación){
flotador A = presión/101325;
flotador B = 1/5,25588;
float C = pow(A,B);
C = 1 - C;
C = C /0,0000225577;
devolver C;
}
Forma del producto

Esta placa incluye un sensor de presión atmosférica de alta precisión -BMP180- con un rango de medida de 300 y... Leer más...

Recogida gratuita en nuestra(s) tienda(s)

SKU: FUN-MD0054
Código de barras: 5000000032228

1 en stock Enviamos em 24 horas

€16,95  €12,90 IVA incluido

    • ¿Enviado hoy? Pide dentro: Feb 10, 2026 16:00:00 +0000

    Descripción

    Esta placa incluye un sensor de presión atmosférica de alta precisión -BMP180- con un rango de medida de 300 y 1100hPa (Hecto Pascal) con un margen de error de 0,03hPa. Basado en tecnología piezorresistiva de alta eficiencia y larga duración. El sensor tiene un rango de alimentación de 1,8 V y 3,6 V CC. Diseñado para conectarse directamente a un microcontrolador a través de una interfaz I2C. Tiene 2 resistencias pull-up de 4.7Kohm. Este tipo de sensores se pueden utilizar para calcular la altitud, por lo que son muy útiles en los UAV.


    Especificaciones:
    - Dimensiones: 21 x 18 mm
    - Potencia: 1.8V a 6V
    -Velocidad máxima I2C: 3,5 MHz
    - Bajo consumo de energía - 0.5uA a 1 Hz
    - Interfaz I2C
    - Bajo nivel de ruido - hasta 0,02 hPa (17 cm)
    - Rango de Presión: 300hpa a 1100hPa (+ -500m a 9000m)


    #incluir
    #define BMP085_ADDRESS 0x77 // Dirección I2C de BMP085
    const char sin signo OSS = 0; // Configuración de sobremuestreo
    // valores de calibración
    intac1;
    intac2;
    intac3;
    int sin firmar ac4;
    int sin firmar ac5;
    int sin firmar ac6;
    intb1;
    intb2;
    int mb;
    intmc;
    int md;
    // b5 se calcula en bmp085GetTemperature(...), esta variable también se usa en bmp085GetPressure(...)
    // entonces ...Temperature(...) debe llamarse antes que ...Pressure(...).
    largo b5;
    configuración vacía(){
    Serial.begin(9600);
    Alambre.begin();
    bmp085Calibración();
    }
    bucle vacío ()
    {
    temperatura flotante = bmp085GetTemperature(bmp085ReadUT()); //DEBE ser llamado primero
    presión de flotación = bmp085GetPressure(bmp085ReadUP());
    flotador atm = presión / 101325; // "atmósfera estándar"
    altitud de flotación = calcAltitude(presión); //Cálculo no compensado - en Metros
    Serial.print("Temperatura: ");
    Serial.print(temperatura, 2); //muestra 2 decimales
    Serial.println("grados C");
    Serial.print("Presión: ");
    Serial.print(presión, 0); //solo numero entero.
    Serial.println("Pa");
    Serial.print("Atmósfera estándar: ");
    Serial.println(atm, 4); //mostrar 4 decimales
    Serial.print("Altitud: ");
    Serial.print(altitud, 2); //muestra 2 decimales
    Serial.println("M");
    Serial.println();//salto de línea
    retraso (1000); //espera un segundo y vuelve a obtener valores.
    }
    // Almacena todos los valores de calibración del bmp085 en variables globales
    // Se requieren valores de calibración para calcular la temperatura y la presión
    // Esta función debe llamarse al principio del programa
    void bmp085Calibración()
    {
    ac1 = bmp085ReadInt(0xAA);
    ac2 = bmp085ReadInt(0xAC);
    ac3 = bmp085ReadInt(0xAE);
    ac4 = bmp085ReadInt(0xB0);
    ac5 = bmp085ReadInt(0xB2);
    ac6 = bmp085ReadInt(0xB4);
    b1 = bmp085ReadInt(0xB6);
    b2 = bmp085ReadInt(0xB8);
    mb = bmp085ReadInt(0xBA);
    mc = bmp085ReadInt(0xBC);
    md = bmp085ReadInt(0xBE);
    }
    // Calcular la temperatura en grados C
    float bmp085GetTemperature(sin firmar int ut){
    largo x1, x2;
    x1 = (((largo)ut - (largo)ac6)*(largo)ac5) >> 15;
    x2 = ((largo)mc b5 = x1 + x2;
    temperatura flotante = ((b5 + 8)>>4);
    temperatura = temperatura /10;
    temperatura de retorno;
    }
    // Calcular la presión cedida
    // los valores de calibración deben ser conocidos
    // También se requiere b5, por lo que se debe llamar primero a bmp085GetTemperature(...).
    // El valor devuelto será la presión en unidades de Pa.
    bmp085GetPressure largo (largo sin firmar){
    largo x1, x2, x3, b3, b6, p;
    sin signo largo b4, b7;
    b6 = b5 - 4000;
    // Calcular B3
    x1 = (b2 * (b6 * b6)>>12)>>11;
    x2 = (ac2 * b6)>>11;
    x3 = x1 + x2;
    b3 = (((((largo)ac1)*4 + x3)>2;
    // Calcular B4
    x1 = (ac3 * b6)>>13;
    x2 = (b1 * ((b6 * b6)>>12))>>16;
    x3 = ((x1 + x2) + 2)>>2;
    b4 = (ac4 * (largo sin signo)(x3 + 32768))>>15;
    b7 = ((largo sin signo)(arriba - b3) * (50000>>OSS));
    si (b7 p = (b7 si no
    p = (b7/b4) x1 = (p>>8) * (p>>8);
    x1 = (x1 * 3038)>>16;
    x2 = (-7357 * p)>>16;
    p += (x1 + x2 + 3791)>>4;
    temperatura larga = p;
    temperatura de retorno;
    }
    // Leer 1 byte del BMP085 en 'dirección'
    char bmp085Read (dirección de caracteres sin firmar)
    {
    datos de caracteres sin firmar;
    Wire.beginTransmission(BMP085_ADDRESS);
    Wire.write(dirección);
    Cable.endTransmission();
    Wire.requestFrom(BMP085_ADDRESS, 1);
    while(!Cable.disponible())
    ;
    volver Alambre.read();
    }
    // Leer 2 bytes del BMP085
    // El primer byte será de 'dirección'
    // El segundo byte será de 'dirección'+1
    int bmp085ReadInt (dirección de caracteres sin firmar)
    {
    char sin firmar msb, lsb;
    Wire.beginTransmission(BMP085_ADDRESS);
    Wire.write(dirección);
    Cable.endTransmission();
    Wire.requestFrom(BMP085_ADDRESS, 2);
    while(Cable.disponible() ;
    msb = Cable.read();
    lsb = Cable.read();
    devolver (int) msb}
    // Leer el valor de temperatura no compensado
    int sin firmar bmp085ReadUT(){
    sin firmar int ut;
    // Escribe 0x2E en el Registro 0xF4
    // Esto solicita una lectura de temperatura
    Wire.beginTransmission(BMP085_ADDRESS);
    Alambre.escribir(0xF4);
    Alambre.escribir(0x2E);
    Cable.endTransmission();
    // Espere al menos 4,5 ms
    retraso (5);
    // Lee dos bytes de los registros 0xF6 y 0xF7
    ut = bmp085ReadInt(0xF6);
    volver a salir;
    }
    // Leer el valor de presión no compensado
    largo sin firmar bmp085ReadUP(){
    caracteres sin firmar msb, lsb, xlsb;
    unsigned long up = 0;
    // Escriba 0x34+(OSS // Solicite una lectura de presión con configuración de sobremuestreo
    Wire.beginTransmission(BMP085_ADDRESS);
    Alambre.escribir(0xF4);
    Wire.write(0x34 + (OSS Wire.endTransmission();
    // Espere la conversión, el tiempo de demora depende del OSS
    delay(2 + (3 // Leer registro 0xF6 (MSB), 0xF7 (LSB) y 0xF8 (XLSB)
    msb = bmp085Read(0xF6);
    lsb = bmp085Read(0xF7);
    xlsb = bmp085Read(0xF8);
    arriba = (((largo sin firmar) msb > (8-OSS);
    volver arriba;
    }
    void writeRegister(int deviceAddress, byte address, byte val) {
    Wire.beginTransmission(dirección del dispositivo); // inicia la transmisión al dispositivo
    Wire.write(dirección); // enviar dirección de registro
    Alambre.escribir(val); //enviar valor a escribir
    Cable.endTransmission(); // finaliza la transmisión
    }
    int readRegister(int deviceAddress, byte address){
    En televisión;
    Wire.beginTransmission(dirección del dispositivo);
    Wire.write(dirección); // registrarse para leer
    Cable.endTransmission();
    Wire.requestFrom(dirección del dispositivo, 1); // lee un byte
    while(!Cable.disponible()) {
    // espera
    }
    v = Alambre.read();
    volver v;
    }
    float calcAltitude(presión de flotación){
    flotador A = presión/101325;
    flotador B = 1/5,25588;
    float C = pow(A,B);
    C = 1 - C;
    C = C /0,0000225577;
    devolver C;
    }

    Vistos recentemente

      Ingresa en

      ¿Ha olvidado su contraseña?

      ¿Aún no tienes una cuenta?
      Crear una cuenta