Categorías
Ref. AKC-108.MD0054
Bmp180 modulo sensor barometrico de presion atmosferica
Stock: 28 Ref. AKC-108.MD0054
Precio (IVA inc.) 1,02 €


Envío Rápido
en 14h o 24/48h

Pago Seguro
Tarjeta, Bizum...

Garantía
Calidad asegurada

Especialistas
Consulta tus dudas
Especificaciones
Ésta placa incluye un sensor de presión barométrica BMP180 de alta precisión con un rango de medida de entre 300 y 1100 hPa (Hecto Pascal) con un margen de error mínimo de tan sólo 0.03 hPa. Está basado en tecnología piezo-resistiva de alta eficiencia, linearidad y larga duración. El sensor tiene un rango de alimentación de entre 1,8V y 3,6 Vdc. Está diseñado para ser conectado directamente a un microcontrolador mediante su interfaz I2C. Dispone de dos resistencias pull-up de 4,7k sobre el bus I2C.Éste tipo de sensores pueden ser utilizados para calcular la altitud con bastante precisión, por lo que son muy útiles en UAV!
Specification
Size: 21mm x 18mm
1.8V to 6V Supply Voltage
Max I2C Speed: 3.5Mhz
Low power consumption - 0.5uA at 1Hz
I2C interface
low noise - up to 0.02hPa (17cm)
Full calibrated
Pressure Range: 300hPa to 1100hPa (+9000m to -500m)
Sample code
#include
#define BMP085_ADDRESS 0x77 // I2C address of BMP085
const unsigned char OSS = 0; // Oversampling Setting
// Calibration values
int ac1;
int ac2;
int ac3;
unsigned int ac4;
unsigned int ac5;
unsigned int ac6;
int b1;
int b2;
int mb;
int mc;
int md;
// b5 is calculated in bmp085GetTemperature(...), this variable is also used in bmp085GetPressure(...)
// so ...Temperature(...) must be called before ...Pressure(...).
long b5;
void setup(){
Serial.begin(9600);
Wire.begin();
bmp085Calibration();
}
void loop()
{
float temperature = bmp085GetTemperature(bmp085ReadUT()); //MUST be called first
float pressure = bmp085GetPressure(bmp085ReadUP());
float atm = pressure / 101325; // "standard atmosphere"
float altitude = calcAltitude(pressure); //Uncompensated caculation - in Meters
Serial.print("Temperature: ");
Serial.print(temperature, 2); //display 2 decimal places
Serial.println("deg C");
Serial.print("Pressure: ");
Serial.print(pressure, 0); //whole number only.
Serial.println(" Pa");
Serial.print("Standard Atmosphere: ");
Serial.println(atm, 4); //display 4 decimal places
Serial.print("Altitude: ");
Serial.print(altitude, 2); //display 2 decimal places
Serial.println(" M");
Serial.println();//line break
delay(1000); //wait a second and get values again.
}
// Stores all of the bmp085's calibration values into global variables
// Calibration values are required to calculate temp and pressure
// This function should be called at the beginning of the program
void bmp085Calibration()
{
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);
}
// Calculate temperature in deg C
float bmp085GetTemperature(unsigned int ut){
long x1, x2;
x1 = (((long)ut - (long)ac6)*(long)ac5) >> 15;
x2 = ((long)mc b5 = x1 + x2;
float temp = ((b5 + 8)>>4);
temp = temp /10;
return temp;
}
// Calculate pressure given up
// calibration values must be known
// b5 is also required so bmp085GetTemperature(...) must be called first.
// Value returned will be pressure in units of Pa.
long bmp085GetPressure(unsigned long up){
long x1, x2, x3, b3, b6, p;
unsigned long b4, b7;
b6 = b5 - 4000;
// Calculate B3
x1 = (b2 * (b6 * b6)>>12)>>11;
x2 = (ac2 * b6)>>11;
x3 = x1 + x2;
b3 = (((((long)ac1)*4 + x3)>2;
// Calculate B4
x1 = (ac3 * b6)>>13;
x2 = (b1 * ((b6 * b6)>>12))>>16;
x3 = ((x1 + x2) + 2)>>2;
b4 = (ac4 * (unsigned long)(x3 + 32768))>>15;
b7 = ((unsigned long)(up - b3) * (50000>>OSS));
if (b7 p = (b7 else
p = (b7/b4) x1 = (p>>8) * (p>>8);
x1 = (x1 * 3038)>>16;
x2 = (-7357 * p)>>16;
p += (x1 + x2 + 3791)>>4;
long temp = p;
return temp;
}
// Read 1 byte from the BMP085 at 'address'
char bmp085Read(unsigned char address)
{
unsigned char data;
Wire.beginTransmission(BMP085_ADDRESS);
Wire.write(address);
Wire.endTransmission();
Wire.requestFrom(BMP085_ADDRESS, 1);
while(!Wire.available())
;
return Wire.read();
}
// Read 2 bytes from the BMP085
// First byte will be from 'address'
// Second byte will be from 'address'+1
int bmp085ReadInt(unsigned char address)
{
unsigned char msb, lsb;
Wire.beginTransmission(BMP085_ADDRESS);
Wire.write(address);
Wire.endTransmission();
Wire.requestFrom(BMP085_ADDRESS, 2);
while(Wire.available() ;
msb = Wire.read();
lsb = Wire.read();
return (int) msb }
// Read the uncompensated temperature value
unsigned int bmp085ReadUT(){
unsigned int ut;
// Write 0x2E into Register 0xF4
// This requests a temperature reading
Wire.beginTransmission(BMP085_ADDRESS);
Wire.write(0xF4);
Wire.write(0x2E);
Wire.endTransmission();
// Wait at least 4.5ms
delay(5);
// Read two bytes from registers 0xF6 and 0xF7
ut = bmp085ReadInt(0xF6);
return ut;
}
// Read the uncompensated pressure value
unsigned long bmp085ReadUP(){
unsigned char msb, lsb, xlsb;
unsigned long up = 0;
// Write 0x34+(OSS // Request a pressure reading w/ oversampling setting
Wire.beginTransmission(BMP085_ADDRESS);
Wire.write(0xF4);
Wire.write(0x34 + (OSS Wire.endTransmission();
// Wait for conversion, delay time dependent on OSS
delay(2 + (3 // Read register 0xF6 (MSB), 0xF7 (LSB), and 0xF8 (XLSB)
msb = bmp085Read(0xF6);
lsb = bmp085Read(0xF7);
xlsb = bmp085Read(0xF8);
up = (((unsigned long) msb > (8-OSS);
return up;
}
void writeRegister(int deviceAddress, byte address, byte val) {
Wire.beginTransmission(deviceAddress); // start transmission to device
Wire.write(address); // send register address
Wire.write(val); // send value to write
Wire.endTransmission(); // end transmission
}
int readRegister(int deviceAddress, byte address){
int v;
Wire.beginTransmission(deviceAddress);
Wire.write(address); // register to read
Wire.endTransmission();
Wire.requestFrom(deviceAddress, 1); // read a byte
while(!Wire.available()) {
// waiting
}
v = Wire.read();
return v;
}
float calcAltitude(float pressure){
float A = pressure/101325;
float B = 1/5.25588;
float C = pow(A,B);
C = 1 - C;
C = C /0.0000225577;
return C;
}
OTROS PRODUCTOS RELACIONADOS
- Ref.: AKC-108.MD9069Modulo ldr / fotocelula de luz sensor fotosensible para arduinoStock: 393Precio (IVA inc.) 0,968 €
Unidades ≥ 20 ≥ 50 ≥ 80 ≥ 100 DescuentoDescuentoprecio -3%-0,030,94 -5%-0,050,92 -10%-0,100,87 -15%-0,150,82 - Ref.: AKC-108.MD9246Sensor de distancia láser gy-vl53l0x tof | medición precisa hasta 2mStock: 41Precio (IVA inc.) 3,630 €
Unidades ≥ 3 ≥ 5 ≥ 10 ≥ 15 DescuentoDescuentoprecio -3%-0,113,52 -5%-0,183,45 -7%-0,253,38 -10%-0,363,27 - Ref.: AKC-108.LM235ZLm235z sensor de temperatura, -40º~125ºc, to92 (st)Stock: 300Precio (IVA inc.) 2,880 €
Unidades ≥ 10 ≥ 20 ≥ 30 ≥ 50 DescuentoDescuentoprecio -3%-0,092,79 -5%-0,142,74 -7%-0,202,68 -10%-0,292,59 - Ref.: AKC-108.MD9037Mq-135 modulo sensor de la calidad del aire para arduinoStock: 0Precio (IVA inc.) 3,618 €
Unidades ≥ 5 ≥ 10 ≥ 15 ≥ 20 DescuentoDescuentoprecio -3%-0,113,51 -5%-0,183,44 -7%-0,253,36 -10%-0,363,26 - Ref.: AKC-108.MD9242Rcwl-0516 módulo de radar de microondasStock: 71Precio (IVA inc.) 0,908 €
Unidades ≥ 5 ≥ 10 ≥ 15 ≥ 30 DescuentoDescuentoprecio -3%-0,030,88 -5%-0,050,86 -7%-0,060,84 -10%-0,090,82 - Ref.: AKC-108.KY0035Sensor efecto hall magnetico magnetico 5vdc para arduinoStock: 330Precio (IVA inc.) 0,787 €
Unidades ≥ 20 ≥ 30 ≥ 40 ≥ 60 DescuentoDescuentoprecio -3%-0,020,76 -5%-0,040,75 -7%-0,060,73 -10%-0,080,71 - Ref.: AKC-108.MD9088Modulo panel solar con cables y conectores 3v/100mahStock: 73Precio (IVA inc.) 3,812 €
Unidades ≥ 20 ≥ 30 ≥ 40 ≥ 50 DescuentoDescuentoprecio -3%-0,113,70 -5%-0,193,62 -7%-0,273,54 -10%-0,383,43 - Ref.: AKC-108.MD9216Prl18-5dp sensor inductivo out: pnp/no, 0~5mm, 10~30vcc, m18, ip67, 200ma (3 hilos)Stock: 0Precio (IVA inc.) 23,256 €












