Keyestudio

Módulo de sensor de barómetro - BMP180

€14,95

Módulo de sensor de barómetro - BMP180

€14,95
Disponibilidad:
- +
Detalles del producto
  • SKU: FUN-MD0054
  • Marca: Keyestudio
  • Tipo: Robotica e prototipagem
  • Disponibilidad: En stock
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;
}
loader
Opiniones de los usuarios