elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Informática
| |-+  Electrónica
| | |-+  Arduino (Sensor de temperatura y presion Bmp085 o Gy-65) Ayuda
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Arduino (Sensor de temperatura y presion Bmp085 o Gy-65) Ayuda  (Leído 8,314 veces)
lluvplay

Desconectado Desconectado

Mensajes: 27



Ver Perfil
Arduino (Sensor de temperatura y presion Bmp085 o Gy-65) Ayuda
« en: 23 Abril 2013, 03:54 am »

Hola Hackers, espero como siempre todos este bien de salud y sino bueno al menos con animo de aprender cada dia algo nuevo.

Esta vez he recurido a ustedes por el simple hecho de que me he comprado un sensor barometrico bmp085, el problema es que al conectarlo a mi arduino Mega 2560 no me envia mensaje al pc.

Adjunto Codigo:
Código:

#include <Wire.h>

#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;

short temperature;
long pressure;

// Use these for altitude conversions
const float p0 = 101325;     // Pressure at sea level (Pa)
float altitude;

void setup()
{
  Serial.begin(9600);
  Wire.begin();
  bmp085Calibration();
}

void loop()
{
  temperature = bmp085GetTemperature(bmp085ReadUT());
  pressure = bmp085GetPressure(bmp085ReadUP());
  altitude = (float)44330 * (1 - pow(((float) pressure/p0), 0.190295));

  Serial.print("Temperature: ");
  Serial.print(temperature, DEC);
  Serial.println(" *0.1 deg C");
  Serial.print("Pressure: ");
  Serial.print(pressure, DEC);
  Serial.println(" Pa");
  Serial.print("Altitude: ");
  Serial.print(altitude, 2);
  Serial.println(" m");
  Serial.println();
 
  delay(1000);
}

// 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 given ut.
// Value returned will be in units of 0.1 deg C
short bmp085GetTemperature(unsigned int ut)
{
  long x1, x2;
 
  x1 = (((long)ut - (long)ac6)*(long)ac5) >> 15;
  x2 = ((long)mc << 11)/(x1 + md);
  b5 = x1 + x2;

  return ((b5 + 8)>>4); 
}

// 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)<<OSS) + 2)>>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 < 0x80000000)
    p = (b7<<1)/b4;
  else
    p = (b7/b4)<<1;
   
  x1 = (p>>8) * (p>>8);
  x1 = (x1 * 3038)>>16;
  x2 = (-7357 * p)>>16;
  p += (x1 + x2 + 3791)>>4;
 
  return p;
}

// 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()<2)
    ;
  msb = Wire.read();
  lsb = Wire.read();
 
  return (int) msb<<8 | lsb;
}

// 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<<6) into register 0xF4
  // Request a pressure reading w/ oversampling setting
  Wire.beginTransmission(BMP085_ADDRESS);
  Wire.write(0xF4);
  Wire.write(0x34 + (OSS<<6));
  Wire.endTransmission();
 
  // Wait for conversion, delay time dependent on OSS
  delay(2 + (3<<OSS));
 
  // Read register 0xF6 (MSB), 0xF7 (LSB), and 0xF8 (XLSB)
  Wire.beginTransmission(BMP085_ADDRESS);
  Wire.write(0xF6);
  Wire.endTransmission();
  Wire.requestFrom(BMP085_ADDRESS, 3);
 
  // Wait for data to become available
  while(Wire.available() < 3)
    ;
  msb = Wire.read();
  lsb = Wire.read();
  xlsb = Wire.read();
 
  up = (((unsigned long) msb << 16) | ((unsigned long) lsb << 8) | (unsigned long) xlsb) >> (8-OSS);
 
  return up;
}



Este codigo a sido copiado de la internet. lo he revisado y con el poco conocimiento que tengo de programacion en Arduino, creo que esta bien.
En realidad me compila sin errores pero cuando lo cargo a mi placa no manda señal, la placa esta buena comprobada 100%, el barometro no tengo idea si funciona me llego de china esta mañana y soy de panama. 1 mes me tardo alguna idea de como probar este barometro usa salidas analogicas.

he notado que mi barometro dice gy-65 !! creo que esto tambien puede estar afectando no dice bmp085 aunq esta fue la especificacion que pedi.

Adjunto guia:
Citar


En línea

* Determinismo Causal !! Estamos Programados Para Necesitar Respuestas!!

* No deberías copiar un código, sin antes haber comprendido porque funciona de esa manera !
bybecker

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Re: Arduino (Sensor de temperatura y presion Bmp085 o Gy-65) Ayuda
« Respuesta #1 en: 13 Junio 2013, 01:03 am »

Tengo el mismo problema con el gy-65. Ya probado y usado varios codigos disponibles en la red. Algunos producen resultados, pero incompletos o con valores absurdos. (Spanish)

Lauro - Brazil


En línea

ufil

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Re: Arduino (Sensor de temperatura y presion Bmp085 o Gy-65) Ayuda
« Respuesta #2 en: 26 Agosto 2013, 21:57 pm »

No sé si ya has solucionado el problema.
Yo me he encontrado con algo parecido al hacer las pruebas primero con un Arduino Uno y, seguidamente, con un Leonardo.
Los códigos que circulan funcionaban perfecatamente con el Uno pero en el Leonardo el monitor aparecía en blanco.
Finalmente lo he resuelto con esta información:
 http://arduino.cc/en/Reference/Wire
Resulta que en el Uno el pin SDA es el A4 y el SCL el A5, mientras que en el Leonardo corresponden a los pines 2 y 3 (no A2 y A3).
En el caso del Mega corresponden al 20 y 21.
Ahora los valores con Uno y Leonardo no difieren.

Saludos
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda sensor para ROBOT
Electrónica
zarc 4 3,978 Último mensaje 12 Mayo 2010, 02:04 am
por zarc
Arduino y sensor
Electrónica
@synthesize 8 12,870 Último mensaje 30 Mayo 2010, 18:28 pm
por @synthesize
Sensor de temperatura DS1820
Electrónica
Meta 0 5,974 Último mensaje 17 Diciembre 2010, 01:35 am
por Meta
Ayuda: Arduino + java
Electrónica
carepapa 1 5,002 Último mensaje 29 Noviembre 2011, 03:59 am
por carepapa
Sensor de temperatura - Acer Aspire 5733-6607
Hardware
Xedrox 1 3,314 Último mensaje 23 Febrero 2012, 01:00 am
por Aprendiz-Oscuro
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines